storage/test/unit/test_storage_aggregates.js

Tue, 06 Jan 2015 21:39:09 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Tue, 06 Jan 2015 21:39:09 +0100
branch
TOR_BUG_9701
changeset 8
97036ab72558
permissions
-rw-r--r--

Conditionally force memory storage according to privacy.thirdparty.isolate;
This solves Tor bug #9701, complying with disk avoidance documented in
https://www.torproject.org/projects/torbrowser/design/#disk-avoidance.

     1 /* This Source Code Form is subject to the terms of the Mozilla Public
     2  * License, v. 2.0. If a copy of the MPL was not distributed with this
     3  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
     5 // This file tests the custom aggregate functions
     7 var testNums = [1, 2, 3, 4];
     9 function setup()
    10 {
    11   getOpenedDatabase().createTable("function_tests", "id INTEGER PRIMARY KEY");
    13   var stmt = createStatement("INSERT INTO function_tests (id) VALUES(?1)");
    14   for(var i = 0; i < testNums.length; ++i) {
    15     stmt.bindByIndex(0, testNums[i]);
    16     stmt.execute();
    17   }
    18   stmt.reset();
    19   stmt.finalize();
    20 }
    22 var testSquareAndSumFunction = {
    23   calls: 0,
    24   _sas: 0,
    26   reset: function() {
    27     this.calls = 0;
    28     this._sas  = 0;
    29   },
    31   onStep: function(val) {
    32     ++this.calls;
    33     this._sas += val.getInt32(0) * val.getInt32(0);
    34   },
    36   onFinal: function() {
    37     var retval = this._sas;
    38     this._sas = 0; // Prepare for next group
    39     return retval;
    40   }
    41 };
    43 function test_aggregate_registration()
    44 {
    45   var msc = getOpenedDatabase();
    46   msc.createAggregateFunction("test_sas_aggr", 1, testSquareAndSumFunction);
    47 }
    49 function test_aggregate_no_double_registration()
    50 {
    51   var msc = getOpenedDatabase();
    52   try {
    53     msc.createAggregateFunction("test_sas_aggr", 2, testSquareAndSumFunction);
    54     do_throw("We shouldn't get here!");
    55   } catch (e) {
    56     do_check_eq(Cr.NS_ERROR_FAILURE, e.result);
    57   }
    58 }
    60 function test_aggregate_removal()
    61 {
    62   var msc = getOpenedDatabase();
    63   msc.removeFunction("test_sas_aggr");
    64   // Should be Ok now
    65   msc.createAggregateFunction("test_sas_aggr", 1, testSquareAndSumFunction);
    66 }
    68 function test_aggregate_no_aliases()
    69 {
    70   var msc = getOpenedDatabase();
    71   try {
    72     msc.createAggregateFunction("test_sas_aggr2", 1, testSquareAndSumFunction);
    73     do_throw("We shouldn't get here!");
    74   } catch (e) {
    75     do_check_eq(Cr.NS_ERROR_FAILURE, e.result);
    76   }
    77 }
    79 function test_aggregate_call()
    80 {
    81   var stmt = createStatement("SELECT test_sas_aggr(id) FROM function_tests");
    82   while(stmt.executeStep());
    83   do_check_eq(testNums.length, testSquareAndSumFunction.calls);
    84   testSquareAndSumFunction.reset();
    85   stmt.finalize();
    86 }
    88 function test_aggregate_result()
    89 {
    90   var sas = 0;
    91   for(var i = 0; i < testNums.length; ++i) {
    92     sas += testNums[i] * testNums[i];
    93   }
    94   var stmt = createStatement("SELECT test_sas_aggr(id) FROM function_tests");
    95   stmt.executeStep();
    96   do_check_eq(sas, stmt.getInt32(0));
    97   testSquareAndSumFunction.reset();
    98   stmt.finalize();
    99 }
   101 var tests = [test_aggregate_registration, test_aggregate_no_double_registration,
   102              test_aggregate_removal, test_aggregate_no_aliases, test_aggregate_call,
   103              test_aggregate_result];
   105 function run_test()
   106 {
   107   setup();
   109   for (var i = 0; i < tests.length; i++) {
   110     tests[i]();
   111   }
   113   cleanup();
   114 }

mercurial