• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2017 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.tradefed.presubmit;
17 
18 import com.android.tradefed.build.IBuildInfo;
19 import com.android.tradefed.build.IDeviceBuildInfo;
20 import com.android.tradefed.config.ConfigurationException;
21 import com.android.tradefed.config.ConfigurationFactory;
22 import com.android.tradefed.config.ConfigurationUtil;
23 import com.android.tradefed.config.IConfiguration;
24 import com.android.tradefed.config.IConfigurationFactory;
25 import com.android.tradefed.testtype.DeviceJUnit4ClassRunner;
26 import com.android.tradefed.testtype.IBuildReceiver;
27 import com.android.tradefed.testtype.suite.ValidateSuiteConfigHelper;
28 
29 import com.google.common.base.Joiner;
30 
31 import org.junit.Assume;
32 import org.junit.Test;
33 import org.junit.runner.RunWith;
34 
35 import java.io.File;
36 import java.util.ArrayList;
37 import java.util.Arrays;
38 import java.util.List;
39 
40 /**
41  * Validation tests to run against the configuration in general-tests.zip to ensure they can all
42  * parse.
43  *
44  * <p>Do not add to UnitTests.java. This is meant to run standalone.
45  */
46 @RunWith(DeviceJUnit4ClassRunner.class)
47 public class GeneralTestsConfigValidation implements IBuildReceiver {
48 
49     private IBuildInfo mBuild;
50 
51     @Override
setBuild(IBuildInfo buildInfo)52     public void setBuild(IBuildInfo buildInfo) {
53         mBuild = buildInfo;
54     }
55 
56     /** Get all the configuration copied to the build tests dir and check if they load. */
57     @Test
testConfigsLoad()58     public void testConfigsLoad() throws Exception {
59         List<String> errors = new ArrayList<>();
60         Assume.assumeTrue(mBuild instanceof IDeviceBuildInfo);
61 
62         IConfigurationFactory configFactory = ConfigurationFactory.getInstance();
63         List<String> configs = new ArrayList<>();
64         IDeviceBuildInfo deviceBuildInfo = (IDeviceBuildInfo) mBuild;
65         File testsDir = deviceBuildInfo.getTestsDir();
66         List<File> extraTestCasesDirs = Arrays.asList(testsDir);
67         configs.addAll(ConfigurationUtil.getConfigNamesFromDirs(null, extraTestCasesDirs));
68         for (String configName : configs) {
69             try {
70                 IConfiguration c =
71                         configFactory.createConfigurationFromArgs(new String[] {configName});
72                 // All configurations in general-tests.zip should be module since they are generated
73                 // from AndroidTest.xml
74                 ValidateSuiteConfigHelper.validateConfig(c);
75                 // Add more checks if necessary
76             } catch (ConfigurationException e) {
77                 errors.add(String.format("\t%s: %s", configName, e.getMessage()));
78             }
79         }
80 
81         // If any errors report them in a final exception.
82         if (!errors.isEmpty()) {
83             throw new ConfigurationException(
84                     String.format("Fail configuration check:\n%s", Joiner.on("\n").join(errors)));
85         }
86     }
87 }
88