From bd2052631f9c98149e12fae8974ce3ed9c79e36c Mon Sep 17 00:00:00 2001 From: Milian Wolff Date: Mon, 7 Nov 2011 18:35:35 +0100 Subject: [PATCH] basic unit testing for WebServer.listen --- examples/server.js | 6 +++++- src/modules/webserver.js | 3 +-- src/webserver.cpp | 9 +++++---- src/webserver.h | 4 +++- test/webserver-spec.js | 11 +++++++++++ 5 files changed, 25 insertions(+), 8 deletions(-) diff --git a/examples/server.js b/examples/server.js index 3771f104..ce0e674f 100644 --- a/examples/server.js +++ b/examples/server.js @@ -7,7 +7,7 @@ if (phantom.args.length !== 1) { phantom.exit(); } else { port = phantom.args[0]; - server.listen(port, function (request, response) { + var listening = server.listen(port, function (request, response) { console.log("GOT HTTP REQUEST"); console.log("request.url = " + request.url); console.log("request.queryString = " + request.queryString); @@ -35,6 +35,10 @@ if (phantom.args.length !== 1) { // note: writeBody can be called multiple times response.writeBody("

pretty cool :)"); }); + if (!listening) { + console.log("could not create web server listening on port " + port); + phantom.exit(); + } var url = "http://localhost:" + port + "/foo/bar.php?asdf=true"; console.log(url); page.open(url, function (status) { diff --git a/src/modules/webserver.js b/src/modules/webserver.js index d4ee41dc..ccec93c1 100644 --- a/src/modules/webserver.js +++ b/src/modules/webserver.js @@ -116,8 +116,7 @@ exports.create = function (opts) { if (arguments.length === 2 && typeof handler === 'function') { this.onNewRequest = handler; //TODO: settings? - this.listenOnPort(port); - return; + return this.listenOnPort(port); } throw "Wrong use of WebServer#listen"; }; diff --git a/src/webserver.cpp b/src/webserver.cpp index 4770fb32..efa60681 100644 --- a/src/webserver.cpp +++ b/src/webserver.cpp @@ -73,23 +73,24 @@ WebServer::~WebServer() close(); } -void WebServer::listenOnPort(const QString& port) +bool WebServer::listenOnPort(const QString& port) { ///TODO: listen on multiple ports? close(); - m_port = port; const char *options[] = {"listening_ports", qstrdup(qPrintable(port)), NULL}; ///TODO: more options from m_config? m_ctx = mg_start(&callback, this, options); if (!m_ctx) { - qWarning() << "could not create web server connection on port" << port; + return false; } + + m_port = port; + return true; } QString WebServer::port() const { - qWarning() << "port = " << m_port; return m_port; } diff --git a/src/webserver.h b/src/webserver.h index 4ad827b5..a01f0dac 100644 --- a/src/webserver.h +++ b/src/webserver.h @@ -64,9 +64,11 @@ public slots: * For each new request @c handleRequest() will be called which * in turn emits @c newRequest() where appropriate. * + * @return true if we can listen on @p port, false otherwise. + * * WARNING: must not be the same name as in the javascript api... */ - void listenOnPort(const QString &port); + bool listenOnPort(const QString &port); /** * @return the port this server is listening on * or an empty string if the server is closed. diff --git a/test/webserver-spec.js b/test/webserver-spec.js index 991e32d1..f1ba9747 100644 --- a/test/webserver-spec.js +++ b/test/webserver-spec.js @@ -39,4 +39,15 @@ describe("WebServer object", function() { expectHasFunction(server, 'listenOnPort'); expectHasFunction(server, 'newRequest'); expectHasFunction(server, 'close'); + + it("should fail to listen to blocked ports", function() { + //NOTE: is this really blocked everywhere? + expect(server.listen(1, function(){})).toEqual(false); + expect(server.port).toEqual(""); + }); + it("should be able to listen to some port", function() { + //NOTE: this can fail if the port is already being listend on... + expect(server.listen(12345, function() {})).toEqual(true); + expect(server.port).toEqual("12345"); + }); });