Skip to content

Commit

Permalink
Update service policy support flavor name
Browse files Browse the repository at this point in the history
  • Loading branch information
baixinsui committed Jan 25, 2024
1 parent 5db24e5 commit d89a364
Show file tree
Hide file tree
Showing 4 changed files with 237 additions and 11 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,12 @@ public class ServicePolicyUpdateRequest {
@Schema(description = "The id of the policy.")
private UUID id;

/**
* The flavor name of the policy.
*/
@Schema(description = "The flavor name of the policy.")
private String flavorName;

/**
* The policy.
*/
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
class ServicePolicyUpdateRequestTest {

final UUID id = UUID.fromString("0ebfecbc-3907-45c7-b9c6-36d42ec0efa1");
final String flavorName = "flavorName";
final String policy = "policy";
final Boolean enabled = false;
private ServicePolicyUpdateRequest test;
Expand All @@ -18,13 +19,15 @@ class ServicePolicyUpdateRequestTest {
void setUp() {
test = new ServicePolicyUpdateRequest();
test.setEnabled(enabled);
test.setFlavorName(flavorName);
test.setPolicy(policy);
test.setId(id);
}

@Test
void testGetters() {
assertThat(test.getId()).isEqualTo(id);
assertThat(test.getFlavorName()).isEqualTo(flavorName);
assertThat(test.getPolicy()).isEqualTo(policy);
assertThat(test.getEnabled()).isEqualTo(enabled);
}
Expand Down Expand Up @@ -52,8 +55,9 @@ void testHashCode() {

@Test
void testToString() {
String result = String.format("ServicePolicyUpdateRequest(id=%s, policy=%s, enabled=%s)",
id, policy, enabled);
String result = String.format("ServicePolicyUpdateRequest(id=%s, flavorName=%s, "
+ "policy=%s, enabled=%s)",
id, flavorName, policy, enabled);
assertThat(test.toString()).isEqualTo(result);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -73,14 +73,7 @@ public ServicePolicy addServicePolicy(ServicePolicyCreateRequest createRequest)
ServiceTemplateEntity existingServiceTemplate =
getServiceTemplateEntity(createRequest.getServiceTemplateId());
if (StringUtils.isNotBlank(createRequest.getFlavorName())) {
boolean flavorExists = existingServiceTemplate.getOcl().getFlavors().stream()
.anyMatch(flavor -> flavor.getName().equals(createRequest.getFlavorName()));
if (!flavorExists) {
String errMsg = String.format(
"Flavor name %s is not valid for service template" + " with id %s.",
createRequest.getFlavorName(), existingServiceTemplate.getId());
throw new FlavorInvalidException(errMsg);
}
validFlavorName(createRequest.getFlavorName(), existingServiceTemplate);
}
policyManager.validatePolicy(createRequest.getPolicy());
ServicePolicyEntity newPolicy = conventToServicePolicyEntity(createRequest);
Expand Down Expand Up @@ -124,6 +117,18 @@ public ServicePolicy updateServicePolicy(ServicePolicyUpdateRequest updateReques
return conventToServicePolicy(updatedPolicy);
}


private void validFlavorName(String flavorName, ServiceTemplateEntity existingServiceTemplate) {
boolean flavorExists = existingServiceTemplate.getOcl().getFlavors().stream()
.anyMatch(flavor -> flavor.getName().equals(flavorName));
if (!flavorExists) {
String errMsg = String.format(
"Flavor name %s is not valid for service template" + " with id %s.", flavorName,
existingServiceTemplate.getId());
throw new FlavorInvalidException(errMsg);
}
}

/**
* Get details of the policy belonging to the registered service template.
*
Expand Down Expand Up @@ -215,10 +220,18 @@ private ServicePolicyEntity getServicePolicyToUpdate(ServicePolicyUpdateRequest
ServicePolicyEntity existingPolicy) {
ServicePolicyEntity policyToUpdate = new ServicePolicyEntity();
BeanUtils.copyProperties(existingPolicy, policyToUpdate);
boolean updateFlavorName =
!StringUtils.equals(updateRequest.getFlavorName(), existingPolicy.getFlavorName());
if (updateFlavorName) {
if (StringUtils.isNotBlank(updateRequest.getFlavorName())) {
validFlavorName(updateRequest.getFlavorName(), existingPolicy.getServiceTemplate());
}
}

boolean updatePolicy =
StringUtils.isNotBlank(updateRequest.getPolicy()) && !StringUtils.equals(
updateRequest.getPolicy(), existingPolicy.getPolicy());
if (updatePolicy) {
if (updateFlavorName || updatePolicy) {
policyManager.validatePolicy(updateRequest.getPolicy());
policyToUpdate.setPolicy(updateRequest.getPolicy());
checkIfServicePolicyIsDuplicate(policyToUpdate, existingPolicy.getServiceTemplate());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,9 @@
import org.eclipse.xpanse.modules.models.policy.servicepolicy.ServicePolicy;
import org.eclipse.xpanse.modules.models.policy.servicepolicy.ServicePolicyCreateRequest;
import org.eclipse.xpanse.modules.models.policy.servicepolicy.ServicePolicyUpdateRequest;
import org.eclipse.xpanse.modules.models.service.deploy.exceptions.FlavorInvalidException;
import org.eclipse.xpanse.modules.models.servicetemplate.Flavor;
import org.eclipse.xpanse.modules.models.servicetemplate.Ocl;
import org.eclipse.xpanse.modules.models.servicetemplate.exceptions.ServiceTemplateNotRegistered;
import org.eclipse.xpanse.modules.policy.PolicyManager;
import org.eclipse.xpanse.modules.policy.ServicePolicyManager;
Expand Down Expand Up @@ -174,6 +177,98 @@ void testAddServicePolicy() {
assertThat(result).isEqualTo(expectedResult);
}

@Test
void testAddServicePolicyWithFlavorName() {
final String newPolicy = "newPolicy";
final String flavorName = "flavor";
UUID newPolicyId = UUID.randomUUID();
// Setup
final ServicePolicyCreateRequest createRequest = new ServicePolicyCreateRequest();
createRequest.setServiceTemplateId(serviceTemplateId);
createRequest.setFlavorName(flavorName);
createRequest.setPolicy(newPolicy);
createRequest.setEnabled(false);

final ServicePolicy expectedResult = new ServicePolicy();
expectedResult.setId(newPolicyId);
expectedResult.setPolicy(newPolicy);
expectedResult.setFlavorName(flavorName);
expectedResult.setServiceTemplateId(serviceTemplateId);
expectedResult.setEnabled(false);
expectedResult.setCreateTime(createTime);

// Configure DatabaseServiceTemplateStorage.getServiceTemplateById(...).
final ServiceTemplateEntity serviceTemplateEntity = new ServiceTemplateEntity();
serviceTemplateEntity.setId(serviceTemplateId);
serviceTemplateEntity.setNamespace(namespace);
Flavor flavor = new Flavor();
flavor.setName(flavorName);
final Ocl ocl = new Ocl();
ocl.setFlavors(List.of(flavor));
serviceTemplateEntity.setOcl(ocl);
final ServicePolicyEntity existingPolicy = new ServicePolicyEntity();
existingPolicy.setId(policyId);
existingPolicy.setPolicy("policy");
existingPolicy.setEnabled(false);
existingPolicy.setServiceTemplate(serviceTemplateEntity);
serviceTemplateEntity.setServicePolicyList(List.of(existingPolicy));
when(mockServiceTemplateStorage.getServiceTemplateById(
serviceTemplateId))
.thenReturn(serviceTemplateEntity);

when(mockIdentityProviderManager.getUserNamespace()).thenReturn(Optional.of(namespace));

// Configure DatabaseServicePolicyStorage.storeAndFlush(...).
final ServicePolicyEntity newServicePolicy = new ServicePolicyEntity();
newServicePolicy.setId(newPolicyId);
newServicePolicy.setFlavorName(flavorName);
newServicePolicy.setPolicy(newPolicy);
newServicePolicy.setEnabled(false);
newServicePolicy.setCreateTime(createTime);
newServicePolicy.setServiceTemplate(serviceTemplateEntity);

when(mockServicePolicyStorage.storeAndFlush(any()))
.thenReturn(newServicePolicy);

// Run the test
final ServicePolicy result = servicePolicyManagerUnderTest.addServicePolicy(createRequest);

// Verify the results
assertThat(result).isEqualTo(expectedResult);
}

@Test
void testAddServicePolicyWithFlavorName_ThrowsFlavorInvalidException() {
final String newPolicy = "newPolicy";
final String flavorName = "error_flavor";
// Setup
final ServicePolicyCreateRequest createRequest = new ServicePolicyCreateRequest();
createRequest.setServiceTemplateId(serviceTemplateId);
createRequest.setFlavorName(flavorName);
createRequest.setPolicy(newPolicy);
createRequest.setEnabled(false);

// Configure DatabaseServiceTemplateStorage.getServiceTemplateById(...).
final ServiceTemplateEntity serviceTemplateEntity = new ServiceTemplateEntity();
serviceTemplateEntity.setId(serviceTemplateId);
serviceTemplateEntity.setNamespace(namespace);
Flavor flavor = new Flavor();
flavor.setName("flavor");
final Ocl ocl = new Ocl();
ocl.setFlavors(List.of(flavor));
serviceTemplateEntity.setOcl(ocl);

when(mockServiceTemplateStorage.getServiceTemplateById(
serviceTemplateId))
.thenReturn(serviceTemplateEntity);

when(mockIdentityProviderManager.getUserNamespace()).thenReturn(Optional.of(namespace));

assertThatThrownBy(
() -> servicePolicyManagerUnderTest.addServicePolicy(createRequest))
.isInstanceOf(FlavorInvalidException.class);
}

@Test
void testAddServicePolicy_ThrowsServiceTemplateNotRegisteredException() {
// Setup
Expand Down Expand Up @@ -328,6 +423,114 @@ void testUpdateServicePolicy() {
assertThat(result).isEqualTo(expectedResult);
}

@Test
void testUpdateServicePolicyWithFlavorName() {
final String updatePolicy = "updatePolicy";
final String flavorName = "updateFlavor";
// Setup
final ServicePolicyUpdateRequest updateRequest = new ServicePolicyUpdateRequest();
updateRequest.setId(policyId);
updateRequest.setFlavorName(flavorName);
updateRequest.setPolicy(updatePolicy);
updateRequest.setEnabled(true);

final ServicePolicy expectedResult = new ServicePolicy();
expectedResult.setId(policyId);
expectedResult.setFlavorName(flavorName);
expectedResult.setPolicy(updatePolicy);
expectedResult.setServiceTemplateId(serviceTemplateId);
expectedResult.setEnabled(true);

// Configure DatabaseServicePolicyStorage.findPolicyById(...).
final ServicePolicyEntity existingPolicy = new ServicePolicyEntity();
existingPolicy.setId(policyId);
existingPolicy.setFlavorName("flavor");
existingPolicy.setPolicy("policy");
existingPolicy.setEnabled(false);
final ServiceTemplateEntity existingTemplate = new ServiceTemplateEntity();
existingTemplate.setId(serviceTemplateId);
existingTemplate.setNamespace(namespace);
Flavor flavor = new Flavor();
flavor.setName(flavorName);
Flavor flavor1 = new Flavor();
flavor1.setName("flavor");
final Ocl ocl = new Ocl();
ocl.setFlavors(List.of(flavor, flavor1));
existingTemplate.setOcl(ocl);
existingTemplate.setServicePolicyList(List.of(existingPolicy));
existingPolicy.setServiceTemplate(existingTemplate);

when(mockServicePolicyStorage.findPolicyById(policyId)).thenReturn(existingPolicy);
when(mockIdentityProviderManager.getUserNamespace()).thenReturn(Optional.of(namespace));

// Configure DatabaseServicePolicyStorage.storeAndFlush(...).
final ServicePolicyEntity servicePolicyEntity = new ServicePolicyEntity();
servicePolicyEntity.setId(policyId);
servicePolicyEntity.setFlavorName(flavorName);
servicePolicyEntity.setPolicy(updatePolicy);
servicePolicyEntity.setEnabled(true);
final ServiceTemplateEntity serviceTemplate = new ServiceTemplateEntity();
serviceTemplate.setId(serviceTemplateId);
serviceTemplate.setNamespace(namespace);
serviceTemplate.setOcl(ocl);
serviceTemplate.setServicePolicyList(List.of(servicePolicyEntity));
servicePolicyEntity.setServiceTemplate(serviceTemplate);

when(mockServicePolicyStorage.storeAndFlush(any())).thenReturn(servicePolicyEntity);

// Run the test
final ServicePolicy result =
servicePolicyManagerUnderTest.updateServicePolicy(updateRequest);

// Verify the results
assertThat(result).isEqualTo(expectedResult);
}


@Test
void testUpdateServicePolicyWithFlavorName_ThrowsFlavorInvalidException() {
final String updatePolicy = "updatePolicy";
final String flavorName = "updateFlavor";
// Setup
final ServicePolicyUpdateRequest updateRequest = new ServicePolicyUpdateRequest();
updateRequest.setId(policyId);
updateRequest.setFlavorName(flavorName);
updateRequest.setPolicy(updatePolicy);
updateRequest.setEnabled(true);

final ServicePolicy expectedResult = new ServicePolicy();
expectedResult.setId(policyId);
expectedResult.setFlavorName(flavorName);
expectedResult.setPolicy(updatePolicy);
expectedResult.setServiceTemplateId(serviceTemplateId);
expectedResult.setEnabled(true);

// Configure DatabaseServicePolicyStorage.findPolicyById(...).
final ServicePolicyEntity existingPolicy = new ServicePolicyEntity();
existingPolicy.setId(policyId);
existingPolicy.setFlavorName("flavor");
existingPolicy.setPolicy("policy");
existingPolicy.setEnabled(false);
final ServiceTemplateEntity existingTemplate = new ServiceTemplateEntity();
existingTemplate.setId(serviceTemplateId);
existingTemplate.setNamespace(namespace);
Flavor flavor = new Flavor();
flavor.setName("flavor");
final Ocl ocl = new Ocl();
ocl.setFlavors(List.of(flavor));
existingTemplate.setOcl(ocl);
existingTemplate.setServicePolicyList(List.of(existingPolicy));
existingPolicy.setServiceTemplate(existingTemplate);

when(mockServicePolicyStorage.findPolicyById(policyId)).thenReturn(existingPolicy);
when(mockIdentityProviderManager.getUserNamespace()).thenReturn(Optional.of(namespace));


assertThatThrownBy(
() -> servicePolicyManagerUnderTest.updateServicePolicy(updateRequest))
.isInstanceOf(FlavorInvalidException.class);
}

@Test
void testUpdateServicePolicy_ThrowsPolicyNotFoundExceptionException() {
final String updatePolicy = "updatePolicy";
Expand Down

0 comments on commit d89a364

Please sign in to comment.