services/healthreport/tests/xpcshell/test_profile.js

Wed, 31 Dec 2014 07:53:36 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 07:53:36 +0100
branch
TOR_BUG_3246
changeset 5
4ab42b5ab56c
permissions
-rw-r--r--

Correct small whitespace inconsistency, lost while renaming variables.

     1 /* Any copyright is dedicated to the Public Domain.
     2  * http://creativecommons.org/publicdomain/zero/1.0/ */
     4 "use strict";
     6 const {utils: Cu} = Components;
     8 const MILLISECONDS_PER_DAY = 24 * 60 * 60 * 1000;
    10 // Create profile directory before use.
    11 // It can be no older than a day ago….
    12 let profile_creation_lower = Date.now() - MILLISECONDS_PER_DAY;
    13 do_get_profile();
    15 Cu.import("resource://gre/modules/Promise.jsm");
    16 Cu.import("resource://gre/modules/Metrics.jsm");
    17 Cu.import("resource://gre/modules/services/healthreport/profile.jsm");
    18 Cu.import("resource://gre/modules/Task.jsm");
    21 function MockProfileMetadataProvider(name="MockProfileMetadataProvider") {
    22   this.name = name;
    23   ProfileMetadataProvider.call(this);
    24 }
    25 MockProfileMetadataProvider.prototype = {
    26   __proto__: ProfileMetadataProvider.prototype,
    28   getProfileCreationDays: function getProfileCreationDays() {
    29     return Promise.resolve(1234);
    30   },
    31 };
    34 function run_test() {
    35   run_next_test();
    36 }
    38 /**
    39  * Ensure that OS.File works in our environment.
    40  * This test can go once there are xpcshell tests for OS.File.
    41  */
    42 add_test(function use_os_file() {
    43   Cu.import("resource://gre/modules/osfile.jsm")
    45   // Ensure that we get constants, too.
    46   do_check_neq(OS.Constants.Path.profileDir, null);
    48   let iterator = new OS.File.DirectoryIterator(".");
    49   iterator.forEach(function onEntry(entry) {
    50     print("Got " + entry.path);
    51   }).then(function onSuccess() {
    52     iterator.close();
    53     print("Done.");
    54     run_next_test();
    55   }, function onFail() {
    56     iterator.close();
    57     do_throw("Iterating over current directory failed.");
    58   });
    59 });
    61 function getAccessor() {
    62   let acc = new ProfileCreationTimeAccessor();
    63   print("Profile is " + acc.profilePath);
    64   return acc;
    65 }
    67 add_test(function test_time_accessor_no_file() {
    68   let acc = getAccessor();
    70   // There should be no file yet.
    71   acc.readTimes()
    72      .then(function onSuccess(json) {
    73        do_throw("File existed!");
    74      },
    75      function onFailure() {
    76        run_next_test();
    77      });
    78 });
    80 add_task(function test_time_accessor_named_file() {
    81   let acc = getAccessor();
    83   // There should be no file yet.
    84   yield acc.writeTimes({created: 12345}, "test.json");
    85   let json = yield acc.readTimes("test.json")
    86   print("Read: " + JSON.stringify(json));
    87   do_check_eq(12345, json.created);
    88 });
    90 add_task(function test_time_accessor_creates_file() {
    91   let lower = profile_creation_lower;
    93   // Ensure that provided contents are merged, and existing
    94   // files can be overwritten. These two things occur if we
    95   // read and then decide that we have to write.
    96   let acc = getAccessor();
    97   let existing = {abc: "123", easy: "abc"};
    98   let expected;
   100   let created = yield acc.computeAndPersistTimes(existing, "test2.json")
   101   let upper = Date.now() + 1000;
   102   print(lower + " < " + created + " <= " + upper);
   103   do_check_true(lower < created);
   104   do_check_true(upper >= created);
   105   expected = created;
   107   let json = yield acc.readTimes("test2.json")
   108   print("Read: " + JSON.stringify(json));
   109   do_check_eq("123", json.abc);
   110   do_check_eq("abc", json.easy);
   111   do_check_eq(expected, json.created);
   112 });
   114 add_task(function test_time_accessor_all() {
   115   let lower = profile_creation_lower;
   116   let acc = getAccessor();
   117   let expected;
   118   let created = yield acc.created
   119   let upper = Date.now() + 1000;
   120   do_check_true(lower < created);
   121   do_check_true(upper >= created);
   122   expected = created;
   124   let again = yield acc.created
   125   do_check_eq(expected, again);
   126 });
   128 add_test(function test_constructor() {
   129   let provider = new ProfileMetadataProvider("named");
   130   run_next_test();
   131 });
   133 add_test(function test_profile_files() {
   134   let provider = new ProfileMetadataProvider();
   136   function onSuccess(answer) {
   137     let now = Date.now() / MILLISECONDS_PER_DAY;
   138     print("Got " + answer + ", versus now = " + now);
   139     do_check_true(answer < now);
   140     run_next_test();
   141   }
   143   function onFailure(ex) {
   144     do_throw("Directory iteration failed: " + ex);
   145   }
   147   provider.getProfileCreationDays().then(onSuccess, onFailure);
   148 });
   150 // A generic test helper. We use this with both real
   151 // and mock providers in these tests.
   152 function test_collect_constant(provider) {
   153   return Task.spawn(function () {
   154     yield provider.collectConstantData();
   156     let m = provider.getMeasurement("age", 1);
   157     do_check_neq(m, null);
   158     let values = yield m.getValues();
   159     do_check_eq(values.singular.size, 1);
   160     do_check_true(values.singular.has("profileCreation"));
   162     throw new Task.Result(values.singular.get("profileCreation")[1]);
   163   });
   164 }
   166 add_task(function test_collect_constant_mock() {
   167   let storage = yield Metrics.Storage("collect_constant_mock");
   168   let provider = new MockProfileMetadataProvider();
   169   yield provider.init(storage);
   171   let v = yield test_collect_constant(provider);
   172   do_check_eq(v, 1234);
   174   yield storage.close();
   175 });
   177 add_task(function test_collect_constant_real() {
   178   let provider = new ProfileMetadataProvider();
   179   let storage = yield Metrics.Storage("collect_constant_real");
   180   yield provider.init(storage);
   182   let v = yield test_collect_constant(provider);
   184   let ms = v * MILLISECONDS_PER_DAY;
   185   let lower = profile_creation_lower;
   186   let upper = Date.now() + 1000;
   187   print("Day:   " + v);
   188   print("msec:  " + ms);
   189   print("Lower: " + lower);
   190   print("Upper: " + upper);
   191   do_check_true(lower <= ms);
   192   do_check_true(upper >= ms);
   194   yield storage.close();
   195 });

mercurial