blob: 237bf1c5e25ce9cdd3f15a7a47a30c615d2e51a8 [file] [log] [blame]
// Copyright 2019 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "src/ledger/bin/cloud_sync/impl/ledger_sync_impl.h"
#include <lib/gtest/test_loop_fixture.h>
#include "peridot/lib/scoped_tmpfs/scoped_tmpfs.h"
#include "src/ledger/bin/cloud_sync/impl/testing/test_cloud_provider.h"
#include "src/ledger/bin/cloud_sync/impl/testing/test_page_storage.h"
#include "src/ledger/bin/encryption/fake/fake_encryption_service.h"
#include "src/ledger/bin/testing/test_with_environment.h"
#include "src/lib/callback/capture.h"
#include "src/lib/callback/set_when_called.h"
namespace cloud_sync {
namespace {
class TestSyncStateWatcher : public SyncStateWatcher {
public:
TestSyncStateWatcher() = default;
~TestSyncStateWatcher() override{};
void Notify(SyncStateContainer sync_state) override {
if (!states.empty() && sync_state == *states.rbegin()) {
return;
}
states.push_back(sync_state);
}
std::vector<SyncStateContainer> states;
};
class LedgerSyncImplTest : public ledger::TestWithEnvironment {
public:
LedgerSyncImplTest()
: cloud_provider_(cloud_provider_ptr_.NewRequest()), encryption_service_(dispatcher()) {
user_config_.user_directory = ledger::DetachedPath(tmpfs_.root_fd());
user_config_.cloud_provider = std::move(cloud_provider_ptr_);
ledger_sync_ = std::make_unique<LedgerSyncImpl>(&environment_, &user_config_,
&encryption_service_, "test_app_id", nullptr);
}
~LedgerSyncImplTest() override {}
protected:
scoped_tmpfs::ScopedTmpFS tmpfs_;
std::unique_ptr<LedgerSyncImpl> ledger_sync_;
cloud_provider::CloudProviderPtr cloud_provider_ptr_;
TestCloudProvider cloud_provider_;
encryption::FakeEncryptionService encryption_service_;
UserConfig user_config_;
private:
FXL_DISALLOW_COPY_AND_ASSIGN(LedgerSyncImplTest);
};
TEST_F(LedgerSyncImplTest, CreatePageSync) {
auto page_storage = std::make_unique<TestPageStorage>(dispatcher());
page_storage->page_id_to_return = "test_page";
bool called;
storage::Status status;
std::unique_ptr<PageSync> page_sync;
ledger_sync_->CreatePageSync(
page_storage.get(), page_storage.get(),
callback::Capture(callback::SetWhenCalled(&called), &status, &page_sync));
RunLoopUntilIdle();
EXPECT_TRUE(called);
EXPECT_EQ(status, storage::Status::OK);
EXPECT_TRUE(page_sync);
EXPECT_TRUE(page_sync->IsPaused());
ASSERT_EQ(cloud_provider_.page_ids_requested.size(), 1u);
// Page id must be obfuscated in the cloud.
EXPECT_NE(cloud_provider_.page_ids_requested[0u], page_storage->page_id_to_return);
}
} // namespace
} // namespace cloud_sync