blob: 37f43e34ff25f32b930f8ae32869cdedff0b5411 [file] [log] [blame]
// Copyright 2017 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/cloud_provider_in_memory/lib/fake_cloud_provider.h"
#include "src/ledger/lib/convert/convert.h"
#include "src/ledger/lib/rng/random.h"
namespace ledger {
FakeCloudProvider::Builder::Builder(async_dispatcher_t* dispatcher, Random* random)
: dispatcher_(dispatcher), random_(random) {}
FakeCloudProvider::Builder::~Builder() = default;
FakeCloudProvider::Builder& FakeCloudProvider::Builder::SetInjectNetworkError(
InjectNetworkError inject_network_error) {
inject_network_error_ = inject_network_error;
return *this;
}
FakeCloudProvider::Builder& FakeCloudProvider::Builder::SetInjectMissingDiff(
InjectMissingDiff inject_missing_diff) {
inject_missing_diff_ = inject_missing_diff;
return *this;
}
FakeCloudProvider::Builder& FakeCloudProvider::Builder::SetCloudEraseOnCheck(
CloudEraseOnCheck cloud_erase_on_check) {
cloud_erase_on_check_ = cloud_erase_on_check;
return *this;
}
FakeCloudProvider::Builder& FakeCloudProvider::Builder::SetCloudEraseFromWatcher(
CloudEraseFromWatcher cloud_erase_from_watcher) {
cloud_erase_from_watcher_ = cloud_erase_from_watcher;
return *this;
}
FakeCloudProvider::Builder& FakeCloudProvider::Builder::SetOnWatcherSet(
fit::closure on_watcher_set) {
on_watcher_set_ = std::move(on_watcher_set);
return *this;
}
std::unique_ptr<FakeCloudProvider> FakeCloudProvider::Builder::Build() && {
return std::make_unique<FakeCloudProvider>(std::move(*this));
}
FakeCloudProvider::FakeCloudProvider(Builder&& builder)
: dispatcher_(builder.dispatcher_),
random_(builder.random_),
device_set_(builder.cloud_erase_on_check_, builder.cloud_erase_from_watcher_,
std::move(builder.on_watcher_set_)),
page_clouds_(builder.dispatcher_),
inject_network_error_(builder.inject_network_error_),
inject_missing_diff_(builder.inject_missing_diff_) {}
FakeCloudProvider::FakeCloudProvider(async_dispatcher_t* dispatcher, Random* random)
: FakeCloudProvider(Builder(dispatcher, random)) {}
FakeCloudProvider::~FakeCloudProvider() = default;
void FakeCloudProvider::GetDeviceSet(fidl::InterfaceRequest<cloud_provider::DeviceSet> device_set,
GetDeviceSetCallback callback) {
device_set_.AddBinding(std::move(device_set));
callback(cloud_provider::Status::OK);
}
void FakeCloudProvider::GetPageCloud(std::vector<uint8_t> app_id, std::vector<uint8_t> page_id,
fidl::InterfaceRequest<cloud_provider::PageCloud> page_cloud,
GetPageCloudCallback callback) {
const std::string key = convert::ToString(app_id) + "_" + convert::ToString(page_id);
auto ret = page_clouds_.try_emplace(std::move(key), dispatcher_, random_, inject_network_error_,
inject_missing_diff_);
ret.first->second.Bind(std::move(page_cloud));
callback(cloud_provider::Status::OK);
}
} // namespace ledger