Commit 33c883a4 authored by Kostis Trantzas's avatar Kostis Trantzas
Browse files

Merge branch '16-update-related-resource-based-on-new-resource-state-approach' into 'develop'

fix for #16

See merge request !17
parents 2efccadb df64026b
Loading
Loading
Loading
Loading
Loading
+5 −0
Changes for src/main/java/org/etsi/osl/metrico/MetricoCommonMethods.java: 5 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -192,8 +192,13 @@ public class MetricoCommonMethods extends RouteBuilder {

            if (givenMCJ.getExecutionState().equals(ExecutionStateType.FAILED)) {
                rup.setResourceStatus(ResourceStatusType.SUSPENDED);
                // In service but not working: the supported service goes INACTIVE, not TERMINATED.
                rup.setOperationalState(ResourceOperationalStateType.DISABLE);
                rup.setAdministrativeState(ResourceAdministrativeStateType.UNLOCKED);
            } else {
                rup.setResourceStatus(ResourceStatusType.AVAILABLE);
                rup.setOperationalState(ResourceOperationalStateType.ENABLE);
                rup.setAdministrativeState(ResourceAdministrativeStateType.UNLOCKED);
            }
            updateResourceById(resRef.getId(), rup);
        } else {
+66 −2
Changes for src/test/java/org/etsi/osl/metrico/MetricoCommonMethodsTest.java: 66 added lines, 2 removed lines.
Original line number Diff line number Diff line
@@ -8,15 +8,22 @@ import org.apache.camel.ProducerTemplate;
import org.apache.camel.builder.RouteBuilder;
import org.etsi.osl.tmf.common.model.ELifecycle;
import org.etsi.osl.tmf.common.model.EValueType;
import org.etsi.osl.tmf.common.model.service.ResourceRef;
import org.etsi.osl.tmf.pm628.model.*;
import org.etsi.osl.tmf.rcm634.model.LogicalResourceSpecification;
import org.etsi.osl.tmf.rcm634.model.ResourceSpecificationCharacteristic;
import org.etsi.osl.tmf.ri639.model.LogicalResource;
import org.etsi.osl.tmf.ri639.model.ResourceAdministrativeStateType;
import org.etsi.osl.tmf.ri639.model.ResourceOperationalStateType;
import org.etsi.osl.tmf.ri639.model.ResourceStatusType;
import org.etsi.osl.tmf.ri639.model.ResourceUpdate;
import org.etsi.osl.tmf.sim638.model.Service;
import org.etsi.osl.tmf.sim638.model.ServiceUpdate;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.TestInstance;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.EnumSource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.context.TestConfiguration;
@@ -49,6 +56,11 @@ class MetricoCommonMethodsTest {
      static String OSL_METRICO_RSPEC_VERSION = "1.0.0";
      static String OSL_METRICO_RSPEC_DESCRIPTION = "This Specification is used to describe a generic METRICO job resource";
      static String OSL_METRICO_RSPEC_TYPE = "LogicalResourceSpecification";
      static String MOCK_SUPPORTING_RESOURCE_ID = "mock-supporting-resource-id";

    // Captured by mockUpdateResource so tests can inspect what was sent to the catalog
    static volatile String lastUpdatedResourceId;
    static volatile ResourceUpdate lastResourceUpdate;

    @TestConfiguration
    static class CamelTestRoutesConfig {
@@ -147,6 +159,53 @@ class MetricoCommonMethodsTest {
        assertEquals(Granularity.G_1H, result.getGranularity());
    }

    @BeforeEach
    void resetCapturedResourceUpdate() {
        lastUpdatedResourceId = null;
        lastResourceUpdate = null;
    }

    @Test
    void testUpdateRelatedResourceFailedJobDeclaresResourceDown() {
        MeasurementCollectionJob mcj = defaultMeasurementCollectionJob();
        mcj.setProducingApplicationId("mock-service-id");
        mcj.setExecutionState(ExecutionStateType.FAILED);

        methods.updateRelatedResource(mcj);

        assertEquals(MOCK_SUPPORTING_RESOURCE_ID, lastUpdatedResourceId);
        assertNotNull(lastResourceUpdate);
        // DISABLE + UNLOCKED: in service but not working, so the supported service goes INACTIVE
        assertEquals(ResourceOperationalStateType.DISABLE, lastResourceUpdate.getOperationalState());
        assertEquals(ResourceAdministrativeStateType.UNLOCKED, lastResourceUpdate.getAdministrativeState());
        assertEquals(ResourceStatusType.SUSPENDED, lastResourceUpdate.getResourceStatus());
        assertMcjRefCharacteristic(mcj, lastResourceUpdate);
    }

    @ParameterizedTest
    @EnumSource(value = ExecutionStateType.class, mode = EnumSource.Mode.EXCLUDE, names = "FAILED")
    void testUpdateRelatedResourceNonFailedJobDeclaresResourceUp(ExecutionStateType executionState) {
        MeasurementCollectionJob mcj = defaultMeasurementCollectionJob();
        mcj.setProducingApplicationId("mock-service-id");
        mcj.setExecutionState(executionState);

        methods.updateRelatedResource(mcj);

        assertEquals(MOCK_SUPPORTING_RESOURCE_ID, lastUpdatedResourceId);
        assertNotNull(lastResourceUpdate);
        // ENABLE + UNLOCKED: the resource is up, so the supported service goes ACTIVE
        assertEquals(ResourceOperationalStateType.ENABLE, lastResourceUpdate.getOperationalState());
        assertEquals(ResourceAdministrativeStateType.UNLOCKED, lastResourceUpdate.getAdministrativeState());
        assertEquals(ResourceStatusType.AVAILABLE, lastResourceUpdate.getResourceStatus());
        assertMcjRefCharacteristic(mcj, lastResourceUpdate);
    }

    private static void assertMcjRefCharacteristic(MeasurementCollectionJob mcj, ResourceUpdate rup) {
        assertNotNull(rup.getResourceCharacteristic());
        assertTrue(rup.getResourceCharacteristic().stream()
                .anyMatch(c -> "_MT_MCJ_REF".equals(c.getName()) && mcj.getUuid().equals(c.getValue().getValue())));
    }

// Bellow here are the mocked methods for the test class
    public static String mockUpdateMeasurementCollectionJob(String uuid, String mcjMVOString) {
        MeasurementCollectionJob mcj = defaultMeasurementCollectionJob();
@@ -204,7 +263,9 @@ class MetricoCommonMethodsTest {
            Service service = new Service();
            service.setUuid("mock-service-id");
            service.setName("Mock Service");
            // Set other fields as needed for your tests
            ResourceRef supportingResource = new ResourceRef();
            supportingResource.setId(MOCK_SUPPORTING_RESOURCE_ID);
            service.addSupportingResourceItem(supportingResource);

            ObjectMapper mapper = new ObjectMapper();
            return mapper.writeValueAsString(service);
@@ -241,8 +302,11 @@ class MetricoCommonMethodsTest {
        }
    }

    public static String mockUpdateResource(String resourceId, ResourceUpdate body, Boolean triggerServiceActionQueue) {
    public static String mockUpdateResource(String resourceId, String body, Boolean triggerServiceActionQueue) {
        try {
            lastUpdatedResourceId = resourceId;
            lastResourceUpdate = JsonUtil.toJsonObj(body, ResourceUpdate.class);

            LogicalResource resource = new LogicalResource();
            resource.setUuid("mock-service-id");
            resource.setName("Updated Mock Resource");