xref: /aosp_15_r20/system/apex/apexd/apexd_session_test.cpp (revision 33f3758387333dbd2962d7edbd98681940d895da)
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