1*70a7ec85SAndroid Build Coastguard Worker /*
2*70a7ec85SAndroid Build Coastguard Worker * Copyright (C) 2017 The Android Open Source Project
3*70a7ec85SAndroid Build Coastguard Worker *
4*70a7ec85SAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License");
5*70a7ec85SAndroid Build Coastguard Worker * you may not use this file except in compliance with the License.
6*70a7ec85SAndroid Build Coastguard Worker * You may obtain a copy of the License at
7*70a7ec85SAndroid Build Coastguard Worker *
8*70a7ec85SAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0
9*70a7ec85SAndroid Build Coastguard Worker *
10*70a7ec85SAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software
11*70a7ec85SAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS,
12*70a7ec85SAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*70a7ec85SAndroid Build Coastguard Worker * See the License for the specific language governing permissions and
14*70a7ec85SAndroid Build Coastguard Worker * limitations under the License.
15*70a7ec85SAndroid Build Coastguard Worker */
16*70a7ec85SAndroid Build Coastguard Worker
17*70a7ec85SAndroid Build Coastguard Worker #define LOG_TAG "AssembleVintfTest"
18*70a7ec85SAndroid Build Coastguard Worker
19*70a7ec85SAndroid Build Coastguard Worker #include <android-base/logging.h>
20*70a7ec85SAndroid Build Coastguard Worker #include <android-base/stringprintf.h>
21*70a7ec85SAndroid Build Coastguard Worker #include <gtest/gtest.h>
22*70a7ec85SAndroid Build Coastguard Worker
23*70a7ec85SAndroid Build Coastguard Worker #include <aidl/metadata.h>
24*70a7ec85SAndroid Build Coastguard Worker #include <vintf/AssembleVintf.h>
25*70a7ec85SAndroid Build Coastguard Worker #include <vintf/parse_string.h>
26*70a7ec85SAndroid Build Coastguard Worker #include "constants-private.h"
27*70a7ec85SAndroid Build Coastguard Worker #include "test_constants.h"
28*70a7ec85SAndroid Build Coastguard Worker
29*70a7ec85SAndroid Build Coastguard Worker using android::base::StringPrintf;
30*70a7ec85SAndroid Build Coastguard Worker
31*70a7ec85SAndroid Build Coastguard Worker namespace android {
32*70a7ec85SAndroid Build Coastguard Worker namespace vintf {
33*70a7ec85SAndroid Build Coastguard Worker
In(const std::string & sub,const std::string & str)34*70a7ec85SAndroid Build Coastguard Worker static bool In(const std::string& sub, const std::string& str) {
35*70a7ec85SAndroid Build Coastguard Worker return str.find(sub) != std::string::npos;
36*70a7ec85SAndroid Build Coastguard Worker }
37*70a7ec85SAndroid Build Coastguard Worker #define EXPECT_IN(sub, str) EXPECT_TRUE(In((sub), (str))) << (str);
38*70a7ec85SAndroid Build Coastguard Worker
39*70a7ec85SAndroid Build Coastguard Worker class AssembleVintfTest : public ::testing::Test {
40*70a7ec85SAndroid Build Coastguard Worker public:
SetUp()41*70a7ec85SAndroid Build Coastguard Worker virtual void SetUp() override {
42*70a7ec85SAndroid Build Coastguard Worker mInstance = AssembleVintf::newInstance();
43*70a7ec85SAndroid Build Coastguard Worker auto s = makeStream("");
44*70a7ec85SAndroid Build Coastguard Worker mOutputStream = s.get();
45*70a7ec85SAndroid Build Coastguard Worker mInstance->setOutputStream(std::move(s));
46*70a7ec85SAndroid Build Coastguard Worker s = makeStream("");
47*70a7ec85SAndroid Build Coastguard Worker mErrorStream = s.get();
48*70a7ec85SAndroid Build Coastguard Worker mInstance->setErrorStream(std::move(s));
49*70a7ec85SAndroid Build Coastguard Worker
50*70a7ec85SAndroid Build Coastguard Worker getInstance()->setFakeEnv("PRODUCT_ENFORCE_VINTF_MANIFEST", "true");
51*70a7ec85SAndroid Build Coastguard Worker }
TearDown()52*70a7ec85SAndroid Build Coastguard Worker virtual void TearDown() override { mInstance = nullptr; }
53*70a7ec85SAndroid Build Coastguard Worker
getInstance()54*70a7ec85SAndroid Build Coastguard Worker const std::unique_ptr<AssembleVintf>& getInstance() { return mInstance; }
55*70a7ec85SAndroid Build Coastguard Worker
getOutput()56*70a7ec85SAndroid Build Coastguard Worker std::string getOutput() { return mOutputStream->str(); }
getError()57*70a7ec85SAndroid Build Coastguard Worker std::string getError() { return mErrorStream->str(); }
58*70a7ec85SAndroid Build Coastguard Worker
resetOutput()59*70a7ec85SAndroid Build Coastguard Worker void resetOutput() { mOutputStream->str(""); }
60*70a7ec85SAndroid Build Coastguard Worker
setFakeEnvs(const std::map<std::string,std::string> & envs)61*70a7ec85SAndroid Build Coastguard Worker void setFakeEnvs(const std::map<std::string, std::string>& envs) {
62*70a7ec85SAndroid Build Coastguard Worker for (const auto& pair : envs) {
63*70a7ec85SAndroid Build Coastguard Worker getInstance()->setFakeEnv(pair.first, pair.second);
64*70a7ec85SAndroid Build Coastguard Worker }
65*70a7ec85SAndroid Build Coastguard Worker }
66*70a7ec85SAndroid Build Coastguard Worker
setFakeAidlMetadata(const std::vector<AidlInterfaceMetadata> & metadata)67*70a7ec85SAndroid Build Coastguard Worker void setFakeAidlMetadata(const std::vector<AidlInterfaceMetadata>& metadata) {
68*70a7ec85SAndroid Build Coastguard Worker getInstance()->setFakeAidlMetadata(metadata);
69*70a7ec85SAndroid Build Coastguard Worker }
70*70a7ec85SAndroid Build Coastguard Worker
setFakeAidlUseUnfrozen(bool use)71*70a7ec85SAndroid Build Coastguard Worker void setFakeAidlUseUnfrozen(bool use) { getInstance()->setFakeAidlUseUnfrozen(use); }
72*70a7ec85SAndroid Build Coastguard Worker
addInput(const std::string & name,const std::string & s)73*70a7ec85SAndroid Build Coastguard Worker void addInput(const std::string& name, const std::string& s) {
74*70a7ec85SAndroid Build Coastguard Worker getInstance()->addInputStream(name, makeStream(s));
75*70a7ec85SAndroid Build Coastguard Worker }
76*70a7ec85SAndroid Build Coastguard Worker
makeStream(const std::string & s)77*70a7ec85SAndroid Build Coastguard Worker std::unique_ptr<std::stringstream> makeStream(const std::string& s) {
78*70a7ec85SAndroid Build Coastguard Worker return std::make_unique<std::stringstream>(s);
79*70a7ec85SAndroid Build Coastguard Worker }
80*70a7ec85SAndroid Build Coastguard Worker
81*70a7ec85SAndroid Build Coastguard Worker std::unique_ptr<AssembleVintf> mInstance;
82*70a7ec85SAndroid Build Coastguard Worker // do not own this object.
83*70a7ec85SAndroid Build Coastguard Worker std::stringstream* mOutputStream;
84*70a7ec85SAndroid Build Coastguard Worker std::stringstream* mErrorStream;
85*70a7ec85SAndroid Build Coastguard Worker };
86*70a7ec85SAndroid Build Coastguard Worker
87*70a7ec85SAndroid Build Coastguard Worker // clang-format off
88*70a7ec85SAndroid Build Coastguard Worker
TEST_F(AssembleVintfTest,FrameworkMatrixEmpty)89*70a7ec85SAndroid Build Coastguard Worker TEST_F(AssembleVintfTest, FrameworkMatrixEmpty) {
90*70a7ec85SAndroid Build Coastguard Worker std::string xmlEmpty = "<compatibility-matrix " + kMetaVersionStr + " type=\"framework\" />";
91*70a7ec85SAndroid Build Coastguard Worker std::string kernel318 = "CONFIG_FOO=y\n";
92*70a7ec85SAndroid Build Coastguard Worker std::string kernel318_64 = "CONFIG_BAR=y\n";
93*70a7ec85SAndroid Build Coastguard Worker std::string kernel44 = "# CONFIG_FOO is not set\n";
94*70a7ec85SAndroid Build Coastguard Worker std::string kernel44_64 = "CONFIG_BAR=y\n";
95*70a7ec85SAndroid Build Coastguard Worker
96*70a7ec85SAndroid Build Coastguard Worker addInput("compatibility_matrix.empty.xml", xmlEmpty);
97*70a7ec85SAndroid Build Coastguard Worker setFakeEnvs({
98*70a7ec85SAndroid Build Coastguard Worker {"POLICYVERS", "30"},
99*70a7ec85SAndroid Build Coastguard Worker {"PLATFORM_SEPOLICY_VERSION", "202404"},
100*70a7ec85SAndroid Build Coastguard Worker {"FRAMEWORK_VBMETA_VERSION", "1.0"},
101*70a7ec85SAndroid Build Coastguard Worker });
102*70a7ec85SAndroid Build Coastguard Worker getInstance()->addKernelConfigInputStream({3, 18, 0}, "android-base.config",
103*70a7ec85SAndroid Build Coastguard Worker makeStream(kernel318));
104*70a7ec85SAndroid Build Coastguard Worker getInstance()->addKernelConfigInputStream({3, 18, 0}, "android-base-arm64.config",
105*70a7ec85SAndroid Build Coastguard Worker makeStream(kernel318_64));
106*70a7ec85SAndroid Build Coastguard Worker getInstance()->addKernelConfigInputStream({4, 4, 0}, "android-base.config", makeStream(kernel44));
107*70a7ec85SAndroid Build Coastguard Worker getInstance()->addKernelConfigInputStream({4, 4, 0}, "android-base-arm64.config",
108*70a7ec85SAndroid Build Coastguard Worker makeStream(kernel44_64));
109*70a7ec85SAndroid Build Coastguard Worker
110*70a7ec85SAndroid Build Coastguard Worker EXPECT_TRUE(getInstance()->assemble());
111*70a7ec85SAndroid Build Coastguard Worker
112*70a7ec85SAndroid Build Coastguard Worker EXPECT_IN(
113*70a7ec85SAndroid Build Coastguard Worker "<compatibility-matrix " + kMetaVersionStr + " type=\"framework\">\n"
114*70a7ec85SAndroid Build Coastguard Worker " <kernel version=\"3.18.0\">\n"
115*70a7ec85SAndroid Build Coastguard Worker " <config>\n"
116*70a7ec85SAndroid Build Coastguard Worker " <key>CONFIG_FOO</key>\n"
117*70a7ec85SAndroid Build Coastguard Worker " <value type=\"tristate\">y</value>\n"
118*70a7ec85SAndroid Build Coastguard Worker " </config>\n"
119*70a7ec85SAndroid Build Coastguard Worker " </kernel>\n"
120*70a7ec85SAndroid Build Coastguard Worker " <kernel version=\"3.18.0\">\n"
121*70a7ec85SAndroid Build Coastguard Worker " <conditions>\n"
122*70a7ec85SAndroid Build Coastguard Worker " <config>\n"
123*70a7ec85SAndroid Build Coastguard Worker " <key>CONFIG_ARM64</key>\n"
124*70a7ec85SAndroid Build Coastguard Worker " <value type=\"tristate\">y</value>\n"
125*70a7ec85SAndroid Build Coastguard Worker " </config>\n"
126*70a7ec85SAndroid Build Coastguard Worker " </conditions>\n"
127*70a7ec85SAndroid Build Coastguard Worker " <config>\n"
128*70a7ec85SAndroid Build Coastguard Worker " <key>CONFIG_BAR</key>\n"
129*70a7ec85SAndroid Build Coastguard Worker " <value type=\"tristate\">y</value>\n"
130*70a7ec85SAndroid Build Coastguard Worker " </config>\n"
131*70a7ec85SAndroid Build Coastguard Worker " </kernel>\n"
132*70a7ec85SAndroid Build Coastguard Worker " <kernel version=\"4.4.0\">\n"
133*70a7ec85SAndroid Build Coastguard Worker " <config>\n"
134*70a7ec85SAndroid Build Coastguard Worker " <key>CONFIG_FOO</key>\n"
135*70a7ec85SAndroid Build Coastguard Worker " <value type=\"tristate\">n</value>\n"
136*70a7ec85SAndroid Build Coastguard Worker " </config>\n"
137*70a7ec85SAndroid Build Coastguard Worker " </kernel>\n"
138*70a7ec85SAndroid Build Coastguard Worker " <kernel version=\"4.4.0\">\n"
139*70a7ec85SAndroid Build Coastguard Worker " <conditions>\n"
140*70a7ec85SAndroid Build Coastguard Worker " <config>\n"
141*70a7ec85SAndroid Build Coastguard Worker " <key>CONFIG_ARM64</key>\n"
142*70a7ec85SAndroid Build Coastguard Worker " <value type=\"tristate\">y</value>\n"
143*70a7ec85SAndroid Build Coastguard Worker " </config>\n"
144*70a7ec85SAndroid Build Coastguard Worker " </conditions>\n"
145*70a7ec85SAndroid Build Coastguard Worker " <config>\n"
146*70a7ec85SAndroid Build Coastguard Worker " <key>CONFIG_BAR</key>\n"
147*70a7ec85SAndroid Build Coastguard Worker " <value type=\"tristate\">y</value>\n"
148*70a7ec85SAndroid Build Coastguard Worker " </config>\n"
149*70a7ec85SAndroid Build Coastguard Worker " </kernel>\n"
150*70a7ec85SAndroid Build Coastguard Worker " <sepolicy>\n"
151*70a7ec85SAndroid Build Coastguard Worker " <kernel-sepolicy-version>30</kernel-sepolicy-version>\n"
152*70a7ec85SAndroid Build Coastguard Worker " <sepolicy-version>202404</sepolicy-version>\n"
153*70a7ec85SAndroid Build Coastguard Worker " </sepolicy>\n"
154*70a7ec85SAndroid Build Coastguard Worker " <avb>\n"
155*70a7ec85SAndroid Build Coastguard Worker " <vbmeta-version>1.0</vbmeta-version>\n"
156*70a7ec85SAndroid Build Coastguard Worker " </avb>\n"
157*70a7ec85SAndroid Build Coastguard Worker "</compatibility-matrix>\n",
158*70a7ec85SAndroid Build Coastguard Worker getOutput());
159*70a7ec85SAndroid Build Coastguard Worker }
160*70a7ec85SAndroid Build Coastguard Worker
TEST_F(AssembleVintfTest,FrameworkMatrix)161*70a7ec85SAndroid Build Coastguard Worker TEST_F(AssembleVintfTest, FrameworkMatrix) {
162*70a7ec85SAndroid Build Coastguard Worker std::string tail =
163*70a7ec85SAndroid Build Coastguard Worker " <config>\n"
164*70a7ec85SAndroid Build Coastguard Worker " <key>CONFIG_FOO</key>\n"
165*70a7ec85SAndroid Build Coastguard Worker " <value type=\"tristate\">y</value>\n"
166*70a7ec85SAndroid Build Coastguard Worker " </config>\n"
167*70a7ec85SAndroid Build Coastguard Worker " </kernel>\n"
168*70a7ec85SAndroid Build Coastguard Worker " <sepolicy>\n"
169*70a7ec85SAndroid Build Coastguard Worker " <kernel-sepolicy-version>30</kernel-sepolicy-version>\n"
170*70a7ec85SAndroid Build Coastguard Worker " <sepolicy-version>202404</sepolicy-version>\n"
171*70a7ec85SAndroid Build Coastguard Worker " </sepolicy>\n"
172*70a7ec85SAndroid Build Coastguard Worker " <avb>\n"
173*70a7ec85SAndroid Build Coastguard Worker " <vbmeta-version>1.0</vbmeta-version>\n"
174*70a7ec85SAndroid Build Coastguard Worker " </avb>\n"
175*70a7ec85SAndroid Build Coastguard Worker "</compatibility-matrix>\n";
176*70a7ec85SAndroid Build Coastguard Worker
177*70a7ec85SAndroid Build Coastguard Worker std::string xmlEmpty =
178*70a7ec85SAndroid Build Coastguard Worker "<compatibility-matrix " + kMetaVersionStr + " type=\"framework\">\n"
179*70a7ec85SAndroid Build Coastguard Worker " <kernel version=\"3.18.0\">\n" +
180*70a7ec85SAndroid Build Coastguard Worker tail;
181*70a7ec85SAndroid Build Coastguard Worker
182*70a7ec85SAndroid Build Coastguard Worker std::string xml1 =
183*70a7ec85SAndroid Build Coastguard Worker "<compatibility-matrix " + kMetaVersionStr + " type=\"framework\" level=\"1\">\n"
184*70a7ec85SAndroid Build Coastguard Worker " <hal format=\"hidl\" optional=\"true\">\n"
185*70a7ec85SAndroid Build Coastguard Worker " <name>android.hardware.foo</name>\n"
186*70a7ec85SAndroid Build Coastguard Worker " <version>1.0</version>\n"
187*70a7ec85SAndroid Build Coastguard Worker " <interface>\n"
188*70a7ec85SAndroid Build Coastguard Worker " <name>IFoo</name>\n"
189*70a7ec85SAndroid Build Coastguard Worker " <instance>default</instance>\n"
190*70a7ec85SAndroid Build Coastguard Worker " </interface>\n"
191*70a7ec85SAndroid Build Coastguard Worker " </hal>\n"
192*70a7ec85SAndroid Build Coastguard Worker "</compatibility-matrix>\n";
193*70a7ec85SAndroid Build Coastguard Worker
194*70a7ec85SAndroid Build Coastguard Worker std::string xml2 =
195*70a7ec85SAndroid Build Coastguard Worker "<compatibility-matrix " + kMetaVersionStr + " type=\"framework\" level=\"2\">\n"
196*70a7ec85SAndroid Build Coastguard Worker " <hal format=\"hidl\" optional=\"true\">\n"
197*70a7ec85SAndroid Build Coastguard Worker " <name>android.hardware.foo</name>\n"
198*70a7ec85SAndroid Build Coastguard Worker " <version>1.0-1</version>\n"
199*70a7ec85SAndroid Build Coastguard Worker " <interface>\n"
200*70a7ec85SAndroid Build Coastguard Worker " <name>IFoo</name>\n"
201*70a7ec85SAndroid Build Coastguard Worker " <instance>default</instance>\n"
202*70a7ec85SAndroid Build Coastguard Worker " </interface>\n"
203*70a7ec85SAndroid Build Coastguard Worker " </hal>\n"
204*70a7ec85SAndroid Build Coastguard Worker "</compatibility-matrix>\n";
205*70a7ec85SAndroid Build Coastguard Worker
206*70a7ec85SAndroid Build Coastguard Worker std::string xml3 =
207*70a7ec85SAndroid Build Coastguard Worker "<compatibility-matrix " + kMetaVersionStr + " type=\"framework\" level=\"3\">\n"
208*70a7ec85SAndroid Build Coastguard Worker " <hal format=\"hidl\" optional=\"false\">\n"
209*70a7ec85SAndroid Build Coastguard Worker " <name>android.hardware.foo</name>\n"
210*70a7ec85SAndroid Build Coastguard Worker " <version>2.0</version>\n"
211*70a7ec85SAndroid Build Coastguard Worker " <interface>\n"
212*70a7ec85SAndroid Build Coastguard Worker " <name>IFoo</name>\n"
213*70a7ec85SAndroid Build Coastguard Worker " <instance>default</instance>\n"
214*70a7ec85SAndroid Build Coastguard Worker " </interface>\n"
215*70a7ec85SAndroid Build Coastguard Worker " </hal>\n"
216*70a7ec85SAndroid Build Coastguard Worker "</compatibility-matrix>\n";
217*70a7ec85SAndroid Build Coastguard Worker
218*70a7ec85SAndroid Build Coastguard Worker auto manifest = [](size_t level) {
219*70a7ec85SAndroid Build Coastguard Worker return "<manifest " +
220*70a7ec85SAndroid Build Coastguard Worker kMetaVersionStr +
221*70a7ec85SAndroid Build Coastguard Worker " type=\"device\"" +
222*70a7ec85SAndroid Build Coastguard Worker " target-level=\"" + std::to_string(level) + "\">\n" +
223*70a7ec85SAndroid Build Coastguard Worker " <hal format=\"hidl\">\n"
224*70a7ec85SAndroid Build Coastguard Worker " <name>android.hardware.foo</name>\n"
225*70a7ec85SAndroid Build Coastguard Worker " <version>1.1</version>\n"
226*70a7ec85SAndroid Build Coastguard Worker " <transport>hwbinder</transport>\n"
227*70a7ec85SAndroid Build Coastguard Worker " <interface>\n"
228*70a7ec85SAndroid Build Coastguard Worker " <name>IFoo</name>\n"
229*70a7ec85SAndroid Build Coastguard Worker " <instance>default</instance>\n"
230*70a7ec85SAndroid Build Coastguard Worker " </interface>\n"
231*70a7ec85SAndroid Build Coastguard Worker " </hal>\n"
232*70a7ec85SAndroid Build Coastguard Worker " <hal format=\"hidl\">\n"
233*70a7ec85SAndroid Build Coastguard Worker " <name>android.hardware.foo</name>\n"
234*70a7ec85SAndroid Build Coastguard Worker " <version>2.0</version>\n"
235*70a7ec85SAndroid Build Coastguard Worker " <transport>hwbinder</transport>\n"
236*70a7ec85SAndroid Build Coastguard Worker " <interface>\n"
237*70a7ec85SAndroid Build Coastguard Worker " <name>IFoo</name>\n"
238*70a7ec85SAndroid Build Coastguard Worker " <instance>default</instance>\n"
239*70a7ec85SAndroid Build Coastguard Worker " </interface>\n"
240*70a7ec85SAndroid Build Coastguard Worker " </hal>\n"
241*70a7ec85SAndroid Build Coastguard Worker " <sepolicy>\n"
242*70a7ec85SAndroid Build Coastguard Worker " <version>202404</version>\n"
243*70a7ec85SAndroid Build Coastguard Worker " </sepolicy>\n"
244*70a7ec85SAndroid Build Coastguard Worker "</manifest>\n";
245*70a7ec85SAndroid Build Coastguard Worker };
246*70a7ec85SAndroid Build Coastguard Worker
247*70a7ec85SAndroid Build Coastguard Worker addInput("compatibility_matrix.1.xml", xml1);
248*70a7ec85SAndroid Build Coastguard Worker addInput("compatibility_matrix.2.xml", xml2);
249*70a7ec85SAndroid Build Coastguard Worker addInput("compatibility_matrix.3.xml", xml3);
250*70a7ec85SAndroid Build Coastguard Worker addInput("compatibility_matrix.empty.xml", xmlEmpty);
251*70a7ec85SAndroid Build Coastguard Worker getInstance()->setFakeEnv("PRODUCT_ENFORCE_VINTF_MANIFEST", "true");
252*70a7ec85SAndroid Build Coastguard Worker
253*70a7ec85SAndroid Build Coastguard Worker resetOutput();
254*70a7ec85SAndroid Build Coastguard Worker getInstance()->setCheckInputStream("check.xml", makeStream(manifest(1)));
255*70a7ec85SAndroid Build Coastguard Worker EXPECT_TRUE(getInstance()->assemble());
256*70a7ec85SAndroid Build Coastguard Worker EXPECT_IN(
257*70a7ec85SAndroid Build Coastguard Worker "<compatibility-matrix " + kMetaVersionStr + " type=\"framework\" level=\"1\">\n"
258*70a7ec85SAndroid Build Coastguard Worker " <hal format=\"hidl\" optional=\"true\">\n"
259*70a7ec85SAndroid Build Coastguard Worker " <name>android.hardware.foo</name>\n"
260*70a7ec85SAndroid Build Coastguard Worker " <version>1.0-1</version>\n"
261*70a7ec85SAndroid Build Coastguard Worker " <version>2.0</version>\n"
262*70a7ec85SAndroid Build Coastguard Worker " <interface>\n"
263*70a7ec85SAndroid Build Coastguard Worker " <name>IFoo</name>\n"
264*70a7ec85SAndroid Build Coastguard Worker " <instance>default</instance>\n"
265*70a7ec85SAndroid Build Coastguard Worker " </interface>\n"
266*70a7ec85SAndroid Build Coastguard Worker " </hal>\n"
267*70a7ec85SAndroid Build Coastguard Worker " <kernel version=\"3.18.0\" level=\"1\">\n" +
268*70a7ec85SAndroid Build Coastguard Worker tail,
269*70a7ec85SAndroid Build Coastguard Worker getOutput());
270*70a7ec85SAndroid Build Coastguard Worker
271*70a7ec85SAndroid Build Coastguard Worker resetOutput();
272*70a7ec85SAndroid Build Coastguard Worker getInstance()->setCheckInputStream("check.xml", makeStream(manifest(2)));
273*70a7ec85SAndroid Build Coastguard Worker EXPECT_TRUE(getInstance()->assemble());
274*70a7ec85SAndroid Build Coastguard Worker EXPECT_IN(
275*70a7ec85SAndroid Build Coastguard Worker "<compatibility-matrix " + kMetaVersionStr + " type=\"framework\" level=\"2\">\n"
276*70a7ec85SAndroid Build Coastguard Worker " <hal format=\"hidl\" optional=\"true\">\n"
277*70a7ec85SAndroid Build Coastguard Worker " <name>android.hardware.foo</name>\n"
278*70a7ec85SAndroid Build Coastguard Worker " <version>1.0-1</version>\n"
279*70a7ec85SAndroid Build Coastguard Worker " <version>2.0</version>\n"
280*70a7ec85SAndroid Build Coastguard Worker " <interface>\n"
281*70a7ec85SAndroid Build Coastguard Worker " <name>IFoo</name>\n"
282*70a7ec85SAndroid Build Coastguard Worker " <instance>default</instance>\n"
283*70a7ec85SAndroid Build Coastguard Worker " </interface>\n"
284*70a7ec85SAndroid Build Coastguard Worker " </hal>\n"
285*70a7ec85SAndroid Build Coastguard Worker " <kernel version=\"3.18.0\" level=\"2\">\n" +
286*70a7ec85SAndroid Build Coastguard Worker tail,
287*70a7ec85SAndroid Build Coastguard Worker getOutput());
288*70a7ec85SAndroid Build Coastguard Worker
289*70a7ec85SAndroid Build Coastguard Worker resetOutput();
290*70a7ec85SAndroid Build Coastguard Worker getInstance()->setCheckInputStream("check.xml", makeStream(manifest(3)));
291*70a7ec85SAndroid Build Coastguard Worker EXPECT_TRUE(getInstance()->assemble());
292*70a7ec85SAndroid Build Coastguard Worker EXPECT_IN(
293*70a7ec85SAndroid Build Coastguard Worker "<compatibility-matrix " + kMetaVersionStr + " type=\"framework\" level=\"3\">\n"
294*70a7ec85SAndroid Build Coastguard Worker " <hal format=\"hidl\" optional=\"false\">\n"
295*70a7ec85SAndroid Build Coastguard Worker " <name>android.hardware.foo</name>\n"
296*70a7ec85SAndroid Build Coastguard Worker " <version>2.0</version>\n"
297*70a7ec85SAndroid Build Coastguard Worker " <interface>\n"
298*70a7ec85SAndroid Build Coastguard Worker " <name>IFoo</name>\n"
299*70a7ec85SAndroid Build Coastguard Worker " <instance>default</instance>\n"
300*70a7ec85SAndroid Build Coastguard Worker " </interface>\n"
301*70a7ec85SAndroid Build Coastguard Worker " </hal>\n"
302*70a7ec85SAndroid Build Coastguard Worker " <kernel version=\"3.18.0\" level=\"3\">\n" +
303*70a7ec85SAndroid Build Coastguard Worker tail,
304*70a7ec85SAndroid Build Coastguard Worker getOutput());
305*70a7ec85SAndroid Build Coastguard Worker }
306*70a7ec85SAndroid Build Coastguard Worker
TEST_F(AssembleVintfTest,MatrixVendorNdk)307*70a7ec85SAndroid Build Coastguard Worker TEST_F(AssembleVintfTest, MatrixVendorNdk) {
308*70a7ec85SAndroid Build Coastguard Worker addInput("compatibility_matrix.xml",
309*70a7ec85SAndroid Build Coastguard Worker "<compatibility-matrix " + kMetaVersionStr + " type=\"device\"/>\n");
310*70a7ec85SAndroid Build Coastguard Worker getInstance()->setFakeEnv("REQUIRED_VNDK_VERSION", "P");
311*70a7ec85SAndroid Build Coastguard Worker EXPECT_TRUE(getInstance()->assemble());
312*70a7ec85SAndroid Build Coastguard Worker EXPECT_IN(
313*70a7ec85SAndroid Build Coastguard Worker "<compatibility-matrix " + kMetaVersionStr + " type=\"device\">\n"
314*70a7ec85SAndroid Build Coastguard Worker " <vendor-ndk>\n"
315*70a7ec85SAndroid Build Coastguard Worker " <version>P</version>\n"
316*70a7ec85SAndroid Build Coastguard Worker " </vendor-ndk>\n"
317*70a7ec85SAndroid Build Coastguard Worker "</compatibility-matrix>\n",
318*70a7ec85SAndroid Build Coastguard Worker getOutput());
319*70a7ec85SAndroid Build Coastguard Worker }
320*70a7ec85SAndroid Build Coastguard Worker
TEST_F(AssembleVintfTest,ManifestVendorNdk)321*70a7ec85SAndroid Build Coastguard Worker TEST_F(AssembleVintfTest, ManifestVendorNdk) {
322*70a7ec85SAndroid Build Coastguard Worker addInput("manifest.xml", "<manifest " + kMetaVersionStr + " type=\"framework\"/>\n");
323*70a7ec85SAndroid Build Coastguard Worker getInstance()->setFakeEnv("PROVIDED_VNDK_VERSIONS", "P 26 27 ");
324*70a7ec85SAndroid Build Coastguard Worker EXPECT_TRUE(getInstance()->assemble());
325*70a7ec85SAndroid Build Coastguard Worker EXPECT_IN(
326*70a7ec85SAndroid Build Coastguard Worker "<manifest " + kMetaVersionStr + " type=\"framework\">\n"
327*70a7ec85SAndroid Build Coastguard Worker " <vendor-ndk>\n"
328*70a7ec85SAndroid Build Coastguard Worker " <version>P</version>\n"
329*70a7ec85SAndroid Build Coastguard Worker " </vendor-ndk>\n"
330*70a7ec85SAndroid Build Coastguard Worker " <vendor-ndk>\n"
331*70a7ec85SAndroid Build Coastguard Worker " <version>26</version>\n"
332*70a7ec85SAndroid Build Coastguard Worker " </vendor-ndk>\n"
333*70a7ec85SAndroid Build Coastguard Worker " <vendor-ndk>\n"
334*70a7ec85SAndroid Build Coastguard Worker " <version>27</version>\n"
335*70a7ec85SAndroid Build Coastguard Worker " </vendor-ndk>\n"
336*70a7ec85SAndroid Build Coastguard Worker "</manifest>\n",
337*70a7ec85SAndroid Build Coastguard Worker getOutput());
338*70a7ec85SAndroid Build Coastguard Worker }
339*70a7ec85SAndroid Build Coastguard Worker
TEST_F(AssembleVintfTest,VendorNdkCheckEmpty)340*70a7ec85SAndroid Build Coastguard Worker TEST_F(AssembleVintfTest, VendorNdkCheckEmpty) {
341*70a7ec85SAndroid Build Coastguard Worker addInput("manifest.xml", "<manifest " + kMetaVersionStr + " type=\"framework\"/>\n");
342*70a7ec85SAndroid Build Coastguard Worker getInstance()->setFakeEnv("PROVIDED_VNDK_VERSIONS", "P 26 27 ");
343*70a7ec85SAndroid Build Coastguard Worker
344*70a7ec85SAndroid Build Coastguard Worker std::string matrix = "<compatibility-matrix " + kMetaVersionStr + " type=\"device\"/>\n";
345*70a7ec85SAndroid Build Coastguard Worker getInstance()->setCheckInputStream("check.xml", makeStream(matrix));
346*70a7ec85SAndroid Build Coastguard Worker EXPECT_TRUE(getInstance()->assemble());
347*70a7ec85SAndroid Build Coastguard Worker }
348*70a7ec85SAndroid Build Coastguard Worker
TEST_F(AssembleVintfTest,VendorNdkCheckIncompat)349*70a7ec85SAndroid Build Coastguard Worker TEST_F(AssembleVintfTest, VendorNdkCheckIncompat) {
350*70a7ec85SAndroid Build Coastguard Worker addInput("manifest.xml", "<manifest " + kMetaVersionStr + " type=\"framework\"/>\n");
351*70a7ec85SAndroid Build Coastguard Worker getInstance()->setFakeEnv("PROVIDED_VNDK_VERSIONS", "P 26 27 ");
352*70a7ec85SAndroid Build Coastguard Worker std::string matrix =
353*70a7ec85SAndroid Build Coastguard Worker "<compatibility-matrix " + kMetaVersionStr + " type=\"device\">\n"
354*70a7ec85SAndroid Build Coastguard Worker " <vendor-ndk>\n"
355*70a7ec85SAndroid Build Coastguard Worker " <version>O</version>\n"
356*70a7ec85SAndroid Build Coastguard Worker " </vendor-ndk>\n"
357*70a7ec85SAndroid Build Coastguard Worker "</compatibility-matrix>\n";
358*70a7ec85SAndroid Build Coastguard Worker getInstance()->setCheckInputStream("check.xml", makeStream(matrix));
359*70a7ec85SAndroid Build Coastguard Worker EXPECT_FALSE(getInstance()->assemble());
360*70a7ec85SAndroid Build Coastguard Worker }
361*70a7ec85SAndroid Build Coastguard Worker
TEST_F(AssembleVintfTest,VendorNdkCheckCompat)362*70a7ec85SAndroid Build Coastguard Worker TEST_F(AssembleVintfTest, VendorNdkCheckCompat) {
363*70a7ec85SAndroid Build Coastguard Worker addInput("manifest.xml", "<manifest " + kMetaVersionStr + " type=\"framework\"/>\n");
364*70a7ec85SAndroid Build Coastguard Worker getInstance()->setFakeEnv("PROVIDED_VNDK_VERSIONS", "P 26 27 ");
365*70a7ec85SAndroid Build Coastguard Worker std::string matrix =
366*70a7ec85SAndroid Build Coastguard Worker "<compatibility-matrix " + kMetaVersionStr + " type=\"device\">\n"
367*70a7ec85SAndroid Build Coastguard Worker " <vendor-ndk>\n"
368*70a7ec85SAndroid Build Coastguard Worker " <version>27</version>\n"
369*70a7ec85SAndroid Build Coastguard Worker " </vendor-ndk>\n"
370*70a7ec85SAndroid Build Coastguard Worker "</compatibility-matrix>\n";
371*70a7ec85SAndroid Build Coastguard Worker getInstance()->setCheckInputStream("check.xml", makeStream(matrix));
372*70a7ec85SAndroid Build Coastguard Worker EXPECT_TRUE(getInstance()->assemble());
373*70a7ec85SAndroid Build Coastguard Worker }
374*70a7ec85SAndroid Build Coastguard Worker
TEST_F(AssembleVintfTest,MatrixSystemSdk)375*70a7ec85SAndroid Build Coastguard Worker TEST_F(AssembleVintfTest, MatrixSystemSdk) {
376*70a7ec85SAndroid Build Coastguard Worker addInput("compatibility_matrix.xml",
377*70a7ec85SAndroid Build Coastguard Worker "<compatibility-matrix " + kMetaVersionStr + " type=\"device\"/>\n");
378*70a7ec85SAndroid Build Coastguard Worker getInstance()->setFakeEnv("BOARD_SYSTEMSDK_VERSIONS", "P 1 2 ");
379*70a7ec85SAndroid Build Coastguard Worker EXPECT_TRUE(getInstance()->assemble());
380*70a7ec85SAndroid Build Coastguard Worker EXPECT_IN(
381*70a7ec85SAndroid Build Coastguard Worker "<compatibility-matrix " + kMetaVersionStr + " type=\"device\">\n"
382*70a7ec85SAndroid Build Coastguard Worker " <system-sdk>\n"
383*70a7ec85SAndroid Build Coastguard Worker " <version>1</version>\n"
384*70a7ec85SAndroid Build Coastguard Worker " <version>2</version>\n"
385*70a7ec85SAndroid Build Coastguard Worker " <version>P</version>\n"
386*70a7ec85SAndroid Build Coastguard Worker " </system-sdk>\n"
387*70a7ec85SAndroid Build Coastguard Worker "</compatibility-matrix>\n",
388*70a7ec85SAndroid Build Coastguard Worker getOutput());
389*70a7ec85SAndroid Build Coastguard Worker }
390*70a7ec85SAndroid Build Coastguard Worker
TEST_F(AssembleVintfTest,ManifestSystemSdk)391*70a7ec85SAndroid Build Coastguard Worker TEST_F(AssembleVintfTest, ManifestSystemSdk) {
392*70a7ec85SAndroid Build Coastguard Worker addInput("manifest.xml", "<manifest " + kMetaVersionStr + " type=\"framework\"/>\n");
393*70a7ec85SAndroid Build Coastguard Worker getInstance()->setFakeEnv("PLATFORM_SYSTEMSDK_VERSIONS", "P 1 2 ");
394*70a7ec85SAndroid Build Coastguard Worker EXPECT_TRUE(getInstance()->assemble());
395*70a7ec85SAndroid Build Coastguard Worker EXPECT_IN(
396*70a7ec85SAndroid Build Coastguard Worker "<manifest " + kMetaVersionStr + " type=\"framework\">\n"
397*70a7ec85SAndroid Build Coastguard Worker " <system-sdk>\n"
398*70a7ec85SAndroid Build Coastguard Worker " <version>1</version>\n"
399*70a7ec85SAndroid Build Coastguard Worker " <version>2</version>\n"
400*70a7ec85SAndroid Build Coastguard Worker " <version>P</version>\n"
401*70a7ec85SAndroid Build Coastguard Worker " </system-sdk>\n"
402*70a7ec85SAndroid Build Coastguard Worker "</manifest>\n",
403*70a7ec85SAndroid Build Coastguard Worker getOutput());
404*70a7ec85SAndroid Build Coastguard Worker }
405*70a7ec85SAndroid Build Coastguard Worker
406*70a7ec85SAndroid Build Coastguard Worker const std::string gEmptyOutManifest =
407*70a7ec85SAndroid Build Coastguard Worker "<manifest " + kMetaVersionStr + " type=\"device\">\n"
408*70a7ec85SAndroid Build Coastguard Worker " <sepolicy>\n"
409*70a7ec85SAndroid Build Coastguard Worker " <version>202404</version>\n"
410*70a7ec85SAndroid Build Coastguard Worker " </sepolicy>\n"
411*70a7ec85SAndroid Build Coastguard Worker "</manifest>\n";
412*70a7ec85SAndroid Build Coastguard Worker
TEST_F(AssembleVintfTest,EmptyManifest)413*70a7ec85SAndroid Build Coastguard Worker TEST_F(AssembleVintfTest, EmptyManifest) {
414*70a7ec85SAndroid Build Coastguard Worker const std::string emptyManifest = "<manifest " + kMetaVersionStr + " type=\"device\" />";
415*70a7ec85SAndroid Build Coastguard Worker setFakeEnvs({{"BOARD_SEPOLICY_VERS", "202404"}, {"IGNORE_TARGET_FCM_VERSION", "true"}});
416*70a7ec85SAndroid Build Coastguard Worker addInput("manifest.empty.xml", emptyManifest);
417*70a7ec85SAndroid Build Coastguard Worker EXPECT_TRUE(getInstance()->assemble());
418*70a7ec85SAndroid Build Coastguard Worker EXPECT_IN(gEmptyOutManifest, getOutput());
419*70a7ec85SAndroid Build Coastguard Worker }
420*70a7ec85SAndroid Build Coastguard Worker
TEST_F(AssembleVintfTest,DeviceFrameworkMatrixOptional)421*70a7ec85SAndroid Build Coastguard Worker TEST_F(AssembleVintfTest, DeviceFrameworkMatrixOptional) {
422*70a7ec85SAndroid Build Coastguard Worker setFakeEnvs({{"POLICYVERS", "30"},
423*70a7ec85SAndroid Build Coastguard Worker {"PLATFORM_SEPOLICY_VERSION", "202404"},
424*70a7ec85SAndroid Build Coastguard Worker {"PLATFORM_SEPOLICY_COMPAT_VERSIONS", "26.0 27.0"},
425*70a7ec85SAndroid Build Coastguard Worker {"FRAMEWORK_VBMETA_VERSION", "1.0"},
426*70a7ec85SAndroid Build Coastguard Worker {"PRODUCT_ENFORCE_VINTF_MANIFEST", "true"}});
427*70a7ec85SAndroid Build Coastguard Worker getInstance()->setCheckInputStream("check.xml", makeStream(gEmptyOutManifest));
428*70a7ec85SAndroid Build Coastguard Worker
429*70a7ec85SAndroid Build Coastguard Worker addInput("compatibility_matrix.empty.xml",
430*70a7ec85SAndroid Build Coastguard Worker "<compatibility-matrix " + kMetaVersionStr + " type=\"framework\">\n"
431*70a7ec85SAndroid Build Coastguard Worker " <hal format=\"hidl\" optional=\"true\">\n"
432*70a7ec85SAndroid Build Coastguard Worker " <name>vendor.foo.bar</name>\n"
433*70a7ec85SAndroid Build Coastguard Worker " <version>1.0</version>\n"
434*70a7ec85SAndroid Build Coastguard Worker " <interface>\n"
435*70a7ec85SAndroid Build Coastguard Worker " <name>IFoo</name>\n"
436*70a7ec85SAndroid Build Coastguard Worker " <instance>default</instance>\n"
437*70a7ec85SAndroid Build Coastguard Worker " </interface>\n"
438*70a7ec85SAndroid Build Coastguard Worker " </hal>\n"
439*70a7ec85SAndroid Build Coastguard Worker "</compatibility-matrix>");
440*70a7ec85SAndroid Build Coastguard Worker
441*70a7ec85SAndroid Build Coastguard Worker EXPECT_TRUE(getInstance()->assemble());
442*70a7ec85SAndroid Build Coastguard Worker EXPECT_IN(
443*70a7ec85SAndroid Build Coastguard Worker "<compatibility-matrix " + kMetaVersionStr + " type=\"framework\">\n"
444*70a7ec85SAndroid Build Coastguard Worker " <hal format=\"hidl\" optional=\"true\">\n"
445*70a7ec85SAndroid Build Coastguard Worker " <name>vendor.foo.bar</name>\n"
446*70a7ec85SAndroid Build Coastguard Worker " <version>1.0</version>\n"
447*70a7ec85SAndroid Build Coastguard Worker " <interface>\n"
448*70a7ec85SAndroid Build Coastguard Worker " <name>IFoo</name>\n"
449*70a7ec85SAndroid Build Coastguard Worker " <instance>default</instance>\n"
450*70a7ec85SAndroid Build Coastguard Worker " </interface>\n"
451*70a7ec85SAndroid Build Coastguard Worker " </hal>\n"
452*70a7ec85SAndroid Build Coastguard Worker " <sepolicy>\n"
453*70a7ec85SAndroid Build Coastguard Worker " <kernel-sepolicy-version>30</kernel-sepolicy-version>\n"
454*70a7ec85SAndroid Build Coastguard Worker " <sepolicy-version>26.0</sepolicy-version>\n"
455*70a7ec85SAndroid Build Coastguard Worker " <sepolicy-version>27.0</sepolicy-version>\n"
456*70a7ec85SAndroid Build Coastguard Worker " <sepolicy-version>202404</sepolicy-version>\n"
457*70a7ec85SAndroid Build Coastguard Worker " </sepolicy>\n"
458*70a7ec85SAndroid Build Coastguard Worker " <avb>\n"
459*70a7ec85SAndroid Build Coastguard Worker " <vbmeta-version>1.0</vbmeta-version>\n"
460*70a7ec85SAndroid Build Coastguard Worker " </avb>\n"
461*70a7ec85SAndroid Build Coastguard Worker "</compatibility-matrix>",
462*70a7ec85SAndroid Build Coastguard Worker getOutput());
463*70a7ec85SAndroid Build Coastguard Worker }
464*70a7ec85SAndroid Build Coastguard Worker
TEST_F(AssembleVintfTest,DeviceFrameworkMatrixRequired)465*70a7ec85SAndroid Build Coastguard Worker TEST_F(AssembleVintfTest, DeviceFrameworkMatrixRequired) {
466*70a7ec85SAndroid Build Coastguard Worker setFakeEnvs({{"POLICYVERS", "30"},
467*70a7ec85SAndroid Build Coastguard Worker {"PLATFORM_SEPOLICY_VERSION", "202404"},
468*70a7ec85SAndroid Build Coastguard Worker {"PLATFORM_SEPOLICY_COMPAT_VERSIONS", "26.0 27.0"},
469*70a7ec85SAndroid Build Coastguard Worker {"FRAMEWORK_VBMETA_VERSION", "1.0"},
470*70a7ec85SAndroid Build Coastguard Worker {"PRODUCT_ENFORCE_VINTF_MANIFEST", "true"}});
471*70a7ec85SAndroid Build Coastguard Worker getInstance()->setCheckInputStream("check.xml", makeStream(gEmptyOutManifest));
472*70a7ec85SAndroid Build Coastguard Worker
473*70a7ec85SAndroid Build Coastguard Worker addInput("compatibility_matrix.empty.xml",
474*70a7ec85SAndroid Build Coastguard Worker "<compatibility-matrix " + kMetaVersionStr + " type=\"framework\">\n"
475*70a7ec85SAndroid Build Coastguard Worker " <hal format=\"hidl\" optional=\"false\">\n"
476*70a7ec85SAndroid Build Coastguard Worker " <name>vendor.foo.bar</name>\n"
477*70a7ec85SAndroid Build Coastguard Worker " <version>1.0</version>\n"
478*70a7ec85SAndroid Build Coastguard Worker " <interface>\n"
479*70a7ec85SAndroid Build Coastguard Worker " <name>IFoo</name>\n"
480*70a7ec85SAndroid Build Coastguard Worker " <instance>default</instance>\n"
481*70a7ec85SAndroid Build Coastguard Worker " </interface>\n"
482*70a7ec85SAndroid Build Coastguard Worker " </hal>\n"
483*70a7ec85SAndroid Build Coastguard Worker "</compatibility-matrix>");
484*70a7ec85SAndroid Build Coastguard Worker
485*70a7ec85SAndroid Build Coastguard Worker EXPECT_FALSE(getInstance()->assemble());
486*70a7ec85SAndroid Build Coastguard Worker }
487*70a7ec85SAndroid Build Coastguard Worker
TEST_F(AssembleVintfTest,DeviceFrameworkMatrixMultiple)488*70a7ec85SAndroid Build Coastguard Worker TEST_F(AssembleVintfTest, DeviceFrameworkMatrixMultiple) {
489*70a7ec85SAndroid Build Coastguard Worker setFakeEnvs({{"POLICYVERS", "30"},
490*70a7ec85SAndroid Build Coastguard Worker {"PLATFORM_SEPOLICY_VERSION", "202404"},
491*70a7ec85SAndroid Build Coastguard Worker {"PLATFORM_SEPOLICY_COMPAT_VERSIONS", "26.0 27.0"},
492*70a7ec85SAndroid Build Coastguard Worker {"FRAMEWORK_VBMETA_VERSION", "1.0"},
493*70a7ec85SAndroid Build Coastguard Worker {"PRODUCT_ENFORCE_VINTF_MANIFEST", "true"}});
494*70a7ec85SAndroid Build Coastguard Worker getInstance()->setCheckInputStream("check.xml", makeStream(gEmptyOutManifest));
495*70a7ec85SAndroid Build Coastguard Worker
496*70a7ec85SAndroid Build Coastguard Worker addInput("compatibility_matrix.foobar.xml",
497*70a7ec85SAndroid Build Coastguard Worker "<compatibility-matrix " + kMetaVersionStr + " type=\"framework\">\n"
498*70a7ec85SAndroid Build Coastguard Worker " <hal format=\"hidl\" optional=\"true\">\n"
499*70a7ec85SAndroid Build Coastguard Worker " <name>vendor.foo.bar</name>\n"
500*70a7ec85SAndroid Build Coastguard Worker " <version>1.0</version>\n"
501*70a7ec85SAndroid Build Coastguard Worker " <interface>\n"
502*70a7ec85SAndroid Build Coastguard Worker " <name>IFoo</name>\n"
503*70a7ec85SAndroid Build Coastguard Worker " <instance>default</instance>\n"
504*70a7ec85SAndroid Build Coastguard Worker " </interface>\n"
505*70a7ec85SAndroid Build Coastguard Worker " </hal>\n"
506*70a7ec85SAndroid Build Coastguard Worker "</compatibility-matrix>");
507*70a7ec85SAndroid Build Coastguard Worker
508*70a7ec85SAndroid Build Coastguard Worker addInput("compatibility_matrix.bazquux.xml",
509*70a7ec85SAndroid Build Coastguard Worker "<compatibility-matrix " + kMetaVersionStr + " type=\"framework\">\n"
510*70a7ec85SAndroid Build Coastguard Worker " <hal format=\"hidl\" optional=\"true\">\n"
511*70a7ec85SAndroid Build Coastguard Worker " <name>vendor.baz.quux</name>\n"
512*70a7ec85SAndroid Build Coastguard Worker " <version>1.0</version>\n"
513*70a7ec85SAndroid Build Coastguard Worker " <interface>\n"
514*70a7ec85SAndroid Build Coastguard Worker " <name>IBaz</name>\n"
515*70a7ec85SAndroid Build Coastguard Worker " <instance>default</instance>\n"
516*70a7ec85SAndroid Build Coastguard Worker " </interface>\n"
517*70a7ec85SAndroid Build Coastguard Worker " </hal>\n"
518*70a7ec85SAndroid Build Coastguard Worker "</compatibility-matrix>");
519*70a7ec85SAndroid Build Coastguard Worker
520*70a7ec85SAndroid Build Coastguard Worker EXPECT_TRUE(getInstance()->assemble());
521*70a7ec85SAndroid Build Coastguard Worker EXPECT_IN(
522*70a7ec85SAndroid Build Coastguard Worker "<compatibility-matrix " + kMetaVersionStr + " type=\"framework\">\n"
523*70a7ec85SAndroid Build Coastguard Worker " <hal format=\"hidl\" optional=\"true\">\n"
524*70a7ec85SAndroid Build Coastguard Worker " <name>vendor.baz.quux</name>\n"
525*70a7ec85SAndroid Build Coastguard Worker " <version>1.0</version>\n"
526*70a7ec85SAndroid Build Coastguard Worker " <interface>\n"
527*70a7ec85SAndroid Build Coastguard Worker " <name>IBaz</name>\n"
528*70a7ec85SAndroid Build Coastguard Worker " <instance>default</instance>\n"
529*70a7ec85SAndroid Build Coastguard Worker " </interface>\n"
530*70a7ec85SAndroid Build Coastguard Worker " </hal>\n"
531*70a7ec85SAndroid Build Coastguard Worker " <hal format=\"hidl\" optional=\"true\">\n"
532*70a7ec85SAndroid Build Coastguard Worker " <name>vendor.foo.bar</name>\n"
533*70a7ec85SAndroid Build Coastguard Worker " <version>1.0</version>\n"
534*70a7ec85SAndroid Build Coastguard Worker " <interface>\n"
535*70a7ec85SAndroid Build Coastguard Worker " <name>IFoo</name>\n"
536*70a7ec85SAndroid Build Coastguard Worker " <instance>default</instance>\n"
537*70a7ec85SAndroid Build Coastguard Worker " </interface>\n"
538*70a7ec85SAndroid Build Coastguard Worker " </hal>\n"
539*70a7ec85SAndroid Build Coastguard Worker " <sepolicy>\n"
540*70a7ec85SAndroid Build Coastguard Worker " <kernel-sepolicy-version>30</kernel-sepolicy-version>\n"
541*70a7ec85SAndroid Build Coastguard Worker " <sepolicy-version>26.0</sepolicy-version>\n"
542*70a7ec85SAndroid Build Coastguard Worker " <sepolicy-version>27.0</sepolicy-version>\n"
543*70a7ec85SAndroid Build Coastguard Worker " <sepolicy-version>202404</sepolicy-version>\n"
544*70a7ec85SAndroid Build Coastguard Worker " </sepolicy>\n"
545*70a7ec85SAndroid Build Coastguard Worker " <avb>\n"
546*70a7ec85SAndroid Build Coastguard Worker " <vbmeta-version>1.0</vbmeta-version>\n"
547*70a7ec85SAndroid Build Coastguard Worker " </avb>\n"
548*70a7ec85SAndroid Build Coastguard Worker "</compatibility-matrix>",
549*70a7ec85SAndroid Build Coastguard Worker getOutput());
550*70a7ec85SAndroid Build Coastguard Worker }
551*70a7ec85SAndroid Build Coastguard Worker
TEST_F(AssembleVintfTest,OutputFileMatrixTest)552*70a7ec85SAndroid Build Coastguard Worker TEST_F(AssembleVintfTest, OutputFileMatrixTest) {
553*70a7ec85SAndroid Build Coastguard Worker const std::string kFile = "file_name_1.xml";
554*70a7ec85SAndroid Build Coastguard Worker const std::string kMatrix =
555*70a7ec85SAndroid Build Coastguard Worker "<compatibility-matrix " + kMetaVersionStr + " type=\"framework\"/>";
556*70a7ec85SAndroid Build Coastguard Worker addInput(kFile, kMatrix);
557*70a7ec85SAndroid Build Coastguard Worker EXPECT_TRUE(getInstance()->assemble());
558*70a7ec85SAndroid Build Coastguard Worker EXPECT_IN(kFile, getOutput());
559*70a7ec85SAndroid Build Coastguard Worker }
560*70a7ec85SAndroid Build Coastguard Worker
TEST_F(AssembleVintfTest,OutputFileManifestTest)561*70a7ec85SAndroid Build Coastguard Worker TEST_F(AssembleVintfTest, OutputFileManifestTest) {
562*70a7ec85SAndroid Build Coastguard Worker const std::string kFile = "file_name_1.xml";
563*70a7ec85SAndroid Build Coastguard Worker std::string kManifest = "<manifest " + kMetaVersionStr + " type=\"device\" target-level=\"1\"/>";
564*70a7ec85SAndroid Build Coastguard Worker addInput(kFile, kManifest);
565*70a7ec85SAndroid Build Coastguard Worker EXPECT_TRUE(getInstance()->assemble());
566*70a7ec85SAndroid Build Coastguard Worker EXPECT_IN(kFile, getOutput());
567*70a7ec85SAndroid Build Coastguard Worker }
568*70a7ec85SAndroid Build Coastguard Worker
TEST_F(AssembleVintfTest,AidlAndHidlNames)569*70a7ec85SAndroid Build Coastguard Worker TEST_F(AssembleVintfTest, AidlAndHidlNames) {
570*70a7ec85SAndroid Build Coastguard Worker addInput("manifest1.xml",
571*70a7ec85SAndroid Build Coastguard Worker "<manifest " + kMetaVersionStr + " type=\"framework\">\n"
572*70a7ec85SAndroid Build Coastguard Worker " <hal format=\"aidl\">\n"
573*70a7ec85SAndroid Build Coastguard Worker " <name>android.system.foo</name>\n"
574*70a7ec85SAndroid Build Coastguard Worker " <fqname>IFoo/default</fqname>\n"
575*70a7ec85SAndroid Build Coastguard Worker " </hal>\n"
576*70a7ec85SAndroid Build Coastguard Worker "</manifest>\n");
577*70a7ec85SAndroid Build Coastguard Worker addInput("manifest2.xml",
578*70a7ec85SAndroid Build Coastguard Worker "<manifest " + kMetaVersionStr + " type=\"framework\">\n"
579*70a7ec85SAndroid Build Coastguard Worker " <hal format=\"hidl\">\n"
580*70a7ec85SAndroid Build Coastguard Worker " <name>android.system.foo</name>\n"
581*70a7ec85SAndroid Build Coastguard Worker " <transport>hwbinder</transport>\n"
582*70a7ec85SAndroid Build Coastguard Worker " <fqname>@1.0::IFoo/default</fqname>\n"
583*70a7ec85SAndroid Build Coastguard Worker " </hal>\n"
584*70a7ec85SAndroid Build Coastguard Worker "</manifest>\n");
585*70a7ec85SAndroid Build Coastguard Worker std::vector<AidlInterfaceMetadata> aidl{
586*70a7ec85SAndroid Build Coastguard Worker {.name = "android.system.foo",
587*70a7ec85SAndroid Build Coastguard Worker .types = {"android.system.foo.IFoo"}}};
588*70a7ec85SAndroid Build Coastguard Worker setFakeAidlMetadata(aidl);
589*70a7ec85SAndroid Build Coastguard Worker EXPECT_TRUE(getInstance()->assemble());
590*70a7ec85SAndroid Build Coastguard Worker EXPECT_IN(
591*70a7ec85SAndroid Build Coastguard Worker " <hal format=\"aidl\">\n"
592*70a7ec85SAndroid Build Coastguard Worker " <name>android.system.foo</name>\n"
593*70a7ec85SAndroid Build Coastguard Worker " <fqname>IFoo/default</fqname>\n"
594*70a7ec85SAndroid Build Coastguard Worker " </hal>\n",
595*70a7ec85SAndroid Build Coastguard Worker getOutput());
596*70a7ec85SAndroid Build Coastguard Worker EXPECT_IN(
597*70a7ec85SAndroid Build Coastguard Worker " <hal format=\"hidl\">\n"
598*70a7ec85SAndroid Build Coastguard Worker " <name>android.system.foo</name>\n"
599*70a7ec85SAndroid Build Coastguard Worker " <transport>hwbinder</transport>\n"
600*70a7ec85SAndroid Build Coastguard Worker " <fqname>@1.0::IFoo/default</fqname>\n"
601*70a7ec85SAndroid Build Coastguard Worker " </hal>\n",
602*70a7ec85SAndroid Build Coastguard Worker getOutput());
603*70a7ec85SAndroid Build Coastguard Worker }
604*70a7ec85SAndroid Build Coastguard Worker
605*70a7ec85SAndroid Build Coastguard Worker // Merge kernel FCM from manually written device manifest and <config> from
606*70a7ec85SAndroid Build Coastguard Worker // parsing kernel prebuilt.
TEST_F(AssembleVintfTest,MergeKernelFcmAndConfigs)607*70a7ec85SAndroid Build Coastguard Worker TEST_F(AssembleVintfTest, MergeKernelFcmAndConfigs) {
608*70a7ec85SAndroid Build Coastguard Worker addInput("manifest.xml",
609*70a7ec85SAndroid Build Coastguard Worker "<manifest " + kMetaVersionStr + " type=\"device\" target-level=\"1\">\n"
610*70a7ec85SAndroid Build Coastguard Worker " <kernel target-level=\"2\"/>\n"
611*70a7ec85SAndroid Build Coastguard Worker "</manifest>\n");
612*70a7ec85SAndroid Build Coastguard Worker getInstance()->addKernelConfigInputStream({3, 18, 10}, "android-base.config",
613*70a7ec85SAndroid Build Coastguard Worker makeStream("CONFIG_FOO=y"));
614*70a7ec85SAndroid Build Coastguard Worker EXPECT_TRUE(getInstance()->assemble());
615*70a7ec85SAndroid Build Coastguard Worker EXPECT_IN("<kernel version=\"3.18.10\" target-level=\"2\">", getOutput());
616*70a7ec85SAndroid Build Coastguard Worker }
617*70a7ec85SAndroid Build Coastguard Worker
TEST_F(AssembleVintfTest,NoAutoSetKernelFcm)618*70a7ec85SAndroid Build Coastguard Worker TEST_F(AssembleVintfTest, NoAutoSetKernelFcm) {
619*70a7ec85SAndroid Build Coastguard Worker addInput("manifest.xml",
620*70a7ec85SAndroid Build Coastguard Worker "<manifest " + kMetaVersionStr + " type=\"device\" target-level=\"1\">\n"
621*70a7ec85SAndroid Build Coastguard Worker " <kernel version=\"3.18.10\"/>\n"
622*70a7ec85SAndroid Build Coastguard Worker "</manifest>\n");
623*70a7ec85SAndroid Build Coastguard Worker EXPECT_TRUE(getInstance()->assemble());
624*70a7ec85SAndroid Build Coastguard Worker EXPECT_IN("<kernel version=\"3.18.10\"/>", getOutput());
625*70a7ec85SAndroid Build Coastguard Worker }
626*70a7ec85SAndroid Build Coastguard Worker
TEST_F(AssembleVintfTest,NoAutoSetKernelFcmWithConfig)627*70a7ec85SAndroid Build Coastguard Worker TEST_F(AssembleVintfTest, NoAutoSetKernelFcmWithConfig) {
628*70a7ec85SAndroid Build Coastguard Worker addInput("manifest.xml",
629*70a7ec85SAndroid Build Coastguard Worker "<manifest " + kMetaVersionStr + " type=\"device\" target-level=\"1\" />\n");
630*70a7ec85SAndroid Build Coastguard Worker getInstance()->addKernelConfigInputStream({3, 18, 10}, "android-base.config",
631*70a7ec85SAndroid Build Coastguard Worker makeStream("CONFIG_FOO=y"));
632*70a7ec85SAndroid Build Coastguard Worker EXPECT_TRUE(getInstance()->assemble());
633*70a7ec85SAndroid Build Coastguard Worker EXPECT_IN("<kernel version=\"3.18.10\">", getOutput());
634*70a7ec85SAndroid Build Coastguard Worker }
635*70a7ec85SAndroid Build Coastguard Worker
TEST_F(AssembleVintfTest,NoKernelFcmT)636*70a7ec85SAndroid Build Coastguard Worker TEST_F(AssembleVintfTest, NoKernelFcmT) {
637*70a7ec85SAndroid Build Coastguard Worker addInput("manifest.xml",
638*70a7ec85SAndroid Build Coastguard Worker StringPrintf(R"(<manifest %s type="device" target-level="%s">
639*70a7ec85SAndroid Build Coastguard Worker <kernel target-level="8"/>
640*70a7ec85SAndroid Build Coastguard Worker </manifest>)", kMetaVersionStr.c_str(),
641*70a7ec85SAndroid Build Coastguard Worker to_string(details::kEnforceDeviceManifestNoKernelLevel).c_str()));
642*70a7ec85SAndroid Build Coastguard Worker EXPECT_FALSE(getInstance()->assemble());
643*70a7ec85SAndroid Build Coastguard Worker }
644*70a7ec85SAndroid Build Coastguard Worker
645*70a7ec85SAndroid Build Coastguard Worker // Automatically add kernel FCM when parsing framework matrix for a single FCM version.
TEST_F(AssembleVintfTest,AutoSetMatrixKernelFcm)646*70a7ec85SAndroid Build Coastguard Worker TEST_F(AssembleVintfTest, AutoSetMatrixKernelFcm) {
647*70a7ec85SAndroid Build Coastguard Worker addInput("compatibility_matrix.xml",
648*70a7ec85SAndroid Build Coastguard Worker "<compatibility-matrix " + kMetaVersionStr + " type=\"framework\" level=\"1\"/>\n"
649*70a7ec85SAndroid Build Coastguard Worker );
650*70a7ec85SAndroid Build Coastguard Worker getInstance()->addKernelConfigInputStream({3, 18, 10}, "android-base.config",
651*70a7ec85SAndroid Build Coastguard Worker makeStream(""));
652*70a7ec85SAndroid Build Coastguard Worker EXPECT_TRUE(getInstance()->assemble());
653*70a7ec85SAndroid Build Coastguard Worker EXPECT_IN("<kernel version=\"3.18.10\" level=\"1\"/>", getOutput());
654*70a7ec85SAndroid Build Coastguard Worker }
655*70a7ec85SAndroid Build Coastguard Worker
656*70a7ec85SAndroid Build Coastguard Worker
TEST_F(AssembleVintfTest,WithKernelRequirements)657*70a7ec85SAndroid Build Coastguard Worker TEST_F(AssembleVintfTest, WithKernelRequirements) {
658*70a7ec85SAndroid Build Coastguard Worker setFakeEnvs({{"POLICYVERS", "30"},
659*70a7ec85SAndroid Build Coastguard Worker {"PLATFORM_SEPOLICY_VERSION", "202404"},
660*70a7ec85SAndroid Build Coastguard Worker {"PRODUCT_ENFORCE_VINTF_MANIFEST", "true"}});
661*70a7ec85SAndroid Build Coastguard Worker addInput("compatibility_matrix.xml",
662*70a7ec85SAndroid Build Coastguard Worker "<compatibility-matrix " + kMetaVersionStr + " type=\"framework\" level=\"1\">\n"
663*70a7ec85SAndroid Build Coastguard Worker " <kernel version=\"3.18.1\" level=\"1\">\n"
664*70a7ec85SAndroid Build Coastguard Worker " <config>\n"
665*70a7ec85SAndroid Build Coastguard Worker " <key>CONFIG_FOO</key>\n"
666*70a7ec85SAndroid Build Coastguard Worker " <value type=\"tristate\">y</value>\n"
667*70a7ec85SAndroid Build Coastguard Worker " </config>\n"
668*70a7ec85SAndroid Build Coastguard Worker " </kernel>\n"
669*70a7ec85SAndroid Build Coastguard Worker "</compatibility-matrix>\n");
670*70a7ec85SAndroid Build Coastguard Worker getInstance()->setCheckInputStream("check.xml", makeStream(
671*70a7ec85SAndroid Build Coastguard Worker "<manifest " + kMetaVersionStr + " type=\"device\" target-level=\"1\">\n"
672*70a7ec85SAndroid Build Coastguard Worker " <kernel target-level=\"1\" version=\"3.18.0\"/>\n"
673*70a7ec85SAndroid Build Coastguard Worker " <sepolicy>\n"
674*70a7ec85SAndroid Build Coastguard Worker " <version>202404</version>\n"
675*70a7ec85SAndroid Build Coastguard Worker " </sepolicy>\n"
676*70a7ec85SAndroid Build Coastguard Worker "</manifest>\n"));
677*70a7ec85SAndroid Build Coastguard Worker
678*70a7ec85SAndroid Build Coastguard Worker EXPECT_FALSE(getInstance()->assemble());
679*70a7ec85SAndroid Build Coastguard Worker }
680*70a7ec85SAndroid Build Coastguard Worker
TEST_F(AssembleVintfTest,NoKernelRequirements)681*70a7ec85SAndroid Build Coastguard Worker TEST_F(AssembleVintfTest, NoKernelRequirements) {
682*70a7ec85SAndroid Build Coastguard Worker setFakeEnvs({{"POLICYVERS", "30"},
683*70a7ec85SAndroid Build Coastguard Worker {"PLATFORM_SEPOLICY_VERSION", "202404"},
684*70a7ec85SAndroid Build Coastguard Worker {"PRODUCT_ENFORCE_VINTF_MANIFEST", "true"}});
685*70a7ec85SAndroid Build Coastguard Worker addInput("compatibility_matrix.xml",
686*70a7ec85SAndroid Build Coastguard Worker "<compatibility-matrix " + kMetaVersionStr + " type=\"framework\" level=\"1\">\n"
687*70a7ec85SAndroid Build Coastguard Worker " <kernel version=\"3.18.0\" level=\"1\"/>\n"
688*70a7ec85SAndroid Build Coastguard Worker "</compatibility-matrix>\n");
689*70a7ec85SAndroid Build Coastguard Worker getInstance()->setCheckInputStream("check.xml", makeStream(
690*70a7ec85SAndroid Build Coastguard Worker "<manifest " + kMetaVersionStr + " type=\"device\" target-level=\"1\">\n"
691*70a7ec85SAndroid Build Coastguard Worker " <kernel target-level=\"1\"/>\n"
692*70a7ec85SAndroid Build Coastguard Worker " <sepolicy>\n"
693*70a7ec85SAndroid Build Coastguard Worker " <version>202404</version>\n"
694*70a7ec85SAndroid Build Coastguard Worker " </sepolicy>\n"
695*70a7ec85SAndroid Build Coastguard Worker "</manifest>\n"));
696*70a7ec85SAndroid Build Coastguard Worker
697*70a7ec85SAndroid Build Coastguard Worker EXPECT_TRUE(getInstance()->setNoKernelRequirements());
698*70a7ec85SAndroid Build Coastguard Worker EXPECT_TRUE(getInstance()->assemble());
699*70a7ec85SAndroid Build Coastguard Worker }
700*70a7ec85SAndroid Build Coastguard Worker
701*70a7ec85SAndroid Build Coastguard Worker // clang-format on
702*70a7ec85SAndroid Build Coastguard Worker
TEST_F(AssembleVintfTest,ManifestLevelConflictCorrectLocation)703*70a7ec85SAndroid Build Coastguard Worker TEST_F(AssembleVintfTest, ManifestLevelConflictCorrectLocation) {
704*70a7ec85SAndroid Build Coastguard Worker addInput("manifest.xml", "<manifest " + kMetaVersionStr + R"( type="device" />)");
705*70a7ec85SAndroid Build Coastguard Worker addInput("manifest_1.xml",
706*70a7ec85SAndroid Build Coastguard Worker "<manifest " + kMetaVersionStr + R"( type="device" target-level="1" />)");
707*70a7ec85SAndroid Build Coastguard Worker addInput("manifest_2.xml",
708*70a7ec85SAndroid Build Coastguard Worker "<manifest " + kMetaVersionStr + R"( type="device" target-level="2" />)");
709*70a7ec85SAndroid Build Coastguard Worker EXPECT_FALSE(getInstance()->assemble());
710*70a7ec85SAndroid Build Coastguard Worker EXPECT_IN("File 'manifest_1.xml' has level 1", getError());
711*70a7ec85SAndroid Build Coastguard Worker EXPECT_IN("File 'manifest_2.xml' has level 2", getError());
712*70a7ec85SAndroid Build Coastguard Worker }
713*70a7ec85SAndroid Build Coastguard Worker
TEST_F(AssembleVintfTest,PassMultipleManifestEntrySameModule)714*70a7ec85SAndroid Build Coastguard Worker TEST_F(AssembleVintfTest, PassMultipleManifestEntrySameModule) {
715*70a7ec85SAndroid Build Coastguard Worker setFakeEnvs({{"VINTF_IGNORE_TARGET_FCM_VERSION", "true"}});
716*70a7ec85SAndroid Build Coastguard Worker std::vector<AidlInterfaceMetadata> aidl{
717*70a7ec85SAndroid Build Coastguard Worker {.name = "android.system.foo",
718*70a7ec85SAndroid Build Coastguard Worker .stability = "vintf",
719*70a7ec85SAndroid Build Coastguard Worker .versions = {1, 2},
720*70a7ec85SAndroid Build Coastguard Worker .types = {"android.system.foobar.IFoo", "android.system.foobar.IBar"}}};
721*70a7ec85SAndroid Build Coastguard Worker setFakeAidlMetadata(aidl);
722*70a7ec85SAndroid Build Coastguard Worker addInput("manifest1.xml", StringPrintf(
723*70a7ec85SAndroid Build Coastguard Worker R"(
724*70a7ec85SAndroid Build Coastguard Worker <manifest %s type="framework">
725*70a7ec85SAndroid Build Coastguard Worker <hal format="aidl">
726*70a7ec85SAndroid Build Coastguard Worker <name>android.system.foobar</name>\n"
727*70a7ec85SAndroid Build Coastguard Worker <fqname>IFoo/default</fqname>\n"
728*70a7ec85SAndroid Build Coastguard Worker <fqname>IBar/default</fqname>\n"
729*70a7ec85SAndroid Build Coastguard Worker <version>3</version>\n"
730*70a7ec85SAndroid Build Coastguard Worker </hal>
731*70a7ec85SAndroid Build Coastguard Worker </manifest>)",
732*70a7ec85SAndroid Build Coastguard Worker kMetaVersionStr.c_str()));
733*70a7ec85SAndroid Build Coastguard Worker EXPECT_TRUE(getInstance()->assemble());
734*70a7ec85SAndroid Build Coastguard Worker }
735*70a7ec85SAndroid Build Coastguard Worker
TEST_F(AssembleVintfTest,FailOnMultipleModulesInSameManifestEntry)736*70a7ec85SAndroid Build Coastguard Worker TEST_F(AssembleVintfTest, FailOnMultipleModulesInSameManifestEntry) {
737*70a7ec85SAndroid Build Coastguard Worker setFakeEnvs({{"VINTF_IGNORE_TARGET_FCM_VERSION", "true"}});
738*70a7ec85SAndroid Build Coastguard Worker std::vector<AidlInterfaceMetadata> aidl{{.name = "android.system.foo",
739*70a7ec85SAndroid Build Coastguard Worker .stability = "vintf",
740*70a7ec85SAndroid Build Coastguard Worker .versions = {1, 2},
741*70a7ec85SAndroid Build Coastguard Worker .types = {"android.system.foobar.IFoo"}},
742*70a7ec85SAndroid Build Coastguard Worker {.name = "android.system.bar",
743*70a7ec85SAndroid Build Coastguard Worker .stability = "vintf",
744*70a7ec85SAndroid Build Coastguard Worker .versions = {1, 2},
745*70a7ec85SAndroid Build Coastguard Worker .types = {"android.system.foobar.IBar"}}};
746*70a7ec85SAndroid Build Coastguard Worker setFakeAidlMetadata(aidl);
747*70a7ec85SAndroid Build Coastguard Worker addInput("manifest1.xml", StringPrintf(
748*70a7ec85SAndroid Build Coastguard Worker R"(
749*70a7ec85SAndroid Build Coastguard Worker <manifest %s type="framework">
750*70a7ec85SAndroid Build Coastguard Worker <hal format="aidl">
751*70a7ec85SAndroid Build Coastguard Worker <name>android.system.foobar</name>\n"
752*70a7ec85SAndroid Build Coastguard Worker <fqname>IFoo/default</fqname>\n"
753*70a7ec85SAndroid Build Coastguard Worker <fqname>IBar/default</fqname>\n"
754*70a7ec85SAndroid Build Coastguard Worker <version>3</version>\n"
755*70a7ec85SAndroid Build Coastguard Worker </hal>
756*70a7ec85SAndroid Build Coastguard Worker </manifest>)",
757*70a7ec85SAndroid Build Coastguard Worker kMetaVersionStr.c_str()));
758*70a7ec85SAndroid Build Coastguard Worker EXPECT_FALSE(getInstance()->assemble());
759*70a7ec85SAndroid Build Coastguard Worker EXPECT_IN("HAL manifest entries must only contain", getError());
760*70a7ec85SAndroid Build Coastguard Worker EXPECT_IN("android.system.foobar.IFoo is in android.system.foo", getError());
761*70a7ec85SAndroid Build Coastguard Worker }
762*70a7ec85SAndroid Build Coastguard Worker
TEST_F(AssembleVintfTest,ForceDowngradeVersion)763*70a7ec85SAndroid Build Coastguard Worker TEST_F(AssembleVintfTest, ForceDowngradeVersion) {
764*70a7ec85SAndroid Build Coastguard Worker setFakeEnvs({{"VINTF_IGNORE_TARGET_FCM_VERSION", "true"}});
765*70a7ec85SAndroid Build Coastguard Worker std::vector<AidlInterfaceMetadata> aidl{
766*70a7ec85SAndroid Build Coastguard Worker {.name = "foo_android.system.bar",
767*70a7ec85SAndroid Build Coastguard Worker .stability = "vintf",
768*70a7ec85SAndroid Build Coastguard Worker .types = {"android.system.bar.IFoo", "android.system.bar.MyFoo"},
769*70a7ec85SAndroid Build Coastguard Worker .versions = {1, 2},
770*70a7ec85SAndroid Build Coastguard Worker .has_development = true}};
771*70a7ec85SAndroid Build Coastguard Worker setFakeAidlMetadata(aidl);
772*70a7ec85SAndroid Build Coastguard Worker setFakeAidlUseUnfrozen(false);
773*70a7ec85SAndroid Build Coastguard Worker addInput("manifest1.xml", StringPrintf(
774*70a7ec85SAndroid Build Coastguard Worker R"(
775*70a7ec85SAndroid Build Coastguard Worker <manifest %s type="framework">
776*70a7ec85SAndroid Build Coastguard Worker <hal format="aidl">
777*70a7ec85SAndroid Build Coastguard Worker <name>android.system.bar</name>\n"
778*70a7ec85SAndroid Build Coastguard Worker <fqname>IFoo/default</fqname>\n"
779*70a7ec85SAndroid Build Coastguard Worker <version>3</version>\n"
780*70a7ec85SAndroid Build Coastguard Worker </hal>
781*70a7ec85SAndroid Build Coastguard Worker </manifest>)",
782*70a7ec85SAndroid Build Coastguard Worker kMetaVersionStr.c_str()));
783*70a7ec85SAndroid Build Coastguard Worker EXPECT_TRUE(getInstance()->assemble());
784*70a7ec85SAndroid Build Coastguard Worker EXPECT_IN("<version>2</version>", getOutput());
785*70a7ec85SAndroid Build Coastguard Worker }
786*70a7ec85SAndroid Build Coastguard Worker
787*70a7ec85SAndroid Build Coastguard Worker TEST_F(AssembleVintfTest, InfoDowngradeVersionTypo) {
788*70a7ec85SAndroid Build Coastguard Worker setFakeEnvs({{"VINTF_IGNORE_TARGET_FCM_VERSION", "true"}});
789*70a7ec85SAndroid Build Coastguard Worker std::vector<AidlInterfaceMetadata> aidl{
790*70a7ec85SAndroid Build Coastguard Worker {.name = "foo_android.system.bar",
791*70a7ec85SAndroid Build Coastguard Worker .stability = "vintf",
792*70a7ec85SAndroid Build Coastguard Worker .types = {"android.system.bar.IFoo", "android.system.bar.MyFoo"},
793*70a7ec85SAndroid Build Coastguard Worker .versions = {1, 2},
794*70a7ec85SAndroid Build Coastguard Worker .has_development = true}};
795*70a7ec85SAndroid Build Coastguard Worker setFakeAidlMetadata(aidl);
796*70a7ec85SAndroid Build Coastguard Worker setFakeAidlUseUnfrozen(false);
797*70a7ec85SAndroid Build Coastguard Worker addInput("manifest1.xml", StringPrintf(
798*70a7ec85SAndroid Build Coastguard Worker R"(
799*70a7ec85SAndroid Build Coastguard Worker <manifest %s type="framework">
800*70a7ec85SAndroid Build Coastguard Worker <hal format="aidl">
801*70a7ec85SAndroid Build Coastguard Worker <name>android.system.bar</name>\n"
802*70a7ec85SAndroid Build Coastguard Worker <fqname>IFooooooooo/default</fqname>\n"
803*70a7ec85SAndroid Build Coastguard Worker <version>3</version>\n"
804*70a7ec85SAndroid Build Coastguard Worker </hal>
805*70a7ec85SAndroid Build Coastguard Worker </manifest>)",
806*70a7ec85SAndroid Build Coastguard Worker kMetaVersionStr.c_str()));
807*70a7ec85SAndroid Build Coastguard Worker // It doesn't fail because there may be prebuilts, but make sure we do log it.
808*70a7ec85SAndroid Build Coastguard Worker EXPECT_TRUE(getInstance()->assemble());
809*70a7ec85SAndroid Build Coastguard Worker EXPECT_IN(
810*70a7ec85SAndroid Build Coastguard Worker "INFO: Couldn't find AIDL metadata for: android.system.bar.IFooooooooo in file "
811*70a7ec85SAndroid Build Coastguard Worker "manifest1.xml. "
812*70a7ec85SAndroid Build Coastguard Worker "Check "
813*70a7ec85SAndroid Build Coastguard Worker "spelling?",
814*70a7ec85SAndroid Build Coastguard Worker getError());
815*70a7ec85SAndroid Build Coastguard Worker }
816*70a7ec85SAndroid Build Coastguard Worker
TEST_F(AssembleVintfTest,AllowUnfrozenVersion)817*70a7ec85SAndroid Build Coastguard Worker TEST_F(AssembleVintfTest, AllowUnfrozenVersion) {
818*70a7ec85SAndroid Build Coastguard Worker setFakeEnvs({{"VINTF_IGNORE_TARGET_FCM_VERSION", "true"}});
819*70a7ec85SAndroid Build Coastguard Worker std::vector<AidlInterfaceMetadata> aidl{
820*70a7ec85SAndroid Build Coastguard Worker {.name = "foo_android.system.bar",
821*70a7ec85SAndroid Build Coastguard Worker .stability = "vintf",
822*70a7ec85SAndroid Build Coastguard Worker .types = {"android.system.bar.IFoo", "android.system.bar.MyFoo"},
823*70a7ec85SAndroid Build Coastguard Worker .versions = {1, 2},
824*70a7ec85SAndroid Build Coastguard Worker .has_development = true}};
825*70a7ec85SAndroid Build Coastguard Worker setFakeAidlMetadata(aidl);
826*70a7ec85SAndroid Build Coastguard Worker setFakeAidlUseUnfrozen(true);
827*70a7ec85SAndroid Build Coastguard Worker addInput("manifest1.xml", StringPrintf(
828*70a7ec85SAndroid Build Coastguard Worker R"(
829*70a7ec85SAndroid Build Coastguard Worker <manifest %s type="framework">
830*70a7ec85SAndroid Build Coastguard Worker <hal format="aidl">
831*70a7ec85SAndroid Build Coastguard Worker <name>android.system.bar</name>\n"
832*70a7ec85SAndroid Build Coastguard Worker <fqname>IFoo/default</fqname>\n"
833*70a7ec85SAndroid Build Coastguard Worker <version>3</version>\n"
834*70a7ec85SAndroid Build Coastguard Worker </hal>
835*70a7ec85SAndroid Build Coastguard Worker </manifest>)",
836*70a7ec85SAndroid Build Coastguard Worker kMetaVersionStr.c_str()));
837*70a7ec85SAndroid Build Coastguard Worker EXPECT_TRUE(getInstance()->assemble());
838*70a7ec85SAndroid Build Coastguard Worker EXPECT_IN("<version>3</version>", getOutput());
839*70a7ec85SAndroid Build Coastguard Worker }
840*70a7ec85SAndroid Build Coastguard Worker
841*70a7ec85SAndroid Build Coastguard Worker TEST_F(AssembleVintfTest, KeepFrozenVersion) {
842*70a7ec85SAndroid Build Coastguard Worker setFakeEnvs({{"VINTF_IGNORE_TARGET_FCM_VERSION", "true"}});
843*70a7ec85SAndroid Build Coastguard Worker // V3 is already frozen
844*70a7ec85SAndroid Build Coastguard Worker std::vector<AidlInterfaceMetadata> aidl{
845*70a7ec85SAndroid Build Coastguard Worker {.name = "foo_android.system.bar",
846*70a7ec85SAndroid Build Coastguard Worker .stability = "vintf",
847*70a7ec85SAndroid Build Coastguard Worker .types = {"android.system.bar.IFoo", "android.system.bar.MyFoo"},
848*70a7ec85SAndroid Build Coastguard Worker .versions = {1, 2, 3},
849*70a7ec85SAndroid Build Coastguard Worker .has_development = true}};
850*70a7ec85SAndroid Build Coastguard Worker setFakeAidlMetadata(aidl);
851*70a7ec85SAndroid Build Coastguard Worker setFakeAidlUseUnfrozen(false);
852*70a7ec85SAndroid Build Coastguard Worker addInput("manifest1.xml", StringPrintf(
853*70a7ec85SAndroid Build Coastguard Worker R"(
854*70a7ec85SAndroid Build Coastguard Worker <manifest %s type="framework">
855*70a7ec85SAndroid Build Coastguard Worker <hal format="aidl">
856*70a7ec85SAndroid Build Coastguard Worker <name>android.system.bar</name>\n"
857*70a7ec85SAndroid Build Coastguard Worker <fqname>IFoo/default</fqname>\n"
858*70a7ec85SAndroid Build Coastguard Worker <version>3</version>\n"
859*70a7ec85SAndroid Build Coastguard Worker </hal>
860*70a7ec85SAndroid Build Coastguard Worker </manifest>)",
861*70a7ec85SAndroid Build Coastguard Worker kMetaVersionStr.c_str()));
862*70a7ec85SAndroid Build Coastguard Worker EXPECT_TRUE(getInstance()->assemble());
863*70a7ec85SAndroid Build Coastguard Worker EXPECT_IN("<version>3</version>", getOutput());
864*70a7ec85SAndroid Build Coastguard Worker }
865*70a7ec85SAndroid Build Coastguard Worker
866*70a7ec85SAndroid Build Coastguard Worker } // namespace vintf
867*70a7ec85SAndroid Build Coastguard Worker } // namespace android
868