blob: f74bc9fb52b583d55493b60a776d387644e0265a [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/app/page_delegate.h"
#include <fuchsia/ledger/cpp/fidl.h>
#include "gtest/gtest.h"
#include "src/ledger/bin/app/active_page_manager.h"
#include "src/ledger/bin/app/merging/merge_resolver.h"
#include "src/ledger/bin/storage/fake/fake_page_storage.h"
#include "src/ledger/bin/testing/test_with_environment.h"
#include "src/ledger/lib/backoff/exponential_backoff.h"
#include "src/ledger/lib/callback/capture.h"
#include "src/ledger/lib/callback/set_when_called.h"
namespace ledger {
namespace {
using PageDelegateTest = TestWithEnvironment;
TEST_F(PageDelegateTest, OnDiscardableInInit) {
auto page_id = storage::PageId(::fuchsia::ledger::PAGE_ID_SIZE, 'a');
auto storage = std::make_unique<storage::fake::FakePageStorage>(&environment_, page_id);
auto storage_ptr = storage.get();
auto merger = std::make_unique<MergeResolver>(
[] {}, &environment_, storage_ptr,
std::make_unique<ExponentialBackoff>(zx::sec(0), 1u, zx::sec(0),
environment_.random()->NewBitGenerator<uint64_t>()));
auto merger_ptr = merger.get();
ActivePageManager active_page_manager(&environment_, std::move(storage), nullptr,
std::move(merger),
ActivePageManager::PageStorageState::NEEDS_SYNC);
PagePtr page;
auto page_impl =
std::make_unique<PageImpl>(environment_.dispatcher(), page_id, page.NewRequest());
SyncWatcherSet watchers(environment_.dispatcher());
PageDelegate delegate(&environment_, &active_page_manager, storage_ptr, merger_ptr, &watchers,
std::move(page_impl));
bool on_discardable_called;
delegate.SetOnDiscardable(SetWhenCalled(&on_discardable_called));
// Setup is finished: let's unbind the page
page.Unbind();
RunLoopUntilIdle();
bool on_done_called;
Status status;
delegate.Init(Capture(SetWhenCalled(&on_done_called), &status));
RunLoopUntilIdle();
EXPECT_TRUE(on_done_called);
EXPECT_TRUE(on_discardable_called);
}
} // namespace
} // namespace ledger