Skip to content

Commit

Permalink
Revised tests with backwards compatability changes
Browse files Browse the repository at this point in the history
  • Loading branch information
GavinBurris42 committed Nov 21, 2023
1 parent e8d322c commit fdd1136
Show file tree
Hide file tree
Showing 11 changed files with 162 additions and 144 deletions.
23 changes: 15 additions & 8 deletions src/main/java/com/amazon/jenkins/ec2fleet/CloudNanny.java
Original file line number Diff line number Diff line change
Expand Up @@ -38,15 +38,11 @@ public long getRecurrencePeriod() {
* by catch any exception and just log it, so we safe to throw exception here.
*/
@Override
protected void doRun() throws IOException {
protected void doRun() {
for (final Cloud cloud : getClouds()) {
if (!(cloud instanceof EC2FleetCloud)) continue;
final EC2FleetCloud fleetCloud = (EC2FleetCloud) cloud;

if (fleetCloud.getExecutorScaler() == null) {
updateCloudWithScaler(fleetCloud);
}

final AtomicInteger recurrenceCounter = getRecurrenceCounter(fleetCloud);

if (recurrenceCounter.decrementAndGet() > 0) {
Expand All @@ -56,6 +52,7 @@ protected void doRun() throws IOException {
recurrenceCounter.set(fleetCloud.getCloudStatusIntervalSec());

try {
updateCloudWithScaler(fleetCloud);
// Update the cluster states
fleetCloud.update();
} catch (Exception e) {
Expand All @@ -76,10 +73,22 @@ private static List<Cloud> getClouds() {
}

private void updateCloudWithScaler(EC2FleetCloud oldCloud) throws IOException {
if(oldCloud.getExecutorScaler() != null) return;

EC2FleetCloud.ExecutorScaler scaler = oldCloud.isScaleExecutorsByWeight() ? new EC2FleetCloud.WeightedScaler() :
new EC2FleetCloud.NoScaler();
scaler.withNumExecutors(oldCloud.getNumExecutors());
EC2FleetCloud fleetCloudWithScaler = new EC2FleetCloud(oldCloud.getDisplayName(), oldCloud.getAwsCredentialsId(),
EC2FleetCloud fleetCloudWithScaler = createCloudWithScaler(oldCloud, scaler);
replaceJenkinsCloud(oldCloud, fleetCloudWithScaler);
}

private void replaceJenkinsCloud(EC2FleetCloud oldCloud, EC2FleetCloud newCloud) throws IOException {
Jenkins.get().clouds.replace(oldCloud, newCloud);
Jenkins.get().save();
}

private EC2FleetCloud createCloudWithScaler(EC2FleetCloud oldCloud, EC2FleetCloud.ExecutorScaler scaler) {
return new EC2FleetCloud(oldCloud.getDisplayName(), oldCloud.getAwsCredentialsId(),
oldCloud.getAwsCredentialsId(), oldCloud.getRegion(), oldCloud.getEndpoint(), oldCloud.getFleet(),
oldCloud.getLabelString(), oldCloud.getFsRoot(), oldCloud.getComputerConnector(),
oldCloud.isPrivateIpUsed(), oldCloud.isAlwaysReconnect(), oldCloud.getIdleMinutes(),
Expand All @@ -89,8 +98,6 @@ private void updateCloudWithScaler(EC2FleetCloud oldCloud) throws IOException {
oldCloud.getInitOnlineTimeoutSec(), oldCloud.getInitOnlineCheckIntervalSec(),
oldCloud.getCloudStatusIntervalSec(), oldCloud.isNoDelayProvision(),
oldCloud.isScaleExecutorsByWeight(), scaler);
Jenkins.get().clouds.replace(oldCloud, fleetCloudWithScaler);
Jenkins.get().save();
}

private AtomicInteger getRecurrenceCounter(EC2FleetCloud fleetCloud) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@ public void should_successfully_resubmit_freestyle_task() throws Exception {
null, "fId", "momo", null, new LocalComputerConnector(j), false, false,
0, 0, 10, 0, 1, false, true,
"-1", false, 0, 0,
10, false, noScaling);
10, false, false, noScaling);
j.jenkins.clouds.add(cloud);

List<QueueTaskFuture> rs = enqueTask(1);
Expand Down Expand Up @@ -117,7 +117,7 @@ public void should_successfully_resubmit_parametrized_task() throws Exception {
null, "fId", "momo", null, new LocalComputerConnector(j), false, false,
0, 0, 10, 0, 1, false, true,
"-1", false, 0, 0,
10, false, noScaling);
10, false, false, noScaling);
j.jenkins.clouds.add(cloud);

List<QueueTaskFuture> rs = new ArrayList<>();
Expand Down Expand Up @@ -172,7 +172,7 @@ public void should_not_resubmit_if_disabled() throws Exception {
EC2FleetCloud cloud = new EC2FleetCloud("TestCloud", "credId", null, "region",
null, "fId", "momo", null, new LocalComputerConnector(j), false, false,
0, 0, 10, 0, 1, false, true,
"-1", true, 0, 0, 10, false, noScaling);
"-1", true, 0, 0, 10, false, false, noScaling);
j.jenkins.clouds.add(cloud);

List<QueueTaskFuture> rs = enqueTask(1);
Expand Down
22 changes: 11 additions & 11 deletions src/test/java/com/amazon/jenkins/ec2fleet/CloudNamesTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ public void isUnique_true() {
"test-label", null, null, false, false,
0, 0, 0, 0, 0, true, false,
"-1", false, 0, 0,
10, false, noScaling));
10, false, false, noScaling));

Assert.assertTrue(CloudNames.isUnique("TestCloud"));
}
Expand All @@ -28,7 +28,7 @@ public void isUnique_false() {
"test-label", null, null, false, false,
0, 0, 0, 0, 0, true, false,
"-1", false, 0, 0,
10, false, noScaling));
10, false, false, noScaling));

Assert.assertFalse(CloudNames.isUnique("SomeDefaultName"));
}
Expand All @@ -39,13 +39,13 @@ public void isDuplicated_false() {
"test-label", null, null, false, false,
0, 0, 0, 0, 0, true, false,
"-1", false, 0, 0,
10, false, noScaling));
10, false, false, noScaling));

j.jenkins.clouds.add(new EC2FleetCloud("TestCloud2", null, null, null, null, null,
"test-label", null, null, false, false,
0, 0, 0, 0, 0, true, false,
"-1", false, 0, 0,
10, false, noScaling));
10, false, false, noScaling));

Assert.assertFalse(CloudNames.isDuplicated("TestCloud"));
}
Expand All @@ -56,13 +56,13 @@ public void isDuplicated_true() {
"test-label", null, null, false, false,
0, 0, 0, 0, 0, true, false,
"-1", false, 0, 0,
10, false, noScaling));
10, false, false, noScaling));

j.jenkins.clouds.add(new EC2FleetCloud("TestCloud", null, null, null, null, null,
"test-label", null, null, false, false,
0, 0, 0, 0, 0, true, false,
"-1", false, 0, 0,
10, false, noScaling));
10, false, false, noScaling));

Assert.assertTrue(CloudNames.isDuplicated("TestCloud"));
}
Expand All @@ -78,7 +78,7 @@ public void generateUnique_addsSuffixOnlyWhenNeeded() {
"test-label", null, null, false, false,
0, 0, 0, 0, 0, true, false,
"-1", false, 0, 0,
10, false, noScaling));
10, false, false, noScaling));

Assert.assertEquals("UniqueCloud", CloudNames.generateUnique("UniqueCloud"));
}
Expand All @@ -89,13 +89,13 @@ public void generateUnique_addsSuffixCorrectly() {
"test-label", null, null, false, false,
0, 0, 0, 0, 0, true, false,
"-1", false, 0, 0,
10, false, noScaling));
10, false, false, noScaling));

j.jenkins.clouds.add(new EC2FleetCloud("UniqueCloud-1", null, null, null, null, null,
"test-label", null, null, false, false,
0, 0, 0, 0, 0, true, false,
"-1", false, 0, 0,
10, false, noScaling));
10, false, false, noScaling));

String actual = CloudNames.generateUnique("UniqueCloud");
Assert.assertTrue(actual.length() == ("UniqueCloud".length() + CloudNames.SUFFIX_LENGTH + 1));
Expand All @@ -108,7 +108,7 @@ public void generateUnique_emptyStringInConstructor() {
"test-label", null, null, false, false,
0, 0, 0, 0, 0, true, false,
"-1", false, 0, 0,
10, false, noScaling);
10, false, false, noScaling);

EC2FleetLabelCloud fleetLabelCloud = new EC2FleetLabelCloud("", null, null,
null, null, new LocalComputerConnector(j), false, false,
Expand All @@ -128,7 +128,7 @@ public void generateUnique_nonEmptyStringInConstructor() {
"test-label", null, null, false, false,
0, 0, 0, 0, 0, true, false,
"-1", false, 0, 0,
10, false, noScaling);
10, false, false, noScaling);

EC2FleetLabelCloud fleetLabelCloud = new EC2FleetLabelCloud("UniqueLabelCloud", null, null,
null, null, new LocalComputerConnector(j), false, false,
Expand Down
41 changes: 26 additions & 15 deletions src/test/java/com/amazon/jenkins/ec2fleet/CloudNannyTest.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package com.amazon.jenkins.ec2fleet;

import hudson.model.Hudson;
import hudson.slaves.Cloud;
import jenkins.model.Jenkins;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
Expand All @@ -10,6 +12,7 @@
import org.powermock.modules.junit4.PowerMockRunner;
import org.powermock.reflect.Whitebox;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
Expand All @@ -18,23 +21,27 @@
import java.util.concurrent.atomic.AtomicInteger;

import static org.junit.Assert.assertEquals;
import static org.mockito.Mockito.atLeastOnce;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.verifyNoMoreInteractions;
import static org.mockito.Mockito.verifyZeroInteractions;
import static org.mockito.Mockito.when;
import static org.mockito.Mockito.*;

@RunWith(PowerMockRunner.class)
@PrepareForTest(CloudNanny.class)
@PrepareForTest({CloudNanny.class, Jenkins.class})
public class CloudNannyTest {

@Mock
private Jenkins jenkins;

@Mock
private EC2FleetCloud cloud1;

@Mock
private EC2FleetCloud cloud2;

@Mock
private EC2FleetCloud cloud3;

@Mock
private EC2FleetCloud cloud4;

private List<Cloud> clouds = new ArrayList<>();

private FleetStateStats stats1 = new FleetStateStats(
Expand All @@ -59,6 +66,10 @@ public void before() throws Exception {
when(cloud2.getLabelString()).thenReturn("");
when(cloud1.getFleet()).thenReturn("f1");
when(cloud2.getFleet()).thenReturn("f2");
when(cloud1.isScaleExecutorsByWeight()).thenReturn(true);
when(cloud2.isScaleExecutorsByWeight()).thenReturn(false);
when(cloud1.getExecutorScaler()).thenReturn(new EC2FleetCloud.NoScaler());
when(cloud2.getExecutorScaler()).thenReturn(new EC2FleetCloud.WeightedScaler());

when(cloud1.update()).thenReturn(stats1);
when(cloud2.update()).thenReturn(stats2);
Expand All @@ -83,20 +94,20 @@ private CloudNanny getMockCloudNannyInstance() {
}

@Test
public void shouldDoNothingIfNoCloudsAndWidgets() {
public void shouldDoNothingIfNoCloudsAndWidgets() throws IOException {
getMockCloudNannyInstance().doRun();
}

@Test
public void shouldUpdateCloudAndDoNothingIfNoWidgets() {
public void shouldUpdateCloudAndDoNothingIfNoWidgets() throws Exception {
clouds.add(cloud1);
clouds.add(cloud2);

getMockCloudNannyInstance().doRun();
}

@Test
public void shouldIgnoreNonEC2FleetClouds() {
public void shouldIgnoreNonEC2FleetClouds() throws IOException {
clouds.add(cloud1);

Cloud nonEc2FleetCloud = mock(Cloud.class);
Expand All @@ -109,7 +120,7 @@ public void shouldIgnoreNonEC2FleetClouds() {
}

@Test
public void shouldUpdateCloudCollectAll() {
public void shouldUpdateCloudCollectAll() throws IOException {
clouds.add(cloud1);
clouds.add(cloud2);

Expand All @@ -120,7 +131,7 @@ public void shouldUpdateCloudCollectAll() {
}

@Test
public void shouldIgnoreExceptionsFromUpdateForOneofCloudAndUpdateOther() {
public void shouldIgnoreExceptionsFromUpdateForOneofCloudAndUpdateOther() throws IOException {
clouds.add(cloud1);
clouds.add(cloud2);

Expand All @@ -133,7 +144,7 @@ public void shouldIgnoreExceptionsFromUpdateForOneofCloudAndUpdateOther() {
}

@Test
public void resetCloudInterval() {
public void resetCloudInterval() throws IOException {
clouds.add(cloud1);
clouds.add(cloud2);
CloudNanny cloudNanny = getMockCloudNannyInstance();
Expand All @@ -151,7 +162,7 @@ public void resetCloudInterval() {
}

@Test
public void skipCloudIntervalExecution() {
public void skipCloudIntervalExecution() throws IOException {
clouds.add(cloud1);
clouds.add(cloud2);
CloudNanny cloudNanny = getMockCloudNannyInstance();
Expand All @@ -169,7 +180,7 @@ public void skipCloudIntervalExecution() {
}

@Test
public void updateOnlyOneCloud() {
public void updateOnlyOneCloud() throws IOException {
clouds.add(cloud1);
clouds.add(cloud2);
CloudNanny cloudNanny = getMockCloudNannyInstance();
Expand Down

0 comments on commit fdd1136

Please sign in to comment.