Created
January 9, 2013 04:45
-
-
Save Trindaz/4490646 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var dgram = require('dgram'); | |
var client_address = "0.0.0.0" | |
var client_port = 9002; | |
var server_address = "0.0.0.0" | |
var server_port = 9001 | |
var maxWaitTimeForResponse = 6000; | |
server_socket = dgram.createSocket('udp4'); | |
server_socket.on('listening', function() { console.log("Server is listening"); }); | |
server_socket.bind(server_port); | |
function sendMessageServerToClient(message){ | |
var pBuf = new Buffer(message); | |
server_socket.send(pBuf, 0, pBuf.length, client_port, client_address, function(err, bytes) { if(err){ throw err } }); | |
} | |
server_socket.on('message', function(msg, rinfo) { | |
//acknowledge reciept of message | |
sendMessageServerToClient("Message Received"); | |
/* | |
Do lots more work | |
*/ | |
//sent client some more messages after the work has completed | |
setTimeout( | |
function(){ | |
sendMessageServerToClient("More results from your request"); | |
}, | |
3000 | |
) | |
}); | |
client_socket = dgram.createSocket('udp4'); | |
client_socket.on('listening', function() { console.log("Client is listening"); }); | |
client_socket.bind(client_port); | |
var responseReceivedDone; | |
function registerResponseExpected(){ | |
describe("Wait for response from server", function(){ | |
this.timeout(maxWaitTimeForResponse); | |
it("should register a callback for message receipt", function(done){ | |
responseReceivedDone = done; | |
}); | |
}); | |
} | |
function sendMessageClientToServer(message, callback){ | |
var pBuf = new Buffer(message); | |
registerResponseExpected(); | |
client_socket.send(pBuf, 0, pBuf.length, server_port, server_address, function(err, bytes) { | |
callback(); | |
}); | |
} | |
var handleMessageFromServer; | |
client_socket.on('message', function(msg, rinfo){ | |
responseReceivedDone(); | |
handleMessageFromServer(msg); | |
}); | |
//conduct a test | |
describe("Conversation with server without big timeout", function(){ | |
var step1 = function(msg){ | |
describe("Validate an ack from server", function(){ | |
registerResponseExpected(); | |
handleMessageFromServer = step2; | |
it("should contain 'Message Received'", function(done){ | |
if(msg.toString()!="Message Received"){ | |
done(new Error("Client didn't receive correct ack message. I got " + msg.toString())); | |
}else{ | |
done(); | |
} | |
}); | |
}); | |
} | |
var step2 = function(msg){ | |
describe("Validate additional response from server", function(){ | |
handleMessageFromServer = null; | |
it("should contain 'More results from your request'", function(done){ | |
if(msg.toString()!="More results from your request"){ | |
done(new Error("Client didn't receive correct results message. I got " + msg.toString())); | |
}else{ | |
done(); | |
} | |
}) | |
}) | |
} | |
handleMessageFromServer = step1; | |
it("should send message to server", function(done){ | |
sendMessageClientToServer("Hello", function(err){ | |
done(err) | |
}); | |
}) | |
}) | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment