Exercise 8 PR #95
|
@ -18,7 +18,7 @@ public class ExecutorClass {
|
||||||
this.executorTaskType = executorTaskType;
|
this.executorTaskType = executorTaskType;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected static ExecutorClass createExecutorClass(ExecutorUri executorUri, ExecutorTaskType executorTaskType){
|
public static ExecutorClass createExecutorClass(ExecutorUri executorUri, ExecutorTaskType executorTaskType){
|
||||||
System.out.println("New Executor: " + executorUri.value.toString() + " " + executorTaskType.getValue());
|
System.out.println("New Executor: " + executorUri.value.toString() + " " + executorTaskType.getValue());
|
||||||
return new ExecutorClass(executorUri, executorTaskType);
|
return new ExecutorClass(executorUri, executorTaskType);
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,65 @@
|
||||||
|
package ch.unisg.executorpool;
|
||||||
|
|
||||||
|
import static org.mockito.Mockito.times;
|
||||||
|
|
||||||
|
import java.net.URI;
|
||||||
|
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
import org.mockito.Mockito;
|
||||||
|
import static org.mockito.BDDMockito.*;
|
||||||
|
import static org.assertj.core.api.Assertions.*;
|
||||||
|
|
||||||
|
import ch.unisg.executorpool.application.port.in.AddNewExecutorToExecutorPoolCommand;
|
||||||
|
import ch.unisg.executorpool.application.port.out.AddExecutorPort;
|
||||||
|
import ch.unisg.executorpool.application.port.out.ExecutorAddedEventPort;
|
||||||
|
import ch.unisg.executorpool.application.service.AddNewExecutorToExecutorPoolService;
|
||||||
|
import ch.unisg.executorpool.domain.ExecutorAddedEvent;
|
||||||
|
import ch.unisg.executorpool.domain.ExecutorClass;
|
||||||
|
import ch.unisg.executorpool.domain.ExecutorPool;
|
||||||
|
import ch.unisg.executorpool.domain.ExecutorClass.ExecutorUri;
|
||||||
|
|
||||||
|
public class AddNewExecutorToExecutorPoolServiceTest {
|
||||||
|
|
||||||
|
private final AddExecutorPort addExecutorPort = Mockito.mock(AddExecutorPort.class);
|
||||||
|
private final ExecutorAddedEventPort newExecutorAddedEventPort = Mockito.mock(ExecutorAddedEventPort.class);
|
||||||
|
private final AddNewExecutorToExecutorPoolService addNewExecutorToExecutorPoolService = new AddNewExecutorToExecutorPoolService(
|
||||||
|
newExecutorAddedEventPort, addExecutorPort);
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void addingSucceeds() {
|
||||||
|
|
||||||
|
ExecutorClass newExecutor = givenAnExecutorWithTypeAndUri(new ExecutorClass.ExecutorTaskType("test-type"),
|
||||||
|
new ExecutorClass.ExecutorUri(URI.create("example.org")));
|
||||||
|
|
||||||
|
ExecutorPool executorPool = givenAnEmptyExecutorPool(ExecutorPool.getExecutorPool());
|
||||||
|
|
||||||
|
AddNewExecutorToExecutorPoolCommand addNewExecutorToExecutorPoolCommand = new AddNewExecutorToExecutorPoolCommand(
|
||||||
|
newExecutor.getExecutorUri(), newExecutor.getExecutorTaskType());
|
||||||
|
|
||||||
|
ExecutorClass addedExecutor = addNewExecutorToExecutorPoolService.addNewExecutorToExecutorPool(addNewExecutorToExecutorPoolCommand);
|
||||||
|
|
||||||
|
assertThat(addedExecutor).isNotNull();
|
||||||
|
assertThat(executorPool.getListOfExecutors().getValue()).hasSize(1);
|
||||||
|
|
||||||
|
then(newExecutorAddedEventPort).should(times(1)).publishExecutorAddedEvent(any(ExecutorAddedEvent.class));
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private ExecutorPool givenAnEmptyExecutorPool(ExecutorPool executorPool) {
|
||||||
|
executorPool.getListOfExecutors().getValue().clear();
|
||||||
|
return executorPool;
|
||||||
|
}
|
||||||
|
|
||||||
|
private ExecutorClass givenAnExecutorWithTypeAndUri(ExecutorClass.ExecutorTaskType executorTaskType,
|
||||||
|
ExecutorUri executorUri) {
|
||||||
|
|
||||||
|
ExecutorClass executor = Mockito.mock(ExecutorClass.class);
|
||||||
|
given(executor.getExecutorTaskType()).willReturn(executorTaskType);
|
||||||
|
given(executor.getExecutorUri()).willReturn(executorUri);
|
||||||
|
return executor;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,70 @@
|
||||||
|
package ch.unisg.executorpool;
|
||||||
|
|
||||||
|
import org.json.JSONException;
|
||||||
|
import org.json.JSONObject;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.boot.test.context.SpringBootTest;
|
||||||
|
import org.springframework.boot.test.web.client.TestRestTemplate;
|
||||||
|
import org.springframework.http.HttpEntity;
|
||||||
|
import org.springframework.http.HttpHeaders;
|
||||||
|
import org.springframework.http.HttpMethod;
|
||||||
|
import org.springframework.http.HttpStatus;
|
||||||
|
import org.springframework.http.ResponseEntity;
|
||||||
|
import static org.assertj.core.api.BDDAssertions.*;
|
||||||
|
|
||||||
|
import ch.unisg.executorpool.adapter.common.formats.ExecutorJsonRepresentation;
|
||||||
|
import ch.unisg.executorpool.application.port.out.AddExecutorPort;
|
||||||
|
import ch.unisg.executorpool.domain.ExecutorPool;
|
||||||
|
import ch.unisg.executorpool.domain.ExecutorClass;
|
||||||
|
import ch.unisg.executorpool.domain.ExecutorClass.ExecutorTaskType;
|
||||||
|
import ch.unisg.executorpool.domain.ExecutorClass.ExecutorUri;
|
||||||
|
|
||||||
|
|
||||||
|
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
|
||||||
|
public class AddNewExecutorToExecutorPoolSystemTest {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private TestRestTemplate restTemplate;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private AddExecutorPort addExecutorPort;
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void AddNewExecutorToExecutorPool() throws JSONException {
|
||||||
|
|
||||||
|
ExecutorTaskType executorTaskType = new ExecutorTaskType("system-integration-test-type");
|
||||||
|
ExecutorUri executorUri = new ExecutorUri(java.net.URI.create("example.org"));
|
||||||
|
|
||||||
|
ResponseEntity response = whenAddNewExecutorToEmptyPool(executorTaskType, executorUri);
|
||||||
|
|
||||||
|
JSONObject responseJson = new JSONObject(response.getBody().toString());
|
||||||
|
String respExecutorUri = responseJson.getString("executorUri");
|
||||||
|
String respExecutorTaskType = responseJson.getString("executorTaskType");
|
||||||
|
|
||||||
|
then(response.getStatusCode()).isEqualTo(HttpStatus.CREATED);
|
||||||
|
then(respExecutorUri).isEqualTo(executorUri.getValue().toString());
|
||||||
|
then(respExecutorTaskType).isEqualTo(executorTaskType.getValue());
|
||||||
|
then(ExecutorPool.getExecutorPool().getListOfExecutors().getValue()).hasSize(1);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private ResponseEntity whenAddNewExecutorToEmptyPool(ExecutorTaskType executorTaskType,
|
||||||
|
ExecutorUri executorUri) throws JSONException {
|
||||||
|
|
||||||
|
ExecutorPool.getExecutorPool().getListOfExecutors().getValue().clear();
|
||||||
|
|
||||||
|
HttpHeaders headers = new HttpHeaders();
|
||||||
|
headers.add("Content-Type", ExecutorJsonRepresentation.EXECUTOR_MEDIA_TYPE);
|
||||||
|
|
||||||
|
String jsonPayLoad = new JSONObject().put("executorTaskType", executorTaskType.getValue())
|
||||||
|
.put("executorUri", executorUri.getValue()).toString();
|
||||||
|
|
||||||
|
|
||||||
|
HttpEntity<String> request = new HttpEntity<>(jsonPayLoad,headers);
|
||||||
|
|
||||||
|
return restTemplate.exchange("/executor-pool/AddExecutor", HttpMethod.POST, request, Object.class);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,75 @@
|
||||||
|
package ch.unisg.executorpool;
|
||||||
|
|
||||||
|
import java.util.Optional;
|
||||||
|
|
||||||
|
import ch.unisg.executorpool.application.port.out.LoadExecutorPort;
|
||||||
|
import org.bson.json.JsonObject;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
import org.mockito.Mockito;
|
||||||
|
import static org.mockito.BDDMockito.eq;
|
||||||
|
import static org.mockito.BDDMockito.then;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;
|
||||||
|
import org.springframework.boot.test.mock.mockito.MockBean;
|
||||||
|
import org.springframework.test.web.servlet.MockMvc;
|
||||||
|
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
|
||||||
|
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
|
||||||
|
|
||||||
|
import ch.unisg.executorpool.adapter.common.formats.ExecutorJsonRepresentation;
|
||||||
|
import ch.unisg.executorpool.adapter.in.web.AddNewExecutorToExecutorPoolWebController;
|
||||||
|
import ch.unisg.executorpool.adapter.out.persistence.mongodb.ExecutorRepository;
|
||||||
|
import ch.unisg.executorpool.application.port.in.AddNewExecutorToExecutorPoolCommand;
|
||||||
|
import ch.unisg.executorpool.application.port.in.AddNewExecutorToExecutorPoolUseCase;
|
||||||
|
import ch.unisg.executorpool.domain.ExecutorClass;
|
||||||
|
import ch.unisg.executorpool.domain.ExecutorClass.ExecutorTaskType;
|
||||||
|
import ch.unisg.executorpool.domain.ExecutorClass.ExecutorUri;
|
||||||
|
import org.json.JSONObject;
|
||||||
|
|
||||||
|
|
||||||
|
@WebMvcTest(controllers = AddNewExecutorToExecutorPoolWebController.class)
|
||||||
|
public class AddNewExecutorToExecutorPoolWebControllerTest {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private MockMvc mockMvc;
|
||||||
|
|
||||||
|
@MockBean
|
||||||
|
private AddNewExecutorToExecutorPoolUseCase addNewExecutorToExecutorPoolUseCase;
|
||||||
|
|
||||||
|
@MockBean
|
||||||
|
ExecutorRepository executorRepository;
|
||||||
|
|
||||||
|
@MockBean
|
||||||
|
LoadExecutorPort loadExecutorPort;
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void testAddNewExecutorToExecutorPool() throws Exception {
|
||||||
|
|
||||||
|
String executorTaskType = "test-request-type";
|
||||||
|
String executorUri = "example.org";
|
||||||
|
|
||||||
|
String jsonPayLoad = new JSONObject().put("executorTaskType", executorTaskType).put("executorUri", executorUri).toString();
|
||||||
|
|
||||||
|
ExecutorClass executorStub = ExecutorClass.createExecutorClass(new ExecutorUri(java.net.URI.create(executorUri)),
|
||||||
|
new ExecutorClass.ExecutorTaskType(executorTaskType));
|
||||||
|
|
||||||
|
AddNewExecutorToExecutorPoolCommand addNewExecutorToExecutorPoolCommand = new AddNewExecutorToExecutorPoolCommand(
|
||||||
|
new ExecutorUri(java.net.URI.create(executorUri)), new ExecutorTaskType(executorTaskType));
|
||||||
|
|
||||||
|
Mockito.when(addNewExecutorToExecutorPoolUseCase
|
||||||
|
.addNewExecutorToExecutorPool(addNewExecutorToExecutorPoolCommand))
|
||||||
|
.thenReturn(executorStub);
|
||||||
|
|
||||||
|
mockMvc.perform(post("/executor-pool/AddExecutor")
|
||||||
|
.contentType(ExecutorJsonRepresentation.EXECUTOR_MEDIA_TYPE)
|
||||||
|
.content(jsonPayLoad))
|
||||||
|
.andExpect(status().isCreated());
|
||||||
|
|
||||||
|
then(addNewExecutorToExecutorPoolUseCase).should()
|
||||||
|
.addNewExecutorToExecutorPool(eq(new AddNewExecutorToExecutorPoolCommand(
|
||||||
|
new ExecutorUri(java.net.URI.create(executorUri)), new ExecutorTaskType(executorTaskType))));
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
|
@ -1,13 +0,0 @@
|
||||||
package ch.unisg.executorpool;
|
|
||||||
|
|
||||||
import org.junit.jupiter.api.Test;
|
|
||||||
import org.springframework.boot.test.context.SpringBootTest;
|
|
||||||
|
|
||||||
@SpringBootTest
|
|
||||||
class ExecutorPoolApplicationTests {
|
|
||||||
|
|
||||||
@Test
|
|
||||||
void contextLoads() {
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -0,0 +1,59 @@
|
||||||
|
package ch.unisg.executorpool;
|
||||||
|
|
||||||
|
import java.net.URI;
|
||||||
|
import java.util.Optional;
|
||||||
|
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
|
import static org.assertj.core.api.Assertions.*;
|
||||||
|
|
||||||
|
import ch.unisg.executorpool.domain.ExecutorClass;
|
||||||
|
import ch.unisg.executorpool.domain.ExecutorPool;
|
||||||
|
import ch.unisg.executorpool.domain.ExecutorClass.ExecutorUri;
|
||||||
|
import ch.unisg.executorpool.domain.ExecutorClass.ExecutorTaskType;
|
||||||
|
|
||||||
|
public class ExecutorPoolTest {
|
||||||
|
|
||||||
|
private static final URI URI = null;
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void addNewExecutorToExecutorPoolSuccess() {
|
||||||
|
ExecutorPool executorPool = ExecutorPool.getExecutorPool();
|
||||||
|
executorPool.getListOfExecutors().getValue().clear();
|
||||||
|
ExecutorClass newExecutor = executorPool.addNewExecutor(new ExecutorUri(java.net.URI.create("example.com")) ,
|
||||||
|
new ExecutorTaskType("test-type"));
|
||||||
|
|
||||||
|
assertThat(newExecutor.getExecutorTaskType().getValue()).isEqualTo("test-type");
|
||||||
|
assertThat(executorPool.getListOfExecutors().getValue()).hasSize(1);
|
||||||
|
assertThat(executorPool.getListOfExecutors().getValue().get(0)).isEqualTo(newExecutor);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void retrieveExecutorSuccess() {
|
||||||
|
ExecutorPool executorPool = ExecutorPool.getExecutorPool();
|
||||||
|
executorPool.getListOfExecutors().getValue().clear();
|
||||||
|
ExecutorClass newExecutor = executorPool.addNewExecutor(new ExecutorUri(java.net.URI.create("example.com")) , new ExecutorTaskType("test-type"));
|
||||||
|
|
||||||
|
var retrievedExecutors = executorPool.getAllExecutorsByType(newExecutor.getExecutorTaskType());
|
||||||
|
|
||||||
|
assertThat(retrievedExecutors.size()).isEqualTo(1);
|
||||||
|
assertThat(retrievedExecutors.get(0)).isEqualTo(newExecutor);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void retrieveExecutorFailure() {
|
||||||
|
ExecutorPool executorPool = ExecutorPool.getExecutorPool();
|
||||||
|
executorPool.getListOfExecutors().getValue().clear();
|
||||||
|
executorPool.addNewExecutor(new ExecutorUri(java.net.URI.create("example.com")) , new ExecutorTaskType("test-type"));
|
||||||
|
|
||||||
|
var fakeType = new ExecutorTaskType("fake-type");
|
||||||
|
|
||||||
|
var retrievedExecutor = executorPool.getAllExecutorsByType(fakeType);
|
||||||
|
|
||||||
|
assertThat(retrievedExecutor.size()).isEqualTo(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user