summaryrefslogtreecommitdiffstats
path: root/remote/shared/test/xpcshell/test_ChallengeHeaderParser.js
diff options
context:
space:
mode:
Diffstat (limited to 'remote/shared/test/xpcshell/test_ChallengeHeaderParser.js')
-rw-r--r--remote/shared/test/xpcshell/test_ChallengeHeaderParser.js140
1 files changed, 140 insertions, 0 deletions
diff --git a/remote/shared/test/xpcshell/test_ChallengeHeaderParser.js b/remote/shared/test/xpcshell/test_ChallengeHeaderParser.js
new file mode 100644
index 0000000000..fa624e9c20
--- /dev/null
+++ b/remote/shared/test/xpcshell/test_ChallengeHeaderParser.js
@@ -0,0 +1,140 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this file,
+ * You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+const { parseChallengeHeader } = ChromeUtils.importESModule(
+ "chrome://remote/content/shared/ChallengeHeaderParser.sys.mjs"
+);
+
+add_task(async function test_single_scheme() {
+ const TEST_HEADERS = [
+ {
+ // double quotes
+ header: 'Basic realm="test"',
+ params: [{ name: "realm", value: "test" }],
+ },
+ {
+ // single quote
+ header: "Basic realm='test'",
+ params: [{ name: "realm", value: "test" }],
+ },
+ {
+ // multiline
+ header: `Basic
+ realm='test'`,
+ params: [{ name: "realm", value: "test" }],
+ },
+ {
+ // with additional parameter.
+ header: 'Basic realm="test", charset="UTF-8"',
+ params: [
+ { name: "realm", value: "test" },
+ { name: "charset", value: "UTF-8" },
+ ],
+ },
+ ];
+ for (const { header, params } of TEST_HEADERS) {
+ const challenges = parseChallengeHeader(header);
+ equal(challenges.length, 1);
+ equal(challenges[0].scheme, "Basic");
+ deepEqual(challenges[0].params, params);
+ }
+});
+
+add_task(async function test_realmless_scheme() {
+ const TEST_HEADERS = [
+ {
+ // no parameter
+ header: "Custom",
+ params: [],
+ },
+ {
+ // one non-realm parameter
+ header: "Custom charset='UTF-8'",
+ params: [{ name: "charset", value: "UTF-8" }],
+ },
+ ];
+
+ for (const { header, params } of TEST_HEADERS) {
+ const challenges = parseChallengeHeader(header);
+ equal(challenges.length, 1);
+ equal(challenges[0].scheme, "Custom");
+ deepEqual(challenges[0].params, params);
+ }
+});
+
+add_task(async function test_multiple_schemes() {
+ const TEST_HEADERS = [
+ {
+ header: 'Scheme1 realm="foo", Scheme2 realm="bar"',
+ params: [
+ [{ name: "realm", value: "foo" }],
+ [{ name: "realm", value: "bar" }],
+ ],
+ },
+ {
+ header: 'Scheme1 realm="foo", charset="UTF-8", Scheme2 realm="bar"',
+ params: [
+ [
+ { name: "realm", value: "foo" },
+ { name: "charset", value: "UTF-8" },
+ ],
+ [{ name: "realm", value: "bar" }],
+ ],
+ },
+ {
+ header: `Scheme1 realm="foo",
+ charset="UTF-8",
+ Scheme2 realm="bar"`,
+ params: [
+ [
+ { name: "realm", value: "foo" },
+ { name: "charset", value: "UTF-8" },
+ ],
+ [{ name: "realm", value: "bar" }],
+ ],
+ },
+ ];
+ for (const { header, params } of TEST_HEADERS) {
+ const challenges = parseChallengeHeader(header);
+ equal(challenges.length, 2);
+ equal(challenges[0].scheme, "Scheme1");
+ deepEqual(challenges[0].params, params[0]);
+ equal(challenges[1].scheme, "Scheme2");
+ deepEqual(challenges[1].params, params[1]);
+ }
+});
+
+add_task(async function test_digest_scheme() {
+ const header = `Digest
+ realm="http-auth@example.org",
+ qop="auth, auth-int",
+ algorithm=SHA-256,
+ nonce="7ypf/xlj9XXwfDPEoM4URrv/xwf94BcCAzFZH4GiTo0v",
+ opaque="FQhe/qaU925kfnzjCev0ciny7QMkPqMAFRtzCUYo5tdS"`;
+
+ const challenges = parseChallengeHeader(header);
+ equal(challenges.length, 1);
+ equal(challenges[0].scheme, "Digest");
+
+ // Note: we are not doing a deepEqual check here, because one of the params
+ // actually contains a `,` inside quotes for its value, which will not be
+ // handled properly by the current ChallengeHeaderParser. See Bug 1857847.
+ const realmParam = challenges[0].params.find(param => param.name === "realm");
+ ok(realmParam);
+ equal(realmParam.value, "http-auth@example.org");
+
+ // Once Bug 1857847 is addressed, this should start failing and can be
+ // switched to deepEqual.
+ notDeepEqual(
+ challenges[0].params,
+ [
+ { name: "realm", value: "http-auth@example.org" },
+ { name: "qop", value: "auth, auth-int" },
+ { name: "algorithm", value: "SHA-256" },
+ { name: "nonce", value: "7ypf/xlj9XXwfDPEoM4URrv/xwf94BcCAzFZH4GiTo0v" },
+ { name: "opaque", value: "FQhe/qaU925kfnzjCev0ciny7QMkPqMAFRtzCUYo5tdS" },
+ ],
+ "notDeepEqual should be changed to deepEqual when Bug 1857847 is fixed"
+ );
+});