Xiaochu Liu | c2b65f5 | 2018-07-20 12:47:05 -0700 | [diff] [blame] | 1 | // Copyright 2018 The Chromium OS Authors. All rights reserved. |
| 2 | // Use of this source code is governed by a BSD-style license that can be |
| 3 | // found in the LICENSE file. |
| 4 | |
| 5 | #include <utility> |
Jae Hoon Kim | 80075fb | 2019-07-24 12:35:58 -0700 | [diff] [blame] | 6 | #include <vector> |
Xiaochu Liu | c2b65f5 | 2018-07-20 12:47:05 -0700 | [diff] [blame] | 7 | |
| 8 | #include <base/files/file_path.h> |
| 9 | #include <base/files/file_util.h> |
Amin Hassani | f656f29 | 2020-06-08 16:20:01 -0700 | [diff] [blame] | 10 | #include <base/test/simple_test_clock.h> |
Jae Hoon Kim | b2baf58 | 2019-11-12 17:00:57 -0800 | [diff] [blame] | 11 | #include <brillo/message_loops/message_loop_utils.h> |
Jae Hoon Kim | fdaa53a | 2020-03-13 11:28:36 -0700 | [diff] [blame] | 12 | #include <dbus/dlcservice/dbus-constants.h> |
Xiaochu Liu | d0184e3 | 2018-10-19 17:21:33 -0700 | [diff] [blame] | 13 | #include <dlcservice/proto_bindings/dlcservice.pb.h> |
Amin Hassani | 7be4da4 | 2019-06-21 16:36:15 -0700 | [diff] [blame] | 14 | #include <update_engine/proto_bindings/update_engine.pb.h> |
Andrew | 6a55cf4 | 2020-01-02 15:01:36 -0800 | [diff] [blame] | 15 | #include <gmock/gmock.h> |
Xiaochu Liu | c2b65f5 | 2018-07-20 12:47:05 -0700 | [diff] [blame] | 16 | #include <gtest/gtest.h> |
Xiaochu Liu | c2b65f5 | 2018-07-20 12:47:05 -0700 | [diff] [blame] | 17 | |
Amin Hassani | 8664998 | 2020-03-31 16:03:37 -0700 | [diff] [blame] | 18 | #include "dlcservice/dlc.h" |
Amin Hassani | c4cc1ee | 2019-11-14 11:51:35 -0800 | [diff] [blame] | 19 | #include "dlcservice/dlc_service.h" |
Jae Hoon Kim | 7d0001e | 2021-07-07 13:04:40 -0700 | [diff] [blame] | 20 | #include "dlcservice/mock_dlc_manager.h" |
Jae Hoon Kim | 9a27d15 | 2020-04-10 12:50:14 -0700 | [diff] [blame] | 21 | #include "dlcservice/prefs.h" |
Amin Hassani | 10c8c6c | 2020-04-06 12:28:59 -0700 | [diff] [blame] | 22 | #include "dlcservice/test_utils.h" |
Xiaochu Liu | 6da1727 | 2018-11-06 14:04:01 -0800 | [diff] [blame] | 23 | #include "dlcservice/utils.h" |
Xiaochu Liu | c2b65f5 | 2018-07-20 12:47:05 -0700 | [diff] [blame] | 24 | |
Jae Hoon Kim | c98e3a3 | 2020-03-13 09:40:48 -0700 | [diff] [blame] | 25 | using brillo::ErrorPtr; |
Andrew | 0a534ed | 2020-05-06 09:59:17 -0700 | [diff] [blame] | 26 | using dlcservice::metrics::InstallResult; |
Andrew | 2eb9554 | 2020-06-24 14:51:49 -0700 | [diff] [blame] | 27 | using dlcservice::metrics::UninstallResult; |
Jae Hoon Kim | c7beafd | 2019-07-22 18:14:47 -0700 | [diff] [blame] | 28 | using std::string; |
Jae Hoon Kim | 80075fb | 2019-07-24 12:35:58 -0700 | [diff] [blame] | 29 | using std::vector; |
Jae Hoon Kim | 69cda48 | 2019-07-18 14:36:22 -0700 | [diff] [blame] | 30 | using testing::_; |
Mike Frysinger | 0cc1856 | 2021-01-04 02:16:54 -0500 | [diff] [blame] | 31 | using testing::DoAll; |
Amin Hassani | 8664998 | 2020-03-31 16:03:37 -0700 | [diff] [blame] | 32 | using testing::ElementsAre; |
Amin Hassani | f2efc5a | 2020-05-25 21:22:57 -0700 | [diff] [blame] | 33 | using testing::Invoke; |
Jae Hoon Kim | c7beafd | 2019-07-22 18:14:47 -0700 | [diff] [blame] | 34 | using testing::Return; |
| 35 | using testing::SetArgPointee; |
Jae Hoon Kim | a170cfb | 2020-03-11 09:02:29 -0700 | [diff] [blame] | 36 | using testing::StrictMock; |
Amin Hassani | f2efc5a | 2020-05-25 21:22:57 -0700 | [diff] [blame] | 37 | using testing::WithArg; |
| 38 | using testing::WithArgs; |
Jae Hoon Kim | 80075fb | 2019-07-24 12:35:58 -0700 | [diff] [blame] | 39 | using update_engine::Operation; |
| 40 | using update_engine::StatusResult; |
Jae Hoon Kim | 69cda48 | 2019-07-18 14:36:22 -0700 | [diff] [blame] | 41 | |
Xiaochu Liu | c2b65f5 | 2018-07-20 12:47:05 -0700 | [diff] [blame] | 42 | namespace dlcservice { |
| 43 | |
Amin Hassani | 10c8c6c | 2020-04-06 12:28:59 -0700 | [diff] [blame] | 44 | class DlcServiceTest : public BaseTest { |
Xiaochu Liu | c2b65f5 | 2018-07-20 12:47:05 -0700 | [diff] [blame] | 45 | public: |
Amin Hassani | 10c8c6c | 2020-04-06 12:28:59 -0700 | [diff] [blame] | 46 | DlcServiceTest() = default; |
| 47 | |
| 48 | void SetUp() override { |
Amin Hassani | 10c8c6c | 2020-04-06 12:28:59 -0700 | [diff] [blame] | 49 | BaseTest::SetUp(); |
Amin Hassani | ef35a38 | 2020-04-03 12:58:45 -0700 | [diff] [blame] | 50 | |
Amin Hassani | ca3cbb7 | 2020-04-10 12:26:50 -0700 | [diff] [blame] | 51 | InitializeDlcService(); |
Jae Hoon Kim | e70e24a | 2019-12-17 16:24:14 -0800 | [diff] [blame] | 52 | } |
| 53 | |
Amin Hassani | ca3cbb7 | 2020-04-10 12:26:50 -0700 | [diff] [blame] | 54 | void InitializeDlcService() { |
Amin Hassani | ef35a38 | 2020-04-03 12:58:45 -0700 | [diff] [blame] | 55 | EXPECT_CALL(*mock_update_engine_proxy_ptr_, |
| 56 | DoRegisterStatusUpdateAdvancedSignalHandler(_, _)) |
| 57 | .Times(1); |
Amin Hassani | 759090b | 2020-04-13 12:31:10 -0700 | [diff] [blame] | 58 | EXPECT_CALL(*mock_session_manager_proxy_ptr_, |
| 59 | DoRegisterSessionStateChangedSignalHandler(_, _)) |
| 60 | .Times(1); |
Amin Hassani | ef35a38 | 2020-04-03 12:58:45 -0700 | [diff] [blame] | 61 | |
Jae Hoon Kim | f4eed88 | 2020-01-28 17:29:16 -0800 | [diff] [blame] | 62 | dlc_service_ = std::make_unique<DlcService>(); |
Amin Hassani | ca3cbb7 | 2020-04-10 12:26:50 -0700 | [diff] [blame] | 63 | dlc_service_->Initialize(); |
Amin Hassani | f656f29 | 2020-06-08 16:20:01 -0700 | [diff] [blame] | 64 | |
| 65 | StatusResult status; |
| 66 | status.set_current_operation(Operation::IDLE); |
| 67 | EXPECT_CALL(*mock_update_engine_proxy_ptr_, GetStatusAdvanced(_, _, _)) |
| 68 | .WillOnce(DoAll(SetArgPointee<0>(status), Return(true))); |
| 69 | // To set the update_engine status for the first time. |
| 70 | dlc_service_->OnStatusUpdateAdvancedSignalConnected("", "", true); |
Jae Hoon Kim | 69cda48 | 2019-07-18 14:36:22 -0700 | [diff] [blame] | 71 | } |
| 72 | |
Andrew | 0a534ed | 2020-05-06 09:59:17 -0700 | [diff] [blame] | 73 | // Successfully install a DLC. |
Amin Hassani | 6d0367d | 2020-05-10 18:07:03 -0700 | [diff] [blame] | 74 | void Install(const DlcId& id) { |
Amin Hassani | 111f2bc | 2020-04-17 11:53:32 -0700 | [diff] [blame] | 75 | EXPECT_CALL(*mock_update_engine_proxy_ptr_, AttemptInstall(_, _, _, _)) |
Amin Hassani | f2efc5a | 2020-05-25 21:22:57 -0700 | [diff] [blame] | 76 | .WillOnce(DoAll( |
| 77 | WithArg<1>(Invoke(this, &DlcServiceTest::InstallWithUpdateEngine)), |
| 78 | WithArgs<1, 2>( |
| 79 | Invoke(dlc_service_.get(), &DlcService::InstallCompleted)), |
| 80 | Return(true))); |
Amin Hassani | 6d0367d | 2020-05-10 18:07:03 -0700 | [diff] [blame] | 81 | EXPECT_CALL(*mock_image_loader_proxy_ptr_, LoadDlcImage(id, _, _, _, _, _)) |
| 82 | .WillOnce(DoAll(SetArgPointee<3>(mount_path_.value()), Return(true))); |
Amin Hassani | 78a5ec8 | 2020-05-19 09:47:49 -0700 | [diff] [blame] | 83 | EXPECT_CALL(mock_state_change_reporter_, DlcStateChanged(_)).Times(2); |
Amin Hassani | 9a3f20c | 2020-05-25 16:38:33 -0700 | [diff] [blame] | 84 | EXPECT_CALL(*mock_update_engine_proxy_ptr_, |
| 85 | SetDlcActiveValue(true, id, _, _)) |
| 86 | .WillOnce(Return(true)); |
Andrew | 0a534ed | 2020-05-06 09:59:17 -0700 | [diff] [blame] | 87 | EXPECT_CALL(*mock_metrics_, |
| 88 | SendInstallResult(InstallResult::kSuccessNewInstall)); |
Jae Hoon Kim | 0d057fb | 2020-04-13 17:44:38 -0700 | [diff] [blame] | 89 | |
Amin Hassani | 6d0367d | 2020-05-10 18:07:03 -0700 | [diff] [blame] | 90 | EXPECT_TRUE(dlc_service_->Install(id, kDefaultOmahaUrl, &err_)); |
Amin Hassani | f2efc5a | 2020-05-25 21:22:57 -0700 | [diff] [blame] | 91 | |
| 92 | CheckDlcState(id, DlcState::INSTALLING); |
Jae Hoon Kim | 0d057fb | 2020-04-13 17:44:38 -0700 | [diff] [blame] | 93 | |
Jae Hoon Kim | 0d057fb | 2020-04-13 17:44:38 -0700 | [diff] [blame] | 94 | StatusResult status_result; |
| 95 | status_result.set_is_install(true); |
| 96 | status_result.set_current_operation(Operation::IDLE); |
| 97 | dlc_service_->OnStatusUpdateAdvancedSignal(status_result); |
| 98 | |
Amin Hassani | 6d0367d | 2020-05-10 18:07:03 -0700 | [diff] [blame] | 99 | CheckDlcState(id, DlcState::INSTALLED); |
Amin Hassani | ef35a38 | 2020-04-03 12:58:45 -0700 | [diff] [blame] | 100 | } |
| 101 | |
Andrew | 48a55f2 | 2020-06-17 06:50:04 -0700 | [diff] [blame] | 102 | void CheckDlcState(const DlcId& id, |
| 103 | const DlcState::State& expected_state, |
| 104 | const string& error_code = kErrorNone) { |
Amin Hassani | 1ac2831 | 2020-06-04 18:16:30 -0700 | [diff] [blame] | 105 | const auto* dlc = dlc_service_->GetDlc(id, &err_); |
Amin Hassani | b2f139c | 2020-05-15 11:43:26 -0700 | [diff] [blame] | 106 | EXPECT_NE(dlc, nullptr); |
| 107 | EXPECT_EQ(expected_state, dlc->GetState().state()); |
Andrew | 48a55f2 | 2020-06-17 06:50:04 -0700 | [diff] [blame] | 108 | EXPECT_EQ(dlc->GetState().last_error_code(), error_code.c_str()); |
Amin Hassani | 10c8c6c | 2020-04-06 12:28:59 -0700 | [diff] [blame] | 109 | } |
| 110 | |
| 111 | protected: |
Amin Hassani | 10c8c6c | 2020-04-06 12:28:59 -0700 | [diff] [blame] | 112 | std::unique_ptr<DlcService> dlc_service_; |
Amin Hassani | 10c8c6c | 2020-04-06 12:28:59 -0700 | [diff] [blame] | 113 | |
Amin Hassani | ef35a38 | 2020-04-03 12:58:45 -0700 | [diff] [blame] | 114 | private: |
Amin Hassani | 6b010bf | 2020-06-04 17:26:58 -0700 | [diff] [blame] | 115 | DlcServiceTest(const DlcServiceTest&) = delete; |
| 116 | DlcServiceTest& operator=(const DlcServiceTest&) = delete; |
Xiaochu Liu | 46e94b9 | 2018-12-03 14:44:35 -0800 | [diff] [blame] | 117 | }; |
Xiaochu Liu | c2b65f5 | 2018-07-20 12:47:05 -0700 | [diff] [blame] | 118 | |
Amin Hassani | c4cc1ee | 2019-11-14 11:51:35 -0800 | [diff] [blame] | 119 | TEST_F(DlcServiceTest, GetInstalledTest) { |
Amin Hassani | 6d0367d | 2020-05-10 18:07:03 -0700 | [diff] [blame] | 120 | Install(kFirstDlc); |
| 121 | |
Amin Hassani | 8664998 | 2020-03-31 16:03:37 -0700 | [diff] [blame] | 122 | const auto& dlcs = dlc_service_->GetInstalled(); |
Jae Hoon Kim | 97fb05e | 2019-07-31 16:05:58 -0700 | [diff] [blame] | 123 | |
Amin Hassani | 8664998 | 2020-03-31 16:03:37 -0700 | [diff] [blame] | 124 | EXPECT_THAT(dlcs, ElementsAre(kFirstDlc)); |
Amin Hassani | 1ac2831 | 2020-06-04 18:16:30 -0700 | [diff] [blame] | 125 | EXPECT_FALSE( |
| 126 | dlc_service_->GetDlc(kFirstDlc, &err_)->GetRoot().value().empty()); |
Xiaochu Liu | d0184e3 | 2018-10-19 17:21:33 -0700 | [diff] [blame] | 127 | } |
| 128 | |
Amin Hassani | d5fc8b2 | 2020-04-29 12:44:52 -0700 | [diff] [blame] | 129 | TEST_F(DlcServiceTest, GetExistingDlcs) { |
Amin Hassani | 6d0367d | 2020-05-10 18:07:03 -0700 | [diff] [blame] | 130 | Install(kFirstDlc); |
| 131 | |
Amin Hassani | d5fc8b2 | 2020-04-29 12:44:52 -0700 | [diff] [blame] | 132 | SetUpDlcWithSlots(kSecondDlc); |
| 133 | const auto& dlcs = dlc_service_->GetExistingDlcs(); |
| 134 | |
| 135 | EXPECT_THAT(dlcs, ElementsAre(kFirstDlc, kSecondDlc)); |
| 136 | } |
| 137 | |
Amin Hassani | 38f3679 | 2020-04-17 11:47:08 -0700 | [diff] [blame] | 138 | TEST_F(DlcServiceTest, GetDlcsToUpdateTest) { |
Amin Hassani | 6d0367d | 2020-05-10 18:07:03 -0700 | [diff] [blame] | 139 | Install(kFirstDlc); |
| 140 | |
Amin Hassani | f27aac0 | 2020-04-23 21:56:26 -0700 | [diff] [blame] | 141 | // Make second DLC marked as verified so we can get it in the list of DLCs |
| 142 | // needed to be updated. |
| 143 | EXPECT_TRUE(dlc_service_->InstallCompleted({kSecondDlc}, &err_)); |
Amin Hassani | 38f3679 | 2020-04-17 11:47:08 -0700 | [diff] [blame] | 144 | const auto& dlcs = dlc_service_->GetDlcsToUpdate(); |
| 145 | |
Amin Hassani | f27aac0 | 2020-04-23 21:56:26 -0700 | [diff] [blame] | 146 | EXPECT_THAT(dlcs, ElementsAre(kFirstDlc, kSecondDlc)); |
Amin Hassani | 38f3679 | 2020-04-17 11:47:08 -0700 | [diff] [blame] | 147 | } |
| 148 | |
Amin Hassani | f27aac0 | 2020-04-23 21:56:26 -0700 | [diff] [blame] | 149 | TEST_F(DlcServiceTest, GetInstalledMimicDlcserviceRebootWithoutVerifiedStamp) { |
Amin Hassani | 6d0367d | 2020-05-10 18:07:03 -0700 | [diff] [blame] | 150 | Install(kFirstDlc); |
Jae Hoon Kim | 2c61e9e | 2020-04-07 15:03:35 -0700 | [diff] [blame] | 151 | const auto& dlcs_before = dlc_service_->GetInstalled(); |
| 152 | EXPECT_THAT(dlcs_before, ElementsAre(kFirstDlc)); |
Amin Hassani | 1ac2831 | 2020-06-04 18:16:30 -0700 | [diff] [blame] | 153 | EXPECT_FALSE( |
| 154 | dlc_service_->GetDlc(kFirstDlc, &err_)->GetRoot().value().empty()); |
Jae Hoon Kim | 2c61e9e | 2020-04-07 15:03:35 -0700 | [diff] [blame] | 155 | |
Amin Hassani | f27aac0 | 2020-04-23 21:56:26 -0700 | [diff] [blame] | 156 | // Create |kSecondDlc| image, but not verified after device reboot. |
Jae Hoon Kim | 2c61e9e | 2020-04-07 15:03:35 -0700 | [diff] [blame] | 157 | SetUpDlcWithSlots(kSecondDlc); |
| 158 | |
| 159 | const auto& dlcs_after = dlc_service_->GetInstalled(); |
| 160 | EXPECT_THAT(dlcs_after, ElementsAre(kFirstDlc)); |
Jae Hoon Kim | 2c61e9e | 2020-04-07 15:03:35 -0700 | [diff] [blame] | 161 | } |
| 162 | |
Amin Hassani | 40c0f11 | 2020-04-15 09:55:00 -0700 | [diff] [blame] | 163 | TEST_F(DlcServiceTest, UninstallTestForUserDlc) { |
Amin Hassani | 6d0367d | 2020-05-10 18:07:03 -0700 | [diff] [blame] | 164 | Install(kFirstDlc); |
| 165 | |
Jae Hoon Kim | 9090a12 | 2019-12-10 09:55:39 -0800 | [diff] [blame] | 166 | EXPECT_CALL(*mock_image_loader_proxy_ptr_, UnloadDlcImage(_, _, _, _, _)) |
| 167 | .WillOnce(DoAll(SetArgPointee<2>(true), Return(true))); |
Amin Hassani | 40c0f11 | 2020-04-15 09:55:00 -0700 | [diff] [blame] | 168 | // Uninstall should not set the DLC inactive. |
| 169 | EXPECT_CALL(*mock_update_engine_proxy_ptr_, |
| 170 | SetDlcActiveValue(false, kFirstDlc, _, _)) |
| 171 | .Times(0); |
Amin Hassani | 78a5ec8 | 2020-05-19 09:47:49 -0700 | [diff] [blame] | 172 | EXPECT_CALL(mock_state_change_reporter_, DlcStateChanged(_)).Times(1); |
Andrew | 2eb9554 | 2020-06-24 14:51:49 -0700 | [diff] [blame] | 173 | EXPECT_CALL(*mock_metrics_, SendUninstallResult(UninstallResult::kSuccess)); |
Amin Hassani | 78a5ec8 | 2020-05-19 09:47:49 -0700 | [diff] [blame] | 174 | |
Amin Hassani | fe63fc2 | 2020-04-07 11:34:34 -0700 | [diff] [blame] | 175 | auto dlc_prefs_path = prefs_path_.Append("dlc").Append(kFirstDlc); |
| 176 | EXPECT_TRUE(base::PathExists(dlc_prefs_path)); |
Xiaochu Liu | 6da1727 | 2018-11-06 14:04:01 -0800 | [diff] [blame] | 177 | |
Amin Hassani | 5755c9b | 2020-04-03 13:05:51 -0700 | [diff] [blame] | 178 | EXPECT_TRUE(dlc_service_->Uninstall(kFirstDlc, &err_)); |
Andrew | 91b6205 | 2020-06-24 14:57:30 -0700 | [diff] [blame] | 179 | EXPECT_TRUE(err_.get() == nullptr); |
Amin Hassani | 40c0f11 | 2020-04-15 09:55:00 -0700 | [diff] [blame] | 180 | // Uninstall should not delete the DLC right away. |
| 181 | EXPECT_TRUE(base::PathExists(JoinPaths(content_path_, kFirstDlc))); |
| 182 | EXPECT_TRUE(base::PathExists(dlc_prefs_path)); |
Jae Hoon Kim | ee1ba90 | 2020-03-11 09:53:01 -0700 | [diff] [blame] | 183 | CheckDlcState(kFirstDlc, DlcState::NOT_INSTALLED); |
Amin Hassani | 40c0f11 | 2020-04-15 09:55:00 -0700 | [diff] [blame] | 184 | // Uninstall should not change the verified status. |
Amin Hassani | 1ac2831 | 2020-06-04 18:16:30 -0700 | [diff] [blame] | 185 | EXPECT_TRUE(dlc_service_->GetDlc(kFirstDlc, &err_)->IsVerified()); |
Xiaochu Liu | 6da1727 | 2018-11-06 14:04:01 -0800 | [diff] [blame] | 186 | } |
| 187 | |
Amin Hassani | b9d74b1 | 2020-04-08 15:35:20 -0700 | [diff] [blame] | 188 | TEST_F(DlcServiceTest, PurgeTest) { |
Amin Hassani | 6d0367d | 2020-05-10 18:07:03 -0700 | [diff] [blame] | 189 | Install(kFirstDlc); |
| 190 | |
Amin Hassani | b9d74b1 | 2020-04-08 15:35:20 -0700 | [diff] [blame] | 191 | EXPECT_CALL(*mock_update_engine_proxy_ptr_, |
| 192 | SetDlcActiveValue(false, kFirstDlc, _, _)) |
| 193 | .WillOnce(Return(true)); |
| 194 | EXPECT_CALL(*mock_image_loader_proxy_ptr_, UnloadDlcImage(_, _, _, _, _)) |
| 195 | .WillOnce(DoAll(SetArgPointee<2>(true), Return(true))); |
Amin Hassani | 78a5ec8 | 2020-05-19 09:47:49 -0700 | [diff] [blame] | 196 | EXPECT_CALL(mock_state_change_reporter_, DlcStateChanged(_)).Times(1); |
| 197 | |
Amin Hassani | b9d74b1 | 2020-04-08 15:35:20 -0700 | [diff] [blame] | 198 | auto dlc_prefs_path = prefs_path_.Append("dlc").Append(kFirstDlc); |
| 199 | EXPECT_TRUE(base::PathExists(dlc_prefs_path)); |
| 200 | |
| 201 | EXPECT_TRUE(dlc_service_->Purge(kFirstDlc, &err_)); |
| 202 | EXPECT_FALSE(base::PathExists(JoinPaths(content_path_, kFirstDlc))); |
| 203 | EXPECT_FALSE(base::PathExists(dlc_prefs_path)); |
| 204 | CheckDlcState(kFirstDlc, DlcState::NOT_INSTALLED); |
| 205 | } |
| 206 | |
Amin Hassani | 40c0f11 | 2020-04-15 09:55:00 -0700 | [diff] [blame] | 207 | TEST_F(DlcServiceTest, UninstallNotInstalledIsValid) { |
Amin Hassani | 9a3f20c | 2020-05-25 16:38:33 -0700 | [diff] [blame] | 208 | EXPECT_CALL(*mock_image_loader_proxy_ptr_, UnloadDlcImage(_, _, _, _, _)) |
| 209 | .WillOnce(DoAll(SetArgPointee<2>(true), Return(true))); |
Amin Hassani | 78a5ec8 | 2020-05-19 09:47:49 -0700 | [diff] [blame] | 210 | EXPECT_CALL(mock_state_change_reporter_, DlcStateChanged(_)).Times(1); |
Andrew | 2eb9554 | 2020-06-24 14:51:49 -0700 | [diff] [blame] | 211 | EXPECT_CALL(*mock_metrics_, SendUninstallResult(UninstallResult::kSuccess)); |
Amin Hassani | 78a5ec8 | 2020-05-19 09:47:49 -0700 | [diff] [blame] | 212 | |
Amin Hassani | 5755c9b | 2020-04-03 13:05:51 -0700 | [diff] [blame] | 213 | EXPECT_TRUE(dlc_service_->Uninstall(kSecondDlc, &err_)); |
Andrew | 91b6205 | 2020-06-24 14:57:30 -0700 | [diff] [blame] | 214 | EXPECT_TRUE(err_.get() == nullptr); |
Jae Hoon Kim | ee1ba90 | 2020-03-11 09:53:01 -0700 | [diff] [blame] | 215 | CheckDlcState(kSecondDlc, DlcState::NOT_INSTALLED); |
Xiaochu Liu | 6da1727 | 2018-11-06 14:04:01 -0800 | [diff] [blame] | 216 | } |
| 217 | |
Amin Hassani | 40c0f11 | 2020-04-15 09:55:00 -0700 | [diff] [blame] | 218 | TEST_F(DlcServiceTest, PurgeNotInstalledIsValid) { |
Amin Hassani | 40c0f11 | 2020-04-15 09:55:00 -0700 | [diff] [blame] | 219 | EXPECT_CALL(*mock_image_loader_proxy_ptr_, UnloadDlcImage(_, _, _, _, _)) |
| 220 | .WillOnce(DoAll(SetArgPointee<2>(true), Return(true))); |
| 221 | EXPECT_CALL(*mock_update_engine_proxy_ptr_, |
| 222 | SetDlcActiveValue(false, kSecondDlc, _, _)) |
| 223 | .WillOnce(Return(true)); |
| 224 | EXPECT_CALL(mock_state_change_reporter_, DlcStateChanged(_)).Times(1); |
| 225 | |
| 226 | EXPECT_TRUE(dlc_service_->Purge(kSecondDlc, &err_)); |
| 227 | CheckDlcState(kSecondDlc, DlcState::NOT_INSTALLED); |
| 228 | } |
| 229 | |
| 230 | TEST_F(DlcServiceTest, PurgeFailToSetDlcActiveValueFalse) { |
Amin Hassani | 6d0367d | 2020-05-10 18:07:03 -0700 | [diff] [blame] | 231 | Install(kFirstDlc); |
| 232 | |
Amin Hassani | 40c0f11 | 2020-04-15 09:55:00 -0700 | [diff] [blame] | 233 | EXPECT_CALL(*mock_image_loader_proxy_ptr_, UnloadDlcImage(_, _, _, _, _)) |
| 234 | .WillOnce(DoAll(SetArgPointee<2>(true), Return(true))); |
Andrew | 51135f0 | 2020-03-02 14:29:07 -0800 | [diff] [blame] | 235 | EXPECT_CALL(*mock_update_engine_proxy_ptr_, |
| 236 | SetDlcActiveValue(false, kFirstDlc, _, _)) |
| 237 | .WillOnce(Return(false)); |
Amin Hassani | 78a5ec8 | 2020-05-19 09:47:49 -0700 | [diff] [blame] | 238 | EXPECT_CALL(mock_state_change_reporter_, DlcStateChanged(_)).Times(1); |
Andrew | 51135f0 | 2020-03-02 14:29:07 -0800 | [diff] [blame] | 239 | |
Amin Hassani | 40c0f11 | 2020-04-15 09:55:00 -0700 | [diff] [blame] | 240 | EXPECT_TRUE(dlc_service_->Purge(kFirstDlc, &err_)); |
Andrew | 51135f0 | 2020-03-02 14:29:07 -0800 | [diff] [blame] | 241 | EXPECT_FALSE(base::PathExists(JoinPaths(content_path_, kFirstDlc))); |
| 242 | CheckDlcState(kFirstDlc, DlcState::NOT_INSTALLED); |
| 243 | } |
| 244 | |
Andrew | 6829e92 | 2019-12-13 14:17:53 -0800 | [diff] [blame] | 245 | TEST_F(DlcServiceTest, UninstallInvalidDlcTest) { |
Jae Hoon Kim | ee1ba90 | 2020-03-11 09:53:01 -0700 | [diff] [blame] | 246 | const auto& id = "invalid-dlc-id"; |
Andrew | 2eb9554 | 2020-06-24 14:51:49 -0700 | [diff] [blame] | 247 | EXPECT_CALL(*mock_metrics_, |
| 248 | SendUninstallResult(UninstallResult::kFailedInvalidDlc)); |
| 249 | |
Amin Hassani | 5755c9b | 2020-04-03 13:05:51 -0700 | [diff] [blame] | 250 | EXPECT_FALSE(dlc_service_->Uninstall(id, &err_)); |
Amin Hassani | b2f139c | 2020-05-15 11:43:26 -0700 | [diff] [blame] | 251 | EXPECT_EQ(err_->GetCode(), kErrorInvalidDlc); |
Andrew | 6829e92 | 2019-12-13 14:17:53 -0800 | [diff] [blame] | 252 | } |
| 253 | |
Amin Hassani | 40c0f11 | 2020-04-15 09:55:00 -0700 | [diff] [blame] | 254 | TEST_F(DlcServiceTest, PurgeInvalidDlcTest) { |
Amin Hassani | 40c0f11 | 2020-04-15 09:55:00 -0700 | [diff] [blame] | 255 | const auto& id = "invalid-dlc-id"; |
| 256 | EXPECT_FALSE(dlc_service_->Purge(id, &err_)); |
| 257 | EXPECT_EQ(err_->GetCode(), kErrorInvalidDlc); |
Xiaochu Liu | 6da1727 | 2018-11-06 14:04:01 -0800 | [diff] [blame] | 258 | } |
| 259 | |
Amin Hassani | c4cc1ee | 2019-11-14 11:51:35 -0800 | [diff] [blame] | 260 | TEST_F(DlcServiceTest, UninstallImageLoaderFailureTest) { |
Amin Hassani | 6d0367d | 2020-05-10 18:07:03 -0700 | [diff] [blame] | 261 | Install(kFirstDlc); |
| 262 | |
Amin Hassani | 40c0f11 | 2020-04-15 09:55:00 -0700 | [diff] [blame] | 263 | // |ImageLoader| not available. |
Jae Hoon Kim | c7beafd | 2019-07-22 18:14:47 -0700 | [diff] [blame] | 264 | EXPECT_CALL(*mock_image_loader_proxy_ptr_, UnloadDlcImage(_, _, _, _, _)) |
| 265 | .WillOnce(Return(false)); |
Amin Hassani | 40c0f11 | 2020-04-15 09:55:00 -0700 | [diff] [blame] | 266 | EXPECT_CALL(mock_state_change_reporter_, DlcStateChanged(_)).Times(1); |
Andrew | 2eb9554 | 2020-06-24 14:51:49 -0700 | [diff] [blame] | 267 | EXPECT_CALL(*mock_metrics_, SendUninstallResult(UninstallResult::kSuccess)); |
Jae Hoon Kim | c7beafd | 2019-07-22 18:14:47 -0700 | [diff] [blame] | 268 | |
Amin Hassani | 40c0f11 | 2020-04-15 09:55:00 -0700 | [diff] [blame] | 269 | EXPECT_TRUE(dlc_service_->Uninstall(kFirstDlc, &err_)); |
Andrew | 91b6205 | 2020-06-24 14:57:30 -0700 | [diff] [blame] | 270 | EXPECT_TRUE(err_.get() == nullptr); |
Jae Hoon Kim | 373cd65 | 2020-01-21 10:03:39 -0800 | [diff] [blame] | 271 | EXPECT_TRUE(base::PathExists(JoinPaths(content_path_, kFirstDlc))); |
Andrew | 48a55f2 | 2020-06-17 06:50:04 -0700 | [diff] [blame] | 272 | CheckDlcState(kFirstDlc, DlcState::NOT_INSTALLED, kErrorInternal); |
Jae Hoon Kim | c7beafd | 2019-07-22 18:14:47 -0700 | [diff] [blame] | 273 | } |
| 274 | |
Amin Hassani | 40c0f11 | 2020-04-15 09:55:00 -0700 | [diff] [blame] | 275 | TEST_F(DlcServiceTest, PurgeUpdateEngineBusyFailureTest) { |
Amin Hassani | 6d0367d | 2020-05-10 18:07:03 -0700 | [diff] [blame] | 276 | Install(kFirstDlc); |
| 277 | |
Jae Hoon Kim | aa89651 | 2019-08-29 17:26:57 -0700 | [diff] [blame] | 278 | StatusResult status_result; |
| 279 | status_result.set_current_operation(Operation::CHECKING_FOR_UPDATE); |
Amin Hassani | f656f29 | 2020-06-08 16:20:01 -0700 | [diff] [blame] | 280 | SystemState::Get()->set_update_engine_status(status_result); |
Jae Hoon Kim | aa89651 | 2019-08-29 17:26:57 -0700 | [diff] [blame] | 281 | |
Amin Hassani | 40c0f11 | 2020-04-15 09:55:00 -0700 | [diff] [blame] | 282 | EXPECT_FALSE(dlc_service_->Purge(kFirstDlc, &err_)); |
Jae Hoon Kim | ee1ba90 | 2020-03-11 09:53:01 -0700 | [diff] [blame] | 283 | CheckDlcState(kFirstDlc, DlcState::INSTALLED); |
Jae Hoon Kim | aa89651 | 2019-08-29 17:26:57 -0700 | [diff] [blame] | 284 | } |
| 285 | |
Amin Hassani | 40c0f11 | 2020-04-15 09:55:00 -0700 | [diff] [blame] | 286 | // Same behavior should be for purge. |
Jae Hoon Kim | fdaa53a | 2020-03-13 11:28:36 -0700 | [diff] [blame] | 287 | TEST_F(DlcServiceTest, UninstallInstallingFails) { |
Amin Hassani | 111f2bc | 2020-04-17 11:53:32 -0700 | [diff] [blame] | 288 | EXPECT_CALL(*mock_update_engine_proxy_ptr_, AttemptInstall(_, _, _, _)) |
Jae Hoon Kim | fdaa53a | 2020-03-13 11:28:36 -0700 | [diff] [blame] | 289 | .WillOnce(Return(true)); |
Amin Hassani | 78a5ec8 | 2020-05-19 09:47:49 -0700 | [diff] [blame] | 290 | EXPECT_CALL(mock_state_change_reporter_, DlcStateChanged(_)).Times(1); |
Andrew | 2eb9554 | 2020-06-24 14:51:49 -0700 | [diff] [blame] | 291 | EXPECT_CALL(*mock_metrics_, |
| 292 | SendUninstallResult(UninstallResult::kFailedUpdateEngineBusy)); |
Jae Hoon Kim | fdaa53a | 2020-03-13 11:28:36 -0700 | [diff] [blame] | 293 | |
Amin Hassani | 6d0367d | 2020-05-10 18:07:03 -0700 | [diff] [blame] | 294 | EXPECT_TRUE(dlc_service_->Install(kSecondDlc, kDefaultOmahaUrl, &err_)); |
Jae Hoon Kim | fdaa53a | 2020-03-13 11:28:36 -0700 | [diff] [blame] | 295 | CheckDlcState(kSecondDlc, DlcState::INSTALLING); |
| 296 | |
Amin Hassani | 5755c9b | 2020-04-03 13:05:51 -0700 | [diff] [blame] | 297 | EXPECT_FALSE(dlc_service_->Uninstall(kSecondDlc, &err_)); |
Jae Hoon Kim | fdaa53a | 2020-03-13 11:28:36 -0700 | [diff] [blame] | 298 | EXPECT_EQ(err_->GetCode(), kErrorBusy); |
| 299 | } |
| 300 | |
Amin Hassani | 40c0f11 | 2020-04-15 09:55:00 -0700 | [diff] [blame] | 301 | TEST_F(DlcServiceTest, PurgeInstallingFails) { |
Amin Hassani | 40c0f11 | 2020-04-15 09:55:00 -0700 | [diff] [blame] | 302 | EXPECT_CALL(*mock_update_engine_proxy_ptr_, AttemptInstall(_, _, _, _)) |
| 303 | .WillOnce(Return(true)); |
| 304 | EXPECT_CALL(mock_state_change_reporter_, DlcStateChanged(_)).Times(1); |
| 305 | |
| 306 | EXPECT_TRUE(dlc_service_->Install(kSecondDlc, kDefaultOmahaUrl, &err_)); |
| 307 | CheckDlcState(kSecondDlc, DlcState::INSTALLING); |
| 308 | |
| 309 | EXPECT_FALSE(dlc_service_->Purge(kSecondDlc, &err_)); |
| 310 | EXPECT_EQ(err_->GetCode(), kErrorBusy); |
| 311 | } |
| 312 | |
Jae Hoon Kim | fdaa53a | 2020-03-13 11:28:36 -0700 | [diff] [blame] | 313 | TEST_F(DlcServiceTest, UninstallInstallingButInstalledFails) { |
Amin Hassani | 6d0367d | 2020-05-10 18:07:03 -0700 | [diff] [blame] | 314 | Install(kFirstDlc); |
| 315 | |
Amin Hassani | 111f2bc | 2020-04-17 11:53:32 -0700 | [diff] [blame] | 316 | EXPECT_CALL(*mock_update_engine_proxy_ptr_, AttemptInstall(_, _, _, _)) |
Jae Hoon Kim | fdaa53a | 2020-03-13 11:28:36 -0700 | [diff] [blame] | 317 | .WillOnce(Return(true)); |
Jae Hoon Kim | 6cb439b | 2020-03-23 14:02:44 -0700 | [diff] [blame] | 318 | EXPECT_CALL(*mock_image_loader_proxy_ptr_, UnloadDlcImage(_, _, _, _, _)) |
| 319 | .WillOnce(DoAll(SetArgPointee<2>(true), Return(true))); |
Amin Hassani | 78a5ec8 | 2020-05-19 09:47:49 -0700 | [diff] [blame] | 320 | EXPECT_CALL(mock_state_change_reporter_, DlcStateChanged(_)).Times(2); |
Andrew | 2eb9554 | 2020-06-24 14:51:49 -0700 | [diff] [blame] | 321 | EXPECT_CALL(*mock_metrics_, SendUninstallResult(UninstallResult::kSuccess)); |
Jae Hoon Kim | 6cb439b | 2020-03-23 14:02:44 -0700 | [diff] [blame] | 322 | |
Amin Hassani | 6d0367d | 2020-05-10 18:07:03 -0700 | [diff] [blame] | 323 | EXPECT_TRUE(dlc_service_->Install(kSecondDlc, kDefaultOmahaUrl, &err_)); |
| 324 | CheckDlcState(kSecondDlc, DlcState::INSTALLING); |
| 325 | |
Amin Hassani | 40c0f11 | 2020-04-15 09:55:00 -0700 | [diff] [blame] | 326 | // |kFirstDlc| was installed, so there should be no problem uninstalling it |
| 327 | // |even if |kSecondDlc| is installing. |
Amin Hassani | 5755c9b | 2020-04-03 13:05:51 -0700 | [diff] [blame] | 328 | EXPECT_TRUE(dlc_service_->Uninstall(kFirstDlc, &err_)); |
Andrew | 91b6205 | 2020-06-24 14:57:30 -0700 | [diff] [blame] | 329 | EXPECT_TRUE(err_.get() == nullptr); |
Jae Hoon Kim | 6cb439b | 2020-03-23 14:02:44 -0700 | [diff] [blame] | 330 | CheckDlcState(kFirstDlc, DlcState::NOT_INSTALLED); |
Jae Hoon Kim | fdaa53a | 2020-03-13 11:28:36 -0700 | [diff] [blame] | 331 | } |
| 332 | |
Jae Hoon Kim | a170cfb | 2020-03-11 09:02:29 -0700 | [diff] [blame] | 333 | TEST_F(DlcServiceTest, InstallInvalidDlcTest) { |
Amin Hassani | ef35a38 | 2020-04-03 12:58:45 -0700 | [diff] [blame] | 334 | const string id = "bad-dlc-id"; |
Andrew | 0a534ed | 2020-05-06 09:59:17 -0700 | [diff] [blame] | 335 | EXPECT_CALL(*mock_metrics_, |
| 336 | SendInstallResult(InstallResult::kFailedInvalidDlc)); |
Amin Hassani | 6d0367d | 2020-05-10 18:07:03 -0700 | [diff] [blame] | 337 | EXPECT_FALSE(dlc_service_->Install(id, kDefaultOmahaUrl, &err_)); |
Amin Hassani | b2f139c | 2020-05-15 11:43:26 -0700 | [diff] [blame] | 338 | EXPECT_EQ(err_->GetCode(), kErrorInvalidDlc); |
Jae Hoon Kim | a170cfb | 2020-03-11 09:02:29 -0700 | [diff] [blame] | 339 | } |
| 340 | |
Amin Hassani | c4cc1ee | 2019-11-14 11:51:35 -0800 | [diff] [blame] | 341 | TEST_F(DlcServiceTest, InstallTest) { |
Amin Hassani | 6d0367d | 2020-05-10 18:07:03 -0700 | [diff] [blame] | 342 | Install(kFirstDlc); |
| 343 | |
Jae Hoon Kim | 1b8d6ab | 2019-10-09 10:21:16 -0700 | [diff] [blame] | 344 | SetMountPath(mount_path_.value()); |
Amin Hassani | 111f2bc | 2020-04-17 11:53:32 -0700 | [diff] [blame] | 345 | EXPECT_CALL(*mock_update_engine_proxy_ptr_, AttemptInstall(_, _, _, _)) |
Jae Hoon Kim | 9090a12 | 2019-12-10 09:55:39 -0800 | [diff] [blame] | 346 | .WillOnce(Return(true)); |
Amin Hassani | 78a5ec8 | 2020-05-19 09:47:49 -0700 | [diff] [blame] | 347 | EXPECT_CALL(mock_state_change_reporter_, DlcStateChanged(_)).Times(1); |
| 348 | |
Amin Hassani | 6d0367d | 2020-05-10 18:07:03 -0700 | [diff] [blame] | 349 | EXPECT_THAT(dlc_service_->GetInstalled(), ElementsAre(kFirstDlc)); |
Jae Hoon Kim | 2c61e9e | 2020-04-07 15:03:35 -0700 | [diff] [blame] | 350 | |
Amin Hassani | 6d0367d | 2020-05-10 18:07:03 -0700 | [diff] [blame] | 351 | EXPECT_TRUE(dlc_service_->Install(kSecondDlc, kDefaultOmahaUrl, &err_)); |
Jae Hoon Kim | ee1ba90 | 2020-03-11 09:53:01 -0700 | [diff] [blame] | 352 | CheckDlcState(kSecondDlc, DlcState::INSTALLING); |
Colin Howes | 7c7d47f | 2018-11-21 09:34:35 -0800 | [diff] [blame] | 353 | |
Andrew | 0a534ed | 2020-05-06 09:59:17 -0700 | [diff] [blame] | 354 | // Should remain same as it's not stamped verified. |
Amin Hassani | 6d0367d | 2020-05-10 18:07:03 -0700 | [diff] [blame] | 355 | EXPECT_THAT(dlc_service_->GetInstalled(), ElementsAre(kFirstDlc)); |
Jae Hoon Kim | 2c61e9e | 2020-04-07 15:03:35 -0700 | [diff] [blame] | 356 | |
Amin Hassani | 78a5ec8 | 2020-05-19 09:47:49 -0700 | [diff] [blame] | 357 | // TODO(ahassani): Add more install process liked |InstallCompleted|, etc. |
Xiaochu Liu | e605638 | 2019-01-22 11:15:36 -0800 | [diff] [blame] | 358 | } |
| 359 | |
Amin Hassani | c4cc1ee | 2019-11-14 11:51:35 -0800 | [diff] [blame] | 360 | TEST_F(DlcServiceTest, InstallAlreadyInstalledValid) { |
Amin Hassani | 6d0367d | 2020-05-10 18:07:03 -0700 | [diff] [blame] | 361 | Install(kFirstDlc); |
| 362 | |
Jae Hoon Kim | 1b8d6ab | 2019-10-09 10:21:16 -0700 | [diff] [blame] | 363 | SetMountPath(mount_path_.value()); |
Andrew | 51135f0 | 2020-03-02 14:29:07 -0800 | [diff] [blame] | 364 | EXPECT_CALL(*mock_update_engine_proxy_ptr_, |
| 365 | SetDlcActiveValue(true, kFirstDlc, _, _)) |
| 366 | .WillOnce(Return(true)); |
Amin Hassani | 9a3f20c | 2020-05-25 16:38:33 -0700 | [diff] [blame] | 367 | EXPECT_CALL(*mock_image_loader_proxy_ptr_, |
| 368 | LoadDlcImage(kFirstDlc, _, _, _, _, _)) |
| 369 | .WillOnce(DoAll(SetArgPointee<3>(mount_path_.value()), Return(true))); |
Amin Hassani | 78a5ec8 | 2020-05-19 09:47:49 -0700 | [diff] [blame] | 370 | EXPECT_CALL(mock_state_change_reporter_, DlcStateChanged(_)).Times(1); |
Andrew | 0a534ed | 2020-05-06 09:59:17 -0700 | [diff] [blame] | 371 | EXPECT_CALL(*mock_metrics_, |
| 372 | SendInstallResult(InstallResult::kSuccessAlreadyInstalled)); |
Jae Hoon Kim | 69cda48 | 2019-07-18 14:36:22 -0700 | [diff] [blame] | 373 | |
Amin Hassani | 6d0367d | 2020-05-10 18:07:03 -0700 | [diff] [blame] | 374 | EXPECT_TRUE(dlc_service_->Install(kFirstDlc, kDefaultOmahaUrl, &err_)); |
Jae Hoon Kim | 373cd65 | 2020-01-21 10:03:39 -0800 | [diff] [blame] | 375 | EXPECT_TRUE(base::PathExists(JoinPaths(content_path_, kFirstDlc))); |
Jae Hoon Kim | ee1ba90 | 2020-03-11 09:53:01 -0700 | [diff] [blame] | 376 | CheckDlcState(kFirstDlc, DlcState::INSTALLED); |
Jae Hoon Kim | 69cda48 | 2019-07-18 14:36:22 -0700 | [diff] [blame] | 377 | } |
| 378 | |
Jae Hoon Kim | bf48dea | 2020-07-24 14:16:57 -0700 | [diff] [blame] | 379 | TEST_F(DlcServiceTest, InstallAlreadyInstalledWhileAnotherInstalling) { |
| 380 | Install(kFirstDlc); |
| 381 | |
| 382 | // Keep |kSecondDlc| installing. |
| 383 | EXPECT_CALL(*mock_update_engine_proxy_ptr_, AttemptInstall(_, _, _, _)) |
| 384 | .WillOnce(Return(true)); |
| 385 | EXPECT_CALL(mock_state_change_reporter_, DlcStateChanged(_)).Times(1); |
| 386 | |
| 387 | EXPECT_TRUE(dlc_service_->Install(kSecondDlc, kDefaultOmahaUrl, &err_)); |
| 388 | CheckDlcState(kSecondDlc, DlcState::INSTALLING); |
| 389 | |
| 390 | // |kFirstDlc| can quickly be installed again even though another install is |
| 391 | // ongoing. |
| 392 | SetMountPath(mount_path_.value()); |
| 393 | EXPECT_CALL(*mock_update_engine_proxy_ptr_, |
| 394 | SetDlcActiveValue(true, kFirstDlc, _, _)) |
| 395 | .WillOnce(Return(true)); |
| 396 | EXPECT_CALL(*mock_image_loader_proxy_ptr_, |
| 397 | LoadDlcImage(kFirstDlc, _, _, _, _, _)) |
| 398 | .WillOnce(DoAll(SetArgPointee<3>(mount_path_.value()), Return(true))); |
| 399 | EXPECT_CALL(mock_state_change_reporter_, DlcStateChanged(_)).Times(1); |
| 400 | EXPECT_CALL(*mock_metrics_, |
| 401 | SendInstallResult(InstallResult::kSuccessAlreadyInstalled)); |
| 402 | |
| 403 | EXPECT_TRUE(dlc_service_->Install(kFirstDlc, kDefaultOmahaUrl, &err_)); |
| 404 | CheckDlcState(kFirstDlc, DlcState::INSTALLED); |
| 405 | } |
| 406 | |
Andrew | 51135f0 | 2020-03-02 14:29:07 -0800 | [diff] [blame] | 407 | TEST_F(DlcServiceTest, InstallCannotSetDlcActiveValue) { |
Andrew | 51135f0 | 2020-03-02 14:29:07 -0800 | [diff] [blame] | 408 | SetMountPath(mount_path_.value()); |
Amin Hassani | 111f2bc | 2020-04-17 11:53:32 -0700 | [diff] [blame] | 409 | EXPECT_CALL(*mock_update_engine_proxy_ptr_, AttemptInstall(_, _, _, _)) |
Andrew | 51135f0 | 2020-03-02 14:29:07 -0800 | [diff] [blame] | 410 | .WillOnce(Return(true)); |
| 411 | EXPECT_CALL(*mock_update_engine_proxy_ptr_, |
| 412 | SetDlcActiveValue(true, kSecondDlc, _, _)) |
| 413 | .WillOnce(Return(false)); |
Amin Hassani | 9a3f20c | 2020-05-25 16:38:33 -0700 | [diff] [blame] | 414 | EXPECT_CALL(*mock_image_loader_proxy_ptr_, |
| 415 | LoadDlcImage(kSecondDlc, _, _, _, _, _)) |
| 416 | .WillOnce(DoAll(SetArgPointee<3>(mount_path_.value()), Return(true))); |
| 417 | EXPECT_CALL(mock_state_change_reporter_, DlcStateChanged(_)).Times(2); |
Andrew | 0a534ed | 2020-05-06 09:59:17 -0700 | [diff] [blame] | 418 | EXPECT_CALL(*mock_metrics_, |
| 419 | SendInstallResult(InstallResult::kSuccessNewInstall)); |
Andrew | 51135f0 | 2020-03-02 14:29:07 -0800 | [diff] [blame] | 420 | |
Amin Hassani | 6d0367d | 2020-05-10 18:07:03 -0700 | [diff] [blame] | 421 | EXPECT_TRUE(dlc_service_->Install(kSecondDlc, kDefaultOmahaUrl, &err_)); |
Amin Hassani | 9a3f20c | 2020-05-25 16:38:33 -0700 | [diff] [blame] | 422 | EXPECT_TRUE(dlc_service_->InstallCompleted({kSecondDlc}, &err_)); |
| 423 | |
| 424 | StatusResult status_result; |
| 425 | status_result.set_is_install(true); |
| 426 | status_result.set_current_operation(Operation::IDLE); |
| 427 | dlc_service_->OnStatusUpdateAdvancedSignal(status_result); |
| 428 | |
| 429 | CheckDlcState(kSecondDlc, DlcState::INSTALLED); |
Andrew | 51135f0 | 2020-03-02 14:29:07 -0800 | [diff] [blame] | 430 | } |
| 431 | |
Amin Hassani | f656f29 | 2020-06-08 16:20:01 -0700 | [diff] [blame] | 432 | TEST_F(DlcServiceTest, PeriodicInstallCheck) { |
| 433 | vector<StatusResult> status_list; |
| 434 | for (const auto& op : |
| 435 | {Operation::CHECKING_FOR_UPDATE, Operation::DOWNLOADING}) { |
| 436 | StatusResult status; |
| 437 | status.set_current_operation(op); |
| 438 | status.set_is_install(true); |
| 439 | status_list.push_back(status); |
| 440 | } |
Jae Hoon Kim | dcf783e | 2020-01-24 14:06:02 -0800 | [diff] [blame] | 441 | EXPECT_CALL(*mock_update_engine_proxy_ptr_, GetStatusAdvanced(_, _, _)) |
Amin Hassani | f656f29 | 2020-06-08 16:20:01 -0700 | [diff] [blame] | 442 | .WillOnce(DoAll(SetArgPointee<0>(status_list[0]), Return(true))) |
Jae Hoon Kim | dcf783e | 2020-01-24 14:06:02 -0800 | [diff] [blame] | 443 | .WillOnce(Return(false)) |
Amin Hassani | f656f29 | 2020-06-08 16:20:01 -0700 | [diff] [blame] | 444 | .WillOnce(DoAll(SetArgPointee<0>(status_list[1]), Return(true))); |
| 445 | |
| 446 | // We need to make sure the state is intalling so, rescheduling periodic check |
| 447 | // happens. |
Amin Hassani | 111f2bc | 2020-04-17 11:53:32 -0700 | [diff] [blame] | 448 | EXPECT_CALL(*mock_update_engine_proxy_ptr_, AttemptInstall(_, _, _, _)) |
Jae Hoon Kim | dcf783e | 2020-01-24 14:06:02 -0800 | [diff] [blame] | 449 | .WillOnce(Return(true)); |
Amin Hassani | f656f29 | 2020-06-08 16:20:01 -0700 | [diff] [blame] | 450 | EXPECT_CALL(mock_state_change_reporter_, DlcStateChanged(_)).Times(1); |
Jae Hoon Kim | dcf783e | 2020-01-24 14:06:02 -0800 | [diff] [blame] | 451 | |
Amin Hassani | 6d0367d | 2020-05-10 18:07:03 -0700 | [diff] [blame] | 452 | EXPECT_TRUE(dlc_service_->Install(kSecondDlc, kDefaultOmahaUrl, &err_)); |
Jae Hoon Kim | ee1ba90 | 2020-03-11 09:53:01 -0700 | [diff] [blame] | 453 | CheckDlcState(kSecondDlc, DlcState::INSTALLING); |
Amin Hassani | f656f29 | 2020-06-08 16:20:01 -0700 | [diff] [blame] | 454 | |
| 455 | // The first time it should not get the status because enough time hasn't |
| 456 | // passed yet. |
| 457 | dlc_service_->SchedulePeriodicInstallCheck(); |
| 458 | EXPECT_EQ(SystemState::Get()->update_engine_status().current_operation(), |
| 459 | Operation::IDLE); |
| 460 | |
| 461 | // Now advance clock and make sure that first time we do get status. |
| 462 | clock_.Advance(base::TimeDelta::FromSeconds(11)); |
| 463 | loop_.RunOnce(false); |
| 464 | EXPECT_EQ(SystemState::Get()->update_engine_status().current_operation(), |
| 465 | Operation::CHECKING_FOR_UPDATE); |
| 466 | |
| 467 | // Now advance the clock even more, this time fail the get status. The status |
| 468 | // should remain same. |
| 469 | clock_.Advance(base::TimeDelta::FromSeconds(11)); |
| 470 | loop_.RunOnce(false); |
| 471 | EXPECT_EQ(SystemState::Get()->update_engine_status().current_operation(), |
| 472 | Operation::CHECKING_FOR_UPDATE); |
| 473 | |
| 474 | // Now advance a little bit more to see we got the new status. |
| 475 | clock_.Advance(base::TimeDelta::FromSeconds(11)); |
| 476 | loop_.RunOnce(false); |
| 477 | EXPECT_EQ(SystemState::Get()->update_engine_status().current_operation(), |
| 478 | Operation::DOWNLOADING); |
Jae Hoon Kim | dcf783e | 2020-01-24 14:06:02 -0800 | [diff] [blame] | 479 | } |
| 480 | |
Amin Hassani | f656f29 | 2020-06-08 16:20:01 -0700 | [diff] [blame] | 481 | TEST_F(DlcServiceTest, InstallSchedulesPeriodicInstallCheck) { |
| 482 | vector<StatusResult> status_list; |
| 483 | for (const auto& op : {Operation::CHECKING_FOR_UPDATE, Operation::IDLE}) { |
| 484 | StatusResult status; |
| 485 | status.set_current_operation(op); |
| 486 | status.set_is_install(true); |
| 487 | status_list.push_back(status); |
| 488 | } |
| 489 | |
Jae Hoon Kim | dcf783e | 2020-01-24 14:06:02 -0800 | [diff] [blame] | 490 | EXPECT_CALL(*mock_update_engine_proxy_ptr_, GetStatusAdvanced(_, _, _)) |
Amin Hassani | f656f29 | 2020-06-08 16:20:01 -0700 | [diff] [blame] | 491 | .WillOnce(DoAll(SetArgPointee<0>(status_list[1]), Return(true))); |
Amin Hassani | 111f2bc | 2020-04-17 11:53:32 -0700 | [diff] [blame] | 492 | EXPECT_CALL(*mock_update_engine_proxy_ptr_, AttemptInstall(_, _, _, _)) |
Jae Hoon Kim | dcf783e | 2020-01-24 14:06:02 -0800 | [diff] [blame] | 493 | .WillOnce(Return(true)); |
Amin Hassani | f656f29 | 2020-06-08 16:20:01 -0700 | [diff] [blame] | 494 | EXPECT_CALL(mock_state_change_reporter_, DlcStateChanged(_)).Times(2); |
Andrew | 0a534ed | 2020-05-06 09:59:17 -0700 | [diff] [blame] | 495 | EXPECT_CALL(*mock_metrics_, |
| 496 | SendInstallResult(InstallResult::kFailedToVerifyImage)); |
Jae Hoon Kim | dcf783e | 2020-01-24 14:06:02 -0800 | [diff] [blame] | 497 | |
Amin Hassani | 6d0367d | 2020-05-10 18:07:03 -0700 | [diff] [blame] | 498 | EXPECT_TRUE(dlc_service_->Install(kSecondDlc, kDefaultOmahaUrl, &err_)); |
Jae Hoon Kim | ee1ba90 | 2020-03-11 09:53:01 -0700 | [diff] [blame] | 499 | CheckDlcState(kSecondDlc, DlcState::INSTALLING); |
Amin Hassani | f656f29 | 2020-06-08 16:20:01 -0700 | [diff] [blame] | 500 | |
| 501 | // The checking for update comes from signal. |
| 502 | dlc_service_->OnStatusUpdateAdvancedSignal(status_list[0]); |
| 503 | |
| 504 | // Now advance clock and make sure that periodic install check is scheduled |
| 505 | // and eventually called. |
| 506 | clock_.Advance(base::TimeDelta::FromSeconds(11)); |
| 507 | loop_.RunOnce(false); |
| 508 | |
| 509 | // Since the update_engine status went back to IDLE, the install is complete |
| 510 | // and it should fail. |
Andrew | 48a55f2 | 2020-06-17 06:50:04 -0700 | [diff] [blame] | 511 | CheckDlcState(kSecondDlc, DlcState::NOT_INSTALLED, kErrorInternal); |
Jae Hoon Kim | dcf783e | 2020-01-24 14:06:02 -0800 | [diff] [blame] | 512 | } |
| 513 | |
Amin Hassani | c4cc1ee | 2019-11-14 11:51:35 -0800 | [diff] [blame] | 514 | TEST_F(DlcServiceTest, InstallFailureCleansUp) { |
Amin Hassani | 111f2bc | 2020-04-17 11:53:32 -0700 | [diff] [blame] | 515 | EXPECT_CALL(*mock_update_engine_proxy_ptr_, AttemptInstall(_, _, _, _)) |
Jae Hoon Kim | 873404c | 2019-08-08 15:43:49 -0700 | [diff] [blame] | 516 | .WillOnce(Return(false)); |
Amin Hassani | 78a5ec8 | 2020-05-19 09:47:49 -0700 | [diff] [blame] | 517 | EXPECT_CALL(mock_state_change_reporter_, DlcStateChanged(_)).Times(2); |
Andrew | 0a534ed | 2020-05-06 09:59:17 -0700 | [diff] [blame] | 518 | EXPECT_CALL(*mock_metrics_, |
| 519 | SendInstallResult(InstallResult::kFailedUpdateEngineBusy)); |
Jae Hoon Kim | 873404c | 2019-08-08 15:43:49 -0700 | [diff] [blame] | 520 | |
Amin Hassani | 6d0367d | 2020-05-10 18:07:03 -0700 | [diff] [blame] | 521 | EXPECT_FALSE(dlc_service_->Install(kSecondDlc, kDefaultOmahaUrl, &err_)); |
Andrew | a888bfb | 2020-06-10 15:48:15 -0700 | [diff] [blame] | 522 | EXPECT_EQ(err_->GetCode(), kErrorBusy); |
Jae Hoon Kim | 873404c | 2019-08-08 15:43:49 -0700 | [diff] [blame] | 523 | |
Jae Hoon Kim | ace79b7 | 2020-03-10 18:00:15 +0000 | [diff] [blame] | 524 | EXPECT_FALSE(base::PathExists(JoinPaths(content_path_, kSecondDlc))); |
Andrew | 48a55f2 | 2020-06-17 06:50:04 -0700 | [diff] [blame] | 525 | CheckDlcState(kSecondDlc, DlcState::NOT_INSTALLED, kErrorBusy); |
Jae Hoon Kim | 873404c | 2019-08-08 15:43:49 -0700 | [diff] [blame] | 526 | } |
| 527 | |
Amin Hassani | c4cc1ee | 2019-11-14 11:51:35 -0800 | [diff] [blame] | 528 | TEST_F(DlcServiceTest, InstallUrlTest) { |
Amin Hassani | 6520224 | 2020-03-31 12:26:37 -0700 | [diff] [blame] | 529 | EXPECT_CALL(*mock_update_engine_proxy_ptr_, |
Amin Hassani | 111f2bc | 2020-04-17 11:53:32 -0700 | [diff] [blame] | 530 | AttemptInstall(kDefaultOmahaUrl, _, _, _)) |
Jae Hoon Kim | 9090a12 | 2019-12-10 09:55:39 -0800 | [diff] [blame] | 531 | .WillOnce(Return(true)); |
Amin Hassani | 78a5ec8 | 2020-05-19 09:47:49 -0700 | [diff] [blame] | 532 | EXPECT_CALL(mock_state_change_reporter_, DlcStateChanged(_)).Times(1); |
Xiaochu Liu | e605638 | 2019-01-22 11:15:36 -0800 | [diff] [blame] | 533 | |
Amin Hassani | 6d0367d | 2020-05-10 18:07:03 -0700 | [diff] [blame] | 534 | dlc_service_->Install(kSecondDlc, kDefaultOmahaUrl, &err_); |
Jae Hoon Kim | ee1ba90 | 2020-03-11 09:53:01 -0700 | [diff] [blame] | 535 | CheckDlcState(kSecondDlc, DlcState::INSTALLING); |
Xiaochu Liu | e915584 | 2018-11-13 14:24:05 -0800 | [diff] [blame] | 536 | } |
| 537 | |
Jae Hoon Kim | 54faa5d | 2020-03-23 17:17:16 -0700 | [diff] [blame] | 538 | TEST_F(DlcServiceTest, InstallAlreadyInstalledThatGotUnmountedTest) { |
Amin Hassani | 6d0367d | 2020-05-10 18:07:03 -0700 | [diff] [blame] | 539 | Install(kFirstDlc); |
| 540 | |
Amin Hassani | 78a5ec8 | 2020-05-19 09:47:49 -0700 | [diff] [blame] | 541 | // TOOD(ahassani): Move these checks to InstallTest. |
Jae Hoon Kim | 54faa5d | 2020-03-23 17:17:16 -0700 | [diff] [blame] | 542 | CheckDlcState(kFirstDlc, DlcState::INSTALLED); |
| 543 | const auto mount_path_root = JoinPaths(mount_path_, "root"); |
| 544 | EXPECT_TRUE(base::PathExists(mount_path_root)); |
hscham | 53cf73a | 2020-11-30 15:58:42 +0900 | [diff] [blame] | 545 | EXPECT_TRUE(base::DeletePathRecursively(mount_path_root)); |
Jae Hoon Kim | 54faa5d | 2020-03-23 17:17:16 -0700 | [diff] [blame] | 546 | |
Jae Hoon Kim | 54faa5d | 2020-03-23 17:17:16 -0700 | [diff] [blame] | 547 | EXPECT_CALL(*mock_image_loader_proxy_ptr_, LoadDlcImage(_, _, _, _, _, _)) |
Jae Hoon Kim | c56f906 | 2020-04-29 09:53:24 -0700 | [diff] [blame] | 548 | .WillOnce(DoAll(SetArgPointee<3>(mount_path_.value()), Return(true))); |
Jae Hoon Kim | 54faa5d | 2020-03-23 17:17:16 -0700 | [diff] [blame] | 549 | EXPECT_CALL(*mock_update_engine_proxy_ptr_, |
| 550 | SetDlcActiveValue(true, kFirstDlc, _, _)) |
| 551 | .WillOnce(Return(true)); |
Amin Hassani | 78a5ec8 | 2020-05-19 09:47:49 -0700 | [diff] [blame] | 552 | EXPECT_CALL(mock_state_change_reporter_, DlcStateChanged(_)).Times(1); |
Andrew | 0a534ed | 2020-05-06 09:59:17 -0700 | [diff] [blame] | 553 | EXPECT_CALL(*mock_metrics_, |
| 554 | SendInstallResult(InstallResult::kSuccessAlreadyInstalled)); |
Jae Hoon Kim | 54faa5d | 2020-03-23 17:17:16 -0700 | [diff] [blame] | 555 | |
Andrew | 0a534ed | 2020-05-06 09:59:17 -0700 | [diff] [blame] | 556 | EXPECT_TRUE(dlc_service_->Install(kFirstDlc, kDefaultOmahaUrl, &err_)); |
Jae Hoon Kim | 54faa5d | 2020-03-23 17:17:16 -0700 | [diff] [blame] | 557 | CheckDlcState(kFirstDlc, DlcState::INSTALLED); |
| 558 | } |
| 559 | |
Andrew | da5871f | 2020-06-08 13:31:42 -0700 | [diff] [blame] | 560 | TEST_F(DlcServiceTest, InstallFailsToCreateDirectory) { |
Andrew | da5871f | 2020-06-08 13:31:42 -0700 | [diff] [blame] | 561 | base::SetPosixFilePermissions(content_path_, 0444); |
Andrew | 0a534ed | 2020-05-06 09:59:17 -0700 | [diff] [blame] | 562 | EXPECT_CALL(mock_state_change_reporter_, DlcStateChanged(_)).Times(1); |
| 563 | EXPECT_CALL(*mock_metrics_, |
| 564 | SendInstallResult(InstallResult::kFailedToCreateDirectory)); |
Andrew | da5871f | 2020-06-08 13:31:42 -0700 | [diff] [blame] | 565 | |
| 566 | // Install will fail because DlcBase::CreateDlc() will fail to create |
| 567 | // directories inside |content_path_|, since the permissions don't allow |
| 568 | // writing into |content_path_|. |
| 569 | EXPECT_FALSE(dlc_service_->Install(kSecondDlc, kDefaultOmahaUrl, &err_)); |
Andrew | a888bfb | 2020-06-10 15:48:15 -0700 | [diff] [blame] | 570 | EXPECT_EQ(err_->GetCode(), kErrorInternal); |
Andrew | da5871f | 2020-06-08 13:31:42 -0700 | [diff] [blame] | 571 | |
Andrew | 48a55f2 | 2020-06-17 06:50:04 -0700 | [diff] [blame] | 572 | CheckDlcState(kSecondDlc, DlcState::NOT_INSTALLED, kErrorInternal); |
Andrew | da5871f | 2020-06-08 13:31:42 -0700 | [diff] [blame] | 573 | } |
| 574 | |
Amin Hassani | aa38c79 | 2020-04-06 15:52:44 -0700 | [diff] [blame] | 575 | TEST_F(DlcServiceTest, OnStatusUpdateSignalDlcRootTest) { |
Amin Hassani | 6d0367d | 2020-05-10 18:07:03 -0700 | [diff] [blame] | 576 | Install(kFirstDlc); |
| 577 | |
Amin Hassani | 111f2bc | 2020-04-17 11:53:32 -0700 | [diff] [blame] | 578 | EXPECT_CALL(*mock_update_engine_proxy_ptr_, AttemptInstall(_, _, _, _)) |
Jae Hoon Kim | 9090a12 | 2019-12-10 09:55:39 -0800 | [diff] [blame] | 579 | .WillOnce(Return(true)); |
Andrew | 51135f0 | 2020-03-02 14:29:07 -0800 | [diff] [blame] | 580 | EXPECT_CALL(*mock_update_engine_proxy_ptr_, |
| 581 | SetDlcActiveValue(true, kSecondDlc, _, _)) |
| 582 | .WillOnce(Return(true)); |
Jae Hoon Kim | 9090a12 | 2019-12-10 09:55:39 -0800 | [diff] [blame] | 583 | EXPECT_CALL(*mock_image_loader_proxy_ptr_, LoadDlcImage(_, _, _, _, _, _)) |
Amin Hassani | 6d0367d | 2020-05-10 18:07:03 -0700 | [diff] [blame] | 584 | .WillOnce(DoAll(SetArgPointee<3>(mount_path_.value()), Return(true))); |
Amin Hassani | 78a5ec8 | 2020-05-19 09:47:49 -0700 | [diff] [blame] | 585 | EXPECT_CALL(mock_state_change_reporter_, DlcStateChanged(_)).Times(2); |
Andrew | 0a534ed | 2020-05-06 09:59:17 -0700 | [diff] [blame] | 586 | EXPECT_CALL(*mock_metrics_, |
| 587 | SendInstallResult(InstallResult::kSuccessNewInstall)); |
Jae Hoon Kim | 873404c | 2019-08-08 15:43:49 -0700 | [diff] [blame] | 588 | |
Amin Hassani | 6d0367d | 2020-05-10 18:07:03 -0700 | [diff] [blame] | 589 | EXPECT_TRUE(dlc_service_->Install(kSecondDlc, kDefaultOmahaUrl, &err_)); |
Jae Hoon Kim | 873404c | 2019-08-08 15:43:49 -0700 | [diff] [blame] | 590 | |
Amin Hassani | 6d0367d | 2020-05-10 18:07:03 -0700 | [diff] [blame] | 591 | EXPECT_TRUE(base::PathExists(JoinPaths(content_path_, kSecondDlc))); |
| 592 | CheckDlcState(kSecondDlc, DlcState::INSTALLING); |
| 593 | |
| 594 | EXPECT_TRUE(dlc_service_->InstallCompleted({kSecondDlc}, &err_)); |
Jae Hoon Kim | 0d057fb | 2020-04-13 17:44:38 -0700 | [diff] [blame] | 595 | |
Jae Hoon Kim | 873404c | 2019-08-08 15:43:49 -0700 | [diff] [blame] | 596 | StatusResult status_result; |
| 597 | status_result.set_current_operation(Operation::IDLE); |
| 598 | status_result.set_is_install(true); |
Amin Hassani | c4cc1ee | 2019-11-14 11:51:35 -0800 | [diff] [blame] | 599 | dlc_service_->OnStatusUpdateAdvancedSignal(status_result); |
Jae Hoon Kim | 873404c | 2019-08-08 15:43:49 -0700 | [diff] [blame] | 600 | |
Amin Hassani | 6d0367d | 2020-05-10 18:07:03 -0700 | [diff] [blame] | 601 | EXPECT_TRUE(base::PathExists(JoinPaths(content_path_, kSecondDlc))); |
| 602 | CheckDlcState(kSecondDlc, DlcState::INSTALLED); |
Jae Hoon Kim | 873404c | 2019-08-08 15:43:49 -0700 | [diff] [blame] | 603 | |
Amin Hassani | 8664998 | 2020-03-31 16:03:37 -0700 | [diff] [blame] | 604 | const auto& dlcs_after = dlc_service_->GetInstalled(); |
Jae Hoon Kim | 873404c | 2019-08-08 15:43:49 -0700 | [diff] [blame] | 605 | |
Amin Hassani | 6d0367d | 2020-05-10 18:07:03 -0700 | [diff] [blame] | 606 | EXPECT_THAT(dlcs_after, ElementsAre(kFirstDlc, kSecondDlc)); |
Amin Hassani | 1ac2831 | 2020-06-04 18:16:30 -0700 | [diff] [blame] | 607 | EXPECT_FALSE( |
| 608 | dlc_service_->GetDlc(kFirstDlc, &err_)->GetRoot().value().empty()); |
| 609 | EXPECT_FALSE( |
| 610 | dlc_service_->GetDlc(kSecondDlc, &err_)->GetRoot().value().empty()); |
Jae Hoon Kim | 873404c | 2019-08-08 15:43:49 -0700 | [diff] [blame] | 611 | } |
| 612 | |
Amin Hassani | aa38c79 | 2020-04-06 15:52:44 -0700 | [diff] [blame] | 613 | TEST_F(DlcServiceTest, OnStatusUpdateSignalNoRemountTest) { |
Amin Hassani | 6d0367d | 2020-05-10 18:07:03 -0700 | [diff] [blame] | 614 | Install(kFirstDlc); |
| 615 | |
Amin Hassani | 111f2bc | 2020-04-17 11:53:32 -0700 | [diff] [blame] | 616 | EXPECT_CALL(*mock_update_engine_proxy_ptr_, AttemptInstall(_, _, _, _)) |
Jae Hoon Kim | 9090a12 | 2019-12-10 09:55:39 -0800 | [diff] [blame] | 617 | .WillOnce(Return(true)); |
Andrew | 51135f0 | 2020-03-02 14:29:07 -0800 | [diff] [blame] | 618 | EXPECT_CALL(*mock_update_engine_proxy_ptr_, |
Andrew | 51135f0 | 2020-03-02 14:29:07 -0800 | [diff] [blame] | 619 | SetDlcActiveValue(true, kSecondDlc, _, _)) |
| 620 | .WillOnce(Return(true)); |
Jae Hoon Kim | 873404c | 2019-08-08 15:43:49 -0700 | [diff] [blame] | 621 | EXPECT_CALL(*mock_image_loader_proxy_ptr_, LoadDlcImage(_, _, _, _, _, _)) |
Jae Hoon Kim | ee1ba90 | 2020-03-11 09:53:01 -0700 | [diff] [blame] | 622 | .WillOnce(DoAll(SetArgPointee<3>(mount_path_.value()), Return(true))); |
Amin Hassani | 78a5ec8 | 2020-05-19 09:47:49 -0700 | [diff] [blame] | 623 | EXPECT_CALL(mock_state_change_reporter_, DlcStateChanged(_)).Times(2); |
Andrew | 0a534ed | 2020-05-06 09:59:17 -0700 | [diff] [blame] | 624 | EXPECT_CALL(*mock_metrics_, |
| 625 | SendInstallResult(InstallResult::kSuccessNewInstall)); |
Jae Hoon Kim | 873404c | 2019-08-08 15:43:49 -0700 | [diff] [blame] | 626 | |
Amin Hassani | 6d0367d | 2020-05-10 18:07:03 -0700 | [diff] [blame] | 627 | EXPECT_TRUE(dlc_service_->Install(kSecondDlc, kDefaultOmahaUrl, &err_)); |
| 628 | |
| 629 | EXPECT_TRUE(base::PathExists(JoinPaths(content_path_, kSecondDlc))); |
Jae Hoon Kim | ee1ba90 | 2020-03-11 09:53:01 -0700 | [diff] [blame] | 630 | CheckDlcState(kSecondDlc, DlcState::INSTALLING); |
Jae Hoon Kim | 873404c | 2019-08-08 15:43:49 -0700 | [diff] [blame] | 631 | |
Amin Hassani | 6d0367d | 2020-05-10 18:07:03 -0700 | [diff] [blame] | 632 | EXPECT_TRUE(dlc_service_->InstallCompleted({kSecondDlc}, &err_)); |
Jae Hoon Kim | 0d057fb | 2020-04-13 17:44:38 -0700 | [diff] [blame] | 633 | |
Jae Hoon Kim | 873404c | 2019-08-08 15:43:49 -0700 | [diff] [blame] | 634 | StatusResult status_result; |
| 635 | status_result.set_current_operation(Operation::IDLE); |
| 636 | status_result.set_is_install(true); |
Amin Hassani | c4cc1ee | 2019-11-14 11:51:35 -0800 | [diff] [blame] | 637 | dlc_service_->OnStatusUpdateAdvancedSignal(status_result); |
Jae Hoon Kim | 873404c | 2019-08-08 15:43:49 -0700 | [diff] [blame] | 638 | } |
| 639 | |
Amin Hassani | aa38c79 | 2020-04-06 15:52:44 -0700 | [diff] [blame] | 640 | TEST_F(DlcServiceTest, OnStatusUpdateSignalTest) { |
Amin Hassani | 111f2bc | 2020-04-17 11:53:32 -0700 | [diff] [blame] | 641 | EXPECT_CALL(*mock_update_engine_proxy_ptr_, AttemptInstall(_, _, _, _)) |
Jae Hoon Kim | 9090a12 | 2019-12-10 09:55:39 -0800 | [diff] [blame] | 642 | .WillOnce(Return(true)); |
Andrew | 51135f0 | 2020-03-02 14:29:07 -0800 | [diff] [blame] | 643 | EXPECT_CALL(*mock_update_engine_proxy_ptr_, |
| 644 | SetDlcActiveValue(true, kSecondDlc, _, _)) |
| 645 | .WillOnce(Return(true)); |
Jae Hoon Kim | c7beafd | 2019-07-22 18:14:47 -0700 | [diff] [blame] | 646 | EXPECT_CALL(*mock_image_loader_proxy_ptr_, LoadDlcImage(_, _, _, _, _, _)) |
Amin Hassani | 6d0367d | 2020-05-10 18:07:03 -0700 | [diff] [blame] | 647 | .WillOnce(DoAll(SetArgPointee<3>(mount_path_.value()), Return(true))); |
Amin Hassani | 78a5ec8 | 2020-05-19 09:47:49 -0700 | [diff] [blame] | 648 | EXPECT_CALL(mock_state_change_reporter_, DlcStateChanged(_)).Times(2); |
Andrew | 0a534ed | 2020-05-06 09:59:17 -0700 | [diff] [blame] | 649 | EXPECT_CALL(*mock_metrics_, |
| 650 | SendInstallResult(InstallResult::kSuccessNewInstall)); |
Jae Hoon Kim | c7beafd | 2019-07-22 18:14:47 -0700 | [diff] [blame] | 651 | |
Amin Hassani | 6d0367d | 2020-05-10 18:07:03 -0700 | [diff] [blame] | 652 | EXPECT_TRUE(dlc_service_->Install(kSecondDlc, kDefaultOmahaUrl, &err_)); |
| 653 | |
| 654 | EXPECT_TRUE(base::PathExists(JoinPaths(content_path_, kSecondDlc))); |
| 655 | CheckDlcState(kSecondDlc, DlcState::INSTALLING); |
| 656 | |
| 657 | EXPECT_TRUE(dlc_service_->InstallCompleted({kSecondDlc}, &err_)); |
Jae Hoon Kim | 0d057fb | 2020-04-13 17:44:38 -0700 | [diff] [blame] | 658 | |
Jae Hoon Kim | 80075fb | 2019-07-24 12:35:58 -0700 | [diff] [blame] | 659 | StatusResult status_result; |
| 660 | status_result.set_current_operation(Operation::IDLE); |
Jae Hoon Kim | c19dabe | 2019-07-31 09:37:35 -0700 | [diff] [blame] | 661 | status_result.set_is_install(true); |
Amin Hassani | c4cc1ee | 2019-11-14 11:51:35 -0800 | [diff] [blame] | 662 | dlc_service_->OnStatusUpdateAdvancedSignal(status_result); |
Jae Hoon Kim | c7beafd | 2019-07-22 18:14:47 -0700 | [diff] [blame] | 663 | |
Jae Hoon Kim | 3bfeb77 | 2020-03-12 15:26:33 -0700 | [diff] [blame] | 664 | EXPECT_TRUE(base::PathExists(JoinPaths(content_path_, kSecondDlc))); |
| 665 | CheckDlcState(kSecondDlc, DlcState::INSTALLED); |
Amin Hassani | 6d0367d | 2020-05-10 18:07:03 -0700 | [diff] [blame] | 666 | } |
| 667 | |
| 668 | TEST_F(DlcServiceTest, MountFailureTest) { |
Amin Hassani | 6d0367d | 2020-05-10 18:07:03 -0700 | [diff] [blame] | 669 | EXPECT_CALL(*mock_update_engine_proxy_ptr_, AttemptInstall(_, _, _, _)) |
| 670 | .WillOnce(Return(true)); |
Amin Hassani | 6d0367d | 2020-05-10 18:07:03 -0700 | [diff] [blame] | 671 | EXPECT_CALL(*mock_image_loader_proxy_ptr_, LoadDlcImage(_, _, _, _, _, _)) |
| 672 | .WillOnce(DoAll(SetArgPointee<3>(""), Return(true))); |
Andrew | 48a55f2 | 2020-06-17 06:50:04 -0700 | [diff] [blame] | 673 | EXPECT_CALL(mock_state_change_reporter_, DlcStateChanged(_)).Times(2); |
Andrew | 0a534ed | 2020-05-06 09:59:17 -0700 | [diff] [blame] | 674 | EXPECT_CALL(*mock_metrics_, |
| 675 | SendInstallResult(InstallResult::kFailedToMountImage)); |
Amin Hassani | 6d0367d | 2020-05-10 18:07:03 -0700 | [diff] [blame] | 676 | |
| 677 | EXPECT_TRUE(dlc_service_->Install(kSecondDlc, kDefaultOmahaUrl, &err_)); |
| 678 | |
| 679 | EXPECT_TRUE(base::PathExists(JoinPaths(content_path_, kSecondDlc))); |
| 680 | CheckDlcState(kSecondDlc, DlcState::INSTALLING); |
| 681 | EXPECT_TRUE(dlc_service_->InstallCompleted({kSecondDlc}, &err_)); |
| 682 | |
| 683 | StatusResult status_result; |
| 684 | status_result.set_current_operation(Operation::IDLE); |
| 685 | status_result.set_is_install(true); |
| 686 | dlc_service_->OnStatusUpdateAdvancedSignal(status_result); |
| 687 | |
Vyshu | 9e36f00 | 2020-08-31 16:42:04 +0000 | [diff] [blame] | 688 | EXPECT_TRUE(base::PathExists(JoinPaths(content_path_, kSecondDlc))); |
| 689 | EXPECT_FALSE(dlc_service_->GetDlc(kSecondDlc, &err_)->IsVerified()); |
Andrew | 48a55f2 | 2020-06-17 06:50:04 -0700 | [diff] [blame] | 690 | CheckDlcState(kSecondDlc, DlcState::NOT_INSTALLED, kErrorInternal); |
Jae Hoon Kim | c7beafd | 2019-07-22 18:14:47 -0700 | [diff] [blame] | 691 | } |
| 692 | |
Amin Hassani | c4cc1ee | 2019-11-14 11:51:35 -0800 | [diff] [blame] | 693 | TEST_F(DlcServiceTest, ReportingFailureCleanupTest) { |
Amin Hassani | 111f2bc | 2020-04-17 11:53:32 -0700 | [diff] [blame] | 694 | EXPECT_CALL(*mock_update_engine_proxy_ptr_, AttemptInstall(_, _, _, _)) |
Jae Hoon Kim | 9090a12 | 2019-12-10 09:55:39 -0800 | [diff] [blame] | 695 | .WillOnce(Return(true)); |
Andrew | 48a55f2 | 2020-06-17 06:50:04 -0700 | [diff] [blame] | 696 | EXPECT_CALL(mock_state_change_reporter_, DlcStateChanged(_)).Times(2); |
Andrew | 0a534ed | 2020-05-06 09:59:17 -0700 | [diff] [blame] | 697 | EXPECT_CALL(*mock_metrics_, |
| 698 | SendInstallResult(InstallResult::kFailedInstallInUpdateEngine)); |
Jae Hoon Kim | 9090a12 | 2019-12-10 09:55:39 -0800 | [diff] [blame] | 699 | |
Amin Hassani | 6d0367d | 2020-05-10 18:07:03 -0700 | [diff] [blame] | 700 | EXPECT_TRUE(dlc_service_->Install(kSecondDlc, kDefaultOmahaUrl, &err_)); |
Jae Hoon Kim | 1c9d858 | 2019-10-14 10:52:05 -0700 | [diff] [blame] | 701 | |
Amin Hassani | 6d0367d | 2020-05-10 18:07:03 -0700 | [diff] [blame] | 702 | EXPECT_TRUE(base::PathExists(JoinPaths(content_path_, kSecondDlc))); |
| 703 | CheckDlcState(kSecondDlc, DlcState::INSTALLING); |
Jae Hoon Kim | 1c9d858 | 2019-10-14 10:52:05 -0700 | [diff] [blame] | 704 | |
Jae Hoon Kim | 1855d26 | 2020-02-14 16:06:35 -0800 | [diff] [blame] | 705 | { |
| 706 | StatusResult status_result; |
| 707 | status_result.set_current_operation(Operation::REPORTING_ERROR_EVENT); |
| 708 | status_result.set_is_install(true); |
| 709 | dlc_service_->OnStatusUpdateAdvancedSignal(status_result); |
| 710 | } |
| 711 | { |
| 712 | StatusResult status_result; |
| 713 | status_result.set_current_operation(Operation::IDLE); |
| 714 | status_result.set_is_install(false); |
| 715 | dlc_service_->OnStatusUpdateAdvancedSignal(status_result); |
| 716 | } |
Jae Hoon Kim | 1c9d858 | 2019-10-14 10:52:05 -0700 | [diff] [blame] | 717 | |
Amin Hassani | 6d0367d | 2020-05-10 18:07:03 -0700 | [diff] [blame] | 718 | EXPECT_FALSE(base::PathExists(JoinPaths(content_path_, kSecondDlc))); |
Andrew | 48a55f2 | 2020-06-17 06:50:04 -0700 | [diff] [blame] | 719 | CheckDlcState(kSecondDlc, DlcState::NOT_INSTALLED, kErrorInternal); |
Jae Hoon Kim | 1c9d858 | 2019-10-14 10:52:05 -0700 | [diff] [blame] | 720 | } |
| 721 | |
Jae Hoon Kim | 39aa9de | 2019-11-20 09:52:06 -0800 | [diff] [blame] | 722 | TEST_F(DlcServiceTest, ReportingFailureSignalTest) { |
Amin Hassani | 111f2bc | 2020-04-17 11:53:32 -0700 | [diff] [blame] | 723 | EXPECT_CALL(*mock_update_engine_proxy_ptr_, AttemptInstall(_, _, _, _)) |
Jae Hoon Kim | 9090a12 | 2019-12-10 09:55:39 -0800 | [diff] [blame] | 724 | .WillOnce(Return(true)); |
Andrew | 48a55f2 | 2020-06-17 06:50:04 -0700 | [diff] [blame] | 725 | EXPECT_CALL(mock_state_change_reporter_, DlcStateChanged(_)).Times(2); |
Andrew | 0a534ed | 2020-05-06 09:59:17 -0700 | [diff] [blame] | 726 | EXPECT_CALL(*mock_metrics_, |
| 727 | SendInstallResult(InstallResult::kFailedInstallInUpdateEngine)); |
Jae Hoon Kim | 9090a12 | 2019-12-10 09:55:39 -0800 | [diff] [blame] | 728 | |
Amin Hassani | 6d0367d | 2020-05-10 18:07:03 -0700 | [diff] [blame] | 729 | EXPECT_TRUE(dlc_service_->Install(kSecondDlc, kDefaultOmahaUrl, &err_)); |
Jae Hoon Kim | 39aa9de | 2019-11-20 09:52:06 -0800 | [diff] [blame] | 730 | |
Amin Hassani | 6d0367d | 2020-05-10 18:07:03 -0700 | [diff] [blame] | 731 | EXPECT_TRUE(base::PathExists(JoinPaths(content_path_, kSecondDlc))); |
| 732 | CheckDlcState(kSecondDlc, DlcState::INSTALLING); |
Jae Hoon Kim | 39aa9de | 2019-11-20 09:52:06 -0800 | [diff] [blame] | 733 | |
Jae Hoon Kim | 1855d26 | 2020-02-14 16:06:35 -0800 | [diff] [blame] | 734 | { |
| 735 | StatusResult status_result; |
| 736 | status_result.set_current_operation(Operation::REPORTING_ERROR_EVENT); |
| 737 | status_result.set_is_install(true); |
| 738 | dlc_service_->OnStatusUpdateAdvancedSignal(status_result); |
| 739 | } |
| 740 | { |
| 741 | StatusResult status_result; |
| 742 | status_result.set_current_operation(Operation::IDLE); |
| 743 | status_result.set_is_install(false); |
| 744 | dlc_service_->OnStatusUpdateAdvancedSignal(status_result); |
| 745 | } |
| 746 | |
Andrew | 48a55f2 | 2020-06-17 06:50:04 -0700 | [diff] [blame] | 747 | CheckDlcState(kSecondDlc, DlcState::NOT_INSTALLED, kErrorInternal); |
Jae Hoon Kim | 39aa9de | 2019-11-20 09:52:06 -0800 | [diff] [blame] | 748 | } |
| 749 | |
Amin Hassani | c4cc1ee | 2019-11-14 11:51:35 -0800 | [diff] [blame] | 750 | TEST_F(DlcServiceTest, ProbableUpdateEngineRestartCleanupTest) { |
Amin Hassani | 111f2bc | 2020-04-17 11:53:32 -0700 | [diff] [blame] | 751 | EXPECT_CALL(*mock_update_engine_proxy_ptr_, AttemptInstall(_, _, _, _)) |
Jae Hoon Kim | 9090a12 | 2019-12-10 09:55:39 -0800 | [diff] [blame] | 752 | .WillOnce(Return(true)); |
Andrew | 48a55f2 | 2020-06-17 06:50:04 -0700 | [diff] [blame] | 753 | EXPECT_CALL(mock_state_change_reporter_, DlcStateChanged(_)).Times(2); |
Andrew | 0a534ed | 2020-05-06 09:59:17 -0700 | [diff] [blame] | 754 | EXPECT_CALL(*mock_metrics_, |
| 755 | SendInstallResult(InstallResult::kFailedInstallInUpdateEngine)); |
Jae Hoon Kim | 9090a12 | 2019-12-10 09:55:39 -0800 | [diff] [blame] | 756 | |
Amin Hassani | 6d0367d | 2020-05-10 18:07:03 -0700 | [diff] [blame] | 757 | EXPECT_TRUE(dlc_service_->Install(kSecondDlc, kDefaultOmahaUrl, &err_)); |
Jae Hoon Kim | 1c9d858 | 2019-10-14 10:52:05 -0700 | [diff] [blame] | 758 | |
Amin Hassani | 6d0367d | 2020-05-10 18:07:03 -0700 | [diff] [blame] | 759 | EXPECT_TRUE(base::PathExists(JoinPaths(content_path_, kSecondDlc))); |
| 760 | CheckDlcState(kSecondDlc, DlcState::INSTALLING); |
Jae Hoon Kim | 1c9d858 | 2019-10-14 10:52:05 -0700 | [diff] [blame] | 761 | |
| 762 | StatusResult status_result; |
| 763 | status_result.set_current_operation(Operation::IDLE); |
| 764 | status_result.set_is_install(false); |
Amin Hassani | c4cc1ee | 2019-11-14 11:51:35 -0800 | [diff] [blame] | 765 | dlc_service_->OnStatusUpdateAdvancedSignal(status_result); |
Jae Hoon Kim | 1c9d858 | 2019-10-14 10:52:05 -0700 | [diff] [blame] | 766 | |
Amin Hassani | 6d0367d | 2020-05-10 18:07:03 -0700 | [diff] [blame] | 767 | EXPECT_FALSE(base::PathExists(JoinPaths(content_path_, kSecondDlc))); |
Andrew | 48a55f2 | 2020-06-17 06:50:04 -0700 | [diff] [blame] | 768 | CheckDlcState(kSecondDlc, DlcState::NOT_INSTALLED, kErrorInternal); |
Jae Hoon Kim | 1c9d858 | 2019-10-14 10:52:05 -0700 | [diff] [blame] | 769 | } |
| 770 | |
Amin Hassani | aa38c79 | 2020-04-06 15:52:44 -0700 | [diff] [blame] | 771 | TEST_F(DlcServiceTest, OnStatusUpdateSignalDownloadProgressTest) { |
Amin Hassani | 111f2bc | 2020-04-17 11:53:32 -0700 | [diff] [blame] | 772 | EXPECT_CALL(*mock_update_engine_proxy_ptr_, AttemptInstall(_, _, _, _)) |
Jae Hoon Kim | 9090a12 | 2019-12-10 09:55:39 -0800 | [diff] [blame] | 773 | .WillOnce(Return(true)); |
Andrew | 51135f0 | 2020-03-02 14:29:07 -0800 | [diff] [blame] | 774 | EXPECT_CALL(*mock_update_engine_proxy_ptr_, |
| 775 | SetDlcActiveValue(true, kSecondDlc, _, _)) |
| 776 | .WillOnce(Return(true)); |
Jae Hoon Kim | 9090a12 | 2019-12-10 09:55:39 -0800 | [diff] [blame] | 777 | EXPECT_CALL(*mock_image_loader_proxy_ptr_, LoadDlcImage(_, _, _, _, _, _)) |
Jae Hoon Kim | a170cfb | 2020-03-11 09:02:29 -0700 | [diff] [blame] | 778 | .WillRepeatedly( |
| 779 | DoAll(SetArgPointee<3>(mount_path_.value()), Return(true))); |
Amin Hassani | 78a5ec8 | 2020-05-19 09:47:49 -0700 | [diff] [blame] | 780 | EXPECT_CALL(mock_state_change_reporter_, DlcStateChanged(_)).Times(2); |
Andrew | 0a534ed | 2020-05-06 09:59:17 -0700 | [diff] [blame] | 781 | EXPECT_CALL(*mock_metrics_, |
| 782 | SendInstallResult(InstallResult::kSuccessNewInstall)); |
Jae Hoon Kim | 39aa9de | 2019-11-20 09:52:06 -0800 | [diff] [blame] | 783 | |
Amin Hassani | 6d0367d | 2020-05-10 18:07:03 -0700 | [diff] [blame] | 784 | EXPECT_TRUE(dlc_service_->Install(kSecondDlc, kDefaultOmahaUrl, &err_)); |
| 785 | CheckDlcState(kSecondDlc, DlcState::INSTALLING); |
| 786 | |
Jae Hoon Kim | 39aa9de | 2019-11-20 09:52:06 -0800 | [diff] [blame] | 787 | StatusResult status_result; |
| 788 | status_result.set_is_install(true); |
| 789 | |
Jae Hoon Kim | ee1ba90 | 2020-03-11 09:53:01 -0700 | [diff] [blame] | 790 | const vector<Operation> install_operation_sequence = { |
Jae Hoon Kim | 39aa9de | 2019-11-20 09:52:06 -0800 | [diff] [blame] | 791 | Operation::CHECKING_FOR_UPDATE, Operation::UPDATE_AVAILABLE, |
| 792 | Operation::FINALIZING}; |
| 793 | |
| 794 | for (const auto& op : install_operation_sequence) { |
| 795 | status_result.set_current_operation(op); |
| 796 | dlc_service_->OnStatusUpdateAdvancedSignal(status_result); |
Jae Hoon Kim | 39aa9de | 2019-11-20 09:52:06 -0800 | [diff] [blame] | 797 | } |
| 798 | |
| 799 | status_result.set_current_operation(Operation::DOWNLOADING); |
| 800 | dlc_service_->OnStatusUpdateAdvancedSignal(status_result); |
Jae Hoon Kim | 39aa9de | 2019-11-20 09:52:06 -0800 | [diff] [blame] | 801 | |
Amin Hassani | 6d0367d | 2020-05-10 18:07:03 -0700 | [diff] [blame] | 802 | EXPECT_TRUE(dlc_service_->InstallCompleted({kSecondDlc}, &err_)); |
Jae Hoon Kim | 0d057fb | 2020-04-13 17:44:38 -0700 | [diff] [blame] | 803 | |
Jae Hoon Kim | 39aa9de | 2019-11-20 09:52:06 -0800 | [diff] [blame] | 804 | status_result.set_current_operation(Operation::IDLE); |
| 805 | dlc_service_->OnStatusUpdateAdvancedSignal(status_result); |
Jae Hoon Kim | ee1ba90 | 2020-03-11 09:53:01 -0700 | [diff] [blame] | 806 | |
Amin Hassani | 6d0367d | 2020-05-10 18:07:03 -0700 | [diff] [blame] | 807 | CheckDlcState(kSecondDlc, DlcState::INSTALLED); |
Jae Hoon Kim | 39aa9de | 2019-11-20 09:52:06 -0800 | [diff] [blame] | 808 | } |
| 809 | |
Amin Hassani | aa38c79 | 2020-04-06 15:52:44 -0700 | [diff] [blame] | 810 | TEST_F(DlcServiceTest, |
| 811 | OnStatusUpdateSignalSubsequentialBadOrNonInstalledDlcsNonBlocking) { |
Jae Hoon Kim | dcf783e | 2020-01-24 14:06:02 -0800 | [diff] [blame] | 812 | for (int i = 0; i < 5; i++) { |
Amin Hassani | 111f2bc | 2020-04-17 11:53:32 -0700 | [diff] [blame] | 813 | EXPECT_CALL(*mock_update_engine_proxy_ptr_, AttemptInstall(_, _, _, _)) |
Jae Hoon Kim | dcf783e | 2020-01-24 14:06:02 -0800 | [diff] [blame] | 814 | .WillOnce(Return(true)); |
Jae Hoon Kim | dcf783e | 2020-01-24 14:06:02 -0800 | [diff] [blame] | 815 | EXPECT_CALL(*mock_image_loader_proxy_ptr_, LoadDlcImage(_, _, _, _, _, _)) |
| 816 | .WillOnce(Return(false)); |
Andrew | 48a55f2 | 2020-06-17 06:50:04 -0700 | [diff] [blame] | 817 | EXPECT_CALL(mock_state_change_reporter_, DlcStateChanged(_)).Times(2); |
Andrew | 0a534ed | 2020-05-06 09:59:17 -0700 | [diff] [blame] | 818 | EXPECT_CALL(*mock_metrics_, |
| 819 | SendInstallResult(InstallResult::kFailedToMountImage)); |
Amin Hassani | 6d0367d | 2020-05-10 18:07:03 -0700 | [diff] [blame] | 820 | |
| 821 | EXPECT_TRUE(dlc_service_->Install(kSecondDlc, kDefaultOmahaUrl, &err_)); |
| 822 | CheckDlcState(kSecondDlc, DlcState::INSTALLING); |
| 823 | |
| 824 | EXPECT_TRUE(dlc_service_->InstallCompleted({kSecondDlc}, &err_)); |
| 825 | |
Jae Hoon Kim | dcf783e | 2020-01-24 14:06:02 -0800 | [diff] [blame] | 826 | StatusResult status_result; |
| 827 | status_result.set_is_install(true); |
| 828 | status_result.set_current_operation(Operation::IDLE); |
| 829 | dlc_service_->OnStatusUpdateAdvancedSignal(status_result); |
Vyshu | 9e36f00 | 2020-08-31 16:42:04 +0000 | [diff] [blame] | 830 | EXPECT_TRUE(base::PathExists(JoinPaths(content_path_, kSecondDlc))); |
Andrew | 48a55f2 | 2020-06-17 06:50:04 -0700 | [diff] [blame] | 831 | CheckDlcState(kSecondDlc, DlcState::NOT_INSTALLED, kErrorInternal); |
Jae Hoon Kim | dcf783e | 2020-01-24 14:06:02 -0800 | [diff] [blame] | 832 | } |
| 833 | } |
| 834 | |
Jae Hoon Kim | 9a27d15 | 2020-04-10 12:50:14 -0700 | [diff] [blame] | 835 | TEST_F(DlcServiceTest, InstallCompleted) { |
Amin Hassani | 6d0367d | 2020-05-10 18:07:03 -0700 | [diff] [blame] | 836 | EXPECT_TRUE(dlc_service_->InstallCompleted({kSecondDlc}, &err_)); |
Amin Hassani | 1ac2831 | 2020-06-04 18:16:30 -0700 | [diff] [blame] | 837 | EXPECT_TRUE(dlc_service_->GetDlc(kSecondDlc, &err_)->IsVerified()); |
Jae Hoon Kim | 9a27d15 | 2020-04-10 12:50:14 -0700 | [diff] [blame] | 838 | } |
| 839 | |
| 840 | TEST_F(DlcServiceTest, UpdateCompleted) { |
Jae Hoon Kim | 9a27d15 | 2020-04-10 12:50:14 -0700 | [diff] [blame] | 841 | auto inactive_boot_slot = SystemState::Get()->inactive_boot_slot(); |
Amin Hassani | 6d0367d | 2020-05-10 18:07:03 -0700 | [diff] [blame] | 842 | EXPECT_FALSE( |
| 843 | Prefs(DlcBase(kSecondDlc), inactive_boot_slot).Exists(kDlcPrefVerified)); |
Jae Hoon Kim | 9a27d15 | 2020-04-10 12:50:14 -0700 | [diff] [blame] | 844 | EXPECT_TRUE(dlc_service_->UpdateCompleted({kFirstDlc, kSecondDlc}, &err_)); |
Amin Hassani | 6d0367d | 2020-05-10 18:07:03 -0700 | [diff] [blame] | 845 | EXPECT_TRUE( |
| 846 | Prefs(DlcBase(kSecondDlc), inactive_boot_slot).Exists(kDlcPrefVerified)); |
Jae Hoon Kim | 9a27d15 | 2020-04-10 12:50:14 -0700 | [diff] [blame] | 847 | } |
| 848 | |
Jae Hoon Kim | 7d0001e | 2021-07-07 13:04:40 -0700 | [diff] [blame] | 849 | TEST_F(DlcServiceTest, UpdatedNeedRebootClearsInstalling) { |
| 850 | // TODO(kimjae): Eventually move all tests to use mocks instead of setup. |
| 851 | auto mock_dlc_manager = std::make_unique<StrictMock<MockDlcManager>>(); |
| 852 | auto* mock_dlc_manager_ptr = mock_dlc_manager.get(); |
| 853 | |
| 854 | dlc_service_->SetDlcManagerForTest(std::move(mock_dlc_manager)); |
| 855 | |
| 856 | EXPECT_CALL(*mock_dlc_manager_ptr, Install(_, _, _)) |
| 857 | .WillOnce(DoAll(SetArgPointee<1>(true), Return(true))); |
| 858 | EXPECT_CALL(*mock_dlc_manager_ptr, CancelInstall(kSecondDlc, _, _)) |
| 859 | .WillOnce(Return(true)); |
| 860 | EXPECT_CALL(*mock_metrics_, SendInstallResult(_)); |
| 861 | |
| 862 | StatusResult status; |
| 863 | status.set_current_operation(Operation::UPDATED_NEED_REBOOT); |
| 864 | SystemState::Get()->set_update_engine_status(status); |
| 865 | |
| 866 | EXPECT_FALSE(dlc_service_->Install(kSecondDlc, kDefaultOmahaUrl, &err_)); |
| 867 | } |
| 868 | |
| 869 | TEST_F(DlcServiceTest, UpdateEngineFailureClearsInstalling) { |
| 870 | // TODO(kimjae): Eventually move all tests to use mocks instead of setup. |
| 871 | auto mock_dlc_manager = std::make_unique<StrictMock<MockDlcManager>>(); |
| 872 | auto* mock_dlc_manager_ptr = mock_dlc_manager.get(); |
| 873 | |
| 874 | dlc_service_->SetDlcManagerForTest(std::move(mock_dlc_manager)); |
| 875 | |
| 876 | EXPECT_CALL(*mock_dlc_manager_ptr, Install(_, _, _)) |
| 877 | .WillOnce(DoAll(SetArgPointee<1>(true), Return(true))); |
| 878 | EXPECT_CALL(*mock_dlc_manager_ptr, CancelInstall(kSecondDlc, _, _)) |
| 879 | .WillOnce(Return(true)); |
| 880 | EXPECT_CALL(*mock_update_engine_proxy_ptr_, AttemptInstall(_, _, _, _)) |
| 881 | .WillOnce(Return(false)); |
| 882 | EXPECT_CALL(*mock_metrics_, SendInstallResult(_)); |
| 883 | |
| 884 | StatusResult status; |
| 885 | status.set_current_operation(Operation::IDLE); |
| 886 | SystemState::Get()->set_update_engine_status(status); |
| 887 | |
| 888 | EXPECT_FALSE(dlc_service_->Install(kSecondDlc, kDefaultOmahaUrl, &err_)); |
| 889 | } |
| 890 | |
Xiaochu Liu | c2b65f5 | 2018-07-20 12:47:05 -0700 | [diff] [blame] | 891 | } // namespace dlcservice |