1 /*
2  * Copyright (C) 2020 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 package com.android.compatibility.common.tradefed.result.suite;
17 
18 import static org.junit.Assert.assertTrue;
19 
20 import com.android.compatibility.common.tradefed.build.CompatibilityBuildHelper;
21 import com.android.tradefed.build.BuildInfo;
22 import com.android.tradefed.build.IBuildInfo;
23 import com.android.tradefed.config.Configuration;
24 import com.android.tradefed.config.ConfigurationDef;
25 import com.android.tradefed.config.IConfiguration;
26 import com.android.tradefed.config.OptionSetter;
27 import com.android.tradefed.invoker.IInvocationContext;
28 import com.android.tradefed.invoker.InvocationContext;
29 import com.android.tradefed.util.FileUtil;
30 
31 import org.junit.After;
32 import org.junit.Before;
33 import org.junit.Test;
34 import org.junit.runner.RunWith;
35 import org.junit.runners.JUnit4;
36 
37 import java.io.File;
38 
39 /** Unit tests for {@link CertificationSuiteResultReporter}. */
40 @RunWith(JUnit4.class)
41 public class CertificationSuiteResultReporterTest {
42     private CertificationSuiteResultReporter mReporter;
43     private IConfiguration mConfiguration;
44     private IInvocationContext mContext;
45     private CompatibilityBuildHelper mBuildHelper;
46     private File mResultDir;
47     private File mFakeDir;
48 
49     @Before
setUp()50     public void setUp() throws Exception {
51         mFakeDir = FileUtil.createTempDir("result-dir");
52         mResultDir = new File(mFakeDir, "android-cts/results");
53         mResultDir.mkdirs();
54 
55         IBuildInfo info = new BuildInfo();
56         info.addBuildAttribute(CompatibilityBuildHelper.ROOT_DIR, mFakeDir.getAbsolutePath());
57         info.addBuildAttribute(
58                 CompatibilityBuildHelper.START_TIME_MS, Long.toString(System.currentTimeMillis()));
59         mContext = new InvocationContext();
60         mContext.addDeviceBuildInfo(ConfigurationDef.DEFAULT_DEVICE_NAME, info);
61 
62         mBuildHelper =
63                 new CompatibilityBuildHelper(info) {
64                     @Override
65                     public String getSuiteName() {
66                         return "CTS";
67                     }
68 
69                     @Override
70                     public String getSuiteVersion() {
71                         return "version";
72                     }
73 
74                     @Override
75                     public String getSuitePlan() {
76                         return "cts";
77                     }
78 
79                     @Override
80                     public String getSuiteBuild() {
81                         return "R1";
82                     }
83                 };
84     }
85 
86     @After
tearDown()87     public void tearDown() throws Exception {
88         FileUtil.recursiveDelete(mFakeDir);
89     }
90 
91     /** Check that the basic overall structure is good an contains all the information. */
92     @Test
testSuiteVariant()93     public void testSuiteVariant() throws Exception {
94         mConfiguration = new Configuration("test", "test");
95         mConfiguration.setCommandLine(new String[] {"cts", "-m", "CtsGestureTestCases"});
96 
97         mReporter =
98                 new CertificationSuiteResultReporter() {
99                     @Override
100                     CompatibilityBuildHelper createBuildHelper() {
101                         return mBuildHelper;
102                     }
103                 };
104         mReporter.setConfiguration(mConfiguration);
105 
106         mReporter.invocationStarted(mContext);
107         mReporter.invocationEnded(500L);
108 
109         File reportFile = new File(mBuildHelper.getResultDir(), "test_result.xml");
110         assertTrue(reportFile.exists());
111         String content = FileUtil.readStringFromFile(reportFile);
112         assertTrue(content.contains("suite_name=\"CTS\""));
113         assertTrue(content.contains("suite_variant=\"CTS\""));
114         assertTrue(content.contains("suite_version=\"version\""));
115     }
116 
117     /** Check that when running cts-on-gsi the variant is changed. */
118     @Test
testSuiteVariantGSI()119     public void testSuiteVariantGSI() throws Exception {
120         mConfiguration = new Configuration("test", "test");
121         mConfiguration.setCommandLine(new String[] {"cts-on-gsi"});
122 
123         mReporter =
124                 new CertificationSuiteResultReporter() {
125                     @Override
126                     CompatibilityBuildHelper createBuildHelper() {
127                         return mBuildHelper;
128                     }
129                 };
130         mReporter.setConfiguration(mConfiguration);
131 
132         mReporter.invocationStarted(mContext);
133         mReporter.invocationEnded(500L);
134 
135         File reportFile = new File(mBuildHelper.getResultDir(), "test_result.xml");
136         assertTrue(reportFile.exists());
137         String content = FileUtil.readStringFromFile(reportFile);
138         assertTrue(content.contains("suite_name=\"CTS\""));
139         assertTrue(content.contains("suite_variant=\"CTS_ON_GSI\""));
140         assertTrue(content.contains("suite_version=\"version\""));
141     }
142 
143     /**
144      * For the R release, ensure that CTS-on-GSI still report as VTS for APFE to ingest it properly
145      */
146     @Test
testSuiteVariantGSI_R_Compatibility()147     public void testSuiteVariantGSI_R_Compatibility() throws Exception {
148         mConfiguration = new Configuration("test", "test");
149         mConfiguration.setCommandLine(new String[] {"cts-on-gsi"});
150 
151         mReporter =
152                 new CertificationSuiteResultReporter() {
153                     @Override
154                     CompatibilityBuildHelper createBuildHelper() {
155                         return mBuildHelper;
156                     }
157                 };
158         OptionSetter setter = new OptionSetter(mReporter);
159         setter.setOptionValue("cts-on-gsi-variant", "true");
160         mReporter.setConfiguration(mConfiguration);
161 
162         mReporter.invocationStarted(mContext);
163         mReporter.invocationEnded(500L);
164 
165         File reportFile = new File(mBuildHelper.getResultDir(), "test_result.xml");
166         assertTrue(reportFile.exists());
167         String content = FileUtil.readStringFromFile(reportFile);
168         // Suite name is overridden to VTS for the R release
169         assertTrue(content.contains("suite_name=\"VTS\""));
170         assertTrue(content.contains("suite_variant=\"CTS_ON_GSI\""));
171         assertTrue(content.contains("suite_version=\"version\""));
172         // Ensure html is created
173         assertTrue(new File(mBuildHelper.getResultDir(), "test_result.html").exists());
174     }
175 
176     /**
177      * For the R release, ensure that CTS-on-GSI still report as VTS for APFE to ingest it properly
178      */
179     @Test
testSuiteVariantGSI_R_Compatibility_ATS()180     public void testSuiteVariantGSI_R_Compatibility_ATS() throws Exception {
181         mConfiguration = new Configuration("test", "test");
182         // ATS renames the config so we need to handle it.
183         mConfiguration.setCommandLine(new String[] {"_cts-on-gsi.xml"});
184 
185         mReporter =
186                 new CertificationSuiteResultReporter() {
187                     @Override
188                     CompatibilityBuildHelper createBuildHelper() {
189                         return mBuildHelper;
190                     }
191                 };
192         OptionSetter setter = new OptionSetter(mReporter);
193         setter.setOptionValue("cts-on-gsi-variant", "true");
194         mReporter.setConfiguration(mConfiguration);
195 
196         mReporter.invocationStarted(mContext);
197         mReporter.invocationEnded(500L);
198 
199         File reportFile = new File(mBuildHelper.getResultDir(), "test_result.xml");
200         assertTrue(reportFile.exists());
201         String content = FileUtil.readStringFromFile(reportFile);
202         // Suite name is overridden to VTS for the R release
203         assertTrue(content.contains("suite_name=\"VTS\""));
204         assertTrue(content.contains("suite_version=\"version\""));
205     }
206 }
207