-
Notifications
You must be signed in to change notification settings - Fork 298
Expand file tree
/
Copy pathtest-streaming.js
More file actions
71 lines (59 loc) · 1.71 KB
/
test-streaming.js
File metadata and controls
71 lines (59 loc) · 1.71 KB
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
var sys = require("util")
, assert = require("assert")
, http = require("http")
, XMLHttpRequest = require("../lib/XMLHttpRequest").XMLHttpRequest
, xhr;
// Test server
function completeResponse(res,server,body) {
res.end();
assert.equal(onreadystatechange, true);
assert.equal(readystatechange, true);
assert.equal(removed, true);
assert.equal(loadCount, body.length);
console.log("done");
server.close();
}
function push(res,piece) {
res.write(piece);
}
var server = http.createServer(function (req, res) {
var body = (req.method != "HEAD" ? ["Hello","World","Stream"] : []);
res.writeHead(200, {
"Content-Type": "text/plain",
"Content-Length": Buffer.byteLength(body.join(""))
});
var nextPiece = 0;
var self = this;
var interval = setInterval(function() {
if (nextPiece < body.length) {
res.write(body[nextPiece]);
nextPiece++;
} else {
completeResponse(res,self,body);
clearInterval(interval);
}
},100); //nagle may put writes together, if it happens rise the interval time
}).listen(8000);
xhr = new XMLHttpRequest();
// Track event calls
var onreadystatechange = false;
var readystatechange = false;
var removed = true;
var loadCount = 0;
var removedEvent = function() {
removed = false;
};
xhr.onreadystatechange = function() {
onreadystatechange = true;
};
xhr.addEventListener("readystatechange", function() {
readystatechange = true;
if (xhr.readyState == xhr.LOADING) {
loadCount++;
}
});
// This isn't perfect, won't guarantee it was added in the first place
xhr.addEventListener("readystatechange", removedEvent);
xhr.removeEventListener("readystatechange", removedEvent);
xhr.open("GET", "http://localhost:8000");
xhr.send();