summaryrefslogtreecommitdiffstats
path: root/netwerk/test/unit/test_compressappend.js
blob: 275c94433090cd5d93a90d9e6d7145bb3f2073b6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
//
// Test that data can be appended to a cache entry even when the data is 
// compressed by the cache compression feature - bug 648429.
//

function write_and_check(str, data, len)
{
  var written = str.write(data, len);
  if (written != len) {
    do_throw("str.write has not written all data!\n" +
             "  Expected: " + len  + "\n" +
             "  Actual: " + written + "\n");
  }
}

function TestAppend(compress, callback)
{
  this._compress = compress;
  this._callback = callback;
  this.run();
}

TestAppend.prototype = {
  _compress: false,
  _callback: null,

  run: function() {
    evict_cache_entries();
    asyncOpenCacheEntry("http://data/",
                        "disk", Ci.nsICacheStorage.OPEN_NORMALLY, null,
                        this.writeData.bind(this));
  },

  writeData: function(status, entry) {
    do_check_eq(status, Cr.NS_OK);
    if (this._compress)
      entry.setMetaDataElement("uncompressed-len", "0");
    var os = entry.openOutputStream(0);
    write_and_check(os, "12345", 5);
    os.close();
    entry.close();
    asyncOpenCacheEntry("http://data/",
                        "disk", Ci.nsICacheStorage.OPEN_NORMALLY, null,
                        this.appendData.bind(this));
  },

  appendData: function(status, entry) {
    do_check_eq(status, Cr.NS_OK);
    var os = entry.openOutputStream(entry.storageDataSize);
    write_and_check(os, "abcde", 5);
    os.close();
    entry.close();

    asyncOpenCacheEntry("http://data/",
                        "disk", Ci.nsICacheStorage.OPEN_READONLY, null,
                        this.checkData.bind(this));
  },

  checkData: function(status, entry) {
    do_check_eq(status, Cr.NS_OK);
    var self = this;
    pumpReadStream(entry.openInputStream(0), function(str) {
      do_check_eq(str.length, 10);
      do_check_eq(str, "12345abcde");
      entry.close();

      do_execute_soon(self._callback);
    });
  }
};

function run_test() {
  do_get_profile();
  new TestAppend(false, run_test2);
  do_test_pending();
}

function run_test2() {
  new TestAppend(true, do_test_finished);
}