1*33f37583SAndroid Build Coastguard Worker /*
2*33f37583SAndroid Build Coastguard Worker * Copyright (C) 2020 The Android Open Source Project
3*33f37583SAndroid Build Coastguard Worker *
4*33f37583SAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License");
5*33f37583SAndroid Build Coastguard Worker * you may not use this file except in compliance with the License.
6*33f37583SAndroid Build Coastguard Worker * You may obtain a copy of the License at
7*33f37583SAndroid Build Coastguard Worker *
8*33f37583SAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0
9*33f37583SAndroid Build Coastguard Worker *
10*33f37583SAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software
11*33f37583SAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS,
12*33f37583SAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*33f37583SAndroid Build Coastguard Worker * See the License for the specific language governing permissions and
14*33f37583SAndroid Build Coastguard Worker * limitations under the License.
15*33f37583SAndroid Build Coastguard Worker */
16*33f37583SAndroid Build Coastguard Worker
17*33f37583SAndroid Build Coastguard Worker #include "apexd_session.h"
18*33f37583SAndroid Build Coastguard Worker
19*33f37583SAndroid Build Coastguard Worker #include <android-base/file.h>
20*33f37583SAndroid Build Coastguard Worker #include <android-base/result-gmock.h>
21*33f37583SAndroid Build Coastguard Worker #include <android-base/result.h>
22*33f37583SAndroid Build Coastguard Worker #include <android-base/scopeguard.h>
23*33f37583SAndroid Build Coastguard Worker #include <android-base/stringprintf.h>
24*33f37583SAndroid Build Coastguard Worker #include <android-base/strings.h>
25*33f37583SAndroid Build Coastguard Worker #include <errno.h>
26*33f37583SAndroid Build Coastguard Worker #include <gmock/gmock.h>
27*33f37583SAndroid Build Coastguard Worker #include <gtest/gtest.h>
28*33f37583SAndroid Build Coastguard Worker
29*33f37583SAndroid Build Coastguard Worker #include <algorithm>
30*33f37583SAndroid Build Coastguard Worker #include <filesystem>
31*33f37583SAndroid Build Coastguard Worker #include <fstream>
32*33f37583SAndroid Build Coastguard Worker #include <string>
33*33f37583SAndroid Build Coastguard Worker
34*33f37583SAndroid Build Coastguard Worker #include "apexd_test_utils.h"
35*33f37583SAndroid Build Coastguard Worker #include "apexd_utils.h"
36*33f37583SAndroid Build Coastguard Worker #include "session_state.pb.h"
37*33f37583SAndroid Build Coastguard Worker
38*33f37583SAndroid Build Coastguard Worker namespace android {
39*33f37583SAndroid Build Coastguard Worker namespace apex {
40*33f37583SAndroid Build Coastguard Worker namespace {
41*33f37583SAndroid Build Coastguard Worker
42*33f37583SAndroid Build Coastguard Worker using android::base::Join;
43*33f37583SAndroid Build Coastguard Worker using android::base::make_scope_guard;
44*33f37583SAndroid Build Coastguard Worker using android::base::testing::Ok;
45*33f37583SAndroid Build Coastguard Worker using ::apex::proto::SessionState;
46*33f37583SAndroid Build Coastguard Worker using ::testing::Not;
47*33f37583SAndroid Build Coastguard Worker using ::testing::UnorderedElementsAre;
48*33f37583SAndroid Build Coastguard Worker
49*33f37583SAndroid Build Coastguard Worker // TODO(b/170329726): add unit tests for apexd_sessions.h
50*33f37583SAndroid Build Coastguard Worker
TEST(ApexdSessionTest,GetSessionsDirSessionsStoredInMetadata)51*33f37583SAndroid Build Coastguard Worker TEST(ApexdSessionTest, GetSessionsDirSessionsStoredInMetadata) {
52*33f37583SAndroid Build Coastguard Worker if (access("/metadata", F_OK) != 0) {
53*33f37583SAndroid Build Coastguard Worker GTEST_SKIP() << "Device doesn't have /metadata partition";
54*33f37583SAndroid Build Coastguard Worker }
55*33f37583SAndroid Build Coastguard Worker
56*33f37583SAndroid Build Coastguard Worker std::string result = GetSessionsDir();
57*33f37583SAndroid Build Coastguard Worker ASSERT_EQ(result, "/metadata/apex/sessions");
58*33f37583SAndroid Build Coastguard Worker }
59*33f37583SAndroid Build Coastguard Worker
TEST(ApexdSessionTest,GetSessionsDirNoMetadataPartitionFallbackToData)60*33f37583SAndroid Build Coastguard Worker TEST(ApexdSessionTest, GetSessionsDirNoMetadataPartitionFallbackToData) {
61*33f37583SAndroid Build Coastguard Worker if (access("/metadata", F_OK) == 0) {
62*33f37583SAndroid Build Coastguard Worker GTEST_SKIP() << "Device has /metadata partition";
63*33f37583SAndroid Build Coastguard Worker }
64*33f37583SAndroid Build Coastguard Worker
65*33f37583SAndroid Build Coastguard Worker std::string result = GetSessionsDir();
66*33f37583SAndroid Build Coastguard Worker ASSERT_EQ(result, "/data/apex/sessions");
67*33f37583SAndroid Build Coastguard Worker }
68*33f37583SAndroid Build Coastguard Worker
TEST(ApexSessionManagerTest,CreateSession)69*33f37583SAndroid Build Coastguard Worker TEST(ApexSessionManagerTest, CreateSession) {
70*33f37583SAndroid Build Coastguard Worker TemporaryDir td;
71*33f37583SAndroid Build Coastguard Worker auto manager = ApexSessionManager::Create(std::string(td.path));
72*33f37583SAndroid Build Coastguard Worker
73*33f37583SAndroid Build Coastguard Worker auto session = manager->CreateSession(239);
74*33f37583SAndroid Build Coastguard Worker ASSERT_RESULT_OK(session);
75*33f37583SAndroid Build Coastguard Worker ASSERT_EQ(239, session->GetId());
76*33f37583SAndroid Build Coastguard Worker std::string session_dir = std::string(td.path) + "/239";
77*33f37583SAndroid Build Coastguard Worker ASSERT_EQ(session_dir, session->GetSessionDir());
78*33f37583SAndroid Build Coastguard Worker }
79*33f37583SAndroid Build Coastguard Worker
TEST(ApexSessionManagerTest,GetSessionsNoSessionReturnsError)80*33f37583SAndroid Build Coastguard Worker TEST(ApexSessionManagerTest, GetSessionsNoSessionReturnsError) {
81*33f37583SAndroid Build Coastguard Worker TemporaryDir td;
82*33f37583SAndroid Build Coastguard Worker auto manager = ApexSessionManager::Create(std::string(td.path));
83*33f37583SAndroid Build Coastguard Worker
84*33f37583SAndroid Build Coastguard Worker ASSERT_THAT(manager->GetSession(37), Not(Ok()));
85*33f37583SAndroid Build Coastguard Worker }
86*33f37583SAndroid Build Coastguard Worker
TEST(ApexSessionManagerTest,GetSessionsReturnsErrorSessionNotCommitted)87*33f37583SAndroid Build Coastguard Worker TEST(ApexSessionManagerTest, GetSessionsReturnsErrorSessionNotCommitted) {
88*33f37583SAndroid Build Coastguard Worker TemporaryDir td;
89*33f37583SAndroid Build Coastguard Worker auto manager = ApexSessionManager::Create(std::string(td.path));
90*33f37583SAndroid Build Coastguard Worker
91*33f37583SAndroid Build Coastguard Worker auto session = manager->CreateSession(73);
92*33f37583SAndroid Build Coastguard Worker ASSERT_RESULT_OK(session);
93*33f37583SAndroid Build Coastguard Worker ASSERT_THAT(manager->GetSession(73), Not(Ok()));
94*33f37583SAndroid Build Coastguard Worker }
95*33f37583SAndroid Build Coastguard Worker
TEST(ApexSessionManagerTest,CreateCommitGetSession)96*33f37583SAndroid Build Coastguard Worker TEST(ApexSessionManagerTest, CreateCommitGetSession) {
97*33f37583SAndroid Build Coastguard Worker TemporaryDir td;
98*33f37583SAndroid Build Coastguard Worker auto manager = ApexSessionManager::Create(std::string(td.path));
99*33f37583SAndroid Build Coastguard Worker
100*33f37583SAndroid Build Coastguard Worker auto session = manager->CreateSession(23);
101*33f37583SAndroid Build Coastguard Worker ASSERT_RESULT_OK(session);
102*33f37583SAndroid Build Coastguard Worker session->SetErrorMessage("error");
103*33f37583SAndroid Build Coastguard Worker ASSERT_RESULT_OK(session->UpdateStateAndCommit(SessionState::STAGED));
104*33f37583SAndroid Build Coastguard Worker
105*33f37583SAndroid Build Coastguard Worker auto same_session = manager->GetSession(23);
106*33f37583SAndroid Build Coastguard Worker ASSERT_RESULT_OK(same_session);
107*33f37583SAndroid Build Coastguard Worker ASSERT_EQ(23, same_session->GetId());
108*33f37583SAndroid Build Coastguard Worker ASSERT_EQ("error", same_session->GetErrorMessage());
109*33f37583SAndroid Build Coastguard Worker ASSERT_EQ(SessionState::STAGED, same_session->GetState());
110*33f37583SAndroid Build Coastguard Worker }
111*33f37583SAndroid Build Coastguard Worker
TEST(ApexSessionManagerTest,GetSessionsNoSessionsCommitted)112*33f37583SAndroid Build Coastguard Worker TEST(ApexSessionManagerTest, GetSessionsNoSessionsCommitted) {
113*33f37583SAndroid Build Coastguard Worker TemporaryDir td;
114*33f37583SAndroid Build Coastguard Worker auto manager = ApexSessionManager::Create(std::string(td.path));
115*33f37583SAndroid Build Coastguard Worker
116*33f37583SAndroid Build Coastguard Worker ASSERT_RESULT_OK(manager->CreateSession(3));
117*33f37583SAndroid Build Coastguard Worker
118*33f37583SAndroid Build Coastguard Worker auto sessions = manager->GetSessions();
119*33f37583SAndroid Build Coastguard Worker ASSERT_EQ(0u, sessions.size());
120*33f37583SAndroid Build Coastguard Worker }
121*33f37583SAndroid Build Coastguard Worker
TEST(ApexSessionManager,GetSessionsCommittedSessions)122*33f37583SAndroid Build Coastguard Worker TEST(ApexSessionManager, GetSessionsCommittedSessions) {
123*33f37583SAndroid Build Coastguard Worker TemporaryDir td;
124*33f37583SAndroid Build Coastguard Worker auto manager = ApexSessionManager::Create(std::string(td.path));
125*33f37583SAndroid Build Coastguard Worker
126*33f37583SAndroid Build Coastguard Worker auto session1 = manager->CreateSession(1543);
127*33f37583SAndroid Build Coastguard Worker ASSERT_RESULT_OK(session1);
128*33f37583SAndroid Build Coastguard Worker ASSERT_RESULT_OK(session1->UpdateStateAndCommit(SessionState::ACTIVATED));
129*33f37583SAndroid Build Coastguard Worker
130*33f37583SAndroid Build Coastguard Worker auto session2 = manager->CreateSession(179);
131*33f37583SAndroid Build Coastguard Worker ASSERT_RESULT_OK(session2);
132*33f37583SAndroid Build Coastguard Worker ASSERT_RESULT_OK(session2->UpdateStateAndCommit(SessionState::SUCCESS));
133*33f37583SAndroid Build Coastguard Worker
134*33f37583SAndroid Build Coastguard Worker // This sessions is not committed, it won't be returned in GetSessions.
135*33f37583SAndroid Build Coastguard Worker ASSERT_RESULT_OK(manager->CreateSession(101));
136*33f37583SAndroid Build Coastguard Worker
137*33f37583SAndroid Build Coastguard Worker auto sessions = manager->GetSessions();
138*33f37583SAndroid Build Coastguard Worker std::sort(
139*33f37583SAndroid Build Coastguard Worker sessions.begin(), sessions.end(),
140*33f37583SAndroid Build Coastguard Worker [](const auto& s1, const auto& s2) { return s1.GetId() < s2.GetId(); });
141*33f37583SAndroid Build Coastguard Worker
142*33f37583SAndroid Build Coastguard Worker ASSERT_EQ(2u, sessions.size());
143*33f37583SAndroid Build Coastguard Worker
144*33f37583SAndroid Build Coastguard Worker ASSERT_EQ(179, sessions[0].GetId());
145*33f37583SAndroid Build Coastguard Worker ASSERT_EQ(SessionState::SUCCESS, sessions[0].GetState());
146*33f37583SAndroid Build Coastguard Worker
147*33f37583SAndroid Build Coastguard Worker ASSERT_EQ(1543, sessions[1].GetId());
148*33f37583SAndroid Build Coastguard Worker ASSERT_EQ(SessionState::ACTIVATED, sessions[1].GetState());
149*33f37583SAndroid Build Coastguard Worker }
150*33f37583SAndroid Build Coastguard Worker
TEST(ApexSessionManager,GetSessionsInState)151*33f37583SAndroid Build Coastguard Worker TEST(ApexSessionManager, GetSessionsInState) {
152*33f37583SAndroid Build Coastguard Worker TemporaryDir td;
153*33f37583SAndroid Build Coastguard Worker auto manager = ApexSessionManager::Create(std::string(td.path));
154*33f37583SAndroid Build Coastguard Worker
155*33f37583SAndroid Build Coastguard Worker auto session1 = manager->CreateSession(43);
156*33f37583SAndroid Build Coastguard Worker ASSERT_RESULT_OK(session1);
157*33f37583SAndroid Build Coastguard Worker ASSERT_RESULT_OK(session1->UpdateStateAndCommit(SessionState::ACTIVATED));
158*33f37583SAndroid Build Coastguard Worker
159*33f37583SAndroid Build Coastguard Worker auto session2 = manager->CreateSession(41);
160*33f37583SAndroid Build Coastguard Worker ASSERT_RESULT_OK(session2);
161*33f37583SAndroid Build Coastguard Worker ASSERT_RESULT_OK(session2->UpdateStateAndCommit(SessionState::SUCCESS));
162*33f37583SAndroid Build Coastguard Worker
163*33f37583SAndroid Build Coastguard Worker auto session3 = manager->CreateSession(23);
164*33f37583SAndroid Build Coastguard Worker ASSERT_RESULT_OK(session3);
165*33f37583SAndroid Build Coastguard Worker ASSERT_RESULT_OK(session3->UpdateStateAndCommit(SessionState::SUCCESS));
166*33f37583SAndroid Build Coastguard Worker
167*33f37583SAndroid Build Coastguard Worker auto sessions = manager->GetSessionsInState(SessionState::SUCCESS);
168*33f37583SAndroid Build Coastguard Worker std::sort(
169*33f37583SAndroid Build Coastguard Worker sessions.begin(), sessions.end(),
170*33f37583SAndroid Build Coastguard Worker [](const auto& s1, const auto& s2) { return s1.GetId() < s2.GetId(); });
171*33f37583SAndroid Build Coastguard Worker
172*33f37583SAndroid Build Coastguard Worker ASSERT_EQ(2u, sessions.size());
173*33f37583SAndroid Build Coastguard Worker
174*33f37583SAndroid Build Coastguard Worker ASSERT_EQ(23, sessions[0].GetId());
175*33f37583SAndroid Build Coastguard Worker ASSERT_EQ(SessionState::SUCCESS, sessions[0].GetState());
176*33f37583SAndroid Build Coastguard Worker
177*33f37583SAndroid Build Coastguard Worker ASSERT_EQ(41, sessions[1].GetId());
178*33f37583SAndroid Build Coastguard Worker ASSERT_EQ(SessionState::SUCCESS, sessions[1].GetState());
179*33f37583SAndroid Build Coastguard Worker }
180*33f37583SAndroid Build Coastguard Worker
TEST(ApexSessionManager,MigrateFromOldSessionsDir)181*33f37583SAndroid Build Coastguard Worker TEST(ApexSessionManager, MigrateFromOldSessionsDir) {
182*33f37583SAndroid Build Coastguard Worker TemporaryDir td;
183*33f37583SAndroid Build Coastguard Worker auto old_manager = ApexSessionManager::Create(std::string(td.path));
184*33f37583SAndroid Build Coastguard Worker
185*33f37583SAndroid Build Coastguard Worker auto session1 = old_manager->CreateSession(239);
186*33f37583SAndroid Build Coastguard Worker ASSERT_RESULT_OK(session1);
187*33f37583SAndroid Build Coastguard Worker ASSERT_RESULT_OK(session1->UpdateStateAndCommit(SessionState::STAGED));
188*33f37583SAndroid Build Coastguard Worker
189*33f37583SAndroid Build Coastguard Worker auto session2 = old_manager->CreateSession(13);
190*33f37583SAndroid Build Coastguard Worker ASSERT_RESULT_OK(session2);
191*33f37583SAndroid Build Coastguard Worker ASSERT_RESULT_OK(session2->UpdateStateAndCommit(SessionState::SUCCESS));
192*33f37583SAndroid Build Coastguard Worker
193*33f37583SAndroid Build Coastguard Worker auto session3 = old_manager->CreateSession(31);
194*33f37583SAndroid Build Coastguard Worker ASSERT_RESULT_OK(session3);
195*33f37583SAndroid Build Coastguard Worker ASSERT_RESULT_OK(session3->UpdateStateAndCommit(SessionState::ACTIVATED));
196*33f37583SAndroid Build Coastguard Worker
197*33f37583SAndroid Build Coastguard Worker TemporaryDir td2;
198*33f37583SAndroid Build Coastguard Worker auto new_manager = ApexSessionManager::Create(std::string(td2.path));
199*33f37583SAndroid Build Coastguard Worker
200*33f37583SAndroid Build Coastguard Worker ASSERT_RESULT_OK(
201*33f37583SAndroid Build Coastguard Worker new_manager->MigrateFromOldSessionsDir(std::string(td.path)));
202*33f37583SAndroid Build Coastguard Worker
203*33f37583SAndroid Build Coastguard Worker auto sessions = new_manager->GetSessions();
204*33f37583SAndroid Build Coastguard Worker std::sort(
205*33f37583SAndroid Build Coastguard Worker sessions.begin(), sessions.end(),
206*33f37583SAndroid Build Coastguard Worker [](const auto& s1, const auto& s2) { return s1.GetId() < s2.GetId(); });
207*33f37583SAndroid Build Coastguard Worker
208*33f37583SAndroid Build Coastguard Worker ASSERT_EQ(3u, sessions.size());
209*33f37583SAndroid Build Coastguard Worker
210*33f37583SAndroid Build Coastguard Worker ASSERT_EQ(13, sessions[0].GetId());
211*33f37583SAndroid Build Coastguard Worker ASSERT_EQ(SessionState::SUCCESS, sessions[0].GetState());
212*33f37583SAndroid Build Coastguard Worker
213*33f37583SAndroid Build Coastguard Worker ASSERT_EQ(31, sessions[1].GetId());
214*33f37583SAndroid Build Coastguard Worker ASSERT_EQ(SessionState::ACTIVATED, sessions[1].GetState());
215*33f37583SAndroid Build Coastguard Worker
216*33f37583SAndroid Build Coastguard Worker ASSERT_EQ(239, sessions[2].GetId());
217*33f37583SAndroid Build Coastguard Worker ASSERT_EQ(SessionState::STAGED, sessions[2].GetState());
218*33f37583SAndroid Build Coastguard Worker
219*33f37583SAndroid Build Coastguard Worker // Check that old manager directory doesn't have anything
220*33f37583SAndroid Build Coastguard Worker auto old_sessions = old_manager->GetSessions();
221*33f37583SAndroid Build Coastguard Worker ASSERT_TRUE(old_sessions.empty());
222*33f37583SAndroid Build Coastguard Worker }
223*33f37583SAndroid Build Coastguard Worker
TEST(ApexSessionManager,MigrateFromOldSessionsDirSameDir)224*33f37583SAndroid Build Coastguard Worker TEST(ApexSessionManager, MigrateFromOldSessionsDirSameDir) {
225*33f37583SAndroid Build Coastguard Worker TemporaryDir td;
226*33f37583SAndroid Build Coastguard Worker auto old_manager = ApexSessionManager::Create(std::string(td.path));
227*33f37583SAndroid Build Coastguard Worker
228*33f37583SAndroid Build Coastguard Worker auto session1 = old_manager->CreateSession(239);
229*33f37583SAndroid Build Coastguard Worker ASSERT_RESULT_OK(session1);
230*33f37583SAndroid Build Coastguard Worker ASSERT_RESULT_OK(session1->UpdateStateAndCommit(SessionState::STAGED));
231*33f37583SAndroid Build Coastguard Worker
232*33f37583SAndroid Build Coastguard Worker auto session2 = old_manager->CreateSession(13);
233*33f37583SAndroid Build Coastguard Worker ASSERT_RESULT_OK(session2);
234*33f37583SAndroid Build Coastguard Worker ASSERT_RESULT_OK(session2->UpdateStateAndCommit(SessionState::SUCCESS));
235*33f37583SAndroid Build Coastguard Worker
236*33f37583SAndroid Build Coastguard Worker auto session3 = old_manager->CreateSession(31);
237*33f37583SAndroid Build Coastguard Worker ASSERT_RESULT_OK(session3);
238*33f37583SAndroid Build Coastguard Worker ASSERT_RESULT_OK(session3->UpdateStateAndCommit(SessionState::ACTIVATED));
239*33f37583SAndroid Build Coastguard Worker
240*33f37583SAndroid Build Coastguard Worker auto new_manager = ApexSessionManager::Create(std::string(td.path));
241*33f37583SAndroid Build Coastguard Worker
242*33f37583SAndroid Build Coastguard Worker ASSERT_RESULT_OK(
243*33f37583SAndroid Build Coastguard Worker new_manager->MigrateFromOldSessionsDir(std::string(td.path)));
244*33f37583SAndroid Build Coastguard Worker
245*33f37583SAndroid Build Coastguard Worker auto sessions = new_manager->GetSessions();
246*33f37583SAndroid Build Coastguard Worker std::sort(
247*33f37583SAndroid Build Coastguard Worker sessions.begin(), sessions.end(),
248*33f37583SAndroid Build Coastguard Worker [](const auto& s1, const auto& s2) { return s1.GetId() < s2.GetId(); });
249*33f37583SAndroid Build Coastguard Worker
250*33f37583SAndroid Build Coastguard Worker ASSERT_EQ(3u, sessions.size());
251*33f37583SAndroid Build Coastguard Worker
252*33f37583SAndroid Build Coastguard Worker ASSERT_EQ(13, sessions[0].GetId());
253*33f37583SAndroid Build Coastguard Worker ASSERT_EQ(SessionState::SUCCESS, sessions[0].GetState());
254*33f37583SAndroid Build Coastguard Worker
255*33f37583SAndroid Build Coastguard Worker ASSERT_EQ(31, sessions[1].GetId());
256*33f37583SAndroid Build Coastguard Worker ASSERT_EQ(SessionState::ACTIVATED, sessions[1].GetState());
257*33f37583SAndroid Build Coastguard Worker
258*33f37583SAndroid Build Coastguard Worker ASSERT_EQ(239, sessions[2].GetId());
259*33f37583SAndroid Build Coastguard Worker ASSERT_EQ(SessionState::STAGED, sessions[2].GetState());
260*33f37583SAndroid Build Coastguard Worker
261*33f37583SAndroid Build Coastguard Worker // Directory is the same, so using old_manager should also work.
262*33f37583SAndroid Build Coastguard Worker auto old_sessions = old_manager->GetSessions();
263*33f37583SAndroid Build Coastguard Worker std::sort(
264*33f37583SAndroid Build Coastguard Worker old_sessions.begin(), old_sessions.end(),
265*33f37583SAndroid Build Coastguard Worker [](const auto& s1, const auto& s2) { return s1.GetId() < s2.GetId(); });
266*33f37583SAndroid Build Coastguard Worker
267*33f37583SAndroid Build Coastguard Worker ASSERT_EQ(3u, old_sessions.size());
268*33f37583SAndroid Build Coastguard Worker
269*33f37583SAndroid Build Coastguard Worker ASSERT_EQ(13, old_sessions[0].GetId());
270*33f37583SAndroid Build Coastguard Worker ASSERT_EQ(SessionState::SUCCESS, old_sessions[0].GetState());
271*33f37583SAndroid Build Coastguard Worker
272*33f37583SAndroid Build Coastguard Worker ASSERT_EQ(31, old_sessions[1].GetId());
273*33f37583SAndroid Build Coastguard Worker ASSERT_EQ(SessionState::ACTIVATED, old_sessions[1].GetState());
274*33f37583SAndroid Build Coastguard Worker
275*33f37583SAndroid Build Coastguard Worker ASSERT_EQ(239, old_sessions[2].GetId());
276*33f37583SAndroid Build Coastguard Worker ASSERT_EQ(SessionState::STAGED, old_sessions[2].GetState());
277*33f37583SAndroid Build Coastguard Worker }
278*33f37583SAndroid Build Coastguard Worker
TEST(ApexSessionManagerTest,GetStagedApexDirsSelf)279*33f37583SAndroid Build Coastguard Worker TEST(ApexSessionManagerTest, GetStagedApexDirsSelf) {
280*33f37583SAndroid Build Coastguard Worker TemporaryDir td;
281*33f37583SAndroid Build Coastguard Worker auto manager = ApexSessionManager::Create(std::string(td.path));
282*33f37583SAndroid Build Coastguard Worker
283*33f37583SAndroid Build Coastguard Worker auto session = manager->CreateSession(239);
284*33f37583SAndroid Build Coastguard Worker ASSERT_RESULT_OK(session);
285*33f37583SAndroid Build Coastguard Worker
286*33f37583SAndroid Build Coastguard Worker ASSERT_THAT(session->GetStagedApexDirs("/path/to/staged_session_dir"),
287*33f37583SAndroid Build Coastguard Worker UnorderedElementsAre("/path/to/staged_session_dir/session_239"));
288*33f37583SAndroid Build Coastguard Worker }
289*33f37583SAndroid Build Coastguard Worker
TEST(ApexSessionManagerTest,GetStagedApexDirsChildren)290*33f37583SAndroid Build Coastguard Worker TEST(ApexSessionManagerTest, GetStagedApexDirsChildren) {
291*33f37583SAndroid Build Coastguard Worker TemporaryDir td;
292*33f37583SAndroid Build Coastguard Worker auto manager = ApexSessionManager::Create(std::string(td.path));
293*33f37583SAndroid Build Coastguard Worker
294*33f37583SAndroid Build Coastguard Worker auto session = manager->CreateSession(239);
295*33f37583SAndroid Build Coastguard Worker ASSERT_RESULT_OK(session);
296*33f37583SAndroid Build Coastguard Worker auto child_session_1 = manager->CreateSession(240);
297*33f37583SAndroid Build Coastguard Worker ASSERT_RESULT_OK(child_session_1);
298*33f37583SAndroid Build Coastguard Worker auto child_session_2 = manager->CreateSession(241);
299*33f37583SAndroid Build Coastguard Worker ASSERT_RESULT_OK(child_session_2);
300*33f37583SAndroid Build Coastguard Worker session->SetChildSessionIds({240, 241});
301*33f37583SAndroid Build Coastguard Worker
302*33f37583SAndroid Build Coastguard Worker ASSERT_THAT(session->GetStagedApexDirs("/path/to/staged_session_dir"),
303*33f37583SAndroid Build Coastguard Worker UnorderedElementsAre("/path/to/staged_session_dir/session_240",
304*33f37583SAndroid Build Coastguard Worker "/path/to/staged_session_dir/session_241"));
305*33f37583SAndroid Build Coastguard Worker }
306*33f37583SAndroid Build Coastguard Worker
307*33f37583SAndroid Build Coastguard Worker } // namespace
308*33f37583SAndroid Build Coastguard Worker } // namespace apex
309*33f37583SAndroid Build Coastguard Worker } // namespace android
310