Bug 1425146 - P2 - Add a test reproducing the reported issue to verify that a Cache directory without a padding file and with an old version of the database doesn't break the storage initialization; r=janv
authorTom Tung <shes050117@gmail.com>
Thu, 25 Oct 2018 16:34:56 +0200
changeset 499807 78f4415212432c196010505418aaa0ffdeeb7677
parent 499806 52646a13f5de473e342c6c1ff2719137fcd43ac4
child 499808 ce4512ad72807806ad2d2fc381ce624bc382fbd2
push id10290
push userffxbld-merge
push dateMon, 03 Dec 2018 16:23:23 +0000
treeherdermozilla-beta@700bed2445e6 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersjanv
bugs1425146
milestone65.0a1
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Bug 1425146 - P2 - Add a test reproducing the reported issue to verify that a Cache directory without a padding file and with an old version of the database doesn't break the storage initialization; r=janv An issue for missing the "response_padding_size" column in cache.sqlite was reported in bug 1425146 comment 39. This test reproduces it and is mainly to ensure that a Cache directory which lacks a directory padding file and contains an old version of cache.sqlite can still be initialized successfully.
dom/cache/test/xpcshell/bug1425146_profile.zip
dom/cache/test/xpcshell/test_bug1425146.js
dom/cache/test/xpcshell/xpcshell.ini
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..fc57bc1043d7a786246e3dd37c233d5a489cd3d9
GIT binary patch
literal 2834
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
new file mode 100644
--- /dev/null
+++ b/dom/cache/test/xpcshell/test_bug1425146.js
@@ -0,0 +1,55 @@
+/**
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/publicdomain/zero/1.0/
+ */
+
+// This test is mainly to verify that we are able to recover from a situation
+// in which the padding file and the padding column are missing during origin
+// initialization. This was originally reported in bug 1425146 comment 39.
+// The situation can be described as follows:
+// 1. A profile is used in FF57. The storage version is 2.1. There's no cache
+//    storage for http://www.mozilla.org
+// 2. The same profile is used in FF56. The storage version is still 2.1 which
+//    doesn't prevent storage system from working since minor upgrades are
+//    backwards-compatible. The cache storage for http://www.mozilla.org is
+//    created with schema version 25 (without any padding stuff).
+// 3. The profile is used in FF57 again. Zero padding files for existing cache
+//    storages are not created because storage is already at version 2.1.
+//    Storage is being initialized and a missing padding file triggers padding
+//    size computation from the cache database with schema version 25. Since
+//    the computation happens before any real DOM cache operation, the database
+//    is not upgraded to schema version 26, so the padding column is missing.
+
+async function run_test() {
+  do_test_pending();
+
+  // The profile contains one cache storage, a script for cache creation and
+  // the storage database:
+  // - storage/default/http+++www.mozilla.org/cache
+  // - create_cache.js
+  // - storage.sqlite
+  // The file create_cache.js in the package was run locally, specifically it
+  // was temporarily added to xpcshell.ini and then executed:
+  //   mach xpcshell-test --interactive dom/cache/test/xpcshell/create_cache.js
+  // Note: it must be executed in FF56 and it only creates the directory
+  // "storage/default/chrome/cache" and the file "storage.sqlite". To make it
+  // become the profile in the test, additional manual steps are needed.
+  // 1. Create "http+++www.mozilla.org" folder under the ""storage/default".
+  // 2. Copy the "cache" folder under the "storage/default/chrome" to
+  //    "storage/default/http+++www.mozilla.org".
+  // 3. Remove the folder "storage/default/chrome"
+  // 4. Remove the folder "storage/temporary".
+  // 5. Add "create_cache.js".
+  // 6. Replace the "storage.sqlite" created by FF56 (storage v2.0) with the
+  //    "storage.sqlite" created by FF57 (storage v2.1)
+  create_test_profile('bug1425146_profile.zip');
+
+  try {
+    await caches.open("test");
+    ok(true, "Should not have thrown");
+  } catch(ex) {
+    ok(false, "Should not have thrown");
+  }
+
+  do_test_finished();
+}
--- a/dom/cache/test/xpcshell/xpcshell.ini
+++ b/dom/cache/test/xpcshell/xpcshell.ini
@@ -1,17 +1,19 @@
 # This Source Code Form is subject to the terms of the Mozilla Public
 # License, v. 2.0. If a copy of the MPL was not distributed with this
 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
 
 [DEFAULT]
 head = head.js
 support-files =
+  bug1425146_profile.zip
   schema_15_profile.zip
   schema_25_profile.zip
 
 # dummy test entry to generate profile zip files
 [make_profile.js]
   skip-if = true
 
+[test_bug1425146.js]
 [test_migration.js]
 [test_padding_error_handle.js]
 [test_schema_26_upgrade.js]