/** * Updates an existing EMR cluster definition by namespace and name. <p>Requires WRITE permission on namespace</p> * * @param namespace the namespace * @param emrClusterDefinitionName the EMR cluster definition name * @param request the information needed to update the EMR cluster definition * * @return the updated EMR cluster definition */ @RequestMapping( value = EMR_CLUSTER_DEFINITIONS_URI_PREFIX + "/namespaces/{namespace}/emrClusterDefinitionNames/{emrClusterDefinitionName}", method = RequestMethod.PUT, consumes = {"application/xml", "application/json"}) @Secured(SecurityFunctions.FN_EMR_CLUSTER_DEFINITIONS_PUT) public EmrClusterDefinitionInformation updateEmrClusterDefinition(@PathVariable("namespace") String namespace, @PathVariable("emrClusterDefinitionName") String emrClusterDefinitionName, @RequestBody EmrClusterDefinitionUpdateRequest request) throws Exception { return emrClusterDefinitionService.updateEmrClusterDefinition(new EmrClusterDefinitionKey(namespace, emrClusterDefinitionName), request); }
/** * Updates an existing EMR cluster definition by namespace and name. <p>Requires WRITE permission on namespace</p> * * @param namespace the namespace * @param emrClusterDefinitionName the EMR cluster definition name * @param request the information needed to update the EMR cluster definition * * @return the updated EMR cluster definition */ @RequestMapping( value = EMR_CLUSTER_DEFINITIONS_URI_PREFIX + "/namespaces/{namespace}/emrClusterDefinitionNames/{emrClusterDefinitionName}", method = RequestMethod.PUT, consumes = {"application/xml", "application/json"}) @Secured(SecurityFunctions.FN_EMR_CLUSTER_DEFINITIONS_PUT) public EmrClusterDefinitionInformation updateEmrClusterDefinition(@PathVariable("namespace") String namespace, @PathVariable("emrClusterDefinitionName") String emrClusterDefinitionName, @RequestBody EmrClusterDefinitionUpdateRequest request) throws Exception { return emrClusterDefinitionService.updateEmrClusterDefinition(new EmrClusterDefinitionKey(namespace, emrClusterDefinitionName), request); }
@Test public void testUpdateEmrClusterDefinition() throws Exception { // Create an EMR cluster definition key. EmrClusterDefinitionKey emrClusterDefinitionKey = new EmrClusterDefinitionKey(NAMESPACE, EMR_CLUSTER_DEFINITION_NAME); // Create an EMR cluster definition. EmrClusterDefinition emrClusterDefinition = new EmrClusterDefinition(); // Create an EMR cluster definition update request. EmrClusterDefinitionUpdateRequest emrClusterDefinitionUpdateRequest = new EmrClusterDefinitionUpdateRequest(emrClusterDefinition); // Create an object that holds EMR cluster definition information. EmrClusterDefinitionInformation emrClusterDefinitionInformation = new EmrClusterDefinitionInformation(ID, emrClusterDefinitionKey, emrClusterDefinition); // Mock the external calls. when(emrClusterDefinitionService.updateEmrClusterDefinition(emrClusterDefinitionKey, emrClusterDefinitionUpdateRequest)) .thenReturn(emrClusterDefinitionInformation); // Call the method under test. EmrClusterDefinitionInformation result = emrClusterDefinitionRestController.updateEmrClusterDefinition(NAMESPACE, EMR_CLUSTER_DEFINITION_NAME, emrClusterDefinitionUpdateRequest); // Verify the external calls. verify(emrClusterDefinitionService).updateEmrClusterDefinition(emrClusterDefinitionKey, emrClusterDefinitionUpdateRequest); verifyNoMoreInteractionsHelper(); // Validate the results. assertEquals(emrClusterDefinitionInformation, result); }
@Test public void testUpdateEmrClusterDefinitionUpperCaseParameters() throws Exception { // Create and persist the namespace entity with a lowercase name. NamespaceEntity namespaceEntity = namespaceDaoTestHelper.createNamespaceEntity(NAMESPACE.toLowerCase()); // Create and persist the EMR cluster definition entity with a lowercase name using minimal test XML configuration. EmrClusterDefinitionEntity emrClusterDefinitionEntity = emrClusterDefinitionDaoTestHelper .createEmrClusterDefinitionEntity(namespaceEntity, EMR_CLUSTER_DEFINITION_NAME.toLowerCase(), getTestEmrClusterDefinitionConfigurationXml(EMR_CLUSTER_DEFINITION_XML_FILE_MINIMAL_CLASSPATH)); executeWithoutLogging(EmrClusterDefinitionServiceImpl.class, () -> { // Update an EMR cluster definition with the normal test XML configuration by passing the EMR cluster definition name key parameters in upper case. EmrClusterDefinitionInformation updatedEmrClusterDefinition = emrClusterDefinitionService .updateEmrClusterDefinition(new EmrClusterDefinitionKey(NAMESPACE.toUpperCase(), EMR_CLUSTER_DEFINITION_NAME.toUpperCase()), createEmrClusterDefinitionUpdateRequest(getTestEmrClusterDefinitionConfiguration(EMR_CLUSTER_DEFINITION_XML_FILE_WITH_CLASSPATH))); // Validate the returned object. validateEmrClusterDefinition(emrClusterDefinitionEntity.getId(), NAMESPACE.toLowerCase(), EMR_CLUSTER_DEFINITION_NAME.toLowerCase(), getTestEmrClusterDefinitionConfiguration(EMR_CLUSTER_DEFINITION_XML_FILE_WITH_CLASSPATH), updatedEmrClusterDefinition); }); }
@Test public void testUpdateEmrClusterDefinitionLowerCaseParameters() throws Exception { // Create and persist the namespace entity with an uppercase name. NamespaceEntity namespaceEntity = namespaceDaoTestHelper.createNamespaceEntity(NAMESPACE.toUpperCase()); // Create and persist the EMR cluster definition entity with an uppercase name using minimal test XML configuration. EmrClusterDefinitionEntity emrClusterDefinitionEntity = emrClusterDefinitionDaoTestHelper .createEmrClusterDefinitionEntity(namespaceEntity, EMR_CLUSTER_DEFINITION_NAME.toUpperCase(), getTestEmrClusterDefinitionConfigurationXml(EMR_CLUSTER_DEFINITION_XML_FILE_MINIMAL_CLASSPATH)); executeWithoutLogging(EmrClusterDefinitionServiceImpl.class, () -> { // Update an EMR cluster definition with the normal test XML configuration by passing the EMR cluster definition name key parameters in lower case. EmrClusterDefinitionInformation updatedEmrClusterDefinition = emrClusterDefinitionService .updateEmrClusterDefinition(new EmrClusterDefinitionKey(NAMESPACE.toLowerCase(), EMR_CLUSTER_DEFINITION_NAME.toLowerCase()), createEmrClusterDefinitionUpdateRequest(getTestEmrClusterDefinitionConfiguration(EMR_CLUSTER_DEFINITION_XML_FILE_WITH_CLASSPATH))); // Validate the returned object. validateEmrClusterDefinition(emrClusterDefinitionEntity.getId(), NAMESPACE.toUpperCase(), EMR_CLUSTER_DEFINITION_NAME.toUpperCase(), getTestEmrClusterDefinitionConfiguration(EMR_CLUSTER_DEFINITION_XML_FILE_WITH_CLASSPATH), updatedEmrClusterDefinition); }); }
try emrClusterDefinitionService.updateEmrClusterDefinition(new EmrClusterDefinitionKey(NAMESPACE, EMR_CLUSTER_DEFINITION_NAME), createEmrClusterDefinitionUpdateRequest(emrClusterDefinitionConfiguration)); fail(String.format("Should throw an IllegalArgumentException when \"%s\" required AWS node tag is not specified.", mandatoryAwsTagName));
@Test public void testUpdateEmrClusterDefinitionEmrClusterDefinitionNoExists() throws Exception { // Try to perform an update using a non-existing EMR cluster definition name. String testEmrClusterDefinitionName = "I_DO_NOT_EXIST"; try { emrClusterDefinitionService.updateEmrClusterDefinition(new EmrClusterDefinitionKey(NAMESPACE, testEmrClusterDefinitionName), createEmrClusterDefinitionUpdateRequest(getTestEmrClusterDefinitionConfiguration(EMR_CLUSTER_DEFINITION_XML_FILE_WITH_CLASSPATH))); fail("Should throw an ObjectNotFoundException when EMR cluster definition does not exist."); } catch (ObjectNotFoundException e) { assertEquals(String.format("EMR cluster definition with name \"%s\" doesn't exist for namespace \"%s\".", testEmrClusterDefinitionName, NAMESPACE), e.getMessage()); } }
@Test public void testUpdateEmrClusterDefinitionDuplicateNodeTags() throws Exception { // Try to perform an update by passing duplicate node tag names. try { EmrClusterDefinition emrClusterDefinitionConfiguration = getTestEmrClusterDefinitionConfiguration(EMR_CLUSTER_DEFINITION_XML_FILE_WITH_CLASSPATH); for (int i = 0; i < 2; i++) { NodeTag nodeTag = new NodeTag(); nodeTag.setTagName(ATTRIBUTE_NAME_1_MIXED_CASE); nodeTag.setTagValue(ATTRIBUTE_VALUE_1); emrClusterDefinitionConfiguration.getNodeTags().add(nodeTag); } emrClusterDefinitionService.updateEmrClusterDefinition(new EmrClusterDefinitionKey(NAMESPACE, EMR_CLUSTER_DEFINITION_NAME), createEmrClusterDefinitionUpdateRequest(emrClusterDefinitionConfiguration)); fail("Should throw an IllegalArgumentException when duplicate node tag names are specified."); } catch (IllegalArgumentException e) { assertEquals(String.format("Duplicate node tag \"%s\" is found.", ATTRIBUTE_NAME_1_MIXED_CASE), e.getMessage()); } }
@Test public void testUpdateEmrClusterDefinitionMaxInstancesExceeded() throws Exception { final Integer TEST_MAX_EMR_INSTANCES_COUNT = 10; // Override configuration. Map<String, Object> overrideMap = new HashMap<>(); overrideMap.put(ConfigurationValue.MAX_EMR_INSTANCES_COUNT.getKey(), TEST_MAX_EMR_INSTANCES_COUNT.toString()); modifyPropertySourceInEnvironment(overrideMap); // Try to perform an update by specifying too many instances (TEST_MAX_EMR_INSTANCES_COUNT + 1). EmrClusterDefinition emrClusterDefinitionConfiguration = getTestEmrClusterDefinitionConfiguration(EMR_CLUSTER_DEFINITION_XML_FILE_WITH_CLASSPATH); emrClusterDefinitionConfiguration.getInstanceDefinitions().getMasterInstances().setInstanceCount(TEST_MAX_EMR_INSTANCES_COUNT); emrClusterDefinitionConfiguration.getInstanceDefinitions().getCoreInstances().setInstanceCount(1); try { emrClusterDefinitionService.updateEmrClusterDefinition(new EmrClusterDefinitionKey(NAMESPACE, EMR_CLUSTER_DEFINITION_NAME), createEmrClusterDefinitionUpdateRequest(emrClusterDefinitionConfiguration)); fail("Should throw an IllegalArgumentException when total number of instances exceeds maximum allowed."); } catch (IllegalArgumentException e) { assertEquals(String.format("Total number of instances requested can not exceed : %d", TEST_MAX_EMR_INSTANCES_COUNT), e.getMessage()); } finally { // Restore the property sources so we don't affect other tests. restorePropertySourceInEnvironment(); } }
emrClusterDefinitionService.updateEmrClusterDefinition(new EmrClusterDefinitionKey(BLANK_TEXT, EMR_CLUSTER_DEFINITION_NAME), createEmrClusterDefinitionUpdateRequest(getTestEmrClusterDefinitionConfiguration(EMR_CLUSTER_DEFINITION_XML_FILE_WITH_CLASSPATH))); fail("Should throw an IllegalArgumentException when namespace is not specified."); emrClusterDefinitionService.updateEmrClusterDefinition(new EmrClusterDefinitionKey(NAMESPACE, BLANK_TEXT), createEmrClusterDefinitionUpdateRequest(getTestEmrClusterDefinitionConfiguration(EMR_CLUSTER_DEFINITION_XML_FILE_WITH_CLASSPATH))); fail("Should throw an IllegalArgumentException when EMR cluster definition name is not specified."); .updateEmrClusterDefinition(new EmrClusterDefinitionKey(NAMESPACE, EMR_CLUSTER_DEFINITION_NAME), createEmrClusterDefinitionUpdateRequest(null)); fail("Should throw an IllegalArgumentException when EMR cluster definition configuration is not specified."); emrClusterDefinitionConfiguration.setInstanceDefinitions(null); emrClusterDefinitionConfiguration.setInstanceFleets(null); emrClusterDefinitionService.updateEmrClusterDefinition(new EmrClusterDefinitionKey(NAMESPACE, EMR_CLUSTER_DEFINITION_NAME), createEmrClusterDefinitionUpdateRequest(emrClusterDefinitionConfiguration)); fail(); emrClusterDefinitionService.updateEmrClusterDefinition(new EmrClusterDefinitionKey(NAMESPACE, EMR_CLUSTER_DEFINITION_NAME), createEmrClusterDefinitionUpdateRequest(emrClusterDefinitionConfiguration)); fail("Should throw an IllegalArgumentException when master instances are not specified."); emrClusterDefinitionService.updateEmrClusterDefinition(new EmrClusterDefinitionKey(NAMESPACE, EMR_CLUSTER_DEFINITION_NAME), createEmrClusterDefinitionUpdateRequest(emrClusterDefinitionConfiguration)); fail("Should throw an IllegalArgumentException when instance count is less than one for master instances."); emrClusterDefinitionService.updateEmrClusterDefinition(new EmrClusterDefinitionKey(NAMESPACE, EMR_CLUSTER_DEFINITION_NAME), createEmrClusterDefinitionUpdateRequest(emrClusterDefinitionConfiguration)); fail("Should throw an IllegalArgumentException when instance type for master instances is not specified.");
@Test public void testUpdateEmrClusterDefinition() throws Exception { // Create and persist the namespace entity. NamespaceEntity namespaceEntity = namespaceDaoTestHelper.createNamespaceEntity(NAMESPACE); // Create and persist the EMR cluster definition entity using minimal test XML configuration. EmrClusterDefinitionEntity emrClusterDefinitionEntity = emrClusterDefinitionDaoTestHelper .createEmrClusterDefinitionEntity(namespaceEntity, EMR_CLUSTER_DEFINITION_NAME, getTestEmrClusterDefinitionConfigurationXml(EMR_CLUSTER_DEFINITION_XML_FILE_MINIMAL_CLASSPATH)); // Create an EMR cluster definition update request using normal test XML configuration. EmrClusterDefinitionUpdateRequest request = createEmrClusterDefinitionUpdateRequest(getTestEmrClusterDefinitionConfiguration(EMR_CLUSTER_DEFINITION_XML_FILE_WITH_CLASSPATH)); executeWithoutLogging(EmrClusterDefinitionServiceImpl.class, () -> { // Update the EMR cluster definition. EmrClusterDefinitionInformation updatedEmrClusterDefinition = emrClusterDefinitionService.updateEmrClusterDefinition(new EmrClusterDefinitionKey(NAMESPACE, EMR_CLUSTER_DEFINITION_NAME), request); // Validate the returned object. validateEmrClusterDefinition(emrClusterDefinitionEntity.getId(), NAMESPACE, EMR_CLUSTER_DEFINITION_NAME, getTestEmrClusterDefinitionConfiguration(EMR_CLUSTER_DEFINITION_XML_FILE_WITH_CLASSPATH), updatedEmrClusterDefinition); }); }
@Test public void testUpdateEmrClusterDefinitionTrimParameters() throws Exception { // Create and persist the namespace entity. NamespaceEntity namespaceEntity = namespaceDaoTestHelper.createNamespaceEntity(NAMESPACE); // Create and persist the EMR cluster definition entity using minimal test XML configuration. EmrClusterDefinitionEntity emrClusterDefinitionEntity = emrClusterDefinitionDaoTestHelper .createEmrClusterDefinitionEntity(namespaceEntity, EMR_CLUSTER_DEFINITION_NAME, getTestEmrClusterDefinitionConfigurationXml(EMR_CLUSTER_DEFINITION_XML_FILE_MINIMAL_CLASSPATH)); executeWithoutLogging(EmrClusterDefinitionServiceImpl.class, () -> { // Update an EMR cluster definition with the normal test XML configuration by passing namespace // and EMR cluster definition name with leading and trailing whitespace characters. EmrClusterDefinitionInformation updatedEmrClusterDefinition = emrClusterDefinitionService .updateEmrClusterDefinition(new EmrClusterDefinitionKey(addWhitespace(NAMESPACE), addWhitespace(EMR_CLUSTER_DEFINITION_NAME)), createEmrClusterDefinitionUpdateRequest(getTestEmrClusterDefinitionConfiguration(EMR_CLUSTER_DEFINITION_XML_FILE_WITH_CLASSPATH))); // Validate the returned object. validateEmrClusterDefinition(emrClusterDefinitionEntity.getId(), NAMESPACE, EMR_CLUSTER_DEFINITION_NAME, getTestEmrClusterDefinitionConfiguration(EMR_CLUSTER_DEFINITION_XML_FILE_WITH_CLASSPATH), updatedEmrClusterDefinition); }); }