/* * Copyright (c) 2016 ingenieux Labs * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package br.com.ingenieux.mojo.beanstalk; import com.amazonaws.auth.AWSCredentials; import com.amazonaws.services.elasticbeanstalk.AWSElasticBeanstalk; import com.amazonaws.services.elasticbeanstalk.AWSElasticBeanstalkClient; import com.amazonaws.services.elasticbeanstalk.model.DescribeEnvironmentsResult; import com.amazonaws.services.elasticbeanstalk.model.EnvironmentDescription; import com.amazonaws.services.elasticbeanstalk.model.TerminateEnvironmentRequest; import org.apache.commons.lang.text.StrSubstitutor; import org.apache.maven.plugin.testing.AbstractMojoTestCase; import org.codehaus.plexus.configuration.PlexusConfiguration; import org.junit.Ignore; import java.io.File; import java.io.FileInputStream; import java.net.URISyntaxException; import java.util.Properties; import br.com.ingenieux.mojo.aws.AbstractAWSMojo; import br.com.ingenieux.mojo.beanstalk.app.CreateApplicationMojo; import br.com.ingenieux.mojo.beanstalk.bundle.UploadSourceBundleMojo; import br.com.ingenieux.mojo.beanstalk.config.CreateConfigurationTemplateMojo; import br.com.ingenieux.mojo.beanstalk.config.DescribeConfigurationTemplatesMojo; import br.com.ingenieux.mojo.beanstalk.dns.CheckAvailabilityMojo; import br.com.ingenieux.mojo.beanstalk.env.CreateEnvironmentMojo; import br.com.ingenieux.mojo.beanstalk.env.TerminateEnvironmentMojo; import br.com.ingenieux.mojo.beanstalk.env.UpdateEnvironmentMojo; import br.com.ingenieux.mojo.beanstalk.env.WaitForEnvironmentMojo; import br.com.ingenieux.mojo.beanstalk.version.CreateApplicationVersionMojo; @Ignore public abstract class BeanstalkTestBase extends AbstractMojoTestCase { public static final String PROP_VERSION_LABEL = "versionLabel"; public static final String PROP_S3_KEY_MASK = "s3KeyMask"; public static final String PROP_S3_BUCKET = "s3Bucket"; Properties properties; StrSubstitutor strSub; CheckAvailabilityMojo checkAvailabilityMojo; CreateApplicationMojo createAppMojo; CreateApplicationVersionMojo createAppVersionMojo; UploadSourceBundleMojo uploadSourceBundleMojo; CreateEnvironmentMojo createEnvMojo; TerminateEnvironmentMojo termEnvMojo; WaitForEnvironmentMojo waitForEnvMojo; UpdateEnvironmentMojo updateEnvMojo; DescribeConfigurationTemplatesMojo describeConfigTemplatesMojo; CreateConfigurationTemplateMojo createConfigurationTemplateMojo; String versionLabel; AWSCredentials credentials; AWSElasticBeanstalk service; public BeanstalkTestBase() { super(); } @Override protected void setUp() throws Exception { super.setUp(); Properties properties = new Properties(); properties.load(new FileInputStream("test.properties")); this.properties = properties; configureMojos(); this.credentials = uploadSourceBundleMojo.getAWSCredentials().getCredentials(); this.service = new AWSElasticBeanstalkClient(credentials); } protected void configureMojos() throws Exception { createAppMojo = getMojo(CreateApplicationMojo.class); createAppVersionMojo = getMojo(CreateApplicationVersionMojo.class); uploadSourceBundleMojo = getMojo(UploadSourceBundleMojo.class); createAppMojo = getMojo(CreateApplicationMojo.class); createAppVersionMojo = getMojo(CreateApplicationVersionMojo.class); createEnvMojo = getMojo(CreateEnvironmentMojo.class); waitForEnvMojo = getMojo(WaitForEnvironmentMojo.class); termEnvMojo = getMojo(TerminateEnvironmentMojo.class); updateEnvMojo = getMojo(UpdateEnvironmentMojo.class); describeConfigTemplatesMojo = getMojo(DescribeConfigurationTemplatesMojo.class); versionLabel = String.format("test-%08X", System.currentTimeMillis()); checkAvailabilityMojo = getMojo(CheckAvailabilityMojo.class); createConfigurationTemplateMojo = getMojo(CreateConfigurationTemplateMojo.class); } protected File getBasePom(String pomName) { return new File(getBasedir(), "target/test-classes/br/com/ingenieux/mojo/beanstalk/" + pomName); } @SuppressWarnings("unchecked") protected <T extends AbstractAWSMojo<?>> T getMojo(Class<T> mojoClazz) throws Exception { File testPom = this.getBasePom("pom.xml"); PlexusConfiguration pluginConfiguration = extractPluginConfiguration("beanstalk-maven-plugin", testPom); return (T) configureMojo(mojoClazz.newInstance(), pluginConfiguration); } protected File getWarFile() throws URISyntaxException { return new File(BeanstalkTestBase.class.getResource("test-war.war").toURI()); } protected String getS3Path() { properties.put(PROP_VERSION_LABEL, this.versionLabel); strSub = new StrSubstitutor(properties); return strSub.replace(properties.get(PROP_S3_KEY_MASK)); } protected String getS3Bucket() { return properties.getProperty(PROP_S3_BUCKET); } public void clearEnvironments() { DescribeEnvironmentsResult environments = service.describeEnvironments(); for (EnvironmentDescription d : environments.getEnvironments()) { service.terminateEnvironment(new TerminateEnvironmentRequest().withEnvironmentId(d.getEnvironmentId()).withTerminateResources(true)); } } }