storage/test/unit/test_sqlite_secure_delete.js

changeset 0
6474c204b198
equal deleted inserted replaced
-1:000000000000 0:d767be21d357
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 }

mercurial