Skip to content
Snippets Groups Projects
Commit 7a67d8b1 authored by George Tziavas's avatar George Tziavas
Browse files

modified: pom.xml

	modified:   src/main/java/org/etsi/osl/metrico/model/Job.java
	modified:   src/main/java/org/etsi/osl/metrico/services/JobService.java
	new file:   src/test/java/org/etsi/osl/metrico/model/JobTest.java
	new file:   src/test/java/org/etsi/osl/metrico/services/JobServiceTest.java
	new file:   src/test/resources/application.yml
parent 32fc3509
No related branches found
No related tags found
2 merge requests!5MR for Release 2024Q4,!1Creating first version of metrico
......@@ -176,78 +176,38 @@
<version>${mysql-connector.version}</version>
</dependency>
<!-- Testing -->
<!-- <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- Testing -->
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<artifactId>junit-jupiter-api</artifactId>
<version>5.10.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.platform</groupId>
<artifactId>junit-platform-commons</artifactId>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
<version>5.7.0</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.platform</groupId>
<artifactId>junit-platform-runner</artifactId>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.activemq</groupId>
<artifactId>activemq-broker</artifactId>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-test-autoconfigure</artifactId>
<version>3.2.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>javax.annotation</groupId>
<artifactId>javax.annotation-api</artifactId>
<version>1.3.2</version>
</dependency>
<dependency>
<groupId>io.swagger.core.v3</groupId>
<artifactId>swagger-annotations</artifactId>
<version>2.1.11</version>
</dependency>
<dependency>
<groupId>jakarta.validation</groupId>
<artifactId>jakarta.validation-api</artifactId>
<version>3.0.0</version>
</dependency>
<dependency>
<groupId>org.openapitools</groupId>
<artifactId>jackson-databind-nullable</artifactId>
<version>0.2.1</version>
</dependency>
<dependency>
<groupId>javax.jms</groupId>
<artifactId>javax.jms-api</artifactId>
<version>2.0.1</version>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>6.1.3</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.15.1</version>
<scope>test</scope>
</dependency> -->
<!-- <dependency>-->
<!-- <groupId>org.springframework</groupId>-->
<!-- <artifactId>spring-web</artifactId>-->
<!-- <version>6.1.5</version>-->
<!-- </dependency>-->
</dependencies>
<build>
......
......@@ -4,19 +4,13 @@ import com.fasterxml.jackson.annotation.JsonIgnore;
import jakarta.persistence.*;
import lombok.Getter;
import lombok.Setter;
import org.etsi.osl.metrico.reposervices.JobRepoService;
import org.etsi.osl.tmf.pm628.model.ExecutionStateType;
import org.hibernate.annotations.GenericGenerator;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.format.annotation.DateTimeFormat;
import java.time.Duration;
import java.time.OffsetDateTime;
import java.util.Map;
import java.util.UUID;
import java.util.concurrent.*;
import java.util.concurrent.ScheduledFuture;
@Getter
@Setter
......@@ -84,4 +78,20 @@ public class Job{
this(startDateTime, endDateTime);
this.executionInterval = executionInterval;
}
@Override
public String toString() {
return "Job{" +
"uuid=" + uuid +
", state=" + state +
", startDateTime=" + startDateTime +
", endDateTime=" + endDateTime +
", executionInterval=" + executionInterval +
", dataAccessEndPointRef=" + dataAccessEndPointRef +
", scheduleDefinitionRef=" + scheduleDefinitionRef +
", measurementCollectionJobRef=" + measurementCollectionJobRef +
", deleted=" + deleted +
'}';
}
}
......@@ -19,6 +19,7 @@ import java.util.concurrent.*;
public class JobService {
private static final Logger logger = LoggerFactory.getLogger(JobService.class);
@Getter
private static final Map<UUID, Job> jobs = new ConcurrentHashMap<>();
@Getter
......@@ -52,7 +53,6 @@ public class JobService {
public Job startJob(Runnable task, OffsetDateTime startDateTime, OffsetDateTime endDateTime, Integer executionInterval) {
Job job = new Job(startDateTime, endDateTime, executionInterval);
long initialDelay = Duration.between(OffsetDateTime.now(), startDateTime).getSeconds();
job.setState(ExecutionStateType.PENDING);
try{
job = jobRepoService.createAndSaveJob();
} catch (NullPointerException e){
......
package org.etsi.osl.metrico.model;
import org.etsi.osl.tmf.pm628.model.ExecutionStateType;
import org.junit.jupiter.api.Test;
import java.time.OffsetDateTime;
import java.time.temporal.ChronoUnit;
import java.util.UUID;
import static org.junit.jupiter.api.Assertions.*;
class JobTest {
@Test
void testDefaultConstructor() {
Job job = new Job();
assertEquals(ExecutionStateType.PENDING, job.getState());
assertEquals(10, job.getExecutionInterval());
assertNotNull(job.getStartDateTime());
assertTrue(ChronoUnit.SECONDS.between(OffsetDateTime.now(), job.getStartDateTime()) <= 1);
}
@Test
void testConstructorWithStopDateTime() {
OffsetDateTime stopDateTime = OffsetDateTime.now().plusDays(1);
Job job = new Job(stopDateTime);
assertEquals(stopDateTime, job.getEndDateTime());
assertEquals(ExecutionStateType.PENDING, job.getState());
assertEquals(10, job.getExecutionInterval());
}
@Test
void testConstructorWithStartAndStopDateTime() {
OffsetDateTime startDateTime = OffsetDateTime.now();
OffsetDateTime stopDateTime = startDateTime.plusDays(1);
Job job = new Job(startDateTime, stopDateTime);
assertEquals(startDateTime, job.getStartDateTime());
assertEquals(stopDateTime, job.getEndDateTime());
assertEquals(ExecutionStateType.PENDING, job.getState());
assertEquals(10, job.getExecutionInterval());
}
@Test
void testConstructorWithAllParams() {
OffsetDateTime startDateTime = OffsetDateTime.now();
OffsetDateTime stopDateTime = startDateTime.plusDays(1);
Integer executionInterval = 15;
Job job = new Job(startDateTime, stopDateTime, executionInterval);
assertEquals(startDateTime, job.getStartDateTime());
assertEquals(stopDateTime, job.getEndDateTime());
assertEquals(executionInterval, job.getExecutionInterval());
assertEquals(ExecutionStateType.PENDING, job.getState());
}
@Test
void testToString() {
Job job = new Job();
job.setUuid(UUID.fromString("123e4567-e89b-12d3-a456-426614174000"));
job.setState(ExecutionStateType.PENDING);
job.setStartDateTime(OffsetDateTime.parse("2023-01-01T10:15:30+01:00"));
job.setEndDateTime(OffsetDateTime.parse("2023-01-02T10:15:30+01:00"));
job.setExecutionInterval(10);
job.setDataAccessEndPointRef(UUID.fromString("123e4567-e89b-12d3-a456-426614174001"));
job.setScheduleDefinitionRef(UUID.fromString("123e4567-e89b-12d3-a456-426614174002"));
job.setMeasurementCollectionJobRef(UUID.fromString("123e4567-e89b-12d3-a456-426614174003"));
job.setDeleted(false);
String expected = "Job{uuid=123e4567-e89b-12d3-a456-426614174000, state=pending, startDateTime=2023-01-01T10:15:30+01:00, endDateTime=2023-01-02T10:15:30+01:00, executionInterval=10, dataAccessEndPointRef=123e4567-e89b-12d3-a456-426614174001, scheduleDefinitionRef=123e4567-e89b-12d3-a456-426614174002, measurementCollectionJobRef=123e4567-e89b-12d3-a456-426614174003, deleted=false}";
assertEquals(expected, job.toString());
}
}
\ No newline at end of file
package org.etsi.osl.metrico.services;
import org.etsi.osl.metrico.model.Job;
import org.etsi.osl.metrico.reposervices.JobRepoService;
import org.etsi.osl.tmf.pm628.model.ExecutionStateType;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.slf4j.Logger;
import java.time.OffsetDateTime;
import java.util.UUID;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.TimeUnit;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.*;
class JobServiceTest {
@Mock
private JobRepoService jobRepoService;
@Mock
private ScheduledExecutorService scheduler;
@Mock
private Logger logger;
private JobService jobService;
@BeforeEach
void setUp() {
MockitoAnnotations.openMocks(this);
jobService = new JobService(jobRepoService);
}
@Test
void testStartJob_Success() {
// Initialize the job with specific parameters
OffsetDateTime startDateTime = OffsetDateTime.now().plusSeconds(5);
OffsetDateTime endDateTime = startDateTime.plusMinutes(10);
Integer executionInterval = 5;
Runnable task = () -> {};
Job expectedJob = new Job(startDateTime, endDateTime, executionInterval);
// Assert the initial state is PENDING
assertEquals(expectedJob.getState(), ExecutionStateType.PENDING);
// Set the UUID and state of the expected job after it has been saved to the db
expectedJob.setState(ExecutionStateType.INPROGRESS);
// Mock jobRepoService.createAndSaveJob() to return the expected Job
when(jobRepoService.createAndSaveJob()).thenReturn(expectedJob);
// // Mock scheduler.scheduleAtFixedRate() to not throw an exception
// ScheduledFuture<?> mockFuture = mock(ScheduledFuture.class);
// when(scheduler.scheduleAtFixedRate(any(Runnable.class), eq(5L), eq(5L), eq(TimeUnit.SECONDS)))
// .thenReturn(mockFuture);
// // Call jobService.startJob() with valid parameters
// Job resultJob = jobService.startJob(task, startDateTime, endDateTime, executionInterval);
//
// // Verify job state is INPROGRESS, and job is added to the jobs map
// assertEquals(ExecutionStateType.INPROGRESS, resultJob.getState());
// assertNotNull(JobService.getJobs().get(resultJob.getUuid()));
// assertEquals(expectedJob, JobService.getJobs().get(resultJob.getUuid()));
}
@Test
void testStartJob_NullPointerException() {
// Mock jobRepoService.createAndSaveJob() to throw NullPointerException
// Call jobService.startJob() with valid parameters
// Verify job state is FAILED
}
@Test
void testStartJob_RejectedExecutionException() {
// Mock scheduler.scheduleAtFixedRate() to throw RejectedExecutionException
// Call jobService.startJob() with valid parameters
// Verify job state is FAILED
}
@Test
void testStopJob_InProgress() {
// Add a job to the jobs map with state INPROGRESS
// Call JobService.stopJob() with the job's UUID
// Verify job state is CANCELLED
}
@Test
void testStopJob_AlreadyCompleted() {
// Add a job to the jobs map with state COMPLETED
// Call JobService.stopJob() with the job's UUID
// Verify job state remains COMPLETED
}
@Test
void testStopJob_DoesNotExist() {
// Call JobService.stopJob() with a non-existent job UUID
// Verify appropriate warning is logged
}
}
\ No newline at end of file
spring:
datasource:
url: jdbc:h2:mem:testdb
driverClassName: org.h2.Driver
username: sa
password: password
jpa:
database-platform: org.hibernate.dialect.H2Dialect
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment