tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

TestFileSystemUsageTracking.cpp (5823B)


      1 /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
      2 /* vim: set ts=8 sts=2 et sw=2 tw=80: */
      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 file,
      5 * You can obtain one at http://mozilla.org/MPL/2.0/. */
      6 
      7 #include "FileSystemParentTest.h"
      8 #include "FileSystemParentTestHelpers.h"
      9 #include "FileSystemParentTypes.h"
     10 #include "gtest/gtest.h"
     11 #include "mozilla/dom/quota/UsageInfo.h"
     12 
     13 // This file is intended for integration tests which verify usage tracking
     14 // without any restart in between.
     15 
     16 namespace mozilla::dom::fs::test {
     17 
     18 class TestFileSystemUsageTracking : public FileSystemParentTest {};
     19 
     20 TEST_F(TestFileSystemUsageTracking, CheckUsageBeforeAnyFilesOnDisk) {
     21  // For uninitialized database, origin usage is nothing
     22  quota::UsageInfo usageNow;
     23  ASSERT_NO_FATAL_FAILURE(GetOriginUsage(usageNow));
     24  ASSERT_NO_FATAL_FAILURE(CheckUsageIsNothing(usageNow));
     25 
     26  // Initialize database
     27  ASSERT_NO_FATAL_FAILURE(EnsureDataManager());
     28 
     29  // After initialization,
     30  // * database usage is not zero
     31  // * GetDatabaseUsage and GetOriginUsage should agree
     32  ASSERT_NO_FATAL_FAILURE(GetDatabaseUsage(usageNow));
     33  ASSERT_NO_FATAL_FAILURE(CheckUsageGreaterThan(usageNow, 0u));
     34 
     35  uint64_t initialDbUsage;
     36  ASSERT_NO_FATAL_FAILURE(GetUsageValue(usageNow, initialDbUsage));
     37 
     38  ASSERT_NO_FATAL_FAILURE(GetOriginUsage(usageNow));
     39  ASSERT_NO_FATAL_FAILURE(CheckUsageEqualTo(usageNow, initialDbUsage));
     40 
     41  // Create a new empty file
     42  EntryId testFileId;
     43  ASSERT_NO_FATAL_FAILURE(CreateNewEmptyFile(testFileId));
     44 
     45  // After a new file has been created (only in the database),
     46  // * database usage has increased
     47  // * GetDatabaseUsage and GetOriginUsage should agree
     48  const auto increasedDbUsage = initialDbUsage + 2 * GetPageSize();
     49 
     50  ASSERT_NO_FATAL_FAILURE(GetDatabaseUsage(usageNow));
     51  ASSERT_NO_FATAL_FAILURE(CheckUsageEqualTo(usageNow, increasedDbUsage));
     52 
     53  ASSERT_NO_FATAL_FAILURE(GetOriginUsage(usageNow));
     54  ASSERT_NO_FATAL_FAILURE(CheckUsageEqualTo(usageNow, increasedDbUsage));
     55 }
     56 
     57 TEST_F(TestFileSystemUsageTracking, WritesToFilesShouldIncreaseUsage) {
     58  // Initialize database
     59  ASSERT_NO_FATAL_FAILURE(EnsureDataManager());
     60 
     61  // Create a new empty file
     62  EntryId testFileId;
     63  ASSERT_NO_FATAL_FAILURE(CreateNewEmptyFile(testFileId));
     64 
     65  quota::UsageInfo usageNow;
     66  ASSERT_NO_FATAL_FAILURE(GetDatabaseUsage(usageNow));
     67  ASSERT_NO_FATAL_FAILURE(CheckUsageGreaterThan(usageNow, 0u));
     68 
     69  uint64_t initialDbUsage;
     70  ASSERT_NO_FATAL_FAILURE(GetUsageValue(usageNow, initialDbUsage));
     71 
     72  ASSERT_NO_FATAL_FAILURE(GetOriginUsage(usageNow));
     73  ASSERT_NO_FATAL_FAILURE(CheckUsageEqualTo(usageNow, initialDbUsage));
     74 
     75  // Fill the file with some content
     76  ASSERT_NO_FATAL_FAILURE(LockExclusive(testFileId));
     77 
     78  const nsCString& testData = GetTestData();
     79 
     80  ASSERT_NO_FATAL_FAILURE(WriteDataToFile(testFileId, testData));
     81 
     82  // After the content has been written to the file,
     83  // * database usage is the same (the usage is updated later during file
     84  //   unlocking)
     85  // * origin usage has increased
     86  ASSERT_NO_FATAL_FAILURE(GetDatabaseUsage(usageNow));
     87  ASSERT_NO_FATAL_FAILURE(CheckUsageEqualTo(usageNow, initialDbUsage));
     88 
     89  const auto increasedDbUsage = initialDbUsage + testData.Length();
     90 
     91  ASSERT_NO_FATAL_FAILURE(GetOriginUsage(usageNow));
     92  ASSERT_NO_FATAL_FAILURE(CheckUsageEqualTo(usageNow, increasedDbUsage));
     93 
     94  ASSERT_NO_FATAL_FAILURE(UnlockExclusive(testFileId));
     95 
     96  // After the file has been unlocked,
     97  // * database usage has increased
     98  // * GetDatabaseUsage and GetOriginUsage should now agree
     99  ASSERT_NO_FATAL_FAILURE(GetDatabaseUsage(usageNow));
    100  ASSERT_NO_FATAL_FAILURE(CheckUsageEqualTo(usageNow, increasedDbUsage));
    101 
    102  ASSERT_NO_FATAL_FAILURE(GetOriginUsage(usageNow));
    103  ASSERT_NO_FATAL_FAILURE(CheckUsageEqualTo(usageNow, increasedDbUsage));
    104 }
    105 
    106 TEST_F(TestFileSystemUsageTracking, RemovingFileShouldDecreaseUsage) {
    107  // Initialize database
    108  ASSERT_NO_FATAL_FAILURE(EnsureDataManager());
    109 
    110  // Create a new empty file
    111  EntryId testFileId;
    112  ASSERT_NO_FATAL_FAILURE(CreateNewEmptyFile(testFileId));
    113 
    114  quota::UsageInfo usageNow;
    115  ASSERT_NO_FATAL_FAILURE(GetDatabaseUsage(usageNow));
    116  ASSERT_NO_FATAL_FAILURE(CheckUsageGreaterThan(usageNow, 0u));
    117 
    118  uint64_t initialDbUsage;
    119  ASSERT_NO_FATAL_FAILURE(GetUsageValue(usageNow, initialDbUsage));
    120 
    121  ASSERT_NO_FATAL_FAILURE(GetOriginUsage(usageNow));
    122  ASSERT_NO_FATAL_FAILURE(CheckUsageEqualTo(usageNow, initialDbUsage));
    123 
    124  // Fill the file with some content
    125  ASSERT_NO_FATAL_FAILURE(LockExclusive(testFileId));
    126 
    127  const nsCString& testData = GetTestData();
    128 
    129  ASSERT_NO_FATAL_FAILURE(WriteDataToFile(testFileId, testData));
    130 
    131  ASSERT_NO_FATAL_FAILURE(UnlockExclusive(testFileId));
    132 
    133  // After the file has been unlocked,
    134  // * database usage has increased
    135  // * GetDatabaseUsage and GetOriginUsage should now agree
    136  const auto increasedDbUsage = initialDbUsage + testData.Length();
    137 
    138  ASSERT_NO_FATAL_FAILURE(GetDatabaseUsage(usageNow));
    139  ASSERT_NO_FATAL_FAILURE(CheckUsageEqualTo(usageNow, increasedDbUsage));
    140 
    141  ASSERT_NO_FATAL_FAILURE(GetOriginUsage(usageNow));
    142  ASSERT_NO_FATAL_FAILURE(CheckUsageEqualTo(usageNow, increasedDbUsage));
    143 
    144  // Remove the file
    145  bool wasRemoved;
    146  ASSERT_NO_FATAL_FAILURE(RemoveFile(wasRemoved));
    147  ASSERT_TRUE(wasRemoved);
    148 
    149  // After the file has been removed,
    150  // * database usage has decreased (to the initial value)
    151  // * GetDatabaseUsage and GetOriginUsage should agree
    152  ASSERT_NO_FATAL_FAILURE(GetDatabaseUsage(usageNow));
    153  ASSERT_NO_FATAL_FAILURE(CheckUsageEqualTo(usageNow, initialDbUsage));
    154 
    155  ASSERT_NO_FATAL_FAILURE(GetOriginUsage(usageNow));
    156  ASSERT_NO_FATAL_FAILURE(CheckUsageEqualTo(usageNow, initialDbUsage));
    157 }
    158 
    159 }  // namespace mozilla::dom::fs::test