diff options
author | Matt A. Tobin <mattatobin@localhost.localdomain> | 2018-02-02 04:16:08 -0500 |
---|---|---|
committer | Matt A. Tobin <mattatobin@localhost.localdomain> | 2018-02-02 04:16:08 -0500 |
commit | 5f8de423f190bbb79a62f804151bc24824fa32d8 (patch) | |
tree | 10027f336435511475e392454359edea8e25895d /browser/modules/test/xpcshell/test_AttributionCode.js | |
parent | 49ee0794b5d912db1f95dce6eb52d781dc210db5 (diff) | |
download | UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.gz UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.lz UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.xz UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.zip |
Add m-esr52 at 52.6.0
Diffstat (limited to 'browser/modules/test/xpcshell/test_AttributionCode.js')
-rw-r--r-- | browser/modules/test/xpcshell/test_AttributionCode.js | 110 |
1 files changed, 110 insertions, 0 deletions
diff --git a/browser/modules/test/xpcshell/test_AttributionCode.js b/browser/modules/test/xpcshell/test_AttributionCode.js new file mode 100644 index 000000000..d979ae845 --- /dev/null +++ b/browser/modules/test/xpcshell/test_AttributionCode.js @@ -0,0 +1,110 @@ +/* Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/publicdomain/zero/1.0/ + */ +"use strict"; + +const {interfaces: Ci, utils: Cu} = Components; + +Cu.import("resource://gre/modules/AppConstants.jsm"); +Cu.import("resource:///modules/AttributionCode.jsm"); +Cu.import('resource://gre/modules/osfile.jsm'); +Cu.import("resource://gre/modules/Services.jsm"); + +let validAttrCodes = [ + {code: "source%3Dgoogle.com%26medium%3Dorganic%26campaign%3D(not%20set)%26content%3D(not%20set)", + parsed: {"source": "google.com", "medium": "organic", + "campaign": "(not%20set)", "content": "(not%20set)"}}, + {code: "source%3Dgoogle.com%26medium%3Dorganic%26campaign%3D%26content%3D", + parsed: {"source": "google.com", "medium": "organic"}}, + {code: "source%3Dgoogle.com%26medium%3Dorganic%26campaign%3D(not%20set)", + parsed: {"source": "google.com", "medium": "organic", "campaign": "(not%20set)"}}, + {code: "source%3Dgoogle.com%26medium%3Dorganic", + parsed: {"source": "google.com", "medium": "organic"}}, + {code: "source%3Dgoogle.com", + parsed: {"source": "google.com"}}, + {code: "medium%3Dgoogle.com", + parsed: {"medium": "google.com"}}, + {code: "campaign%3Dgoogle.com", + parsed: {"campaign": "google.com"}}, + {code: "content%3Dgoogle.com", + parsed: {"content": "google.com"}} +]; + +let invalidAttrCodes = [ + // Empty string + "", + // Not escaped + "source=google.com&medium=organic&campaign=(not set)&content=(not set)", + // Too long + "source%3Dreallyreallyreallyreallyreallyreallyreallyreallyreallylongdomain.com%26medium%3Dorganic%26campaign%3D(not%20set)%26content%3Dalmostexactlyenoughcontenttomakethisstringlongerthanthe200characterlimit", + // Unknown key name + "source%3Dgoogle.com%26medium%3Dorganic%26large%3Dgeneticallymodified", + // Empty key name + "source%3Dgoogle.com%26medium%3Dorganic%26%3Dgeneticallymodified" +]; + +function* writeAttributionFile(data) { + let appDir = Services.dirsvc.get("LocalAppData", Ci.nsIFile); + let file = appDir.clone(); + file.append(Services.appinfo.vendor || "mozilla"); + file.append(AppConstants.MOZ_APP_NAME); + + yield OS.File.makeDir(file.path, + {from: appDir.path, ignoreExisting: true}); + + file.append("postSigningData"); + yield OS.File.writeAtomic(file.path, data); +} + +/** + * Test validation of attribution codes, + * to make sure we reject bad ones and accept good ones. + */ +add_task(function* testValidAttrCodes() { + for (let entry of validAttrCodes) { + AttributionCode._clearCache(); + yield writeAttributionFile(entry.code); + let result = yield AttributionCode.getAttrDataAsync(); + Assert.deepEqual(result, entry.parsed, + "Parsed code should match expected value, code was: " + entry.code); + } + AttributionCode._clearCache(); +}); + +/** + * Make sure codes with various formatting errors are not seen as valid. + */ +add_task(function* testInvalidAttrCodes() { + for (let code of invalidAttrCodes) { + AttributionCode._clearCache(); + yield writeAttributionFile(code); + let result = yield AttributionCode.getAttrDataAsync(); + Assert.deepEqual(result, {}, + "Code should have failed to parse: " + code); + } + AttributionCode._clearCache(); +}); + +/** + * Test the cache by deleting the attribution data file + * and making sure we still get the expected code. + */ +add_task(function* testDeletedFile() { + // Set up the test by clearing the cache and writing a valid file. + yield writeAttributionFile(validAttrCodes[0].code); + let result = yield AttributionCode.getAttrDataAsync(); + Assert.deepEqual(result, validAttrCodes[0].parsed, + "The code should be readable directly from the file"); + + // Delete the file and make sure we can still read the value back from cache. + yield AttributionCode.deleteFileAsync(); + result = yield AttributionCode.getAttrDataAsync(); + Assert.deepEqual(result, validAttrCodes[0].parsed, + "The code should be readable from the cache"); + + // Clear the cache and check we can't read anything. + AttributionCode._clearCache(); + result = yield AttributionCode.getAttrDataAsync(); + Assert.deepEqual(result, {}, + "Shouldn't be able to get a code after file is deleted and cache is cleared"); +}); |