1
2
3
4
5
6
7
8
9
10
11
12
13
14
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 }