Commit bc7243af authored by George Tziavas's avatar George Tziavas Committed by Kostis Trantzas
Browse files

Resolve "PM628: MeasurementCollectionJob Execution State not properly saved in the DB"

parent 6e9dd2cb
Loading
Loading
Loading
Loading
+0 −8
Original line number Original line Diff line number Diff line
@@ -3,25 +3,20 @@ package org.etsi.osl.tmf.pm628.api;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.apache.camel.LoggingLevel;
import org.apache.camel.LoggingLevel;
import org.apache.camel.ProducerTemplate;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.model.dataformat.JsonLibrary;
import org.apache.camel.model.dataformat.JsonLibrary;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.commons.logging.LogFactory;
import org.etsi.osl.centrallog.client.CentralLogger;
import org.etsi.osl.centrallog.client.CentralLogger;
import org.etsi.osl.tmf.pm628.model.ExecutionStateType;
import org.etsi.osl.tmf.pm628.model.MeasurementCollectionJobFVO;
import org.etsi.osl.tmf.pm628.model.MeasurementCollectionJobFVO;
import org.etsi.osl.tmf.pm628.model.MeasurementCollectionJobMVO;
import org.etsi.osl.tmf.pm628.model.MeasurementCollectionJobMVO;
import org.etsi.osl.tmf.pm628.reposervices.MeasurementCollectionJobService;
import org.etsi.osl.tmf.pm628.reposervices.MeasurementCollectionJobService;
import org.etsi.osl.tmf.pm628.api.MeasurementCollectionJobApiRouteBuilder;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Configuration;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Component;


import java.io.IOException;
import java.io.IOException;
import java.util.List;
import java.util.Map;


@Configuration
@Configuration
@Component
@Component
@@ -47,9 +42,6 @@ public class MeasurementCollectionJobApiRouteBuilder extends RouteBuilder {
    @Value("${PM_MEASUREMENT_COLLECTION_JOB_GET_INPROGRESS_OR_PENDING}")
    @Value("${PM_MEASUREMENT_COLLECTION_JOB_GET_INPROGRESS_OR_PENDING}")
    private String PM_MEASUREMENT_COLLECTION_JOB_GET_INPROGRESS_OR_PENDING;
    private String PM_MEASUREMENT_COLLECTION_JOB_GET_INPROGRESS_OR_PENDING;


    @Autowired
    private ProducerTemplate template;

    @Autowired
    @Autowired
    MeasurementCollectionJobService measurementCollectionJobService;
    MeasurementCollectionJobService measurementCollectionJobService;


+35 −0
Original line number Original line Diff line number Diff line
package org.etsi.osl.services.api.pm628;

import com.fasterxml.jackson.databind.ObjectMapper;
import org.etsi.osl.tmf.pm628.model.ExecutionStateType;
import org.etsi.osl.tmf.pm628.model.ManagementJobMVO;
import org.junit.jupiter.api.Test;

import static org.junit.jupiter.api.Assertions.*;

class ManagementJobMVOTest {

    private final ObjectMapper objectMapper = new ObjectMapper();

    @Test
    void testToStringShowsExecutionState() {
        ManagementJobMVO job = new ManagementJobMVO("ManagementJob");
        job.setExecutionState(ExecutionStateType.ACKNOWLEDGED);

        String str = job.toString();
        // executionState is not included in the default toString, so this will fail unless you add it to the toString method
        assertTrue(str.contains("executionState: acknowledged"), "Default toString does not show executionState");
    }

    @Test
    void testSerializationDeserialization() throws Exception {
        ManagementJobMVO job = new ManagementJobMVO("ManagementJob");
        job.setExecutionState(ExecutionStateType.ACKNOWLEDGED);

        String json = objectMapper.writeValueAsString(job);
        ManagementJobMVO deserialized = objectMapper.readValue(json, ManagementJobMVO.class);

        assertEquals(job, deserialized);
        assertEquals(ExecutionStateType.ACKNOWLEDGED, deserialized.getExecutionState());
    }
}
 No newline at end of file
+48 −0
Original line number Original line Diff line number Diff line
package org.etsi.osl.services.api.pm628;

import com.fasterxml.jackson.databind.ObjectMapper;
import org.etsi.osl.tmf.pm628.model.*;
import org.junit.jupiter.api.Test;

import java.util.Collections;

import static org.junit.jupiter.api.Assertions.*;

class MeasurementCollectionJobMVOTest {

    private final ObjectMapper objectMapper = new ObjectMapper();

    @Test
    void testToString() {
        MeasurementCollectionJobMVO job = new MeasurementCollectionJobMVO("MeasurementCollectionJob")
                .outputFormat("JSON")
                .jobOnDemand(true);
        job.setExecutionState(ExecutionStateType.ACKNOWLEDGED);

        String str = job.toString();
        assertTrue(str.contains("outputFormat: JSON"));
        assertTrue(str.contains("jobOnDemand: true"));
        assertTrue(str.contains("executionState: acknowledged"));
        assertTrue(str.contains("class MeasurementCollectionJobMVO"));
    }

    @Test
    void testSerializationDeserialization() throws Exception {
        MeasurementCollectionJobMVO job = new MeasurementCollectionJobMVO("MeasurementCollectionJob")
                .outputFormat("JSON")
                .jobOnDemand(false);

        // Set a nested object for better coverage
        job.setReportingPeriod(ReportingPeriod.R_1H);
        job.setExecutionState(ExecutionStateType.ACKNOWLEDGED);

        String json = objectMapper.writeValueAsString(job);
        MeasurementCollectionJobMVO deserialized = objectMapper.readValue(json, MeasurementCollectionJobMVO.class);

        assertEquals(job, deserialized);
        assertEquals("JSON", deserialized.getOutputFormat());
        assertFalse(deserialized.getJobOnDemand());
        assertNotNull(deserialized.getReportingPeriod());
        assertEquals(ExecutionStateType.ACKNOWLEDGED, deserialized.getExecutionState());
    }
}
 No newline at end of file
+51 −0
Original line number Original line Diff line number Diff line
package org.etsi.osl.services.api.pm628;

import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.PropertyAccessor;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.jsontype.BasicPolymorphicTypeValidator;
import org.etsi.osl.tmf.pm628.model.MeasurementCollectionJob;
import org.junit.jupiter.api.Test;

import java.util.ArrayList;
import java.util.List;
import static org.junit.jupiter.api.Assertions.assertEquals;

public class SerializationTest {

    @Test
    public void testJsonArraySerialization() throws Exception {
        ObjectMapper objectMapper = new ObjectMapper();

        // Create a list of objects to serialize
        MeasurementCollectionJob job1 = new MeasurementCollectionJob("JobType1").outputFormat("JSON");
        job1.setType("MeasurementCollectionJob");
        MeasurementCollectionJob job2 = new MeasurementCollectionJob("JobType2").outputFormat("JSON");
        job2.setType("MeasurementCollectionJob");
        String job1Str = objectMapper.writeValueAsString(job1);
        System.out.println(job1Str);
//        List<MeasurementCollectionJob> jobs = List.of(job1, job2);
        List<MeasurementCollectionJob> jobs = new ArrayList<>();
        jobs.add(job1);
        jobs.add(job2);

        // Serialize the list to JSON
        objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
        objectMapper.setVisibility(PropertyAccessor.FIELD, JsonAutoDetect.Visibility.ANY);

        String jsonArray = objectMapper.writeValueAsString(jobs);
        System.out.println(jsonArray);

        // Deserialize the JSON back to a list
        List<MeasurementCollectionJob> deserializedJobs = objectMapper.readValue(
                jsonArray,
                objectMapper.getTypeFactory().constructCollectionType(List.class, MeasurementCollectionJob.class)
        );

        // Assert the deserialized list matches the original
        assertEquals(jobs.size(), deserializedJobs.size());
        assertEquals(jobs.get(0).getOutputFormat(), deserializedJobs.get(0).getOutputFormat());
        assertEquals(jobs.get(1).getOutputFormat(), deserializedJobs.get(1).getOutputFormat());
    }
}
 No newline at end of file