|
1 /*-*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- |
|
2 *vim: sw=2 ts=2 et lcs=trail\:.,tab\:>~ : |
|
3 * This Source Code Form is subject to the terms of the Mozilla Public |
|
4 * License, v. 2.0. If a copy of the MPL was not distributed with this |
|
5 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ |
|
6 |
|
7 /** |
|
8 * This file tests to make sure that SQLite was compiled with |
|
9 * SQLITE_SECURE_DELETE=1. |
|
10 */ |
|
11 |
|
12 //////////////////////////////////////////////////////////////////////////////// |
|
13 //// Helper Methods |
|
14 |
|
15 /** |
|
16 * Reads the contents of a file and returns it as a string. |
|
17 * |
|
18 * @param aFile |
|
19 * The file to return from. |
|
20 * @return the contents of the file in the form of a string. |
|
21 */ |
|
22 function getFileContents(aFile) |
|
23 { |
|
24 let fstream = Cc["@mozilla.org/network/file-input-stream;1"]. |
|
25 createInstance(Ci.nsIFileInputStream); |
|
26 fstream.init(aFile, -1, 0, 0); |
|
27 |
|
28 let bstream = Cc["@mozilla.org/binaryinputstream;1"]. |
|
29 createInstance(Ci.nsIBinaryInputStream); |
|
30 bstream.setInputStream(fstream); |
|
31 return bstream.readBytes(bstream.available()); |
|
32 } |
|
33 |
|
34 //////////////////////////////////////////////////////////////////////////////// |
|
35 //// Tests |
|
36 |
|
37 function test_delete_removes_data() |
|
38 { |
|
39 const TEST_STRING = "SomeRandomStringToFind"; |
|
40 |
|
41 let file = getTestDB(); |
|
42 let db = getService().openDatabase(file); |
|
43 |
|
44 // Create the table and insert the data. |
|
45 db.createTable("test", "data TEXT"); |
|
46 let stmt = db.createStatement("INSERT INTO test VALUES(:data)"); |
|
47 stmt.params.data = TEST_STRING; |
|
48 try { |
|
49 stmt.execute(); |
|
50 } |
|
51 finally { |
|
52 stmt.finalize(); |
|
53 } |
|
54 |
|
55 // Make sure this test is actually testing what it thinks by making sure the |
|
56 // string shows up in the database. Because the previous statement was |
|
57 // automatically wrapped in a transaction, the contents are already on disk. |
|
58 let contents = getFileContents(file); |
|
59 do_check_neq(-1, contents.indexOf(TEST_STRING)); |
|
60 |
|
61 // Delete the data, and then close the database. |
|
62 stmt = db.createStatement("DELETE FROM test WHERE data = :data"); |
|
63 stmt.params.data = TEST_STRING; |
|
64 try { |
|
65 stmt.execute(); |
|
66 } |
|
67 finally { |
|
68 stmt.finalize(); |
|
69 } |
|
70 db.close(); |
|
71 |
|
72 // Check the file to see if the string can be found. |
|
73 contents = getFileContents(file); |
|
74 do_check_eq(-1, contents.indexOf(TEST_STRING)); |
|
75 |
|
76 run_next_test(); |
|
77 } |
|
78 |
|
79 //////////////////////////////////////////////////////////////////////////////// |
|
80 //// Test Runner |
|
81 |
|
82 [ |
|
83 test_delete_removes_data, |
|
84 ].forEach(add_test); |
|
85 |
|
86 function run_test() |
|
87 { |
|
88 cleanup(); |
|
89 run_next_test(); |
|
90 } |