| // Copyright 2020 The Chromium OS 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 "vm_tools/concierge/dlc_helper.h" |
| |
| #include <gmock/gmock.h> |
| #include <gtest/gtest.h> |
| #include <memory> |
| #include <utility> |
| |
| #include "base/memory/scoped_refptr.h" |
| #include "base/optional.h" |
| #include "dlcservice/proto_bindings/dlcservice.pb.h" |
| #include "dlcservice/dbus-proxy-mocks.h" //NOLINT (build/include_alpha) |
| |
| using ::testing::_; |
| |
| namespace vm_tools { |
| namespace concierge { |
| namespace { |
| |
| class DlcHelperTest : public testing::Test { |
| protected: |
| using MockHandlePtr = |
| std::unique_ptr<org::chromium::DlcServiceInterfaceProxyMock>; |
| |
| MockHandlePtr GetMockHandle() { |
| return std::make_unique<org::chromium::DlcServiceInterfaceProxyMock>(); |
| } |
| }; |
| |
| TEST_F(DlcHelperTest, FailureImpliesNulloptAndError) { |
| MockHandlePtr handle = GetMockHandle(); |
| EXPECT_CALL(*handle, GetDlcState(_, _, _, _)) |
| .WillOnce(testing::Invoke( |
| [](const std::string& in_id, dlcservice::DlcState* out_state, |
| brillo::ErrorPtr* error, |
| int /*timeout_ms*/) -> bool { return false; })); |
| |
| DlcHelper helper(std::move(handle)); |
| std::string error; |
| |
| EXPECT_TRUE(error.empty()); |
| EXPECT_FALSE(helper.GetRootPath("foobar", &error).has_value()); |
| EXPECT_FALSE(error.empty()); |
| } |
| |
| TEST_F(DlcHelperTest, NotInstalledImpliesNulloptAndError) { |
| MockHandlePtr handle = GetMockHandle(); |
| EXPECT_CALL(*handle, GetDlcState(_, _, _, _)) |
| .WillOnce(testing::Invoke( |
| [](const std::string& in_id, dlcservice::DlcState* out_state, |
| brillo::ErrorPtr* error, int /*timeout_ms*/) -> bool { |
| out_state->set_state(dlcservice::DlcState_State_INSTALLING); |
| return true; |
| })); |
| |
| DlcHelper helper(std::move(handle)); |
| std::string error; |
| |
| EXPECT_TRUE(error.empty()); |
| EXPECT_FALSE(helper.GetRootPath("foobar", &error).has_value()); |
| EXPECT_FALSE(error.empty()); |
| } |
| |
| TEST_F(DlcHelperTest, InstalledReturnsRootPath) { |
| MockHandlePtr handle = GetMockHandle(); |
| EXPECT_CALL(*handle, GetDlcState(_, _, _, _)) |
| .WillOnce(testing::Invoke( |
| [](const std::string& in_id, dlcservice::DlcState* out_state, |
| brillo::ErrorPtr* error, int /*timeout_ms*/) -> bool { |
| EXPECT_EQ(in_id, "foobar"); |
| out_state->set_state(dlcservice::DlcState_State_INSTALLED); |
| out_state->set_root_path("/path/to/dlc/root"); |
| return true; |
| })); |
| |
| DlcHelper helper(std::move(handle)); |
| std::string error; |
| base::Optional<std::string> root_path = helper.GetRootPath("foobar", &error); |
| |
| EXPECT_TRUE(error.empty()); |
| EXPECT_TRUE(root_path.has_value()); |
| EXPECT_EQ(root_path.value(), "/path/to/dlc/root"); |
| } |
| |
| } // namespace |
| } // namespace concierge |
| } // namespace vm_tools |