View Javadoc
1   /*
2    * Copyright (c) 2016 ingenieux Labs
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  
17  package br.com.ingenieux.mojo.beanstalk;
18  
19  import com.amazonaws.auth.AWSCredentials;
20  import com.amazonaws.services.elasticbeanstalk.AWSElasticBeanstalk;
21  import com.amazonaws.services.elasticbeanstalk.AWSElasticBeanstalkClient;
22  import com.amazonaws.services.elasticbeanstalk.model.DescribeEnvironmentsResult;
23  import com.amazonaws.services.elasticbeanstalk.model.EnvironmentDescription;
24  import com.amazonaws.services.elasticbeanstalk.model.TerminateEnvironmentRequest;
25  
26  import org.apache.commons.lang.text.StrSubstitutor;
27  import org.apache.maven.plugin.testing.AbstractMojoTestCase;
28  import org.codehaus.plexus.configuration.PlexusConfiguration;
29  import org.junit.Ignore;
30  
31  import java.io.File;
32  import java.io.FileInputStream;
33  import java.net.URISyntaxException;
34  import java.util.Properties;
35  
36  import br.com.ingenieux.mojo.aws.AbstractAWSMojo;
37  import br.com.ingenieux.mojo.beanstalk.app.CreateApplicationMojo;
38  import br.com.ingenieux.mojo.beanstalk.bundle.UploadSourceBundleMojo;
39  import br.com.ingenieux.mojo.beanstalk.config.CreateConfigurationTemplateMojo;
40  import br.com.ingenieux.mojo.beanstalk.config.DescribeConfigurationTemplatesMojo;
41  import br.com.ingenieux.mojo.beanstalk.dns.CheckAvailabilityMojo;
42  import br.com.ingenieux.mojo.beanstalk.env.CreateEnvironmentMojo;
43  import br.com.ingenieux.mojo.beanstalk.env.TerminateEnvironmentMojo;
44  import br.com.ingenieux.mojo.beanstalk.env.UpdateEnvironmentMojo;
45  import br.com.ingenieux.mojo.beanstalk.env.WaitForEnvironmentMojo;
46  import br.com.ingenieux.mojo.beanstalk.version.CreateApplicationVersionMojo;
47  
48  @Ignore
49  public abstract class BeanstalkTestBase extends AbstractMojoTestCase {
50  
51    public static final String PROP_VERSION_LABEL = "versionLabel";
52  
53    public static final String PROP_S3_KEY_MASK = "s3KeyMask";
54  
55    public static final String PROP_S3_BUCKET = "s3Bucket";
56  
57    Properties properties;
58  
59    StrSubstitutor strSub;
60  
61    CheckAvailabilityMojo checkAvailabilityMojo;
62  
63    CreateApplicationMojo createAppMojo;
64  
65    CreateApplicationVersionMojo createAppVersionMojo;
66  
67    UploadSourceBundleMojo uploadSourceBundleMojo;
68  
69    CreateEnvironmentMojo createEnvMojo;
70  
71    TerminateEnvironmentMojo termEnvMojo;
72  
73    WaitForEnvironmentMojo waitForEnvMojo;
74  
75    UpdateEnvironmentMojo updateEnvMojo;
76  
77    DescribeConfigurationTemplatesMojo describeConfigTemplatesMojo;
78  
79    CreateConfigurationTemplateMojo createConfigurationTemplateMojo;
80  
81    String versionLabel;
82  
83    AWSCredentials credentials;
84  
85    AWSElasticBeanstalk service;
86  
87    public BeanstalkTestBase() {
88      super();
89    }
90  
91    @Override
92    protected void setUp() throws Exception {
93      super.setUp();
94  
95      Properties properties = new Properties();
96  
97      properties.load(new FileInputStream("test.properties"));
98  
99      this.properties = properties;
100 
101     configureMojos();
102 
103     this.credentials = uploadSourceBundleMojo.getAWSCredentials().getCredentials();
104 
105     this.service = new AWSElasticBeanstalkClient(credentials);
106   }
107 
108   protected void configureMojos() throws Exception {
109     createAppMojo = getMojo(CreateApplicationMojo.class);
110 
111     createAppVersionMojo = getMojo(CreateApplicationVersionMojo.class);
112 
113     uploadSourceBundleMojo = getMojo(UploadSourceBundleMojo.class);
114 
115     createAppMojo = getMojo(CreateApplicationMojo.class);
116 
117     createAppVersionMojo = getMojo(CreateApplicationVersionMojo.class);
118 
119     createEnvMojo = getMojo(CreateEnvironmentMojo.class);
120 
121     waitForEnvMojo = getMojo(WaitForEnvironmentMojo.class);
122 
123     termEnvMojo = getMojo(TerminateEnvironmentMojo.class);
124 
125     updateEnvMojo = getMojo(UpdateEnvironmentMojo.class);
126 
127     describeConfigTemplatesMojo = getMojo(DescribeConfigurationTemplatesMojo.class);
128 
129     versionLabel = String.format("test-%08X", System.currentTimeMillis());
130 
131     checkAvailabilityMojo = getMojo(CheckAvailabilityMojo.class);
132 
133     createConfigurationTemplateMojo = getMojo(CreateConfigurationTemplateMojo.class);
134   }
135 
136   protected File getBasePom(String pomName) {
137     return new File(getBasedir(), "target/test-classes/br/com/ingenieux/mojo/beanstalk/" + pomName);
138   }
139 
140   @SuppressWarnings("unchecked")
141   protected <T extends AbstractAWSMojo<?>> T getMojo(Class<T> mojoClazz) throws Exception {
142     File testPom = this.getBasePom("pom.xml");
143 
144     PlexusConfiguration pluginConfiguration = extractPluginConfiguration("beanstalk-maven-plugin", testPom);
145 
146     return (T) configureMojo(mojoClazz.newInstance(), pluginConfiguration);
147   }
148 
149   protected File getWarFile() throws URISyntaxException {
150     return new File(BeanstalkTestBase.class.getResource("test-war.war").toURI());
151   }
152 
153   protected String getS3Path() {
154     properties.put(PROP_VERSION_LABEL, this.versionLabel);
155 
156     strSub = new StrSubstitutor(properties);
157     return strSub.replace(properties.get(PROP_S3_KEY_MASK));
158   }
159 
160   protected String getS3Bucket() {
161     return properties.getProperty(PROP_S3_BUCKET);
162   }
163 
164   public void clearEnvironments() {
165     DescribeEnvironmentsResult environments = service.describeEnvironments();
166 
167     for (EnvironmentDescription d : environments.getEnvironments()) {
168       service.terminateEnvironment(new TerminateEnvironmentRequest().withEnvironmentId(d.getEnvironmentId()).withTerminateResources(true));
169     }
170   }
171 }