1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30 package com.jcabi.beanstalk.maven.plugin;
31
32 import com.amazonaws.auth.AWSCredentials;
33 import com.amazonaws.auth.BasicAWSCredentials;
34 import com.amazonaws.services.elasticbeanstalk.AWSElasticBeanstalk;
35 import com.amazonaws.services.elasticbeanstalk.AWSElasticBeanstalkClient;
36 import com.amazonaws.services.elasticbeanstalk.model.CheckDNSAvailabilityRequest;
37 import com.amazonaws.services.elasticbeanstalk.model.CheckDNSAvailabilityResult;
38 import com.amazonaws.services.elasticbeanstalk.model.ConfigurationSettingsDescription;
39 import com.amazonaws.services.elasticbeanstalk.model.CreateEnvironmentRequest;
40 import com.amazonaws.services.elasticbeanstalk.model.CreateEnvironmentResult;
41 import com.amazonaws.services.elasticbeanstalk.model.DescribeConfigurationSettingsRequest;
42 import com.amazonaws.services.elasticbeanstalk.model.DescribeConfigurationSettingsResult;
43 import com.amazonaws.services.elasticbeanstalk.model.DescribeEnvironmentsRequest;
44 import com.amazonaws.services.elasticbeanstalk.model.DescribeEnvironmentsResult;
45 import com.amazonaws.services.elasticbeanstalk.model.EnvironmentDescription;
46 import com.amazonaws.services.elasticbeanstalk.model.TerminateEnvironmentRequest;
47 import com.amazonaws.services.elasticbeanstalk.model.TerminateEnvironmentResult;
48 import com.amazonaws.services.s3.AmazonS3Client;
49 import com.jcabi.log.Logger;
50 import java.io.File;
51 import java.util.ArrayList;
52 import java.util.Arrays;
53 import org.apache.commons.io.FileUtils;
54 import org.hamcrest.MatcherAssert;
55 import org.hamcrest.Matchers;
56 import org.junit.Assume;
57 import org.junit.Rule;
58 import org.junit.Test;
59 import org.junit.rules.TemporaryFolder;
60 import org.mockito.Mockito;
61
62
63
64
65
66
67
68 @SuppressWarnings("PMD.ExcessiveImports")
69 public final class ApplicationTest {
70
71
72
73
74 private static final String AWS_KEY = System.getProperty("aws.key");
75
76
77
78
79 private static final String AWS_SECRET = System.getProperty("aws.secret");
80
81
82
83
84
85 @Rule
86 public transient TemporaryFolder temp = new TemporaryFolder();
87
88
89
90
91
92 @Test
93 public void createsNewEnvironment() throws Exception {
94 final String name = "some-app-name";
95 final String template = "some-template";
96 final Version version = Mockito.mock(Version.class);
97 final AWSElasticBeanstalk ebt = Mockito.mock(AWSElasticBeanstalk.class);
98 Mockito.doReturn(
99 new CheckDNSAvailabilityResult().withAvailable(true)
100 ).when(ebt)
101 .checkDNSAvailability(
102 Mockito.any(CheckDNSAvailabilityRequest.class)
103 );
104 Mockito.doReturn(
105 new CreateEnvironmentResult()
106 .withApplicationName(name)
107 .withEnvironmentId("f4g5h6j7")
108 .withEnvironmentName(name)
109 ).when(ebt)
110 .createEnvironment(
111 Mockito.any(CreateEnvironmentRequest.class)
112 );
113 Mockito.doReturn(
114 new DescribeConfigurationSettingsResult().withConfigurationSettings(
115 new ArrayList<ConfigurationSettingsDescription>(0)
116 )
117 ).when(ebt)
118 .describeConfigurationSettings(
119 Mockito.any(DescribeConfigurationSettingsRequest.class)
120 );
121 Mockito.doReturn(
122 new DescribeEnvironmentsResult().withEnvironments(
123 Arrays.asList(
124 new EnvironmentDescription()
125 .withCNAME("")
126 .withEnvironmentName("some-env")
127 .withEnvironmentId("a1b2c3d4")
128 .withStatus("Ready")
129 )
130 )
131 ).when(ebt)
132 .describeEnvironments(
133 Mockito.any(DescribeEnvironmentsRequest.class)
134 );
135 Mockito.doReturn(new TerminateEnvironmentResult())
136 .when(ebt)
137 .terminateEnvironment(
138 Mockito.any(TerminateEnvironmentRequest.class)
139 );
140 final Application app = new Application(ebt, name);
141 app.clean(false);
142 MatcherAssert.assertThat(
143 app.candidate(version, template),
144 Matchers.notNullValue()
145 );
146 }
147
148
149
150
151
152
153
154
155
156
157 @Test
158 public void deploysAndReversesWithLiveAccount() throws Exception {
159 Assume.assumeThat(ApplicationTest.AWS_KEY, Matchers.notNullValue());
160 final AWSCredentials creds = new BasicAWSCredentials(
161 ApplicationTest.AWS_KEY,
162 ApplicationTest.AWS_SECRET
163 );
164 final AWSElasticBeanstalk ebt = new AWSElasticBeanstalkClient(creds);
165 final String name = "netbout";
166 final Application app = new Application(ebt, name);
167 final File war = this.temp.newFile("temp.war");
168 FileUtils.writeStringToFile(war, "broken JAR file content");
169 final Environment candidate = app.candidate(
170 new OverridingVersion(
171 ebt,
172 name,
173 new OverridingBundle(
174 new AmazonS3Client(creds),
175 "webapps.netbout.com",
176 war.getName(),
177 war
178 )
179 ),
180 name
181 );
182 MatcherAssert.assertThat(candidate.green(), Matchers.equalTo(false));
183 Logger.info(this, "tail report:\n%s", candidate.tail());
184 candidate.terminate();
185 }
186
187 }