| // Copyright 2018 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 "peridot/lib/testing/test_with_session_storage.h" |
| |
| namespace modular { |
| namespace testing { |
| |
| TestWithSessionStorage::TestWithSessionStorage() = default; |
| TestWithSessionStorage::~TestWithSessionStorage() = default; |
| |
| std::unique_ptr<SessionStorage> TestWithSessionStorage::MakeSessionStorage( |
| std::string ledger_page) { |
| auto page_id = MakePageId(ledger_page); |
| return std::make_unique<SessionStorage>(ledger_client(), page_id); |
| } |
| |
| std::unique_ptr<StoryStorage> TestWithSessionStorage::GetStoryStorage( |
| SessionStorage* const storage, std::string story_id) { |
| std::unique_ptr<StoryStorage> story_storage; |
| bool done{}; |
| storage->GetStoryStorage(story_id)->Then( |
| [&](std::unique_ptr<StoryStorage> result) { |
| FXL_DCHECK(result); |
| story_storage = std::move(result); |
| done = true; |
| }); |
| RunLoopUntil([&] { return done; }); |
| |
| return story_storage; |
| } |
| |
| fidl::StringPtr TestWithSessionStorage::CreateStory( |
| SessionStorage* const storage) { |
| auto future_story = |
| storage->CreateStory(nullptr /* extra */, {} /* story_options */); |
| bool done{}; |
| fidl::StringPtr story_id; |
| future_story->Then([&](fidl::StringPtr id, fuchsia::ledger::PageId) { |
| done = true; |
| story_id = std::move(id); |
| }); |
| RunLoopUntil([&] { return done; }); |
| |
| return story_id; |
| } |
| |
| void TestWithSessionStorage::SetLinkValue(StoryStorage* const story_storage, |
| const std::string& link_name, |
| const std::string& link_value) { |
| SetLinkValue(story_storage, MakeLinkPath(link_name), link_value); |
| } |
| |
| void TestWithSessionStorage::SetLinkValue( |
| StoryStorage* const story_storage, |
| const fuchsia::modular::LinkPath& link_path, |
| const std::string& link_value) { |
| bool done{}; |
| int context; |
| story_storage |
| ->UpdateLinkValue(link_path, |
| [&](fidl::StringPtr* value) { *value = link_value; }, |
| &context) |
| ->Then([&](StoryStorage::Status status) { |
| ASSERT_EQ(status, StoryStorage::Status::OK); |
| done = true; |
| }); |
| RunLoopUntil([&] { return done; }); |
| } |
| |
| void TestWithSessionStorage::WriteModuleData( |
| StoryStorage* const story_storage, |
| fuchsia::modular::ModuleData module_data) { |
| bool done{}; |
| story_storage->WriteModuleData(std::move(module_data))->Then([&] { |
| done = true; |
| }); |
| RunLoopUntil([&] { return done; }); |
| } |
| |
| std::string TestWithSessionStorage::GetLinkValue( |
| StoryStorage* const story_storage, const std::string& link_name) { |
| return GetLinkValue(story_storage, MakeLinkPath(link_name)); |
| } |
| |
| std::string TestWithSessionStorage::GetLinkValue( |
| StoryStorage* const story_storage, const fuchsia::modular::LinkPath& path) { |
| bool done{}; |
| std::string value; |
| story_storage->GetLinkValue(path)->Then( |
| [&](StoryStorage::Status status, fidl::StringPtr v) { |
| value = *v; |
| done = true; |
| }); |
| RunLoopUntil([&] { return done; }); |
| return value; |
| } |
| |
| fuchsia::modular::LinkPath TestWithSessionStorage::MakeLinkPath( |
| const std::string& name) { |
| fuchsia::modular::LinkPath path; |
| path.link_name = name; |
| return path; |
| } |
| |
| } // namespace testing |
| } // namespace modular |