101 lines
3.2 KiB
JavaScript
101 lines
3.2 KiB
JavaScript
var Draft75 = require("../../../lib/websocket/driver/draft75"),
|
|
test = require('jstest').Test
|
|
|
|
test.describe("Draft75", function() { with(this) {
|
|
define("request", function() {
|
|
return this._request = this._request || {
|
|
headers: {
|
|
"connection": "Upgrade",
|
|
"upgrade": "WebSocket",
|
|
"origin": "http://www.example.com"
|
|
}
|
|
}
|
|
})
|
|
|
|
define("options", function() {
|
|
return this._options = this._options || {masking: false}
|
|
})
|
|
|
|
define("driver", function() {
|
|
if (this._driver) return this._driver
|
|
this._driver = new Draft75(this.request(), "ws://www.example.com/socket", this.options())
|
|
var self = this
|
|
this._driver.on('open', function(e) { self.open = true })
|
|
this._driver.on('message', function(e) { self.message += e.data })
|
|
this._driver.on('close', function(e) { self.close = true })
|
|
this._driver.io.pipe(this.collector())
|
|
return this._driver
|
|
})
|
|
|
|
before(function() {
|
|
this.open = this.close = false
|
|
this.message = ""
|
|
})
|
|
|
|
describe("in the connecting state", function() { with(this) {
|
|
it("starts in the connecting state", function() { with(this) {
|
|
assertEqual( "connecting", driver().getState() )
|
|
}})
|
|
|
|
describe("start", function() { with(this) {
|
|
it("writes the handshake response to the socket", function() { with(this) {
|
|
expect(driver().io, "emit").given("data", buffer(
|
|
"HTTP/1.1 101 Web Socket Protocol Handshake\r\n" +
|
|
"Upgrade: WebSocket\r\n" +
|
|
"Connection: Upgrade\r\n" +
|
|
"WebSocket-Origin: http://www.example.com\r\n" +
|
|
"WebSocket-Location: ws://www.example.com/socket\r\n" +
|
|
"\r\n"))
|
|
driver().start()
|
|
}})
|
|
|
|
it("returns true", function() { with(this) {
|
|
assertEqual( true, driver().start() )
|
|
}})
|
|
|
|
it("triggers the onopen event", function() { with(this) {
|
|
driver().start()
|
|
assertEqual( true, open )
|
|
}})
|
|
|
|
it("changes the state to open", function() { with(this) {
|
|
driver().start()
|
|
assertEqual( "open", driver().getState() )
|
|
}})
|
|
|
|
it("sets the protocol version", function() { with(this) {
|
|
driver().start()
|
|
assertEqual( "hixie-75", driver().version )
|
|
}})
|
|
}})
|
|
|
|
describe("frame", function() { with(this) {
|
|
it("does not write to the socket", function() { with(this) {
|
|
expect(driver().io, "emit").exactly(0)
|
|
driver().frame("Hello, world")
|
|
}})
|
|
|
|
it("returns true", function() { with(this) {
|
|
assertEqual( true, driver().frame("whatever") )
|
|
}})
|
|
|
|
it("queues the frames until the handshake has been sent", function() { with(this) {
|
|
expect(driver().io, "emit").given("data", buffer(
|
|
"HTTP/1.1 101 Web Socket Protocol Handshake\r\n" +
|
|
"Upgrade: WebSocket\r\n" +
|
|
"Connection: Upgrade\r\n" +
|
|
"WebSocket-Origin: http://www.example.com\r\n" +
|
|
"WebSocket-Location: ws://www.example.com/socket\r\n" +
|
|
"\r\n"))
|
|
expect(driver().io, "emit").given("data", buffer([0x00, 0x48, 0x69, 0xff]))
|
|
|
|
driver().frame("Hi")
|
|
driver().start()
|
|
}})
|
|
}})
|
|
}})
|
|
|
|
itShouldBehaveLike("draft-75 protocol")
|
|
}})
|
|
|