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-common/rest.js"); michael@0: Cu.import("resource://services-sync/constants.js"); 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: let collections = {steam: 65.11328, michael@0: petrol: 82.488281, michael@0: diesel: 2.25488281}; michael@0: michael@0: function run_test() { michael@0: Log.repository.getLogger("Sync.Service").level = Log.Level.Trace; michael@0: Log.repository.getLogger("Sync.StorageRequest").level = Log.Level.Trace; michael@0: initTestLogging(); michael@0: michael@0: ensureLegacyIdentityManager(); michael@0: setBasicCredentials("johndoe", "ilovejane"); michael@0: michael@0: run_next_test(); michael@0: } michael@0: michael@0: add_test(function test_success() { michael@0: let handler = httpd_handler(200, "OK", JSON.stringify(collections)); michael@0: let server = httpd_setup({"/1.1/johndoe/info/collections": handler}); michael@0: Service.serverURL = server.baseURI + "/"; michael@0: Service.clusterURL = server.baseURI + "/"; michael@0: michael@0: let request = Service.getStorageInfo("collections", function (error, info) { michael@0: do_check_eq(error, null); michael@0: do_check_true(Utils.deepEquals(info, collections)); michael@0: michael@0: // Ensure that the request is sent off with the right bits. michael@0: do_check_true(basic_auth_matches(handler.request, michael@0: Service.identity.username, michael@0: Service.identity.basicPassword)); michael@0: let expectedUA = Services.appinfo.name + "/" + Services.appinfo.version + michael@0: " FxSync/" + WEAVE_VERSION + "." + michael@0: Services.appinfo.appBuildID + ".desktop"; michael@0: do_check_eq(handler.request.getHeader("User-Agent"), expectedUA); michael@0: michael@0: server.stop(run_next_test); michael@0: }); michael@0: do_check_true(request instanceof RESTRequest); michael@0: }); michael@0: michael@0: add_test(function test_invalid_type() { michael@0: do_check_throws(function () { michael@0: Service.getStorageInfo("invalid", function (error, info) { michael@0: do_throw("Shouldn't get here!"); michael@0: }); michael@0: }); michael@0: run_next_test(); michael@0: }); michael@0: michael@0: add_test(function test_network_error() { michael@0: Service.getStorageInfo(INFO_COLLECTIONS, function (error, info) { michael@0: do_check_eq(error.result, Cr.NS_ERROR_CONNECTION_REFUSED); michael@0: do_check_eq(info, null); michael@0: run_next_test(); michael@0: }); michael@0: }); michael@0: michael@0: add_test(function test_http_error() { michael@0: let handler = httpd_handler(500, "Oh noez", "Something went wrong!"); michael@0: let server = httpd_setup({"/1.1/johndoe/info/collections": handler}); michael@0: Service.serverURL = server.baseURI + "/"; michael@0: Service.clusterURL = server.baseURI + "/"; michael@0: michael@0: let request = Service.getStorageInfo(INFO_COLLECTIONS, function (error, info) { michael@0: do_check_eq(error.status, 500); michael@0: do_check_eq(info, null); michael@0: server.stop(run_next_test); michael@0: }); michael@0: }); michael@0: michael@0: add_test(function test_invalid_json() { michael@0: let handler = httpd_handler(200, "OK", "Invalid JSON"); michael@0: let server = httpd_setup({"/1.1/johndoe/info/collections": handler}); michael@0: Service.serverURL = server.baseURI + "/"; michael@0: Service.clusterURL = server.baseURI + "/"; michael@0: michael@0: let request = Service.getStorageInfo(INFO_COLLECTIONS, function (error, info) { michael@0: do_check_eq(error.name, "SyntaxError"); michael@0: do_check_eq(info, null); michael@0: server.stop(run_next_test); michael@0: }); michael@0: });