michael@0: /* Any copyright is dedicated to the Public Domain. michael@0: http://creativecommons.org/publicdomain/zero/1.0/ */ michael@0: michael@0: Cu.import("resource://services-sync/service.js"); michael@0: Cu.import("resource://services-sync/util.js"); michael@0: Cu.import("resource://testing-common/services/sync/utils.js"); michael@0: michael@0: function do_check_throws(func) { michael@0: var raised = false; michael@0: try { michael@0: func(); michael@0: } catch (ex) { michael@0: raised = true; michael@0: } michael@0: do_check_true(raised); michael@0: } michael@0: michael@0: add_test(function test_findCluster() { michael@0: _("Test Service._findCluster()"); michael@0: let server; michael@0: ensureLegacyIdentityManager(); michael@0: try { michael@0: _("_findCluster() throws on network errors (e.g. connection refused)."); michael@0: do_check_throws(function() { michael@0: Service.serverURL = "http://dummy:9000/"; michael@0: Service.identity.account = "johndoe"; michael@0: Service._clusterManager._findCluster(); michael@0: }); michael@0: michael@0: server = httpd_setup({ michael@0: "/user/1.0/johndoe/node/weave": httpd_handler(200, "OK", "http://weave.user.node/"), michael@0: "/user/1.0/jimdoe/node/weave": httpd_handler(200, "OK", "null"), michael@0: "/user/1.0/janedoe/node/weave": httpd_handler(404, "Not Found", "Not Found"), michael@0: "/user/1.0/juliadoe/node/weave": httpd_handler(400, "Bad Request", "Bad Request"), michael@0: "/user/1.0/joedoe/node/weave": httpd_handler(500, "Server Error", "Server Error") michael@0: }); michael@0: michael@0: Service.serverURL = server.baseURI; michael@0: Service.identity.account = "johndoe"; michael@0: michael@0: _("_findCluster() returns the user's cluster node"); michael@0: let cluster = Service._clusterManager._findCluster(); michael@0: do_check_eq(cluster, "http://weave.user.node/"); michael@0: michael@0: _("A 'null' response is converted to null."); michael@0: Service.identity.account = "jimdoe"; michael@0: cluster = Service._clusterManager._findCluster(); michael@0: do_check_eq(cluster, null); michael@0: michael@0: _("If a 404 is encountered, the server URL is taken as the cluster URL"); michael@0: Service.identity.account = "janedoe"; michael@0: cluster = Service._clusterManager._findCluster(); michael@0: do_check_eq(cluster, Service.serverURL); michael@0: michael@0: _("A 400 response will throw an error."); michael@0: Service.identity.account = "juliadoe"; michael@0: do_check_throws(function() { michael@0: Service._clusterManager._findCluster(); michael@0: }); michael@0: michael@0: _("Any other server response (e.g. 500) will throw an error."); michael@0: Service.identity.account = "joedoe"; michael@0: do_check_throws(function() { michael@0: Service._clusterManager._findCluster(); michael@0: }); michael@0: michael@0: } finally { michael@0: Svc.Prefs.resetBranch(""); michael@0: if (server) { michael@0: server.stop(run_next_test); michael@0: } michael@0: } michael@0: }); michael@0: michael@0: add_test(function test_setCluster() { michael@0: _("Test Service._setCluster()"); michael@0: let server = httpd_setup({ michael@0: "/user/1.0/johndoe/node/weave": httpd_handler(200, "OK", "http://weave.user.node/"), michael@0: "/user/1.0/jimdoe/node/weave": httpd_handler(200, "OK", "null") michael@0: }); michael@0: try { michael@0: Service.serverURL = server.baseURI; michael@0: Service.identity.account = "johndoe"; michael@0: michael@0: _("Check initial state."); michael@0: do_check_eq(Service.clusterURL, ""); michael@0: michael@0: _("Set the cluster URL."); michael@0: do_check_true(Service._clusterManager.setCluster()); michael@0: do_check_eq(Service.clusterURL, "http://weave.user.node/"); michael@0: michael@0: _("Setting it again won't make a difference if it's the same one."); michael@0: do_check_false(Service._clusterManager.setCluster()); michael@0: do_check_eq(Service.clusterURL, "http://weave.user.node/"); michael@0: michael@0: _("A 'null' response won't make a difference either."); michael@0: Service.identity.account = "jimdoe"; michael@0: do_check_false(Service._clusterManager.setCluster()); michael@0: do_check_eq(Service.clusterURL, "http://weave.user.node/"); michael@0: michael@0: } finally { michael@0: Svc.Prefs.resetBranch(""); michael@0: server.stop(run_next_test); michael@0: } michael@0: }); michael@0: michael@0: function run_test() { michael@0: initTestLogging(); michael@0: run_next_test(); michael@0: }