chromium/components/reporting/storage/storage_unittest.cc

// Copyright 2020 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifdef UNSAFE_BUFFERS_BUILD
// TODO(crbug.com/40285824): Remove this and convert code to safer constructs.
#pragma allow_unsafe_buffers
#endif

#include "components/reporting/storage/storage.h"

#include <atomic>
#include <cstdint>
#include <optional>
#include <tuple>
#include <utility>

#include "base/containers/flat_map.h"
#include "base/files/scoped_temp_dir.h"
#include "base/functional/callback_helpers.h"
#include "base/memory/raw_ptr.h"
#include "base/strings/strcat.h"
#include "base/strings/string_number_conversions.h"
#include "base/task/sequenced_task_runner.h"
#include "base/task/thread_pool.h"
#include "base/test/scoped_feature_list.h"
#include "base/test/task_environment.h"
#include "base/threading/sequence_bound.h"
#include "base/types/expected.h"
#include "base/types/expected_macros.h"
#include "components/reporting/compression/compression_module.h"
#include "components/reporting/compression/test_compression_module.h"
#include "components/reporting/encryption/decryption.h"
#include "components/reporting/encryption/encryption.h"
#include "components/reporting/encryption/encryption_module.h"
#include "components/reporting/encryption/encryption_module_interface.h"
#include "components/reporting/encryption/test_encryption_module.h"
#include "components/reporting/encryption/testing_primitives.h"
#include "components/reporting/proto/synced/record.pb.h"
#include "components/reporting/proto/synced/record_constants.pb.h"
#include "components/reporting/resources/resource_manager.h"
#include "components/reporting/storage/storage_configuration.h"
#include "components/reporting/storage/storage_uploader_interface.h"
#include "components/reporting/util/status.h"
#include "components/reporting/util/status_macros.h"
#include "components/reporting/util/statusor.h"
#include "components/reporting/util/test_support_callbacks.h"
#include "crypto/sha2.h"
#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"

_;
AtLeast;
AtMost;
Between;
DoAll;
Eq;
Gt;
HasSubstr;
Invoke;
Property;
Return;
Sequence;
StrEq;
WithArg;
WithoutArgs;

namespace reporting {
namespace {

// Test uploader counter - for generation of unique ids.
std::atomic<int64_t> next_uploader_id{};
// Maximum length of debug data prints to prevent excessive output.
static constexpr size_t kDebugDataPrintSize =;

// Storage options to be used in tests.
class TestStorageOptions : public StorageOptions {};

// Context of single decryption. Self-destructs upon completion or failure.
class SingleDecryptionContext {};

class StorageTest
    : public ::testing::TestWithParam<::testing::tuple<bool, size_t, bool>> {};

constexpr std::array<const char*, 3> kData =;
constexpr std::array<const char*, 3> kMoreData =;
constexpr std::array<char, (1024 * 1024 / 3) * 2> kBigData =;
constexpr std::string_view xBigData(&kBigData.front(), kBigData.size());

TEST_P(StorageTest, WriteIntoNewStorageAndReopen) {}

TEST_P(StorageTest, WriteIntoNewStorageReopenAndWriteMore) {}

TEST_P(StorageTest, WriteIntoNewStorageAndUpload) {}

TEST_P(StorageTest, WriteIntoNewStorageAndUploadWithKeyUpdate) {}

TEST_P(StorageTest, WriteIntoNewStorageReopenWriteMoreAndUpload) {}

TEST_P(StorageTest, WriteIntoNewStorageAndFlush) {}

TEST_P(StorageTest, WriteIntoNewStorageReopenWriteMoreAndFlush) {}

TEST_P(StorageTest, WriteAndRepeatedlyUploadWithConfirmations) {}

TEST_P(StorageTest, WriteAndUploadWithBadConfirmation) {}

TEST_P(StorageTest, WriteAndRepeatedlySecurityUpload) {}

TEST_P(StorageTest, WriteAndRepeatedlyImmediateUpload) {}

TEST_P(StorageTest, WriteAndRepeatedlyImmediateUploadWithConfirmations) {}

TEST_P(StorageTest, WriteAndRepeatedlyUploadMultipleQueues) {}

TEST_P(StorageTest, WriteAndImmediateUploadWithFailure) {}

TEST_P(StorageTest, WriteEncryptFailure) {}

TEST_P(StorageTest, ForceConfirm) {}

TEST_P(StorageTest, KeyDeliveryFailureOnNewStorage) {}

// Test no available files to delete
TEST_P(StorageTest, WriteAttemptWithRecordsSheddingFailure) {}

// Test Available files to delete in multiple queues
TEST_P(StorageTest, WriteAttemptWithRecordsSheddingSuccess) {}

// Test Security queue cant_shed_records option
TEST_P(StorageTest, RecordsSheddingSecurityCantShedRecords) {}

INSTANTIATE_TEST_SUITE_P();

}  // namespace
}  // namespace reporting