summaryrefslogtreecommitdiffstats
path: root/browser/components/migration/tests/unit/test_fx_telemetry.js
diff options
context:
space:
mode:
Diffstat (limited to 'browser/components/migration/tests/unit/test_fx_telemetry.js')
-rw-r--r--browser/components/migration/tests/unit/test_fx_telemetry.js288
1 files changed, 0 insertions, 288 deletions
diff --git a/browser/components/migration/tests/unit/test_fx_telemetry.js b/browser/components/migration/tests/unit/test_fx_telemetry.js
deleted file mode 100644
index a276f52f8..000000000
--- a/browser/components/migration/tests/unit/test_fx_telemetry.js
+++ /dev/null
@@ -1,288 +0,0 @@
-/* Any copyright is dedicated to the Public Domain.
- * http://creativecommons.org/publicdomain/zero/1.0/ */
-
-/* globals do_get_tempdir */
-
-"use strict";
-
-function run_test() {
- run_next_test();
-}
-
-function readFile(file) {
- let stream = Cc["@mozilla.org/network/file-input-stream;1"]
- .createInstance(Ci.nsIFileInputStream);
- stream.init(file, -1, -1, Ci.nsIFileInputStream.CLOSE_ON_EOF);
-
- let sis = Cc["@mozilla.org/scriptableinputstream;1"]
- .createInstance(Ci.nsIScriptableInputStream);
- sis.init(stream);
- let contents = sis.read(file.fileSize);
- sis.close();
- return contents;
-}
-
-function checkDirectoryContains(dir, files) {
- print("checking " + dir.path + " - should contain " + Object.keys(files));
- let seen = new Set();
- let enumerator = dir.directoryEntries;
- while (enumerator.hasMoreElements()) {
- let file = enumerator.getNext().QueryInterface(Ci.nsIFile);
- print("found file: " + file.path);
- Assert.ok(file.leafName in files, file.leafName + " exists, but shouldn't");
-
- let expectedContents = files[file.leafName];
- if (typeof expectedContents != "string") {
- // it's a subdir - recurse!
- Assert.ok(file.isDirectory(), "should be a subdir");
- let newDir = dir.clone();
- newDir.append(file.leafName);
- checkDirectoryContains(newDir, expectedContents);
- } else {
- Assert.ok(!file.isDirectory(), "should be a regular file");
- let contents = readFile(file);
- Assert.equal(contents, expectedContents);
- }
- seen.add(file.leafName);
- }
- let missing = [];
- for (let x in files) {
- if (!seen.has(x)) {
- missing.push(x);
- }
- }
- Assert.deepEqual(missing, [], "no missing files in " + dir.path);
-}
-
-function getTestDirs() {
- // we make a directory structure in a temp dir which mirrors what we are
- // testing.
- let tempDir = do_get_tempdir();
- let srcDir = tempDir.clone();
- srcDir.append("test_source_dir");
- srcDir.createUnique(Ci.nsIFile.DIRECTORY_TYPE, FileUtils.PERMS_DIRECTORY);
-
- let targetDir = tempDir.clone();
- targetDir.append("test_target_dir");
- targetDir.createUnique(Ci.nsIFile.DIRECTORY_TYPE, FileUtils.PERMS_DIRECTORY);
-
- // no need to cleanup these dirs - the xpcshell harness will do it for us.
- return [srcDir, targetDir];
-}
-
-function writeToFile(dir, leafName, contents) {
- let file = dir.clone();
- file.append(leafName);
-
- let outputStream = FileUtils.openFileOutputStream(file);
- outputStream.write(contents, contents.length);
- outputStream.close();
-}
-
-function createSubDir(dir, subDirName) {
- let subDir = dir.clone();
- subDir.append(subDirName);
- subDir.create(Ci.nsIFile.DIRECTORY_TYPE, FileUtils.PERMS_DIRECTORY);
- return subDir;
-}
-
-function promiseMigrator(name, srcDir, targetDir) {
- let migrator = Cc["@mozilla.org/profile/migrator;1?app=browser&type=firefox"]
- .createInstance(Ci.nsISupports)
- .wrappedJSObject;
- let migrators = migrator._getResourcesInternal(srcDir, targetDir);
- for (let m of migrators) {
- if (m.name == name) {
- return new Promise(resolve => m.migrate(resolve));
- }
- }
- throw new Error("failed to find the " + name + " migrator");
-}
-
-function promiseTelemetryMigrator(srcDir, targetDir) {
- return promiseMigrator("telemetry", srcDir, targetDir);
-}
-
-add_task(function* test_empty() {
- let [srcDir, targetDir] = getTestDirs();
- let ok = yield promiseTelemetryMigrator(srcDir, targetDir);
- Assert.ok(ok, "callback should have been true with empty directories");
- // check both are empty
- checkDirectoryContains(srcDir, {});
- checkDirectoryContains(targetDir, {});
-});
-
-add_task(function* test_migrate_files() {
- let [srcDir, targetDir] = getTestDirs();
-
- // Set up datareporting files, some to copy, some not.
- let stateContent = JSON.stringify({
- clientId: "68d5474e-19dc-45c1-8e9a-81fca592707c",
- });
- let sessionStateContent = "foobar 5432";
- let subDir = createSubDir(srcDir, "datareporting");
- writeToFile(subDir, "state.json", stateContent);
- writeToFile(subDir, "session-state.json", sessionStateContent);
- writeToFile(subDir, "other.file", "do not copy");
-
- let archived = createSubDir(subDir, "archived");
- writeToFile(archived, "other.file", "do not copy");
-
- // Set up FHR files, they should not be copied.
- writeToFile(srcDir, "healthreport.sqlite", "do not copy");
- writeToFile(srcDir, "healthreport.sqlite-wal", "do not copy");
- subDir = createSubDir(srcDir, "healthreport");
- writeToFile(subDir, "state.json", "do not copy");
- writeToFile(subDir, "other.file", "do not copy");
-
- // Perform migration.
- let ok = yield promiseTelemetryMigrator(srcDir, targetDir);
- Assert.ok(ok, "callback should have been true with important telemetry files copied");
-
- checkDirectoryContains(targetDir, {
- "datareporting": {
- "state.json": stateContent,
- "session-state.json": sessionStateContent,
- },
- });
-});
-
-add_task(function* test_fallback_fhr_state() {
- let [srcDir, targetDir] = getTestDirs();
-
- // Test that we fall back to migrating FHR state if the datareporting
- // state file does not exist.
- let stateContent = JSON.stringify({
- clientId: "68d5474e-19dc-45c1-8e9a-81fca592707c",
- });
- let subDir = createSubDir(srcDir, "healthreport");
- writeToFile(subDir, "state.json", stateContent);
-
- // Perform migration.
- let ok = yield promiseTelemetryMigrator(srcDir, targetDir);
- Assert.ok(ok, "callback should have been true");
-
- checkDirectoryContains(targetDir, {
- "healthreport": {
- "state.json": stateContent,
- },
- });
-});
-
-
-add_task(function* test_datareporting_not_dir() {
- let [srcDir, targetDir] = getTestDirs();
-
- writeToFile(srcDir, "datareporting", "I'm a file but should be a directory");
-
- let ok = yield promiseTelemetryMigrator(srcDir, targetDir);
- Assert.ok(ok, "callback should have been true even though the directory was a file");
-
- checkDirectoryContains(targetDir, {});
-});
-
-add_task(function* test_datareporting_empty() {
- let [srcDir, targetDir] = getTestDirs();
-
- // Migrate with an empty 'datareporting' subdir.
- createSubDir(srcDir, "datareporting");
- let ok = yield promiseTelemetryMigrator(srcDir, targetDir);
- Assert.ok(ok, "callback should have been true");
-
- // We should end up with no migrated files.
- checkDirectoryContains(targetDir, {
- "datareporting": {},
- });
-});
-
-add_task(function* test_healthreport_empty() {
- let [srcDir, targetDir] = getTestDirs();
-
- // Migrate with no 'datareporting' and an empty 'healthreport' subdir.
- createSubDir(srcDir, "healthreport");
- let ok = yield promiseTelemetryMigrator(srcDir, targetDir);
- Assert.ok(ok, "callback should have been true");
-
- // We should end up with no migrated files.
- checkDirectoryContains(targetDir, {});
-});
-
-add_task(function* test_datareporting_many() {
- let [srcDir, targetDir] = getTestDirs();
-
- // Create some datareporting files.
- let subDir = createSubDir(srcDir, "datareporting");
- let shouldBeCopied = "should be copied";
- writeToFile(subDir, "state.json", shouldBeCopied);
- writeToFile(subDir, "session-state.json", shouldBeCopied);
- writeToFile(subDir, "something.else", "should not");
- createSubDir(subDir, "emptyDir");
-
- let ok = yield promiseTelemetryMigrator(srcDir, targetDir);
- Assert.ok(ok, "callback should have been true");
-
- checkDirectoryContains(targetDir, {
- "datareporting" : {
- "state.json": shouldBeCopied,
- "session-state.json": shouldBeCopied,
- }
- });
-});
-
-add_task(function* test_no_session_state() {
- let [srcDir, targetDir] = getTestDirs();
-
- // Check that migration still works properly if we only have state.json.
- let subDir = createSubDir(srcDir, "datareporting");
- let stateContent = "abcd984";
- writeToFile(subDir, "state.json", stateContent);
-
- let ok = yield promiseTelemetryMigrator(srcDir, targetDir);
- Assert.ok(ok, "callback should have been true");
-
- checkDirectoryContains(targetDir, {
- "datareporting" : {
- "state.json": stateContent,
- }
- });
-});
-
-add_task(function* test_no_state() {
- let [srcDir, targetDir] = getTestDirs();
-
- // Check that migration still works properly if we only have session-state.json.
- let subDir = createSubDir(srcDir, "datareporting");
- let sessionStateContent = "abcd512";
- writeToFile(subDir, "session-state.json", sessionStateContent);
-
- let ok = yield promiseTelemetryMigrator(srcDir, targetDir);
- Assert.ok(ok, "callback should have been true");
-
- checkDirectoryContains(targetDir, {
- "datareporting" : {
- "session-state.json": sessionStateContent,
- }
- });
-});
-
-add_task(function* test_times_migration() {
- let [srcDir, targetDir] = getTestDirs();
-
- // create a times.json in the source directory.
- let contents = JSON.stringify({created: 1234});
- writeToFile(srcDir, "times.json", contents);
-
- let earliest = Date.now();
- let ok = yield promiseMigrator("times", srcDir, targetDir);
- Assert.ok(ok, "callback should have been true");
- let latest = Date.now();
-
- let timesFile = targetDir.clone();
- timesFile.append("times.json");
-
- let raw = readFile(timesFile);
- let times = JSON.parse(raw);
- Assert.ok(times.reset >= earliest && times.reset <= latest);
- // and it should have left the creation time alone.
- Assert.equal(times.created, 1234);
-});