summaryrefslogtreecommitdiffstats
path: root/netwerk/test/unit/test_compressappend.js
blob: 05f19be4b513a0258dd8295485d452098c81a4dd (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
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
//
// Test that data can be appended to a cache entry even when the data is
// compressed by the cache compression feature - bug 648429.
//

"use strict";

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() {
    evict_cache_entries();
    asyncOpenCacheEntry(
      "http://data/",
      "disk",
      Ci.nsICacheStorage.OPEN_NORMALLY,
      null,
      this.writeData.bind(this)
    );
  },

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

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

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

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

      executeSoon(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);
}