package tw.com.integration; import com.amazonaws.AmazonServiceException; import com.amazonaws.auth.AWSCredentialsProvider; import com.amazonaws.auth.DefaultAWSCredentialsProviderChain; import com.amazonaws.services.cloudformation.AmazonCloudFormationClient; import org.apache.commons.io.FileUtils; import org.junit.Before; import org.junit.Test; import tw.com.EnvironmentSetupForTests; import tw.com.providers.CloudFormationClient; import java.io.File; import java.io.IOException; import java.nio.charset.Charset; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; public class TestHaveValidTemplateFiles { private AWSCredentialsProvider credentialsProvider; @Before public void beforeTestsRun() { credentialsProvider = new DefaultAWSCredentialsProviderChain(); } @Test public void testAllTestCfnFilesAreValid() throws IOException, InterruptedException { AmazonCloudFormationClient cfnClient = EnvironmentSetupForTests.createCFNClient(credentialsProvider); CloudFormationClient cloudClient = new CloudFormationClient(cfnClient); File folder = new File("src/cfnScripts"); assertTrue(folder.exists()); validateFolder(cloudClient, folder); } private void validateFolder(CloudFormationClient cloudClient, File folder) throws InterruptedException { File[] files = folder.listFiles(); for(File file : files) { if (file.isDirectory()) { validateFolder(cloudClient, file); } else { if (!file.isHidden()) { try { String contents = FileUtils.readFileToString(file, Charset.defaultCharset()); cloudClient.validateTemplate(contents); } catch (IOException | AmazonServiceException e) { fail(file.getAbsolutePath() + ": " + e); } } Thread.sleep(200); // to avoid rate limit errors on AWS api } } } }