Backed out changeset b71c8c052463 (bug 1943846) for causing mass failures. CLOSED...
[gecko.git] / netwerk / test / unit / test_bug470716.js
blobf359aa9c1e22aea8ab8f785401118c2d06e930de
1 "use strict";
3 var CC = Components.Constructor;
5 const StreamCopier = CC(
6 "@mozilla.org/network/async-stream-copier;1",
7 "nsIAsyncStreamCopier",
8 "init"
9 );
11 const ScriptableInputStream = CC(
12 "@mozilla.org/scriptableinputstream;1",
13 "nsIScriptableInputStream",
14 "init"
17 const Pipe = CC("@mozilla.org/pipe;1", "nsIPipe", "init");
19 var pipe1;
20 var pipe2;
21 var copier;
22 var test_result;
23 var test_content;
24 var test_source_closed;
25 var test_sink_closed;
26 var test_nr;
28 var copyObserver = {
29 onStartRequest() {},
31 onStopRequest(request, statusCode) {
32 // check status code
33 Assert.equal(statusCode, test_result);
35 // check number of copied bytes
36 Assert.equal(pipe2.inputStream.available(), test_content.length);
38 // check content
39 var scinp = new ScriptableInputStream(pipe2.inputStream);
40 var content = scinp.read(scinp.available());
41 Assert.equal(content, test_content);
43 // check closed sink
44 try {
45 pipe2.outputStream.write("closedSinkTest", 14);
46 Assert.ok(!test_sink_closed);
47 } catch (ex) {
48 Assert.ok(test_sink_closed);
51 // check closed source
52 try {
53 pipe1.outputStream.write("closedSourceTest", 16);
54 Assert.ok(!test_source_closed);
55 } catch (ex) {
56 Assert.ok(test_source_closed);
59 do_timeout(0, do_test);
62 QueryInterface: ChromeUtils.generateQI(["nsIRequestObserver"]),
65 function startCopier(closeSource, closeSink) {
66 pipe1 = new Pipe(
67 true /* nonBlockingInput */,
68 true /* nonBlockingOutput */,
69 0 /* segmentSize */,
70 0xffffffff /* segmentCount */,
71 null /* segmentAllocator */
74 pipe2 = new Pipe(
75 true /* nonBlockingInput */,
76 true /* nonBlockingOutput */,
77 0 /* segmentSize */,
78 0xffffffff /* segmentCount */,
79 null /* segmentAllocator */
82 copier = new StreamCopier(
83 pipe1.inputStream /* aSource */,
84 pipe2.outputStream /* aSink */,
85 null /* aTarget */,
86 true /* aSourceBuffered */,
87 true /* aSinkBuffered */,
88 8192 /* aChunkSize */,
89 closeSource /* aCloseSource */,
90 closeSink /* aCloseSink */
93 copier.asyncCopy(copyObserver, null);
96 function do_test() {
97 test_nr++;
98 test_content = "test" + test_nr;
100 switch (test_nr) {
101 case 1:
102 case 2: // close sink
103 case 3: // close source
104 case 4: // close both
105 // test canceling transfer
106 // use some undefined error code to check if it is successfully passed
107 // to the request observer
108 test_result = 0x87654321;
110 test_source_closed = (test_nr - 1) >> 1 != 0;
111 test_sink_closed = (test_nr - 1) % 2 != 0;
113 startCopier(test_source_closed, test_sink_closed);
114 pipe1.outputStream.write(test_content, test_content.length);
115 pipe1.outputStream.flush();
116 do_timeout(20, function () {
117 copier.cancel(test_result);
118 pipe1.outputStream.write("a", 1);
120 break;
121 case 5:
122 case 6: // close sink
123 case 7: // close source
124 case 8: // close both
125 // test copying with EOF on source
126 test_result = 0;
128 test_source_closed = (test_nr - 5) >> 1 != 0;
129 test_sink_closed = (test_nr - 5) % 2 != 0;
131 startCopier(test_source_closed, test_sink_closed);
132 pipe1.outputStream.write(test_content, test_content.length);
133 // we will close the source
134 test_source_closed = true;
135 pipe1.outputStream.close();
136 break;
137 case 9:
138 case 10: // close sink
139 case 11: // close source
140 case 12: // close both
141 // test copying with error on sink
142 // use some undefined error code to check if it is successfully passed
143 // to the request observer
144 test_result = 0x87654321;
146 test_source_closed = (test_nr - 9) >> 1 != 0;
147 test_sink_closed = (test_nr - 9) % 2 != 0;
149 startCopier(test_source_closed, test_sink_closed);
150 pipe1.outputStream.write(test_content, test_content.length);
151 pipe1.outputStream.flush();
152 // we will close the sink
153 test_sink_closed = true;
154 do_timeout(20, function () {
155 pipe2.outputStream
156 .QueryInterface(Ci.nsIAsyncOutputStream)
157 .closeWithStatus(test_result);
158 pipe1.outputStream.write("a", 1);
160 break;
161 case 13:
162 do_test_finished();
163 break;
167 function run_test() {
168 test_nr = 0;
169 do_timeout(0, do_test);
170 do_test_pending();