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