summaryrefslogtreecommitdiffstats
path: root/services/fxaccounts/tests/xpcshell/test_rust_fxaccount.js
diff options
context:
space:
mode:
Diffstat (limited to 'services/fxaccounts/tests/xpcshell/test_rust_fxaccount.js')
-rw-r--r--services/fxaccounts/tests/xpcshell/test_rust_fxaccount.js65
1 files changed, 65 insertions, 0 deletions
diff --git a/services/fxaccounts/tests/xpcshell/test_rust_fxaccount.js b/services/fxaccounts/tests/xpcshell/test_rust_fxaccount.js
new file mode 100644
index 0000000000..41dc06e5f0
--- /dev/null
+++ b/services/fxaccounts/tests/xpcshell/test_rust_fxaccount.js
@@ -0,0 +1,65 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/publicdomain/zero/1.0/ */
+
+"use strict";
+
+// Tests for the RustFxAccounts bridging class.
+// Note that we do not test everything, as this
+// "should" be covered by the Rust tests.
+// We are simply assessing that the Rust XPCOM
+// and the Viaduct plumbing work!
+
+const { AppConstants } = ChromeUtils.import(
+ "resource://gre/modules/AppConstants.jsm"
+);
+const { RustFxAccount } = ChromeUtils.import(
+ "resource://gre/modules/RustFxAccount.js"
+);
+
+add_task(
+ {
+ skip_if: () => !AppConstants.MOZ_RUST_FXA_CLIENT,
+ },
+ async function test_authenticated_get_request() {
+ let serverCalls = 0;
+ const server = httpd_setup({
+ "/.well-known/openid-configuration": function(request, response) {
+ response.setStatusLine(request.httpVersion, 200, "OK");
+ const body = JSON.stringify({
+ authorization_endpoint: "https://foo.bar/authorization",
+ introspection_endpoint: "https://oauth.foo.bar/v1/introspect",
+ issuer: "https://foo.bar",
+ jwks_uri: "https://oauth.foo.bar/v1/jwks",
+ revocation_endpoint: "https://oauth.foo.bar/v1/destroy",
+ token_endpoint: "https://oauth.foo.bar/v1/token",
+ userinfo_endpoint: "https://profile.foo.bar/v1/profile",
+ });
+ response.bodyOutputStream.write(body, body.length);
+ serverCalls++;
+ },
+ "/.well-known/fxa-client-configuration": function(request, response) {
+ response.setStatusLine(request.httpVersion, 200, "OK");
+ const body = JSON.stringify({
+ auth_server_base_url: "https://api.foo.bar",
+ oauth_server_base_url: "https://oauth.foo.bar",
+ pairing_server_base_uri: "wss://channelserver.services.mozilla.com",
+ profile_server_base_url: "https://profile.foo.bar",
+ sync_tokenserver_base_url: "https://token.services.mozilla.com",
+ });
+ response.bodyOutputStream.write(body, body.length);
+ serverCalls++;
+ },
+ });
+
+ const fxa = new RustFxAccount({
+ fxaServer: server.baseURI,
+ clientId: "abcd",
+ redirectUri: "https://foo.bar/1234",
+ });
+ const oauthFlowUrl = await fxa.beginOAuthFlow(["profile"]);
+ Assert.equal(2, serverCalls);
+ Assert.ok(oauthFlowUrl.startsWith("https://foo.bar/authorization"));
+
+ await promiseStopServer(server);
+ }
+);