/* * Copyright 2015 herd contributors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.finra.herd.dao.helper; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; import static org.mockito.Matchers.any; import static org.mockito.Matchers.eq; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verifyNoMoreInteractions; import static org.mockito.Mockito.when; import java.util.ArrayList; import java.util.Arrays; import java.util.Calendar; import java.util.HashMap; import java.util.List; import com.amazonaws.services.elasticmapreduce.model.Cluster; import com.amazonaws.services.elasticmapreduce.model.ClusterState; import com.amazonaws.services.elasticmapreduce.model.ClusterStatus; import com.amazonaws.services.elasticmapreduce.model.ClusterSummary; import com.amazonaws.services.elasticmapreduce.model.Configuration; import com.amazonaws.services.elasticmapreduce.model.EbsBlockDevice; import com.amazonaws.services.elasticmapreduce.model.InstanceFleet; import com.amazonaws.services.elasticmapreduce.model.InstanceFleetProvisioningSpecifications; import com.amazonaws.services.elasticmapreduce.model.InstanceFleetStateChangeReason; import com.amazonaws.services.elasticmapreduce.model.InstanceFleetStatus; import com.amazonaws.services.elasticmapreduce.model.InstanceFleetTimeline; import com.amazonaws.services.elasticmapreduce.model.InstanceTypeSpecification; import com.amazonaws.services.elasticmapreduce.model.ListInstanceFleetsResult; import com.amazonaws.services.elasticmapreduce.model.SpotProvisioningSpecification; import com.amazonaws.services.elasticmapreduce.model.StepConfig; import com.amazonaws.services.elasticmapreduce.model.VolumeSpecification; import org.apache.commons.lang3.StringUtils; import org.junit.Test; import org.springframework.beans.factory.annotation.Autowired; import org.finra.herd.core.HerdDateUtils; import org.finra.herd.dao.AbstractDaoTest; import org.finra.herd.dao.EmrDao; import org.finra.herd.model.api.xml.EmrClusterEbsBlockDevice; import org.finra.herd.model.api.xml.EmrClusterInstanceFleet; import org.finra.herd.model.api.xml.EmrClusterInstanceFleetProvisioningSpecifications; import org.finra.herd.model.api.xml.EmrClusterInstanceFleetStateChangeReason; import org.finra.herd.model.api.xml.EmrClusterInstanceFleetStatus; import org.finra.herd.model.api.xml.EmrClusterInstanceFleetTimeline; import org.finra.herd.model.api.xml.EmrClusterInstanceTypeConfiguration; import org.finra.herd.model.api.xml.EmrClusterInstanceTypeSpecification; import org.finra.herd.model.api.xml.EmrClusterSpotProvisioningSpecification; import org.finra.herd.model.api.xml.EmrClusterVolumeSpecification; import org.finra.herd.model.api.xml.InstanceDefinition; import org.finra.herd.model.api.xml.InstanceDefinitions; import org.finra.herd.model.api.xml.MasterInstanceDefinition; import org.finra.herd.model.api.xml.Parameter; /** * This class tests functionality within the AwsHelper class. */ public class EmrHelperTest extends AbstractDaoTest { @Autowired EmrHelper emrHelper; @Test public void testBuildEmrClusterName() throws Exception { String clusterName = emrHelper.buildEmrClusterName(NAMESPACE, EMR_CLUSTER_DEFINITION_NAME, EMR_CLUSTER_NAME); assertEquals(NAMESPACE + "." + EMR_CLUSTER_DEFINITION_NAME + "." + EMR_CLUSTER_NAME, clusterName); } @Test public void testGetS3StagingLocation() throws Exception { String s3StagingLocation = emrHelper.getS3StagingLocation(); assertNotNull("s3 staging location is null", s3StagingLocation); } @Test public void testIsActiveEmrState() throws Exception { boolean isActive = emrHelper.isActiveEmrState("RUNNING"); assertTrue("not active", isActive); } @Test public void testEmrHadoopJarStepConfig() throws Exception { StepConfig stepConfig = emrHelper.getEmrHadoopJarStepConfig("step_name", "jar_location", null, null, false); assertNotNull("step not retuned", stepConfig); assertEquals("name not found", "step_name", stepConfig.getName()); assertEquals("jar not found", "jar_location", stepConfig.getHadoopJarStep().getJar()); } @Test public void testEmrHadoopJarStepConfigNoContinueOnError() throws Exception { StepConfig stepConfig = emrHelper.getEmrHadoopJarStepConfig("step_name", "jar_location", null, null, null); assertNotNull("step not retuned", stepConfig); assertEquals("name not found", "step_name", stepConfig.getName()); assertEquals("jar not found", "jar_location", stepConfig.getHadoopJarStep().getJar()); } @Test public void testEmrHadoopJarStepConfigContinueOnError() throws Exception { StepConfig stepConfig = emrHelper.getEmrHadoopJarStepConfig("step_name", "jar_location", null, null, true); assertNotNull("step not retuned", stepConfig); assertEquals("name not found", "step_name", stepConfig.getName()); assertEquals("jar not found", "jar_location", stepConfig.getHadoopJarStep().getJar()); } @Test public void testEmrHadoopJarStepConfigWithArguments() throws Exception { List<String> arguments = new ArrayList<>(); arguments.add("arg1"); StepConfig stepConfig = emrHelper.getEmrHadoopJarStepConfig("step_name", "jar_location", null, arguments, false); assertNotNull("step not retuned", stepConfig); assertEquals("name not found", "step_name", stepConfig.getName()); assertEquals("jar not found", "jar_location", stepConfig.getHadoopJarStep().getJar()); assertNotNull("arguments not found", stepConfig.getHadoopJarStep().getArgs()); } @Test public void testGetActiveEmrClusterIdAssertReturnActualClusterIdWhenClusterIdSpecifiedAndClusterStateActiveAndNameMatch() { EmrDao originalEmrDao = emrHelper.getEmrDao(); EmrDao mockEmrDao = mock(EmrDao.class); emrHelper.setEmrDao(mockEmrDao); try { String emrClusterId = "emrClusterId"; String emrClusterName = "emrClusterName"; String expectedEmrClusterId = "expectedEmrClusterId"; when(mockEmrDao.getEmrClusterById(any(), any())).thenReturn( new Cluster().withId(expectedEmrClusterId).withName(emrClusterName).withStatus(new ClusterStatus().withState(ClusterState.RUNNING))); assertEquals(expectedEmrClusterId, emrHelper.getActiveEmrClusterId(emrClusterId, emrClusterName, null)); verify(mockEmrDao).getEmrClusterById(eq(emrClusterId.trim()), any()); verifyNoMoreInteractions(mockEmrDao); } finally { emrHelper.setEmrDao(originalEmrDao); } } @Test public void testGetActiveEmrClusterIdAssertErrorWhenClusterIdSpecifiedAndNameMismatch() { EmrDao originalEmrDao = emrHelper.getEmrDao(); EmrDao mockEmrDao = mock(EmrDao.class); emrHelper.setEmrDao(mockEmrDao); try { String emrClusterId = "emrClusterId"; String emrClusterName = "emrClusterName"; String expectedEmrClusterId = "expectedEmrClusterId"; String actualEmrClusterName = "actualEmrClusterName"; when(mockEmrDao.getEmrClusterById(any(), any())).thenReturn( new Cluster().withId(expectedEmrClusterId).withName(actualEmrClusterName).withStatus(new ClusterStatus().withState(ClusterState.RUNNING))); try { emrHelper.getActiveEmrClusterId(emrClusterId, emrClusterName, null); fail(); } catch (IllegalArgumentException e) { assertEquals(String .format("The cluster with ID \"%s\" does not match the expected name \"%s\". The actual name is \"%s\".", expectedEmrClusterId, emrClusterName, actualEmrClusterName), e.getMessage()); } verify(mockEmrDao).getEmrClusterById(eq(emrClusterId.trim()), any()); verifyNoMoreInteractions(mockEmrDao); } finally { emrHelper.setEmrDao(originalEmrDao); } } @Test public void testGetActiveEmrClusterIdAssertReturnActualClusterIdWhenClusterStateActiveAndNameNotSpecified() { EmrDao originalEmrDao = emrHelper.getEmrDao(); EmrDao mockEmrDao = mock(EmrDao.class); emrHelper.setEmrDao(mockEmrDao); try { String emrClusterId = "emrClusterId"; String emrClusterName = null; String expectedEmrClusterId = "expectedEmrClusterId"; String actualEmrClusterName = "actualEmrClusterName"; when(mockEmrDao.getEmrClusterById(any(), any())).thenReturn( new Cluster().withId(expectedEmrClusterId).withName(actualEmrClusterName).withStatus(new ClusterStatus().withState(ClusterState.RUNNING))); assertEquals(expectedEmrClusterId, emrHelper.getActiveEmrClusterId(emrClusterId, emrClusterName, null)); verify(mockEmrDao).getEmrClusterById(eq(emrClusterId), any()); verifyNoMoreInteractions(mockEmrDao); } finally { emrHelper.setEmrDao(originalEmrDao); } } @Test public void testGetActiveEmrClusterIdAssertErrorWhenClusterIdSpecifiedAndClusterStateNotActive() { EmrDao originalEmrDao = emrHelper.getEmrDao(); EmrDao mockEmrDao = mock(EmrDao.class); emrHelper.setEmrDao(mockEmrDao); try { String emrClusterId = "emrClusterId"; String emrClusterName = "emrClusterName"; String expectedEmrClusterId = "expectedEmrClusterId"; ClusterState actualClusterState = ClusterState.TERMINATED; when(mockEmrDao.getEmrClusterById(any(), any())) .thenReturn(new Cluster().withId(expectedEmrClusterId).withName(emrClusterName).withStatus(new ClusterStatus().withState(actualClusterState))); try { emrHelper.getActiveEmrClusterId(emrClusterId, emrClusterName, null); fail(); } catch (IllegalArgumentException e) { assertEquals(String.format("The cluster with ID \"%s\" is not active. The cluster state must be in one of [STARTING, BOOTSTRAPPING, RUNNING, " + "WAITING]. Current state is \"%s\"", emrClusterId, actualClusterState), e.getMessage()); } verify(mockEmrDao).getEmrClusterById(eq(emrClusterId), any()); verifyNoMoreInteractions(mockEmrDao); } finally { emrHelper.setEmrDao(originalEmrDao); } } @Test public void testGetActiveEmrClusterIdAssertErrorWhenClusterIdSpecifiedAndClusterDoesNotExist() { EmrDao originalEmrDao = emrHelper.getEmrDao(); EmrDao mockEmrDao = mock(EmrDao.class); emrHelper.setEmrDao(mockEmrDao); try { String emrClusterId = "emrClusterId"; String emrClusterName = "emrClusterName"; when(mockEmrDao.getEmrClusterById(any(), any())).thenReturn(null); try { emrHelper.getActiveEmrClusterId(emrClusterId, emrClusterName, null); fail(); } catch (IllegalArgumentException e) { assertEquals(String.format("The cluster with ID \"%s\" does not exist.", emrClusterId), e.getMessage()); } verify(mockEmrDao).getEmrClusterById(eq(emrClusterId), any()); verifyNoMoreInteractions(mockEmrDao); } finally { emrHelper.setEmrDao(originalEmrDao); } } @Test public void testGetActiveEmrClusterIdAssertParametersTrimmed() { EmrDao originalEmrDao = emrHelper.getEmrDao(); EmrDao mockEmrDao = mock(EmrDao.class); emrHelper.setEmrDao(mockEmrDao); try { String emrClusterId = "emrClusterId"; String emrClusterName = "emrClusterName"; String expectedEmrClusterId = "expectedEmrClusterId"; when(mockEmrDao.getEmrClusterById(any(), any())).thenReturn( new Cluster().withId(expectedEmrClusterId).withName(emrClusterName).withStatus(new ClusterStatus().withState(ClusterState.RUNNING))); assertEquals(expectedEmrClusterId, emrHelper.getActiveEmrClusterId(StringUtils.wrap(emrClusterId, BLANK_TEXT), StringUtils.wrap(emrClusterName, BLANK_TEXT), null)); verify(mockEmrDao).getEmrClusterById(eq(emrClusterId.trim()), any()); verifyNoMoreInteractions(mockEmrDao); } finally { emrHelper.setEmrDao(originalEmrDao); } } @Test public void testGetActiveEmrClusterIdAssertParametersCaseIgnored() { EmrDao originalEmrDao = emrHelper.getEmrDao(); EmrDao mockEmrDao = mock(EmrDao.class); emrHelper.setEmrDao(mockEmrDao); try { String emrClusterId = "emrClusterId"; String emrClusterName = "emrClusterName"; String expectedEmrClusterId = "expectedEmrClusterId"; when(mockEmrDao.getEmrClusterById(any(), any())).thenReturn( new Cluster().withId(expectedEmrClusterId).withName(emrClusterName).withStatus(new ClusterStatus().withState(ClusterState.RUNNING))); assertEquals(expectedEmrClusterId, emrHelper.getActiveEmrClusterId(StringUtils.upperCase(emrClusterId), StringUtils.upperCase(emrClusterName), null)); verify(mockEmrDao).getEmrClusterById(eq(StringUtils.upperCase(emrClusterId)), any()); verifyNoMoreInteractions(mockEmrDao); } finally { emrHelper.setEmrDao(originalEmrDao); } } @Test public void testGetActiveEmrClusterIdNoIdSpecifiedAssertReturnActualClusterId() { EmrDao originalEmrDao = emrHelper.getEmrDao(); EmrDao mockEmrDao = mock(EmrDao.class); emrHelper.setEmrDao(mockEmrDao); try { String emrClusterId = null; String emrClusterName = "emrClusterName"; String expectedEmrClusterId = "expectedEmrClusterId"; when(mockEmrDao.getActiveEmrClusterByName(any(), any())).thenReturn(new ClusterSummary().withId(expectedEmrClusterId).withName(emrClusterName)); assertEquals(expectedEmrClusterId, emrHelper.getActiveEmrClusterId(emrClusterId, emrClusterName, null)); verify(mockEmrDao).getActiveEmrClusterByName(eq(emrClusterName), any()); verifyNoMoreInteractions(mockEmrDao); } finally { emrHelper.setEmrDao(originalEmrDao); } } @Test public void testGetActiveEmrClusterIdNoIdSpecifiedAssertErrorWhenClusterDoesNotExist() { EmrDao originalEmrDao = emrHelper.getEmrDao(); EmrDao mockEmrDao = mock(EmrDao.class); emrHelper.setEmrDao(mockEmrDao); try { String emrClusterId = null; String emrClusterName = "emrClusterName"; when(mockEmrDao.getActiveEmrClusterByName(any(), any())).thenReturn(null); try { emrHelper.getActiveEmrClusterId(emrClusterId, emrClusterName, null); fail(); } catch (IllegalArgumentException e) { assertEquals(String.format("The cluster with name \"%s\" does not exist.", emrClusterName), e.getMessage()); } verify(mockEmrDao).getActiveEmrClusterByName(eq(emrClusterName), any()); verifyNoMoreInteractions(mockEmrDao); } finally { emrHelper.setEmrDao(originalEmrDao); } } @Test public void testGetActiveEmrClusterIdAssertErrorWhenBothIdAndNameNotSpecified() { EmrDao originalEmrDao = emrHelper.getEmrDao(); EmrDao mockEmrDao = mock(EmrDao.class); emrHelper.setEmrDao(mockEmrDao); try { String emrClusterId = null; String emrClusterName = null; try { emrHelper.getActiveEmrClusterId(emrClusterId, emrClusterName, null); fail(); } catch (IllegalArgumentException e) { assertEquals("One of EMR cluster ID or EMR cluster name must be specified.", e.getMessage()); } verifyNoMoreInteractions(mockEmrDao); } finally { emrHelper.setEmrDao(originalEmrDao); } } @Test public void testIsInstanceDefinitionsEmpty() { assertTrue(emrHelper.isInstanceDefinitionsEmpty(null)); assertTrue(emrHelper.isInstanceDefinitionsEmpty(new InstanceDefinitions(null, null, null))); assertFalse(emrHelper.isInstanceDefinitionsEmpty(new InstanceDefinitions(new MasterInstanceDefinition(), null, null))); assertFalse(emrHelper.isInstanceDefinitionsEmpty(new InstanceDefinitions(null, new InstanceDefinition(), null))); assertFalse(emrHelper.isInstanceDefinitionsEmpty(new InstanceDefinitions(null, null, new InstanceDefinition()))); } @Test public void testBuildEmrClusterInstanceFleetFromAwsResult() { ListInstanceFleetsResult listInstanceFleetsResult = null; assertNull(emrHelper.buildEmrClusterInstanceFleetFromAwsResult(listInstanceFleetsResult)); listInstanceFleetsResult = new ListInstanceFleetsResult(); assertNull(emrHelper.buildEmrClusterInstanceFleetFromAwsResult(listInstanceFleetsResult)); String instanceId = "instance id"; String instanceName = "instance name"; String instanceFleetType = "instance fleet type"; int targetOnDemandCapacity = 1; int targetSpotCapacity = 2; int provisionedOnDemandCapacity = 3; int provisionedSpotCapacity = 4; EmrClusterInstanceFleet expectedEmrInstanceFleet = new EmrClusterInstanceFleet(); expectedEmrInstanceFleet.setId(instanceId); expectedEmrInstanceFleet.setName(instanceName); expectedEmrInstanceFleet.setInstanceFleetType(instanceFleetType); expectedEmrInstanceFleet.setTargetOnDemandCapacity(targetOnDemandCapacity); expectedEmrInstanceFleet.setTargetSpotCapacity(targetSpotCapacity); expectedEmrInstanceFleet.setProvisionedOnDemandCapacity(provisionedOnDemandCapacity); expectedEmrInstanceFleet.setProvisionedSpotCapacity(provisionedSpotCapacity); InstanceFleet instanceFleet = new InstanceFleet(); instanceFleet.setId(instanceId); instanceFleet.setName(instanceName); instanceFleet.setInstanceFleetType(instanceFleetType); instanceFleet.setTargetOnDemandCapacity(targetOnDemandCapacity); instanceFleet.setTargetSpotCapacity(targetSpotCapacity); instanceFleet.setProvisionedSpotCapacity(provisionedSpotCapacity); instanceFleet.setProvisionedOnDemandCapacity(provisionedOnDemandCapacity); List<InstanceFleet> instanceFleets = new ArrayList<>(); instanceFleets.add(null); instanceFleets.add(instanceFleet); listInstanceFleetsResult.setInstanceFleets(instanceFleets); assertEquals(Arrays.asList(expectedEmrInstanceFleet), emrHelper.buildEmrClusterInstanceFleetFromAwsResult(listInstanceFleetsResult)); EmrClusterInstanceFleetStatus emrClusterInstanceFleetStatus = new EmrClusterInstanceFleetStatus(); String emrClusterInstanceFleetStatus_State = "state 1"; emrClusterInstanceFleetStatus.setState(emrClusterInstanceFleetStatus_State); expectedEmrInstanceFleet.setInstanceFleetStatus(emrClusterInstanceFleetStatus); InstanceFleetStatus instanceFleetStatus = new InstanceFleetStatus(); instanceFleetStatus.setState(emrClusterInstanceFleetStatus_State); instanceFleet.setStatus(instanceFleetStatus); assertEquals(Arrays.asList(expectedEmrInstanceFleet), emrHelper.buildEmrClusterInstanceFleetFromAwsResult(listInstanceFleetsResult)); String emrClusterInstanceFleetStatus_StateChangeCode = "change code 1"; String emrClusterInstanceFleetStatus_StateChangeMsg = "change msg 1"; InstanceFleetStateChangeReason instanceFleetStateChangeReason = new InstanceFleetStateChangeReason(); instanceFleetStateChangeReason.setCode(emrClusterInstanceFleetStatus_StateChangeCode); instanceFleetStateChangeReason.setMessage(emrClusterInstanceFleetStatus_StateChangeMsg); instanceFleetStatus.setStateChangeReason(instanceFleetStateChangeReason); InstanceFleetTimeline instanceFleetTimeline = new InstanceFleetTimeline(); java.util.Date now = Calendar.getInstance().getTime(); instanceFleetTimeline.setCreationDateTime(now); instanceFleetTimeline.setReadyDateTime(now); instanceFleetTimeline.setEndDateTime(now); instanceFleetStatus.setTimeline(instanceFleetTimeline); EmrClusterInstanceFleetStateChangeReason emrClusterInstanceFleetStateChangeReason = new EmrClusterInstanceFleetStateChangeReason(); emrClusterInstanceFleetStateChangeReason.setCode(emrClusterInstanceFleetStatus_StateChangeCode); emrClusterInstanceFleetStateChangeReason.setMessage(emrClusterInstanceFleetStatus_StateChangeMsg); emrClusterInstanceFleetStatus.setStateChangeReason(emrClusterInstanceFleetStateChangeReason); EmrClusterInstanceFleetTimeline emrClusterInstanceFleetTimeline = new EmrClusterInstanceFleetTimeline(); emrClusterInstanceFleetTimeline.setCreationDateTime(HerdDateUtils.getXMLGregorianCalendarValue(now)); emrClusterInstanceFleetTimeline.setReadyDateTime(HerdDateUtils.getXMLGregorianCalendarValue(now)); emrClusterInstanceFleetTimeline.setEndDateTime(HerdDateUtils.getXMLGregorianCalendarValue(now)); emrClusterInstanceFleetStatus.setTimeline(emrClusterInstanceFleetTimeline); assertEquals(Arrays.asList(expectedEmrInstanceFleet), emrHelper.buildEmrClusterInstanceFleetFromAwsResult(listInstanceFleetsResult)); String instanceType = "instance type 1"; int weightedCapacity = 1; String bidPrice = "1.0"; double bidPricePercent = 0.8; boolean ebsOptimized = true; InstanceTypeSpecification instanceTypeSpecification = new InstanceTypeSpecification(); instanceTypeSpecification.setInstanceType(instanceType); instanceTypeSpecification.setWeightedCapacity(weightedCapacity); instanceTypeSpecification.setBidPrice(bidPrice); instanceTypeSpecification.setBidPriceAsPercentageOfOnDemandPrice(bidPricePercent); instanceTypeSpecification.setEbsOptimized(ebsOptimized); List<InstanceTypeSpecification> instanceTypeSpecifications = new ArrayList<>(); instanceTypeSpecifications.add(null); instanceTypeSpecifications.add(instanceTypeSpecification); instanceFleet.setInstanceTypeSpecifications(instanceTypeSpecifications); EmrClusterInstanceTypeSpecification emrClusterInstanceTypeSpecification = new EmrClusterInstanceTypeSpecification(); emrClusterInstanceTypeSpecification.setInstanceType(instanceType); emrClusterInstanceTypeSpecification.setWeightedCapacity(weightedCapacity); emrClusterInstanceTypeSpecification.setBidPrice(bidPrice); emrClusterInstanceTypeSpecification.setBidPriceAsPercentageOfOnDemandPrice(bidPricePercent); emrClusterInstanceTypeSpecification.setEbsOptimized(ebsOptimized); expectedEmrInstanceFleet.setInstanceTypeSpecifications(Arrays.asList(emrClusterInstanceTypeSpecification)); assertEquals(Arrays.asList(expectedEmrInstanceFleet), emrHelper.buildEmrClusterInstanceFleetFromAwsResult(listInstanceFleetsResult)); EbsBlockDevice ebsBlockDevice = new EbsBlockDevice(); String device = "device 1"; ebsBlockDevice.setDevice(device); List<EbsBlockDevice> ebsBlockDevices = new ArrayList<>(); ebsBlockDevices.add(ebsBlockDevice); ebsBlockDevices.add(null); instanceTypeSpecification.setEbsBlockDevices(ebsBlockDevices); EmrClusterEbsBlockDevice emrClusterEbsBlockDevice = new EmrClusterEbsBlockDevice(); emrClusterEbsBlockDevice.setDevice(device); emrClusterInstanceTypeSpecification.setEbsBlockDevices(Arrays.asList(emrClusterEbsBlockDevice)); assertEquals(Arrays.asList(expectedEmrInstanceFleet), emrHelper.buildEmrClusterInstanceFleetFromAwsResult(listInstanceFleetsResult)); int iops = 100; int sizeInGB = 20; String volumeType = "volume type 1"; VolumeSpecification volumeSpecification = new VolumeSpecification(); volumeSpecification.setIops(iops); volumeSpecification.setSizeInGB(sizeInGB); volumeSpecification.setVolumeType(volumeType); ebsBlockDevice.setVolumeSpecification(volumeSpecification); EmrClusterVolumeSpecification emrClusterVolumeSpecification = new EmrClusterVolumeSpecification(); emrClusterVolumeSpecification.setIops(iops); emrClusterVolumeSpecification.setSizeInGB(sizeInGB); emrClusterVolumeSpecification.setVolumeType(volumeType); emrClusterEbsBlockDevice.setVolumeSpecification(emrClusterVolumeSpecification); assertEquals(Arrays.asList(expectedEmrInstanceFleet), emrHelper.buildEmrClusterInstanceFleetFromAwsResult(listInstanceFleetsResult)); InstanceFleetProvisioningSpecifications instanceFleetProvisioningSpecifications = new InstanceFleetProvisioningSpecifications(); instanceFleet.setLaunchSpecifications(instanceFleetProvisioningSpecifications); EmrClusterInstanceFleetProvisioningSpecifications emrClusterInstanceFleetProvisioningSpecifications = new EmrClusterInstanceFleetProvisioningSpecifications(); expectedEmrInstanceFleet.setLaunchSpecifications(emrClusterInstanceFleetProvisioningSpecifications); assertEquals(Arrays.asList(expectedEmrInstanceFleet), emrHelper.buildEmrClusterInstanceFleetFromAwsResult(listInstanceFleetsResult)); List<Configuration> configurations = new ArrayList<>(); Configuration configuration = new Configuration(); String classification = "classification 1"; configuration.setClassification(classification); configurations.add(null); configurations.add(configuration); instanceTypeSpecification.setConfigurations(configurations); EmrClusterInstanceTypeConfiguration emrClusterInstanceTypeConfiguration = new EmrClusterInstanceTypeConfiguration(); emrClusterInstanceTypeConfiguration.setClassification(classification); emrClusterInstanceTypeSpecification.setConfigurations(Arrays.asList(emrClusterInstanceTypeConfiguration)); assertEquals(Arrays.asList(expectedEmrInstanceFleet), emrHelper.buildEmrClusterInstanceFleetFromAwsResult(listInstanceFleetsResult)); String paramKey = "param 1"; String paramVal = "param val 1"; java.util.Map<String, String> map = new HashMap<>(); map.put(paramKey, paramVal); configuration.setProperties(map); Parameter parameter = new Parameter(paramKey, paramVal); emrClusterInstanceTypeConfiguration.setProperties(Arrays.asList(parameter)); assertEquals(Arrays.asList(expectedEmrInstanceFleet), emrHelper.buildEmrClusterInstanceFleetFromAwsResult(listInstanceFleetsResult)); int blockDurationMin = 30; String timeoutAction = "action 1"; int timeoutDurationMin = 60; //to do time out action SpotProvisioningSpecification spotProvisioningSpecification = new SpotProvisioningSpecification(); spotProvisioningSpecification.setBlockDurationMinutes(blockDurationMin); spotProvisioningSpecification.setTimeoutAction(timeoutAction); spotProvisioningSpecification.setTimeoutDurationMinutes(timeoutDurationMin); instanceFleetProvisioningSpecifications.setSpotSpecification(spotProvisioningSpecification); EmrClusterSpotProvisioningSpecification emrClusterSpotProvisioningSpecification = new EmrClusterSpotProvisioningSpecification(); emrClusterSpotProvisioningSpecification.setBlockDurationMinutes(blockDurationMin); emrClusterSpotProvisioningSpecification.setTimeoutAction(timeoutAction); emrClusterSpotProvisioningSpecification.setTimeoutDurationMinutes(timeoutDurationMin); emrClusterInstanceFleetProvisioningSpecifications.setSpotSpecification(emrClusterSpotProvisioningSpecification); assertEquals(Arrays.asList(expectedEmrInstanceFleet), emrHelper.buildEmrClusterInstanceFleetFromAwsResult(listInstanceFleetsResult)); } }