@Override public Instance getEmrMasterInstance(String clusterId, AwsParamsDto awsParams) throws Exception { // Get the master EC2 instance ListInstancesRequest listInstancesRequest = new ListInstancesRequest().withClusterId(clusterId).withInstanceGroupTypes(InstanceGroupType.MASTER); List<Instance> instances = emrOperations.listClusterInstancesRequest(getEmrClient(awsParams), listInstancesRequest).getInstances(); // Throw error in case there are no master instances found yet if (instances.size() == 0) { throw new IllegalArgumentException("No master instances found for the cluster \"" + clusterId + "\"."); } // EMR has only one master node. return instances.get(0); }
@Override public Instance getEmrMasterInstance(String clusterId, AwsParamsDto awsParams) throws Exception { // Get the master EC2 instance ListInstancesRequest listInstancesRequest = new ListInstancesRequest().withClusterId(clusterId).withInstanceGroupTypes(InstanceGroupType.MASTER); List<Instance> instances = emrOperations.listClusterInstancesRequest(getEmrClient(awsParams), listInstancesRequest).getInstances(); // Throw error in case there are no master instances found yet if (instances.size() == 0) { throw new IllegalArgumentException("No master instances found for the cluster \"" + clusterId + "\"."); } // EMR has only one master node. return instances.get(0); }
@Override public List<String> addEmrMasterSecurityGroups(String clusterId, List<String> securityGroups, AwsParamsDto awsParams) throws Exception { // Get the master EC2 instance ListInstancesRequest listInstancesRequest = new ListInstancesRequest().withClusterId(clusterId).withInstanceGroupTypes(InstanceGroupType.MASTER); List<Instance> instances = emrOperations.listClusterInstancesRequest(getEmrClient(awsParams), listInstancesRequest).getInstances(); // Throw error in case there are no master instances found yet if (instances.size() == 0) { throw new IllegalArgumentException("No master instances found for the cluster \"" + clusterId + "\"."); } for (Instance instance : instances) { ec2Dao.addSecurityGroupsToEc2Instance(instance.getEc2InstanceId(), securityGroups, awsParams); } return securityGroups; }
@Override public List<String> addEmrMasterSecurityGroups(String clusterId, List<String> securityGroups, AwsParamsDto awsParams) throws Exception { // Get the master EC2 instance ListInstancesRequest listInstancesRequest = new ListInstancesRequest().withClusterId(clusterId).withInstanceGroupTypes(InstanceGroupType.MASTER); List<Instance> instances = emrOperations.listClusterInstancesRequest(getEmrClient(awsParams), listInstancesRequest).getInstances(); // Throw error in case there are no master instances found yet if (instances.size() == 0) { throw new IllegalArgumentException("No master instances found for the cluster \"" + clusterId + "\"."); } for (Instance instance : instances) { ec2Dao.addSecurityGroupsToEc2Instance(instance.getEc2InstanceId(), securityGroups, awsParams); } return securityGroups; }
@Test public void getEmrMasterInstanceThrowsWhenNoInstance() throws Exception { String clusterId = "clusterId"; when(mockEmrOperations.listClusterInstancesRequest(any(), any())).thenReturn(new ListInstancesResult()); try { emrDao.getEmrMasterInstance(clusterId, getAwsParamsDto()); fail(); } catch (Exception e) { assertEquals(IllegalArgumentException.class, e.getClass()); assertEquals("No master instances found for the cluster \"" + clusterId + "\".", e.getMessage()); } }
@Test public void getEmrMasterInstanceReturnsInstance() throws Exception { String clusterId = "clusterId"; Instance expectedInstance = new Instance(); /* * Stub EmrOperations.listClusterInstancesRequest() and assert correct parameters are being passed into the method when the call is made. */ when(mockEmrOperations.listClusterInstancesRequest(any(), any())).thenAnswer(new Answer<ListInstancesResult>() { @Override public ListInstancesResult answer(InvocationOnMock invocation) throws Throwable { /* * Assert correct parameters are used when calling this method. */ ListInstancesRequest listInstancesRequest = invocation.getArgument(1); assertEquals(clusterId, listInstancesRequest.getClusterId()); List<String> instanceGroupTypes = listInstancesRequest.getInstanceGroupTypes(); assertEquals(1, instanceGroupTypes.size()); assertEquals("MASTER", instanceGroupTypes.get(0)); ListInstancesResult listInstancesResult = new ListInstancesResult(); listInstancesResult.setInstances(Arrays.asList(expectedInstance)); return listInstancesResult; } }); Instance actualInstance = emrDao.getEmrMasterInstance(clusterId, getAwsParamsDto()); assertEquals(expectedInstance, actualInstance); }
@Test public void addEmrMasterSecurityGroupsCallsEc2AddSecurityGroup() throws Exception { String clusterName = "clusterName"; List<String> securityGroups = Arrays.asList("securityGroup"); AwsParamsDto awsParams = getAwsParamsDto(); String ec2InstanceId = "ec2InstanceId"; ListClustersResult listClustersResult = new ListClustersResult(); listClustersResult.setClusters(new ArrayList<>()); ClusterSummary clusterSummary = new ClusterSummary(); clusterSummary.setId("clusterId"); clusterSummary.setName(clusterName); listClustersResult.getClusters().add(clusterSummary); when(mockEmrOperations.listEmrClusters(any(), any())).thenReturn(listClustersResult); ListInstancesResult listInstancesResult = new ListInstancesResult(); listInstancesResult.setInstances(new ArrayList<>()); Instance instance = new Instance(); instance.setEc2InstanceId(ec2InstanceId); listInstancesResult.getInstances().add(instance); when(mockEmrOperations.listClusterInstancesRequest(any(), any())).thenReturn(listInstancesResult); emrDao.addEmrMasterSecurityGroups(clusterName, securityGroups, awsParams); verify(mockEc2Dao).addSecurityGroupsToEc2Instance(eq(ec2InstanceId), eq(securityGroups), any()); verifyNoMoreInteractions(mockEc2Dao); }
@Test public void addEmrMasterSecurityGroupsThrowWhenNoInstancesFound() throws Exception { String clusterName = "clusterName"; List<String> securityGroups = Arrays.asList("securityGroup"); AwsParamsDto awsParams = getAwsParamsDto(); ListClustersResult listClustersResult = new ListClustersResult(); listClustersResult.setClusters(new ArrayList<>()); ClusterSummary clusterSummary = new ClusterSummary(); clusterSummary.setId("clusterId"); clusterSummary.setName(clusterName); listClustersResult.getClusters().add(clusterSummary); when(mockEmrOperations.listEmrClusters(any(), any())).thenReturn(listClustersResult); when(mockEmrOperations.listClusterInstancesRequest(any(), any())).thenReturn(new ListInstancesResult()); try { emrDao.addEmrMasterSecurityGroups(clusterName, securityGroups, awsParams); fail(); } catch (Exception e) { assertEquals(IllegalArgumentException.class, e.getClass()); assertEquals("No master instances found for the cluster \"" + clusterName + "\".", e.getMessage()); } }