1*d57664e9SAndroid Build Coastguard Worker /*
2*d57664e9SAndroid Build Coastguard Worker * Copyright (C) 2018 The Android Open Source Project
3*d57664e9SAndroid Build Coastguard Worker *
4*d57664e9SAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License");
5*d57664e9SAndroid Build Coastguard Worker * you may not use this file except in compliance with the License.
6*d57664e9SAndroid Build Coastguard Worker * You may obtain a copy of the License at
7*d57664e9SAndroid Build Coastguard Worker *
8*d57664e9SAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0
9*d57664e9SAndroid Build Coastguard Worker *
10*d57664e9SAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software
11*d57664e9SAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS,
12*d57664e9SAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*d57664e9SAndroid Build Coastguard Worker * See the License for the specific language governing permissions and
14*d57664e9SAndroid Build Coastguard Worker * limitations under the License.
15*d57664e9SAndroid Build Coastguard Worker */
16*d57664e9SAndroid Build Coastguard Worker
17*d57664e9SAndroid Build Coastguard Worker /*
18*d57664e9SAndroid Build Coastguard Worker * The tests in this file operate on a higher level than the tests in the other
19*d57664e9SAndroid Build Coastguard Worker * files. Here, all tests execute the idmap2 binary and only depend on
20*d57664e9SAndroid Build Coastguard Worker * libidmap2 to verify the output of idmap2.
21*d57664e9SAndroid Build Coastguard Worker */
22*d57664e9SAndroid Build Coastguard Worker #include <fcntl.h>
23*d57664e9SAndroid Build Coastguard Worker #include <sys/stat.h>
24*d57664e9SAndroid Build Coastguard Worker #include <sys/types.h>
25*d57664e9SAndroid Build Coastguard Worker #include <sys/wait.h>
26*d57664e9SAndroid Build Coastguard Worker #include <unistd.h>
27*d57664e9SAndroid Build Coastguard Worker
28*d57664e9SAndroid Build Coastguard Worker #include <cerrno>
29*d57664e9SAndroid Build Coastguard Worker #include <cstdlib>
30*d57664e9SAndroid Build Coastguard Worker #include <cstring> // strerror
31*d57664e9SAndroid Build Coastguard Worker #include <fstream>
32*d57664e9SAndroid Build Coastguard Worker #include <memory>
33*d57664e9SAndroid Build Coastguard Worker #include <sstream>
34*d57664e9SAndroid Build Coastguard Worker #include <string>
35*d57664e9SAndroid Build Coastguard Worker #include <vector>
36*d57664e9SAndroid Build Coastguard Worker
37*d57664e9SAndroid Build Coastguard Worker #include "R.h"
38*d57664e9SAndroid Build Coastguard Worker #include "TestConstants.h"
39*d57664e9SAndroid Build Coastguard Worker #include "TestHelpers.h"
40*d57664e9SAndroid Build Coastguard Worker #include "androidfw/PosixUtils.h"
41*d57664e9SAndroid Build Coastguard Worker #include "gmock/gmock.h"
42*d57664e9SAndroid Build Coastguard Worker #include "gtest/gtest.h"
43*d57664e9SAndroid Build Coastguard Worker #include "idmap2/FileUtils.h"
44*d57664e9SAndroid Build Coastguard Worker #include "idmap2/Idmap.h"
45*d57664e9SAndroid Build Coastguard Worker #include "private/android_filesystem_config.h"
46*d57664e9SAndroid Build Coastguard Worker
47*d57664e9SAndroid Build Coastguard Worker using ::android::base::StringPrintf;
48*d57664e9SAndroid Build Coastguard Worker using ::android::util::ExecuteBinary;
49*d57664e9SAndroid Build Coastguard Worker
50*d57664e9SAndroid Build Coastguard Worker namespace android::idmap2 {
51*d57664e9SAndroid Build Coastguard Worker
52*d57664e9SAndroid Build Coastguard Worker class Idmap2BinaryTests : public Idmap2Tests {};
53*d57664e9SAndroid Build Coastguard Worker
54*d57664e9SAndroid Build Coastguard Worker namespace {
55*d57664e9SAndroid Build Coastguard Worker
AssertIdmap(const Idmap & idmap,const std::string & target_apk_path,const std::string & overlay_apk_path)56*d57664e9SAndroid Build Coastguard Worker void AssertIdmap(const Idmap& idmap, const std::string& target_apk_path,
57*d57664e9SAndroid Build Coastguard Worker const std::string& overlay_apk_path) {
58*d57664e9SAndroid Build Coastguard Worker // check that the idmap file looks reasonable (IdmapTests is responsible for
59*d57664e9SAndroid Build Coastguard Worker // more in-depth verification)
60*d57664e9SAndroid Build Coastguard Worker ASSERT_EQ(idmap.GetHeader()->GetMagic(), kIdmapMagic);
61*d57664e9SAndroid Build Coastguard Worker ASSERT_EQ(idmap.GetHeader()->GetVersion(), kIdmapCurrentVersion);
62*d57664e9SAndroid Build Coastguard Worker ASSERT_EQ(idmap.GetHeader()->GetTargetPath(), target_apk_path);
63*d57664e9SAndroid Build Coastguard Worker ASSERT_EQ(idmap.GetHeader()->GetOverlayPath(), overlay_apk_path);
64*d57664e9SAndroid Build Coastguard Worker ASSERT_EQ(idmap.GetData().size(), 1U);
65*d57664e9SAndroid Build Coastguard Worker }
66*d57664e9SAndroid Build Coastguard Worker
67*d57664e9SAndroid Build Coastguard Worker #define ASSERT_IDMAP(idmap_ref, target_apk_path, overlay_apk_path) \
68*d57664e9SAndroid Build Coastguard Worker do { \
69*d57664e9SAndroid Build Coastguard Worker ASSERT_NO_FATAL_FAILURE(AssertIdmap(idmap_ref, target_apk_path, overlay_apk_path)); \
70*d57664e9SAndroid Build Coastguard Worker } while (0)
71*d57664e9SAndroid Build Coastguard Worker
72*d57664e9SAndroid Build Coastguard Worker #ifdef __ANDROID__
73*d57664e9SAndroid Build Coastguard Worker #define SKIP_TEST_IF_CANT_EXEC_IDMAP2 \
74*d57664e9SAndroid Build Coastguard Worker do { \
75*d57664e9SAndroid Build Coastguard Worker const uid_t uid = getuid(); \
76*d57664e9SAndroid Build Coastguard Worker if (uid != AID_ROOT && uid != AID_SYSTEM) { \
77*d57664e9SAndroid Build Coastguard Worker GTEST_SKIP(); \
78*d57664e9SAndroid Build Coastguard Worker } \
79*d57664e9SAndroid Build Coastguard Worker } while (0)
80*d57664e9SAndroid Build Coastguard Worker #else
81*d57664e9SAndroid Build Coastguard Worker #define SKIP_TEST_IF_CANT_EXEC_IDMAP2
82*d57664e9SAndroid Build Coastguard Worker #endif
83*d57664e9SAndroid Build Coastguard Worker
84*d57664e9SAndroid Build Coastguard Worker } // namespace
85*d57664e9SAndroid Build Coastguard Worker
TEST_F(Idmap2BinaryTests,Create)86*d57664e9SAndroid Build Coastguard Worker TEST_F(Idmap2BinaryTests, Create) {
87*d57664e9SAndroid Build Coastguard Worker SKIP_TEST_IF_CANT_EXEC_IDMAP2;
88*d57664e9SAndroid Build Coastguard Worker
89*d57664e9SAndroid Build Coastguard Worker // clang-format off
90*d57664e9SAndroid Build Coastguard Worker auto result = ExecuteBinary({"idmap2",
91*d57664e9SAndroid Build Coastguard Worker "create",
92*d57664e9SAndroid Build Coastguard Worker "--target-apk-path", GetTargetApkPath(),
93*d57664e9SAndroid Build Coastguard Worker "--overlay-apk-path", GetOverlayApkPath(),
94*d57664e9SAndroid Build Coastguard Worker "--overlay-name", TestConstants::OVERLAY_NAME_DEFAULT,
95*d57664e9SAndroid Build Coastguard Worker "--idmap-path", GetIdmapPath()});
96*d57664e9SAndroid Build Coastguard Worker // clang-format on
97*d57664e9SAndroid Build Coastguard Worker ASSERT_TRUE((bool)result);
98*d57664e9SAndroid Build Coastguard Worker ASSERT_EQ(result.status, EXIT_SUCCESS) << result.stderr_str;
99*d57664e9SAndroid Build Coastguard Worker
100*d57664e9SAndroid Build Coastguard Worker struct stat st;
101*d57664e9SAndroid Build Coastguard Worker ASSERT_EQ(stat(GetIdmapPath().c_str(), &st), 0);
102*d57664e9SAndroid Build Coastguard Worker
103*d57664e9SAndroid Build Coastguard Worker std::ifstream fin(GetIdmapPath());
104*d57664e9SAndroid Build Coastguard Worker const auto idmap = Idmap::FromBinaryStream(fin);
105*d57664e9SAndroid Build Coastguard Worker fin.close();
106*d57664e9SAndroid Build Coastguard Worker
107*d57664e9SAndroid Build Coastguard Worker ASSERT_TRUE(idmap);
108*d57664e9SAndroid Build Coastguard Worker ASSERT_IDMAP(**idmap, GetTargetApkPath(), GetOverlayApkPath());
109*d57664e9SAndroid Build Coastguard Worker
110*d57664e9SAndroid Build Coastguard Worker unlink(GetIdmapPath().c_str());
111*d57664e9SAndroid Build Coastguard Worker }
112*d57664e9SAndroid Build Coastguard Worker
TEST_F(Idmap2BinaryTests,Dump)113*d57664e9SAndroid Build Coastguard Worker TEST_F(Idmap2BinaryTests, Dump) {
114*d57664e9SAndroid Build Coastguard Worker SKIP_TEST_IF_CANT_EXEC_IDMAP2;
115*d57664e9SAndroid Build Coastguard Worker
116*d57664e9SAndroid Build Coastguard Worker // clang-format off
117*d57664e9SAndroid Build Coastguard Worker auto result = ExecuteBinary({"idmap2",
118*d57664e9SAndroid Build Coastguard Worker "create",
119*d57664e9SAndroid Build Coastguard Worker "--target-apk-path", GetTargetApkPath(),
120*d57664e9SAndroid Build Coastguard Worker "--overlay-apk-path", GetOverlayApkPath(),
121*d57664e9SAndroid Build Coastguard Worker "--overlay-name", TestConstants::OVERLAY_NAME_DEFAULT,
122*d57664e9SAndroid Build Coastguard Worker "--idmap-path", GetIdmapPath()});
123*d57664e9SAndroid Build Coastguard Worker // clang-format on
124*d57664e9SAndroid Build Coastguard Worker ASSERT_TRUE((bool)result);
125*d57664e9SAndroid Build Coastguard Worker ASSERT_EQ(result.status, EXIT_SUCCESS) << result.stderr_str;
126*d57664e9SAndroid Build Coastguard Worker
127*d57664e9SAndroid Build Coastguard Worker // clang-format off
128*d57664e9SAndroid Build Coastguard Worker result = ExecuteBinary({"idmap2",
129*d57664e9SAndroid Build Coastguard Worker "dump",
130*d57664e9SAndroid Build Coastguard Worker "--idmap-path", GetIdmapPath()});
131*d57664e9SAndroid Build Coastguard Worker // clang-format on
132*d57664e9SAndroid Build Coastguard Worker ASSERT_TRUE((bool)result);
133*d57664e9SAndroid Build Coastguard Worker ASSERT_EQ(result.status, EXIT_SUCCESS) << result.stderr_str;
134*d57664e9SAndroid Build Coastguard Worker
135*d57664e9SAndroid Build Coastguard Worker ASSERT_NE(result.stdout_str.find(StringPrintf("0x%08x -> 0x%08x", R::target::integer::int1,
136*d57664e9SAndroid Build Coastguard Worker R::overlay::integer::int1)),
137*d57664e9SAndroid Build Coastguard Worker std::string::npos)
138*d57664e9SAndroid Build Coastguard Worker << result.stdout_str;
139*d57664e9SAndroid Build Coastguard Worker ASSERT_NE(result.stdout_str.find(StringPrintf("0x%08x -> 0x%08x", R::target::string::str1,
140*d57664e9SAndroid Build Coastguard Worker R::overlay::string::str1)),
141*d57664e9SAndroid Build Coastguard Worker std::string::npos)
142*d57664e9SAndroid Build Coastguard Worker << result.stdout_str;
143*d57664e9SAndroid Build Coastguard Worker ASSERT_NE(result.stdout_str.find(StringPrintf("0x%08x -> 0x%08x", R::target::string::str3,
144*d57664e9SAndroid Build Coastguard Worker R::overlay::string::str3)),
145*d57664e9SAndroid Build Coastguard Worker std::string::npos)
146*d57664e9SAndroid Build Coastguard Worker << result.stdout_str;
147*d57664e9SAndroid Build Coastguard Worker ASSERT_NE(result.stdout_str.find(StringPrintf("0x%08x -> 0x%08x", R::target::string::str4,
148*d57664e9SAndroid Build Coastguard Worker R::overlay::string::str4)),
149*d57664e9SAndroid Build Coastguard Worker std::string::npos)
150*d57664e9SAndroid Build Coastguard Worker << result.stdout_str;
151*d57664e9SAndroid Build Coastguard Worker
152*d57664e9SAndroid Build Coastguard Worker // clang-format off
153*d57664e9SAndroid Build Coastguard Worker result = ExecuteBinary({"idmap2",
154*d57664e9SAndroid Build Coastguard Worker "dump",
155*d57664e9SAndroid Build Coastguard Worker "--verbose",
156*d57664e9SAndroid Build Coastguard Worker "--idmap-path", GetIdmapPath()});
157*d57664e9SAndroid Build Coastguard Worker // clang-format on
158*d57664e9SAndroid Build Coastguard Worker ASSERT_TRUE((bool)result);
159*d57664e9SAndroid Build Coastguard Worker ASSERT_EQ(result.status, EXIT_SUCCESS) << result.stderr_str;
160*d57664e9SAndroid Build Coastguard Worker ASSERT_NE(result.stdout_str.find("00000000: 504d4449 magic"), std::string::npos);
161*d57664e9SAndroid Build Coastguard Worker
162*d57664e9SAndroid Build Coastguard Worker // clang-format off
163*d57664e9SAndroid Build Coastguard Worker result = ExecuteBinary({"idmap2",
164*d57664e9SAndroid Build Coastguard Worker "dump",
165*d57664e9SAndroid Build Coastguard Worker "--verbose",
166*d57664e9SAndroid Build Coastguard Worker "--idmap-path", GetTestDataPath() + "/DOES-NOT-EXIST"});
167*d57664e9SAndroid Build Coastguard Worker // clang-format on
168*d57664e9SAndroid Build Coastguard Worker ASSERT_TRUE((bool)result);
169*d57664e9SAndroid Build Coastguard Worker ASSERT_NE(result.status, EXIT_SUCCESS);
170*d57664e9SAndroid Build Coastguard Worker
171*d57664e9SAndroid Build Coastguard Worker unlink(GetIdmapPath().c_str());
172*d57664e9SAndroid Build Coastguard Worker }
173*d57664e9SAndroid Build Coastguard Worker
TEST_F(Idmap2BinaryTests,Lookup)174*d57664e9SAndroid Build Coastguard Worker TEST_F(Idmap2BinaryTests, Lookup) {
175*d57664e9SAndroid Build Coastguard Worker SKIP_TEST_IF_CANT_EXEC_IDMAP2;
176*d57664e9SAndroid Build Coastguard Worker
177*d57664e9SAndroid Build Coastguard Worker // clang-format off
178*d57664e9SAndroid Build Coastguard Worker auto result = ExecuteBinary({"idmap2",
179*d57664e9SAndroid Build Coastguard Worker "create",
180*d57664e9SAndroid Build Coastguard Worker "--target-apk-path", GetTargetApkPath(),
181*d57664e9SAndroid Build Coastguard Worker "--overlay-apk-path", GetOverlayApkPath(),
182*d57664e9SAndroid Build Coastguard Worker "--overlay-name", TestConstants::OVERLAY_NAME_DEFAULT,
183*d57664e9SAndroid Build Coastguard Worker "--idmap-path", GetIdmapPath()});
184*d57664e9SAndroid Build Coastguard Worker // clang-format on
185*d57664e9SAndroid Build Coastguard Worker ASSERT_TRUE((bool)result);
186*d57664e9SAndroid Build Coastguard Worker ASSERT_EQ(result.status, EXIT_SUCCESS) << result.stderr_str;
187*d57664e9SAndroid Build Coastguard Worker
188*d57664e9SAndroid Build Coastguard Worker // clang-format off
189*d57664e9SAndroid Build Coastguard Worker result = ExecuteBinary({"idmap2",
190*d57664e9SAndroid Build Coastguard Worker "lookup",
191*d57664e9SAndroid Build Coastguard Worker "--idmap-path", GetIdmapPath(),
192*d57664e9SAndroid Build Coastguard Worker "--config", "",
193*d57664e9SAndroid Build Coastguard Worker "--resid", StringPrintf("0x%08x", R::target::string::str1)});
194*d57664e9SAndroid Build Coastguard Worker // clang-format on
195*d57664e9SAndroid Build Coastguard Worker ASSERT_TRUE((bool)result);
196*d57664e9SAndroid Build Coastguard Worker ASSERT_EQ(result.status, EXIT_SUCCESS) << result.stderr_str;
197*d57664e9SAndroid Build Coastguard Worker ASSERT_NE(result.stdout_str.find("overlay-1"), std::string::npos);
198*d57664e9SAndroid Build Coastguard Worker ASSERT_EQ(result.stdout_str.find("overlay-1-sv"), std::string::npos);
199*d57664e9SAndroid Build Coastguard Worker
200*d57664e9SAndroid Build Coastguard Worker // clang-format off
201*d57664e9SAndroid Build Coastguard Worker result = ExecuteBinary({"idmap2",
202*d57664e9SAndroid Build Coastguard Worker "lookup",
203*d57664e9SAndroid Build Coastguard Worker "--idmap-path", GetIdmapPath(),
204*d57664e9SAndroid Build Coastguard Worker "--config", "",
205*d57664e9SAndroid Build Coastguard Worker "--resid", "test.target:string/str1"});
206*d57664e9SAndroid Build Coastguard Worker // clang-format on
207*d57664e9SAndroid Build Coastguard Worker ASSERT_TRUE((bool)result);
208*d57664e9SAndroid Build Coastguard Worker ASSERT_EQ(result.status, EXIT_SUCCESS) << result.stderr_str;
209*d57664e9SAndroid Build Coastguard Worker ASSERT_NE(result.stdout_str.find("overlay-1"), std::string::npos);
210*d57664e9SAndroid Build Coastguard Worker ASSERT_EQ(result.stdout_str.find("overlay-1-sv"), std::string::npos);
211*d57664e9SAndroid Build Coastguard Worker
212*d57664e9SAndroid Build Coastguard Worker // clang-format off
213*d57664e9SAndroid Build Coastguard Worker result = ExecuteBinary({"idmap2",
214*d57664e9SAndroid Build Coastguard Worker "lookup",
215*d57664e9SAndroid Build Coastguard Worker "--idmap-path", GetIdmapPath(),
216*d57664e9SAndroid Build Coastguard Worker "--config", "sv",
217*d57664e9SAndroid Build Coastguard Worker "--resid", "test.target:string/str1"});
218*d57664e9SAndroid Build Coastguard Worker // clang-format on
219*d57664e9SAndroid Build Coastguard Worker ASSERT_TRUE((bool)result);
220*d57664e9SAndroid Build Coastguard Worker ASSERT_EQ(result.status, EXIT_SUCCESS) << result.stderr_str;
221*d57664e9SAndroid Build Coastguard Worker ASSERT_NE(result.stdout_str.find("overlay-1-sv"), std::string::npos);
222*d57664e9SAndroid Build Coastguard Worker
223*d57664e9SAndroid Build Coastguard Worker unlink(GetIdmapPath().c_str());
224*d57664e9SAndroid Build Coastguard Worker }
225*d57664e9SAndroid Build Coastguard Worker
TEST_F(Idmap2BinaryTests,InvalidCommandLineOptions)226*d57664e9SAndroid Build Coastguard Worker TEST_F(Idmap2BinaryTests, InvalidCommandLineOptions) {
227*d57664e9SAndroid Build Coastguard Worker SKIP_TEST_IF_CANT_EXEC_IDMAP2;
228*d57664e9SAndroid Build Coastguard Worker
229*d57664e9SAndroid Build Coastguard Worker const std::string invalid_target_apk_path = GetTestDataPath() + "/DOES-NOT-EXIST";
230*d57664e9SAndroid Build Coastguard Worker
231*d57664e9SAndroid Build Coastguard Worker // missing mandatory options
232*d57664e9SAndroid Build Coastguard Worker // clang-format off
233*d57664e9SAndroid Build Coastguard Worker auto result = ExecuteBinary({"idmap2",
234*d57664e9SAndroid Build Coastguard Worker "create"});
235*d57664e9SAndroid Build Coastguard Worker // clang-format on
236*d57664e9SAndroid Build Coastguard Worker ASSERT_TRUE((bool)result);
237*d57664e9SAndroid Build Coastguard Worker ASSERT_NE(result.status, EXIT_SUCCESS);
238*d57664e9SAndroid Build Coastguard Worker
239*d57664e9SAndroid Build Coastguard Worker // missing argument to option
240*d57664e9SAndroid Build Coastguard Worker // clang-format off
241*d57664e9SAndroid Build Coastguard Worker result = ExecuteBinary({"idmap2",
242*d57664e9SAndroid Build Coastguard Worker "create",
243*d57664e9SAndroid Build Coastguard Worker "--target-apk-path", GetTargetApkPath(),
244*d57664e9SAndroid Build Coastguard Worker "--overlay-apk-path", GetOverlayApkPath(),
245*d57664e9SAndroid Build Coastguard Worker "--overlay-name", TestConstants::OVERLAY_NAME_DEFAULT,
246*d57664e9SAndroid Build Coastguard Worker "--idmap-path"});
247*d57664e9SAndroid Build Coastguard Worker // clang-format on
248*d57664e9SAndroid Build Coastguard Worker ASSERT_TRUE((bool)result);
249*d57664e9SAndroid Build Coastguard Worker ASSERT_NE(result.status, EXIT_SUCCESS);
250*d57664e9SAndroid Build Coastguard Worker
251*d57664e9SAndroid Build Coastguard Worker // invalid target apk path
252*d57664e9SAndroid Build Coastguard Worker // clang-format off
253*d57664e9SAndroid Build Coastguard Worker result = ExecuteBinary({"idmap2",
254*d57664e9SAndroid Build Coastguard Worker "create",
255*d57664e9SAndroid Build Coastguard Worker "--target-apk-path", invalid_target_apk_path,
256*d57664e9SAndroid Build Coastguard Worker "--overlay-apk-path", GetOverlayApkPath(),
257*d57664e9SAndroid Build Coastguard Worker "--overlay-name", TestConstants::OVERLAY_NAME_DEFAULT,
258*d57664e9SAndroid Build Coastguard Worker "--idmap-path", GetIdmapPath()});
259*d57664e9SAndroid Build Coastguard Worker // clang-format on
260*d57664e9SAndroid Build Coastguard Worker ASSERT_TRUE((bool)result);
261*d57664e9SAndroid Build Coastguard Worker ASSERT_NE(result.status, EXIT_SUCCESS);
262*d57664e9SAndroid Build Coastguard Worker
263*d57664e9SAndroid Build Coastguard Worker // unknown policy
264*d57664e9SAndroid Build Coastguard Worker // clang-format off
265*d57664e9SAndroid Build Coastguard Worker result = ExecuteBinary({"idmap2",
266*d57664e9SAndroid Build Coastguard Worker "create",
267*d57664e9SAndroid Build Coastguard Worker "--target-apk-path", GetTargetApkPath(),
268*d57664e9SAndroid Build Coastguard Worker "--overlay-apk-path", GetOverlayApkPath(),
269*d57664e9SAndroid Build Coastguard Worker "--overlay-name", TestConstants::OVERLAY_NAME_DEFAULT,
270*d57664e9SAndroid Build Coastguard Worker "--idmap-path", GetIdmapPath(),
271*d57664e9SAndroid Build Coastguard Worker "--policy", "this-does-not-exist"});
272*d57664e9SAndroid Build Coastguard Worker // clang-format on
273*d57664e9SAndroid Build Coastguard Worker ASSERT_TRUE((bool)result);
274*d57664e9SAndroid Build Coastguard Worker ASSERT_NE(result.status, EXIT_SUCCESS);
275*d57664e9SAndroid Build Coastguard Worker }
276*d57664e9SAndroid Build Coastguard Worker
277*d57664e9SAndroid Build Coastguard Worker } // namespace android::idmap2
278