|
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/. */ |
|
4 |
|
5 /* |
|
6 * This test uses a formhistory.sqlite with schema version set to 999 (a |
|
7 * future version). This exercies the code that allows using a future schema |
|
8 * version as long as the expected columns are present. |
|
9 * |
|
10 * Part A tests this when the columns do match, so the DB is used. |
|
11 * Part B tests this when the columns do *not* match, so the DB is reset. |
|
12 */ |
|
13 |
|
14 let iter = tests(); |
|
15 |
|
16 function run_test() |
|
17 { |
|
18 do_test_pending(); |
|
19 iter.next(); |
|
20 } |
|
21 |
|
22 function next_test() |
|
23 { |
|
24 iter.next(); |
|
25 } |
|
26 |
|
27 function tests() |
|
28 { |
|
29 try { |
|
30 var testnum = 0; |
|
31 |
|
32 // ===== test init ===== |
|
33 var testfile = do_get_file("formhistory_v999b.sqlite"); |
|
34 var profileDir = dirSvc.get("ProfD", Ci.nsIFile); |
|
35 |
|
36 // Cleanup from any previous tests or failures. |
|
37 var destFile = profileDir.clone(); |
|
38 destFile.append("formhistory.sqlite"); |
|
39 if (destFile.exists()) |
|
40 destFile.remove(false); |
|
41 |
|
42 var bakFile = profileDir.clone(); |
|
43 bakFile.append("formhistory.sqlite.corrupt"); |
|
44 if (bakFile.exists()) |
|
45 bakFile.remove(false); |
|
46 |
|
47 testfile.copyTo(profileDir, "formhistory.sqlite"); |
|
48 do_check_eq(999, getDBVersion(testfile)); |
|
49 |
|
50 let checkZero = function(num) { do_check_eq(num, 0); next_test(); } |
|
51 let checkOne = function(num) { do_check_eq(num, 1); next_test(); } |
|
52 |
|
53 // ===== 1 ===== |
|
54 testnum++; |
|
55 |
|
56 // Open the DB, ensure that a backup of the corrupt DB is made. |
|
57 // DB init is done lazily so the DB shouldn't be created yet. |
|
58 do_check_false(bakFile.exists()); |
|
59 // Doing any request to the DB should create it. |
|
60 yield countEntries("", "", next_test); |
|
61 |
|
62 do_check_true(bakFile.exists()); |
|
63 bakFile.remove(false); |
|
64 |
|
65 // ===== 2 ===== |
|
66 testnum++; |
|
67 // File should be empty |
|
68 yield countEntries(null, null, function(num) { do_check_false(num); next_test(); }); |
|
69 yield countEntries("name-A", "value-A", checkZero); |
|
70 // check for current schema. |
|
71 do_check_eq(CURRENT_SCHEMA, FormHistory.schemaVersion); |
|
72 |
|
73 // ===== 3 ===== |
|
74 testnum++; |
|
75 // Try adding an entry |
|
76 yield updateEntry("add", "name-A", "value-A", next_test); |
|
77 yield countEntries(null, null, checkOne); |
|
78 yield countEntries("name-A", "value-A", checkOne); |
|
79 |
|
80 // ===== 4 ===== |
|
81 testnum++; |
|
82 // Try removing an entry |
|
83 yield updateEntry("remove", "name-A", "value-A", next_test); |
|
84 yield countEntries(null, null, checkZero); |
|
85 yield countEntries("name-A", "value-A", checkZero); |
|
86 |
|
87 } catch (e) { |
|
88 throw "FAILED in test #" + testnum + " -- " + e; |
|
89 } |
|
90 |
|
91 do_test_finished(); |
|
92 } |