#ifdef UNSAFE_BUFFERS_BUILD
#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 {
std::atomic<int64_t> next_uploader_id{ … };
static constexpr size_t kDebugDataPrintSize = …;
class TestStorageOptions : public StorageOptions { … };
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_P(StorageTest, WriteAttemptWithRecordsSheddingFailure) { … }
TEST_P(StorageTest, WriteAttemptWithRecordsSheddingSuccess) { … }
TEST_P(StorageTest, RecordsSheddingSecurityCantShedRecords) { … }
INSTANTIATE_TEST_SUITE_P(…);
}
}