package de.codecentric.jenkins.dashboard.impl.environments.ec2; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.is; import static org.hamcrest.Matchers.notNullValue; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; import java.util.Arrays; import java.util.Date; import java.util.List; import org.junit.BeforeClass; import org.junit.Test; import org.powermock.reflect.Whitebox; import com.amazonaws.regions.Region; import com.amazonaws.regions.Regions; import com.amazonaws.services.ec2.AmazonEC2; import com.amazonaws.services.ec2.AmazonEC2Client; import com.amazonaws.services.ec2.model.DescribeInstancesResult; import com.amazonaws.services.ec2.model.Instance; import com.amazonaws.services.ec2.model.InstanceState; import com.amazonaws.services.ec2.model.InstanceStateName; import com.amazonaws.services.ec2.model.InstanceType; import com.amazonaws.services.ec2.model.Reservation; import com.amazonaws.services.ec2.model.Tag; import de.codecentric.jenkins.dashboard.api.environments.ServerEnvironment; import de.codecentric.jenkins.dashboard.api.environments.ServerEnvironment.ENVIRONMENT_TYPES; public class EC2ConnectorTest { private static final AmazonEC2 amazonEC2 = mock(AmazonEC2Client.class); private static final DescribeInstancesResult instanceResult = mock(DescribeInstancesResult.class); private static final EC2Connector env = new EC2Connector(amazonEC2); private static Instance instance1 = new Instance().withTags(new Tag("1", "tag"), new Tag("2", "tag2")); private static Instance instance2 = new Instance().withTags(new Tag("7", "TAG"), new Tag("8", "TAG3")); private static Instance instance3 = new Instance(); private static Reservation reservations[] = { new Reservation().withInstances(instance1, instance2, instance3) }; @BeforeClass public static void setup() { when(amazonEC2.describeInstances()).thenReturn(instanceResult); when(instanceResult.getReservations()).thenReturn(Arrays.asList(reservations)); } @Test public void testGetEnvironments() { EC2Connector env = new EC2Connector(amazonEC2); Region region = Region.getRegion(Regions.EU_WEST_1); List<ServerEnvironment> list = env.getEnvironments(region); assertThat(list.size(), is(3)); } @Test public void testGetEnvironmentsByTag() { final EC2Connector env = new EC2Connector(amazonEC2); final Region region = Region.getRegion(Regions.EU_WEST_1); final List<ServerEnvironment> list = env.getEnvironmentsByTag(region, "tag"); assertThat(list.size(), is(2)); } @Test public void testGetEnvironmentFromInstance() throws Exception { final Date launchTime = new Date(); final Instance instance = new Instance().withInstanceId("instance").withInstanceType(InstanceType.C1Xlarge).withTags(new Tag(EC2Connector.DEFAULT_INSTANCE_NAME_TAG, "unknown")) .withState(new InstanceState().withName(InstanceStateName.Running)).withLaunchTime(launchTime).withPublicIpAddress("127.0.0.1"); ServerEnvironment serverEnv = Whitebox.<ServerEnvironment> invokeMethod(env, "getEnvironmentFromInstance", instance); assertThat(serverEnv, notNullValue()); assertThat(serverEnv.getInstanceId(), is("instance")); assertThat(serverEnv.getInstanceType(), is(InstanceType.C1Xlarge.toString())); assertThat(serverEnv.getType(), is(ENVIRONMENT_TYPES.TEST)); assertThat(serverEnv.getEnvironmentTag(), is("unknown")); assertThat(serverEnv.getState().getName(), is(InstanceStateName.Running.toString())); assertThat(serverEnv.getLaunchTime(), is(launchTime)); assertThat(serverEnv.getPublicIpAddress(), is("127.0.0.1")); } @Test public void testGetEnvironmentFromInstanceProd() throws Exception { final Instance instance = new Instance().withInstanceId("instance").withInstanceType(InstanceType.C1Xlarge).withTags(new Tag(EC2Connector.DEFAULT_INSTANCE_NAME_TAG, EC2Connector.PROD_VALUE)); ServerEnvironment serverEnv = Whitebox.<ServerEnvironment> invokeMethod(env, "getEnvironmentFromInstance", instance); assertThat(serverEnv, notNullValue()); assertThat(serverEnv.getType(), is(ENVIRONMENT_TYPES.PRODUCTION)); } @Test public void testGetEnvironmentFromInstanceStage() throws Exception { final Instance instance = new Instance().withInstanceId("instance").withInstanceType(InstanceType.C1Xlarge) .withTags(new Tag(EC2Connector.DEFAULT_INSTANCE_NAME_TAG, EC2Connector.STAGING_VALUE)); ServerEnvironment serverEnv = Whitebox.<ServerEnvironment> invokeMethod(env, "getEnvironmentFromInstance", instance); assertThat(serverEnv, notNullValue()); assertThat(serverEnv.getType(), is(ENVIRONMENT_TYPES.STAGING)); } @Test public void testGetEnvironmentFromInstanceJenkins() throws Exception { final Instance instance = new Instance().withInstanceId("instance").withInstanceType(InstanceType.C1Xlarge) .withTags(new Tag(EC2Connector.DEFAULT_INSTANCE_NAME_TAG, EC2Connector.JENKINS_VALUE)); ServerEnvironment serverEnv = Whitebox.<ServerEnvironment> invokeMethod(env, "getEnvironmentFromInstance", instance); assertThat(serverEnv, notNullValue()); assertThat(serverEnv.getType(), is(ENVIRONMENT_TYPES.JENKINS)); } @Test public void testGetEnvironmentFromInstanceTest() throws Exception { final Instance instance = new Instance().withInstanceId("instance").withInstanceType(InstanceType.C1Xlarge).withTags(new Tag(EC2Connector.DEFAULT_INSTANCE_NAME_TAG, EC2Connector.TEST_VALUE)); ServerEnvironment serverEnv = Whitebox.<ServerEnvironment> invokeMethod(env, "getEnvironmentFromInstance", instance); assertThat(serverEnv, notNullValue()); assertThat(serverEnv.getType(), is(ENVIRONMENT_TYPES.TEST)); } @Test public void testGetEnvironmentFromInstanceVersion() throws Exception { final Instance instance = new Instance().withInstanceId("instance").withInstanceType(InstanceType.C1Xlarge).withTags(new Tag(EC2Connector.VERSION_TAG, "1.2.3")); ServerEnvironment serverEnv = Whitebox.<ServerEnvironment> invokeMethod(env, "getEnvironmentFromInstance", instance); assertThat(serverEnv, notNullValue()); assertThat(serverEnv.getVersion(), is("1.2.3")); } }