Skip to content

Commit

Permalink
Cleanup tests and improve build times
Browse files Browse the repository at this point in the history
  • Loading branch information
res0nance committed Jun 4, 2021
1 parent dbf0434 commit 1066190
Show file tree
Hide file tree
Showing 11 changed files with 92 additions and 153 deletions.
11 changes: 8 additions & 3 deletions src/main/java/hudson/plugins/ec2/SlaveTemplate.java
Original file line number Diff line number Diff line change
Expand Up @@ -572,7 +572,7 @@ public Set<String> parseSecurityGroups() {
if (securityGroups == null || "".equals(securityGroups.trim())) {
return Collections.emptySet();
} else {
return new HashSet<String>(Arrays.asList(securityGroups.split("\\s*,\\s*")));
return new HashSet<>(Arrays.asList(securityGroups.split("\\s*,\\s*")));
}
}

Expand Down Expand Up @@ -684,6 +684,9 @@ public String getidleTerminationMinutes() {
}

public Set<LabelAtom> getLabelSet() {
if (labelSet == null) {
labelSet = Label.parse(labels);
}
return labelSet;
}

Expand Down Expand Up @@ -1636,9 +1639,11 @@ public EC2AbstractSlave attach(String instanceId, TaskListener listener) throws
* Initializes data structure that we don't persist.
*/
protected Object readResolve() {
Jenkins.get().checkPermission(Jenkins.ADMINISTER);
Jenkins j = Jenkins.getInstanceOrNull();
if (j != null) {
j.checkPermission(Jenkins.ADMINISTER);
}

labelSet = Label.parse(labels);
securityGroupSet = parseSecurityGroups();

/**
Expand Down
5 changes: 4 additions & 1 deletion src/main/java/hudson/plugins/ec2/UnixData.java
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,10 @@ public UnixData(String rootCommandPrefix, String slaveCommandPrefix, String slav
}

protected Object readResolve() {
Jenkins.get().checkPermission(Jenkins.ADMINISTER);
Jenkins j = Jenkins.getInstanceOrNull();
if (j != null) {
j.checkPermission(Jenkins.ADMINISTER);
}
return this;
}

Expand Down
6 changes: 1 addition & 5 deletions src/test/java/hudson/plugins/ec2/AmazonEC2CloudTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -164,11 +164,7 @@ public void testCustomSshCredentialTypes() throws IOException {
}

private HtmlForm getConfigForm() throws IOException, SAXException {
if (Jenkins.getVersion().isNewerThanOrEqualTo(new VersionNumber("2.205"))) {
return r.createWebClient().goTo("configureClouds").getFormByName("config");
} else {
return r.createWebClient().goTo("configure").getFormByName("config");
}
return r.createWebClient().goTo("configureClouds").getFormByName("config");
}

}
4 changes: 2 additions & 2 deletions src/test/java/hudson/plugins/ec2/EC2PrivateKeyTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@
*/
package hudson.plugins.ec2;

import org.junit.Rule;
import org.junit.ClassRule;
import org.junit.Test;
import org.jvnet.hudson.test.Issue;
import org.jvnet.hudson.test.JenkinsRule;
Expand All @@ -39,7 +39,7 @@
*/
public class EC2PrivateKeyTest {

@Rule
@ClassRule
public JenkinsRule r = new JenkinsRule();

private EC2PrivateKey getPrivateKey() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,14 +12,11 @@
import hudson.slaves.NodeProperty;
import hudson.slaves.OfflineCause;
import jenkins.util.NonLocalizable;
import net.sf.json.JSONObject;
import org.junit.Rule;
import org.junit.Test;
import org.jvnet.hudson.test.JenkinsRule;
import org.testcontainers.shaded.org.bouncycastle.jce.provider.BouncyCastleProvider;
import org.jvnet.hudson.test.LoggerRule;

import java.security.Security;
import java.time.Clock;
import java.time.Duration;
import java.time.Instant;
Expand Down Expand Up @@ -168,7 +165,6 @@ public void testOnUsageCountRetention() throws Exception {
assertEquals("Expected " + usageCount + " to be " + expected.get(i), (boolean) expected.get(i), terminateCalled.get());
}
}

}
}

Expand Down
33 changes: 14 additions & 19 deletions src/test/java/hudson/plugins/ec2/EC2StepTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,15 +5,14 @@
import hudson.model.PeriodicWork;
import hudson.model.Result;
import hudson.plugins.ec2.util.AmazonEC2FactoryMockImpl;
import hudson.plugins.ec2.util.PluginTestRule;
import org.jenkinsci.plugins.workflow.cps.CpsFlowDefinition;
import org.jenkinsci.plugins.workflow.job.WorkflowJob;
import org.jenkinsci.plugins.workflow.job.WorkflowRun;
import org.junit.After;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.jvnet.hudson.test.JenkinsRule;
import org.mockito.Mock;
import org.mockito.internal.stubbing.answers.ThrowsException;
import org.powermock.core.classloader.annotations.PowerMockIgnore;
Expand All @@ -27,9 +26,9 @@
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNotSame;
import static org.junit.Assert.assertSame;
import static org.mockito.Matchers.any;
import static org.mockito.Matchers.anyInt;
import static org.mockito.Matchers.anyString;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.Mockito.when;

/**
Expand All @@ -40,7 +39,7 @@
@PrepareForTest({EC2AbstractSlave.class, SlaveTemplate.class})
public class EC2StepTest {
@Rule
public PluginTestRule r = new PluginTestRule();
public JenkinsRule r = new JenkinsRule();

@Mock
private AmazonEC2Cloud cl;
Expand All @@ -53,14 +52,15 @@ public class EC2StepTest {

@Before
public void setup() throws Exception {
List<SlaveTemplate> templates = new ArrayList<SlaveTemplate>();
r.jenkins.clouds.clear();
List<SlaveTemplate> templates = new ArrayList<>();
templates.add(st);

when(cl.getCloudName()).thenReturn("myCloud");
when(cl.getDisplayName()).thenReturn("myCloud");
when(cl.getTemplates()).thenReturn(templates);
when(cl.getTemplate(anyString())).thenReturn(st);
r.addCloud(cl);
r.jenkins.clouds.add(cl);

when(instance.getNodeName()).thenReturn("nodeName");
List<EC2AbstractSlave> slaves = Collections.singletonList(instance);
Expand Down Expand Up @@ -97,24 +97,24 @@ public void testExpiredConnection() {

@Test
public void bootInstance() throws Exception {
WorkflowJob boot = r.jenkins.createProject(WorkflowJob.class, "EC2Test");
WorkflowJob boot = r.createProject(WorkflowJob.class);
boot.setDefinition(new CpsFlowDefinition(
" node('master') {\n" +
" def X = ec2 cloud: 'myCloud', template: 'aws-CentOS-7'\n" +
"}" , true));
WorkflowRun b = r.assertBuildStatusSuccess(boot.scheduleBuild2(0));
WorkflowRun b = r.buildAndAssertSuccess(boot);
r.assertLogContains("SUCCESS", b);
}

@Test
public void boot_noCloud() throws Exception {
WorkflowJob boot = r.jenkins.createProject(WorkflowJob.class, "EC2Test");
WorkflowJob boot = r.createProject(WorkflowJob.class);
boot.setDefinition(new CpsFlowDefinition(
" node('master') {\n" +
" def X = ec2 cloud: 'dummyCloud', template: 'aws-CentOS-7'\n" +
" X.boot()\n" +
"}" , true));
WorkflowRun b = r.assertBuildStatus(Result.FAILURE, boot.scheduleBuild2(0).get());
WorkflowRun b = r.buildAndAssertStatus(Result.FAILURE, boot);
r.assertLogContains("Error in AWS Cloud. Please review EC2 settings in Jenkins configuration.", b);
r.assertLogContains("FAILURE", b);
}
Expand All @@ -124,19 +124,14 @@ public void boot_noCloud() throws Exception {
public void boot_noTemplate() throws Exception {
when(cl.getTemplate(anyString())).thenReturn(null);

WorkflowJob boot = r.jenkins.createProject(WorkflowJob.class, "EC2Test");
WorkflowJob boot = r.createProject(WorkflowJob.class);
boot.setDefinition(new CpsFlowDefinition(
" node('master') {\n" +
" def X = ec2 cloud: 'myCloud', template: 'dummyTemplate'\n" +
" X.boot()\n" +
"}" , true));
WorkflowRun b = r.assertBuildStatus(Result.FAILURE, boot.scheduleBuild2(0).get());
WorkflowRun b = r.buildAndAssertStatus(Result.FAILURE, boot);
r.assertLogContains("Error in AWS Cloud. Please review AWS template defined in Jenkins configuration.", b);
r.assertLogContains("FAILURE", b);
}

@After
public void teardown() {
r.jenkins.clouds.clear();
}
}
46 changes: 0 additions & 46 deletions src/test/java/hudson/plugins/ec2/ListRegions.java

This file was deleted.

60 changes: 0 additions & 60 deletions src/test/java/hudson/plugins/ec2/SlaveTemplateTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -307,66 +307,6 @@ public void testConfigRoundtripIamRole() throws Exception {
r.assertEqualBeans(orig, received, "ami,zone,description,remoteFS,type,jvmopts,stopOnTerminate,securityGroups,subnetId,iamInstanceProfile,connectionStrategy,hostKeyVerificationStrategy");
}

@Test
public void testNullTimeoutShouldReturnMaxInt() {
SlaveTemplate st = new SlaveTemplate("", EC2AbstractSlave.TEST_ZONE, null, "default", "foo", InstanceType.M1Large, false, "ttt", Node.Mode.NORMAL, "", "bar", "bbb", "aaa", "10", "fff", null, "-Xmx1g", false, "subnet 456", null, null, false, null, "iamInstanceProfile", false, false, null, false, "");
assertEquals(Integer.MAX_VALUE, st.getLaunchTimeout());
}

@Test
public void testUpdateAmi() {
SlaveTemplate st = new SlaveTemplate("ami1", EC2AbstractSlave.TEST_ZONE, null, "default", "foo", InstanceType.M1Large, false, "ttt", Node.Mode.NORMAL, "", "bar", "bbb", "aaa", "10", "fff", null, "-Xmx1g", false, "subnet 456", null, null, false, null, "iamInstanceProfile", false, false, "0", false, "");
assertEquals("ami1", st.getAmi());
st.setAmi("ami2");
assertEquals("ami2", st.getAmi());
st.ami = "ami3";
assertEquals("ami3", st.getAmi());
}

@Test
public void test0TimeoutShouldReturnMaxInt() {
SlaveTemplate st = new SlaveTemplate("", EC2AbstractSlave.TEST_ZONE, null, "default", "foo", InstanceType.M1Large, false, "ttt", Node.Mode.NORMAL, "", "bar", "bbb", "aaa", "10", "fff", null, "-Xmx1g", false, "subnet 456", null, null, false, null, "iamInstanceProfile", false, false, "0", false, "");
assertEquals(Integer.MAX_VALUE, st.getLaunchTimeout());
}

@Test
public void testNegativeTimeoutShouldReturnMaxInt() {
SlaveTemplate st = new SlaveTemplate("", EC2AbstractSlave.TEST_ZONE, null, "default", "foo", InstanceType.M1Large, false, "ttt", Node.Mode.NORMAL, "", "bar", "bbb", "aaa", "10", "fff", null, "-Xmx1g", false, "subnet 456", null, null, false, null, "iamInstanceProfile", false, false, "-1", false, "");
assertEquals(Integer.MAX_VALUE, st.getLaunchTimeout());
}

@Test
public void testNonNumericTimeoutShouldReturnMaxInt() {
SlaveTemplate st = new SlaveTemplate("", EC2AbstractSlave.TEST_ZONE, null, "default", "foo", InstanceType.M1Large, false, "ttt", Node.Mode.NORMAL, "", "bar", "bbb", "aaa", "10", "fff", null, "-Xmx1g", false, "subnet 456", null, null, false, null, "iamInstanceProfile", false, false, "NotANumber", false, "");
assertEquals(Integer.MAX_VALUE, st.getLaunchTimeout());
}

@Test
public void testAssociatePublicIpSetting() {
SlaveTemplate st = new SlaveTemplate("", EC2AbstractSlave.TEST_ZONE, null, "default", "foo", InstanceType.M1Large, false, "ttt", Node.Mode.NORMAL, "", "bar", "bbb", "aaa", "10", "fff", null, "-Xmx1g", false, "subnet 456", null, null, false, null, "iamInstanceProfile", false, false, null, true, "");
assertEquals(true, st.getAssociatePublicIp());
}

@Test
public void testConnectUsingPublicIpSetting() {
SlaveTemplate st = new SlaveTemplate("", EC2AbstractSlave.TEST_ZONE, null, "default", "foo", InstanceType.M1Large, false, "ttt", Node.Mode.NORMAL, "", "bar", "bbb", "aaa", "10", "fff", null, "-Xmx1g", false, "subnet 456", null, null, false, null, "iamInstanceProfile", false, false, false, null, true, "", false, true);
assertEquals(st.connectionStrategy, ConnectionStrategy.PUBLIC_IP);
}

@Test
public void testConnectUsingPublicIpSettingWithDefaultSetting() {
SlaveTemplate st = new SlaveTemplate("", EC2AbstractSlave.TEST_ZONE, null, "default", "foo", InstanceType.M1Large, false, "ttt", Node.Mode.NORMAL, "", "bar", "bbb", "aaa", "10", "fff", null, "-Xmx1g", false, "subnet 456", null, null, false, null, "iamInstanceProfile", false, false, null, true, "");
assertEquals(st.connectionStrategy, ConnectionStrategy.PUBLIC_IP);
}

@Test
public void testBackwardCompatibleUnixData() {
SlaveTemplate st = new SlaveTemplate("", EC2AbstractSlave.TEST_ZONE, null, "default", "foo", "22", InstanceType.M1Large, false, "ttt", Node.Mode.NORMAL, "", "bar", "bbb", "aaa", "10", "rrr", "sudo", null, null, "-Xmx1g", false, "subnet 456", null, null, false, null, "iamInstanceProfile", false, "NotANumber");
assertFalse(st.isWindowsSlave());
assertEquals(22, st.getSshPort());
assertEquals("sudo", st.getRootCommandPrefix());
}

@Test
public void testWindowsConfigRoundTrip() throws Exception {
String ami = "ami1";
Expand Down
61 changes: 61 additions & 0 deletions src/test/java/hudson/plugins/ec2/SlaveTemplateUnitTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -347,6 +347,67 @@ public void testSetupRootDeviceEncrypted() throws Exception {
Boolean test = checkEncryptedForSetupRootDevice(EbsEncryptRootVolume.ENCRYPTED);
Assert.assertTrue(test);
}

@Test
public void testNullTimeoutShouldReturnMaxInt() {
SlaveTemplate st = new SlaveTemplate("", EC2AbstractSlave.TEST_ZONE, null, "default", "foo", InstanceType.M1Large, false, "ttt", Node.Mode.NORMAL, "", "bar", "bbb", "aaa", "10", "fff", null, "-Xmx1g", false, "subnet 456", null, null, false, null, "iamInstanceProfile", false, false, null, false, "");
assertEquals(Integer.MAX_VALUE, st.getLaunchTimeout());
}

@Test
public void testUpdateAmi() {
SlaveTemplate st = new SlaveTemplate("ami1", EC2AbstractSlave.TEST_ZONE, null, "default", "foo", InstanceType.M1Large, false, "ttt", Node.Mode.NORMAL, "", "bar", "bbb", "aaa", "10", "fff", null, "-Xmx1g", false, "subnet 456", null, null, false, null, "iamInstanceProfile", false, false, "0", false, "");
assertEquals("ami1", st.getAmi());
st.setAmi("ami2");
assertEquals("ami2", st.getAmi());
st.ami = "ami3";
assertEquals("ami3", st.getAmi());
}

@Test
public void test0TimeoutShouldReturnMaxInt() {
SlaveTemplate st = new SlaveTemplate("", EC2AbstractSlave.TEST_ZONE, null, "default", "foo", InstanceType.M1Large, false, "ttt", Node.Mode.NORMAL, "", "bar", "bbb", "aaa", "10", "fff", null, "-Xmx1g", false, "subnet 456", null, null, false, null, "iamInstanceProfile", false, false, "0", false, "");
assertEquals(Integer.MAX_VALUE, st.getLaunchTimeout());
}

@Test
public void testNegativeTimeoutShouldReturnMaxInt() {
SlaveTemplate st = new SlaveTemplate("", EC2AbstractSlave.TEST_ZONE, null, "default", "foo", InstanceType.M1Large, false, "ttt", Node.Mode.NORMAL, "", "bar", "bbb", "aaa", "10", "fff", null, "-Xmx1g", false, "subnet 456", null, null, false, null, "iamInstanceProfile", false, false, "-1", false, "");
assertEquals(Integer.MAX_VALUE, st.getLaunchTimeout());
}

@Test
public void testNonNumericTimeoutShouldReturnMaxInt() {
SlaveTemplate st = new SlaveTemplate("", EC2AbstractSlave.TEST_ZONE, null, "default", "foo", InstanceType.M1Large, false, "ttt", Node.Mode.NORMAL, "", "bar", "bbb", "aaa", "10", "fff", null, "-Xmx1g", false, "subnet 456", null, null, false, null, "iamInstanceProfile", false, false, "NotANumber", false, "");
assertEquals(Integer.MAX_VALUE, st.getLaunchTimeout());
}

@Test
public void testAssociatePublicIpSetting() {
SlaveTemplate st = new SlaveTemplate("", EC2AbstractSlave.TEST_ZONE, null, "default", "foo", InstanceType.M1Large, false, "ttt", Node.Mode.NORMAL, "", "bar", "bbb", "aaa", "10", "fff", null, "-Xmx1g", false, "subnet 456", null, null, false, null, "iamInstanceProfile", false, false, null, true, "");
assertEquals(true, st.getAssociatePublicIp());
}

@Test
public void testConnectUsingPublicIpSetting() {
SlaveTemplate st = new SlaveTemplate("", EC2AbstractSlave.TEST_ZONE, null, "default", "foo", InstanceType.M1Large, false, "ttt", Node.Mode.NORMAL, "", "bar", "bbb", "aaa", "10", "fff", null, "-Xmx1g", false, "subnet 456", null, null, false, null, "iamInstanceProfile", false, false, false, null, true, "", false, true);
assertEquals(st.connectionStrategy, ConnectionStrategy.PUBLIC_IP);
}

@Test
public void testConnectUsingPublicIpSettingWithDefaultSetting() {
SlaveTemplate st = new SlaveTemplate("", EC2AbstractSlave.TEST_ZONE, null, "default", "foo", InstanceType.M1Large, false, "ttt", Node.Mode.NORMAL, "", "bar", "bbb", "aaa", "10", "fff", null, "-Xmx1g", false, "subnet 456", null, null, false, null, "iamInstanceProfile", false, false, null, true, "");
assertEquals(st.connectionStrategy, ConnectionStrategy.PUBLIC_IP);
}

@Test
public void testBackwardCompatibleUnixData() {
SlaveTemplate st = new SlaveTemplate("", EC2AbstractSlave.TEST_ZONE, null, "default", "foo", "22", InstanceType.M1Large, false, "ttt", Node.Mode.NORMAL, "", "bar", "bbb", "aaa", "10", "rrr", "sudo", null, null, "-Xmx1g", false, "subnet 456", null, null, false, null, "iamInstanceProfile", false, "NotANumber");
assertFalse(st.isWindowsSlave());
assertEquals(22, st.getSshPort());
assertEquals("sudo", st.getRootCommandPrefix());
}

}

class TestHandler extends Handler {
Expand Down

0 comments on commit 1066190

Please sign in to comment.