1919import com .iexec .common .replicate .ComputeLogs ;
2020import org .junit .jupiter .api .BeforeEach ;
2121import org .junit .jupiter .api .Test ;
22- import org .mockito .ArgumentCaptor ;
23- import org .mockito .InjectMocks ;
24- import org .mockito .Mock ;
25- import org .mockito .MockitoAnnotations ;
22+ import org .springframework .beans .factory .annotation .Autowired ;
23+ import org .springframework .boot .test .autoconfigure .data .mongo .DataMongoTest ;
24+ import org .springframework .test .context .DynamicPropertyRegistry ;
25+ import org .springframework .test .context .DynamicPropertySource ;
26+ import org .testcontainers .containers .MongoDBContainer ;
27+ import org .testcontainers .junit .jupiter .Container ;
28+ import org .testcontainers .junit .jupiter .Testcontainers ;
29+ import org .testcontainers .utility .DockerImageName ;
2630
2731import java .util .Collections ;
2832import java .util .List ;
3135import static com .iexec .commons .poco .utils .TestUtils .CHAIN_TASK_ID ;
3236import static com .iexec .commons .poco .utils .TestUtils .WORKER_ADDRESS ;
3337import static org .assertj .core .api .Assertions .assertThat ;
34- import static org .mockito .Mockito .* ;
38+ import static org .mockito .Mockito .spy ;
3539
40+ @ DataMongoTest
41+ @ Testcontainers
3642class TaskLogsServiceTests {
3743
3844 private static final String STDOUT = "This is an stdout string" ;
3945 private static final String STDERR = "This is an stderr string" ;
46+ private static final ComputeLogs COMPUTE_LOGS = new ComputeLogs (WORKER_ADDRESS , STDOUT , STDERR );
4047
41- @ Mock
42- private TaskLogsRepository taskLogsRepository ;
43- @ InjectMocks
44- private TaskLogsService taskLogsService ;
48+ @ Container
49+ private static final MongoDBContainer mongoDBContainer = new MongoDBContainer (DockerImageName .parse (System .getProperty ("mongo.image" )));
50+
51+ @ DynamicPropertySource
52+ static void registerProperties (DynamicPropertyRegistry registry ) {
53+ registry .add ("spring.data.mongodb.host" , mongoDBContainer ::getHost );
54+ registry .add ("spring.data.mongodb.port" , () -> mongoDBContainer .getMappedPort (27017 ));
55+ }
56+
57+ private final TaskLogsRepository taskLogsRepository ;
58+ private final TaskLogsService taskLogsService ;
59+
60+ @ Autowired
61+ public TaskLogsServiceTests (TaskLogsRepository taskLogsRepository ) {
62+ this .taskLogsRepository = taskLogsRepository ;
63+ this .taskLogsService = new TaskLogsService (taskLogsRepository );
64+ spy (taskLogsRepository );
65+ }
4566
4667 @ BeforeEach
4768 void init () {
48- MockitoAnnotations . openMocks ( this );
69+ taskLogsRepository . deleteAll ( );
4970 }
5071
5172 //region addComputeLogs
5273 @ Test
5374 void shouldAddComputeLogs () {
54- final ComputeLogs computeLogs = new ComputeLogs (WORKER_ADDRESS , STDOUT , STDERR );
55-
56- ArgumentCaptor <TaskLogs > argumentCaptor = ArgumentCaptor .forClass (TaskLogs .class );
57- taskLogsService .addComputeLogs (CHAIN_TASK_ID , computeLogs );
58- verify (taskLogsRepository , times (1 )).save (argumentCaptor .capture ());
59- TaskLogs capturedEvent = argumentCaptor .getAllValues ().get (0 );
75+ taskLogsService .addComputeLogs (CHAIN_TASK_ID , COMPUTE_LOGS );
76+ assertThat (taskLogsRepository .count ()).isOne ();
77+ TaskLogs capturedEvent = taskLogsRepository .findOneByChainTaskId (CHAIN_TASK_ID ).orElseThrow ();
6078 assertThat (capturedEvent .getComputeLogsList ().get (0 ).getStdout ()).isEqualTo (STDOUT );
6179 assertThat (capturedEvent .getComputeLogsList ().get (0 ).getStderr ()).isEqualTo (STDERR );
6280 assertThat (capturedEvent .getComputeLogsList ().get (0 ).getWalletAddress ()).isEqualTo (WORKER_ADDRESS );
@@ -65,37 +83,57 @@ void shouldAddComputeLogs() {
6583 @ Test
6684 void shouldNotAddComputeLogsSinceNull () {
6785 taskLogsService .addComputeLogs (CHAIN_TASK_ID , null );
68- verifyNoInteractions (taskLogsRepository );
86+ assertThat (taskLogsRepository . count ()). isZero ( );
6987 }
7088
7189 @ Test
7290 void shouldNotAddComputeLogsSinceLogsAlreadyKnown () {
73- final ComputeLogs computeLogs = new ComputeLogs (WORKER_ADDRESS , STDOUT , STDERR );
7491 final TaskLogs taskLogs = TaskLogs .builder ()
7592 .chainTaskId (CHAIN_TASK_ID )
76- .computeLogsList (Collections .singletonList (computeLogs ))
93+ .computeLogsList (Collections .singletonList (COMPUTE_LOGS ))
7794 .build ();
95+ taskLogsRepository .save (taskLogs );
96+ assertThat (taskLogs .containsWalletAddress (WORKER_ADDRESS )).isTrue ();
97+ taskLogsService .addComputeLogs (CHAIN_TASK_ID , COMPUTE_LOGS );
98+ assertThat (taskLogsRepository .count ()).isOne ();
99+ assertThat (taskLogsRepository .findOneByChainTaskId (CHAIN_TASK_ID )).contains (taskLogs );
100+ }
101+ //endregion
78102
79- when (taskLogsService .getTaskLogs (CHAIN_TASK_ID ))
80- .thenReturn (Optional .of (taskLogs ));
81-
82- taskLogsService .addComputeLogs (CHAIN_TASK_ID , computeLogs );
103+ //region delete
104+ @ Test
105+ void shouldDeleteKnownTask () {
106+ final TaskLogs taskLogs = TaskLogs .builder ()
107+ .chainTaskId (CHAIN_TASK_ID )
108+ .computeLogsList (List .of (COMPUTE_LOGS ))
109+ .build ();
110+ taskLogsRepository .save (taskLogs );
111+ assertThat (taskLogsRepository .count ()).isOne ();
112+ taskLogsService .delete (List .of (CHAIN_TASK_ID ));
113+ assertThat (taskLogsRepository .count ()).isZero ();
114+ }
83115
84- verify (taskLogsRepository ).findOneByChainTaskId (CHAIN_TASK_ID );
85- verify (taskLogsRepository , times (0 )).save (any ());
116+ @ Test
117+ void shouldNotDeleteUnknownTask () {
118+ final TaskLogs taskLogs = TaskLogs .builder ()
119+ .chainTaskId (CHAIN_TASK_ID )
120+ .computeLogsList (List .of (COMPUTE_LOGS ))
121+ .build ();
122+ taskLogsRepository .save (taskLogs );
123+ assertThat (taskLogsRepository .count ()).isOne ();
124+ taskLogsService .delete (List .of ("0x00" ));
125+ assertThat (taskLogsRepository .count ()).isOne ();
86126 }
87127 //endregion
88128
89129 //region getComputeLogs
90130 @ Test
91131 void shouldGetComputeLogs () {
92- ComputeLogs computeLogs = new ComputeLogs (WORKER_ADDRESS , STDOUT , STDERR );
93- TaskLogs taskLogs = TaskLogs .builder ()
132+ final TaskLogs taskLogs = TaskLogs .builder ()
94133 .chainTaskId (CHAIN_TASK_ID )
95- .computeLogsList (List .of (computeLogs ))
134+ .computeLogsList (List .of (COMPUTE_LOGS ))
96135 .build ();
97- when (taskLogsRepository .findByChainTaskIdAndWalletAddress (CHAIN_TASK_ID , WORKER_ADDRESS ))
98- .thenReturn (Optional .of (taskLogs ));
136+ taskLogsRepository .save (taskLogs );
99137 Optional <ComputeLogs > optional = taskLogsService .getComputeLogs (CHAIN_TASK_ID , WORKER_ADDRESS );
100138 assertThat (optional ).isPresent ();
101139 final ComputeLogs actualLogs = optional .get ();
0 commit comments