blob: 79a9d6258aa09553e5445568a210aba087d71523 [file] [log] [blame]
// 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 "src/developer/forensics/utils/fidl/device_id_provider_ptr.h"
#include <lib/async/cpp/executor.h>
#include <lib/fpromise/result.h>
#include <optional>
#include <string>
#include <gmock/gmock.h>
#include <gtest/gtest.h>
#include "src/developer/forensics/testing/stubs/device_id_provider.h"
#include "src/developer/forensics/testing/unit_test_fixture.h"
namespace forensics {
namespace fidl {
namespace {
constexpr zx::duration kDefaultTimeout = zx::sec(35);
constexpr char kDefaultDeviceId[] = "device_id";
class DeviceIdProviderPtrTest : public UnitTestFixture {
public:
DeviceIdProviderPtrTest()
: UnitTestFixture(),
executor_(dispatcher()),
device_id_provider_ptr_(dispatcher(), services()) {}
protected:
void SetUpDeviceIdProviderServer(
std::unique_ptr<stubs::DeviceIdProviderBase> device_id_provider_server) {
device_id_provider_server_ = std::move(device_id_provider_server);
if (device_id_provider_server_) {
InjectServiceProvider(device_id_provider_server_.get());
}
}
std::optional<std::string> GetId() {
bool is_called = false;
std::optional<std::string> device_id = std::nullopt;
executor_.schedule_task(device_id_provider_ptr_.GetId(kDefaultTimeout)
.then([&](::fpromise::result<std::string, Error>& result) {
is_called = true;
if (result.is_ok()) {
device_id = result.take_value();
}
}));
RunLoopUntilIdle();
FX_CHECK(is_called) << "The promise chain was never executed";
return device_id;
}
async::Executor executor_;
DeviceIdProviderPtr device_id_provider_ptr_;
std::unique_ptr<stubs::DeviceIdProviderBase> device_id_provider_server_;
};
TEST_F(DeviceIdProviderPtrTest, Check_CachedDeviceIdReturned) {
SetUpDeviceIdProviderServer(std::make_unique<stubs::DeviceIdProvider>(kDefaultDeviceId));
RunLoopUntilIdle();
const std::optional<std::string> id = GetId();
ASSERT_TRUE(id.has_value());
EXPECT_EQ(id.value(), kDefaultDeviceId);
}
} // namespace
} // namespace fidl
} // namespace forensics