diff --git a/testImportGridFailures/src/main/java/org/eclipse/openk/gridfailureinformation/jobs/importgridfailures/config/EventProducerConfig.java b/testImportGridFailures/src/main/java/org/eclipse/openk/gridfailureinformation/jobs/importgridfailures/config/EventProducerConfig.java index 1502e628f78284185f1fbaf8bac5ef33d95ab593..6c931fcbc72c798781c60e175440064a8c671b8c 100644 --- a/testImportGridFailures/src/main/java/org/eclipse/openk/gridfailureinformation/jobs/importgridfailures/config/EventProducerConfig.java +++ b/testImportGridFailures/src/main/java/org/eclipse/openk/gridfailureinformation/jobs/importgridfailures/config/EventProducerConfig.java @@ -1,8 +1,7 @@ package org.eclipse.openk.gridfailureinformation.jobs.importgridfailures.config; import lombok.extern.log4j.Log4j2; -import org.springframework.amqp.core.DirectExchange; -import org.springframework.amqp.core.Exchange; +import org.springframework.amqp.core.*; import org.springframework.amqp.rabbit.core.RabbitTemplate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; @@ -19,16 +18,19 @@ import org.springframework.messaging.MessageHandler; @Log4j2 public class EventProducerConfig { - @Value("${rabbitmqconfig.routing-key}") + @Value("${spring.rabbitmq.routingkey}") public String routingKey; - @Value("${rabbitmqconfig.exchange-name}") + @Value("${spring.rabbitmq.exchangename}") public String exchangeName; + @Value("${spring.rabbitmq.queuename}") + public String queueName; + @Autowired RabbitTemplate rabbitTemplate; @Bean - public Exchange eventExchange() { + public DirectExchange exchange() { return new DirectExchange(exchangeName); } @@ -37,9 +39,17 @@ public class EventProducerConfig { return new DirectChannel(); } + @Bean + public Queue messageImportQueue() { return new Queue(queueName); } + + @Bean + public Binding binding() { return BindingBuilder.bind(messageImportQueue()).to(exchange()).with(routingKey); } + + @Bean @ServiceActivator(inputChannel = "messageImportChannel") public MessageHandler messageHandler() { + return message -> rabbitTemplate.convertAndSend(exchangeName, routingKey, message.getPayload(), message1 -> { message1.getMessageProperties().getHeaders().put("metaId", message.getHeaders().get("metaId")); message1.getMessageProperties().getHeaders().put("description", message.getHeaders().get("description")); diff --git a/testImportGridFailures/src/main/java/org/eclipse/openk/gridfailureinformation/jobs/importgridfailures/controller/ImportController.java b/testImportGridFailures/src/main/java/org/eclipse/openk/gridfailureinformation/jobs/importgridfailures/controller/ImportController.java index 3b026010515fa269afa09041deaba7ee39cef70f..eb3ab6146644ef3233b1b9fa2b37f5cc4cf714ac 100644 --- a/testImportGridFailures/src/main/java/org/eclipse/openk/gridfailureinformation/jobs/importgridfailures/controller/ImportController.java +++ b/testImportGridFailures/src/main/java/org/eclipse/openk/gridfailureinformation/jobs/importgridfailures/controller/ImportController.java @@ -29,32 +29,17 @@ import org.springframework.web.bind.annotation.*; @RequestMapping("/import") public class ImportController { - @Autowired private ImportService importService; - @PostMapping @ApiOperation(value = "Import einer externen Störungsinformation") @ApiResponses(value = { @ApiResponse(code = 201, message = "Störungsinformation erfolgreich importiert"), @ApiResponse(code = 500, message = "Konnte nicht durchgeführt werden") }) - public void pushForeignFailureInfo( - // public ResponseEntity<ForeignFailureDto> pushForeignFailureInfo( - @Validated @RequestBody ForeignFailureDto foreignFailureDto) { - ForeignFailureDto savedgfDto = importService.pushForeignFailure(foreignFailureDto); -// URI location = ServletUriComponentsBuilder -// .fromCurrentRequestUri() -// .path("/{uuid}") -// .buildAndExpand(foreignFailureDto.getUuid()) -// .toUri(); -// return ResponseEntity.created(location).body(savedgfDto); - } - - - - - + public void pushForeignFailureInfo(@Validated @RequestBody ForeignFailureDto foreignFailureDto) { + importService.pushForeignFailure(foreignFailureDto); + } } diff --git a/testImportGridFailures/src/main/java/org/eclipse/openk/gridfailureinformation/jobs/importgridfailures/exceptions/BadRequestException.java b/testImportGridFailures/src/main/java/org/eclipse/openk/gridfailureinformation/jobs/importgridfailures/exceptions/BadRequestException.java new file mode 100644 index 0000000000000000000000000000000000000000..f7d18403561f91a35dcec0e51d41dea2a1907adb --- /dev/null +++ b/testImportGridFailures/src/main/java/org/eclipse/openk/gridfailureinformation/jobs/importgridfailures/exceptions/BadRequestException.java @@ -0,0 +1,30 @@ +/* + ******************************************************************************* + * Copyright (c) 2019 Contributors to the Eclipse Foundation + * + * See the NOTICE file(s) distributed with this work for additional + * information regarding copyright ownership. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v. 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0. + * + * SPDX-License-Identifier: EPL-2.0 + ******************************************************************************* + */ +package org.eclipse.openk.gridfailureinformation.jobs.importgridfailures.exceptions; + +import org.springframework.http.HttpStatus; +import org.springframework.web.bind.annotation.ResponseStatus; + +@ResponseStatus(code = HttpStatus.BAD_REQUEST) +public class BadRequestException extends RuntimeException{ + + public BadRequestException() { + + } + + public BadRequestException(String message) { + super(message); + } +} diff --git a/testImportGridFailures/src/main/java/org/eclipse/openk/gridfailureinformation/jobs/importgridfailures/exceptions/InternalServerErrorException.java b/testImportGridFailures/src/main/java/org/eclipse/openk/gridfailureinformation/jobs/importgridfailures/exceptions/InternalServerErrorException.java new file mode 100644 index 0000000000000000000000000000000000000000..4621f62dc466bb03ac8cf40b67519bdcc46db9a4 --- /dev/null +++ b/testImportGridFailures/src/main/java/org/eclipse/openk/gridfailureinformation/jobs/importgridfailures/exceptions/InternalServerErrorException.java @@ -0,0 +1,25 @@ +/* + ******************************************************************************* + * Copyright (c) 2019 Contributors to the Eclipse Foundation + * + * See the NOTICE file(s) distributed with this work for additional + * information regarding copyright ownership. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v. 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0. + * + * SPDX-License-Identifier: EPL-2.0 + ******************************************************************************* + */ +package org.eclipse.openk.gridfailureinformation.jobs.importgridfailures.exceptions; + +import org.springframework.http.HttpStatus; +import org.springframework.web.bind.annotation.ResponseStatus; + +@ResponseStatus(code = HttpStatus.INTERNAL_SERVER_ERROR) +public class InternalServerErrorException extends RuntimeException{ + public InternalServerErrorException(String message) { + super(message); + } +} diff --git a/testImportGridFailures/src/main/java/org/eclipse/openk/gridfailureinformation/jobs/importgridfailures/exceptions/NotFoundException.java b/testImportGridFailures/src/main/java/org/eclipse/openk/gridfailureinformation/jobs/importgridfailures/exceptions/NotFoundException.java new file mode 100644 index 0000000000000000000000000000000000000000..518a8fe0d62e00c86e274dd31b38b66ea854ab3d --- /dev/null +++ b/testImportGridFailures/src/main/java/org/eclipse/openk/gridfailureinformation/jobs/importgridfailures/exceptions/NotFoundException.java @@ -0,0 +1,31 @@ +/* + ******************************************************************************* + * Copyright (c) 2019 Contributors to the Eclipse Foundation + * + * See the NOTICE file(s) distributed with this work for additional + * information regarding copyright ownership. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v. 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0. + * + * SPDX-License-Identifier: EPL-2.0 + ******************************************************************************* + */ +package org.eclipse.openk.gridfailureinformation.jobs.importgridfailures.exceptions; + +import org.springframework.http.HttpStatus; +import org.springframework.web.bind.annotation.ResponseStatus; + +@ResponseStatus(code = HttpStatus.NOT_FOUND) +public class NotFoundException extends RuntimeException{ + + public NotFoundException() { + + } + + public NotFoundException(String message) { + super(message); + } +} + diff --git a/testImportGridFailures/src/main/java/org/eclipse/openk/gridfailureinformation/jobs/importgridfailures/exceptions/UnauthorizedException.java b/testImportGridFailures/src/main/java/org/eclipse/openk/gridfailureinformation/jobs/importgridfailures/exceptions/UnauthorizedException.java new file mode 100644 index 0000000000000000000000000000000000000000..b0d161915b4e5cad1bab147302565824490c2375 --- /dev/null +++ b/testImportGridFailures/src/main/java/org/eclipse/openk/gridfailureinformation/jobs/importgridfailures/exceptions/UnauthorizedException.java @@ -0,0 +1,11 @@ +package org.eclipse.openk.gridfailureinformation.jobs.importgridfailures.exceptions; + +import org.springframework.http.HttpStatus; +import org.springframework.web.bind.annotation.ResponseStatus; + +@ResponseStatus(code = HttpStatus.UNAUTHORIZED) +public class UnauthorizedException extends RuntimeException{ + public UnauthorizedException(String message) { + super(message); + } +} diff --git a/testImportGridFailures/src/main/java/org/eclipse/openk/gridfailureinformation/jobs/importgridfailures/service/ImportService.java b/testImportGridFailures/src/main/java/org/eclipse/openk/gridfailureinformation/jobs/importgridfailures/service/ImportService.java index 3678ece87b8e06583dca89660c2ad0f360de6a50..c2409a74fa059906cd4ab6ac3131389f838056f2 100644 --- a/testImportGridFailures/src/main/java/org/eclipse/openk/gridfailureinformation/jobs/importgridfailures/service/ImportService.java +++ b/testImportGridFailures/src/main/java/org/eclipse/openk/gridfailureinformation/jobs/importgridfailures/service/ImportService.java @@ -15,8 +15,10 @@ package org.eclipse.openk.gridfailureinformation.jobs.importgridfailures.service; import com.fasterxml.jackson.databind.ObjectMapper; +import com.rabbitmq.client.BuiltinExchangeType; import lombok.extern.log4j.Log4j2; import org.eclipse.openk.gridfailureinformation.jobs.importgridfailures.dtos.ForeignFailureDto; +import org.eclipse.openk.gridfailureinformation.jobs.importgridfailures.exceptions.InternalServerErrorException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.boot.context.properties.EnableConfigurationProperties; @@ -24,24 +26,18 @@ import org.springframework.messaging.support.MessageBuilder; import org.springframework.stereotype.Service; import org.springframework.messaging.MessageChannel; -import java.text.SimpleDateFormat; - @Service @Log4j2 @EnableConfigurationProperties @ConfigurationProperties(prefix = "rabbitmq") public class ImportService { - private static final String INDEXING_DATE_FORMAT = "yyyy-MM-dd'T'HH:mm:ss.SSSXXX"; - @Autowired private MessageChannel messageImportChannel; - public ForeignFailureDto pushForeignFailure(ForeignFailureDto foreignFailureDto) { + public void pushForeignFailure(ForeignFailureDto foreignFailureDto) { try { - - //messageImportChannel.send(MessageBuilder.withPayload(new ObjectMapper().setDateFormat(new SimpleDateFormat(INDEXING_DATE_FORMAT)).writeValueAsString(foreignFailureDto)) messageImportChannel.send(MessageBuilder.withPayload(foreignFailureDto.getPayload()) .setHeader("metaId", foreignFailureDto.getMetaId()) .setHeader("description", foreignFailureDto.getDescription()) @@ -50,10 +46,9 @@ public class ImportService { } catch (Exception e) { log.debug(e.getMessage(), e); + throw new InternalServerErrorException("could.not.push.message"); } - - return foreignFailureDto; } } diff --git a/testImportGridFailures/src/main/resources/application.yml b/testImportGridFailures/src/main/resources/application.yml index 507224a1b4f69dbc73efa01e0006429be589112c..e078f3e7027550820081496d64d63d94d0f3dadf 100644 --- a/testImportGridFailures/src/main/resources/application.yml +++ b/testImportGridFailures/src/main/resources/application.yml @@ -22,10 +22,9 @@ spring: port: 5672 username: guest password: guest - -rabbitmqconfig: - routing-key: messageImportChannel.process - exchange-name: messageImportChannel + routingkey: messageImportChannel.testkey + exchangename: messageImportChannelTest + queuename: messageImportQueueTest server: max-http-header-size: 262144 diff --git a/testImportGridFailures/src/main/resources/application_localdev.yml b/testImportGridFailures/src/main/resources/application_localdev.yml index 40f19f5d7dd64203dd7e69f2d4db28ab847cfb3c..85593897b67711ec32b59d40fcda122fab4432f0 100644 --- a/testImportGridFailures/src/main/resources/application_localdev.yml +++ b/testImportGridFailures/src/main/resources/application_localdev.yml @@ -22,10 +22,9 @@ spring: port: 5672 username: guest password: guest - -rabbitmqconfig: - routing-key: messageImportChannel.process - exchange-name: messageImportChannel + routingkey: messageImportChannel.testkey + exchangename: messageImportChannelTest + queuename: messageImportQueueTest eureka: diff --git a/testImportGridFailures/src/main/resources/messages.properties b/testImportGridFailures/src/main/resources/messages.properties new file mode 100644 index 0000000000000000000000000000000000000000..b8b3b1107aae5b183d52576b8d68f159e7ba1f10 --- /dev/null +++ b/testImportGridFailures/src/main/resources/messages.properties @@ -0,0 +1,5 @@ +#Fehlermeldungen +could.not.push.message=Das Objekt konnte nicht an RabbitMQ gesendet werden. + + + diff --git a/testImportGridFailures/src/test/java/org/eclipse/openk/gridfailureinformation/jobs/importgridfailures/config/TestConfiguration.java b/testImportGridFailures/src/test/java/org/eclipse/openk/gridfailureinformation/jobs/importgridfailures/config/TestConfiguration.java new file mode 100644 index 0000000000000000000000000000000000000000..d5cbfda966ab308dfb1bb90de83d49d686fb8109 --- /dev/null +++ b/testImportGridFailures/src/test/java/org/eclipse/openk/gridfailureinformation/jobs/importgridfailures/config/TestConfiguration.java @@ -0,0 +1,33 @@ +/* + ******************************************************************************* + * Copyright (c) 2019 Contributors to the Eclipse Foundation + * + * See the NOTICE file(s) distributed with this work for additional + * information regarding copyright ownership. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v. 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0. + * + * SPDX-License-Identifier: EPL-2.0 + ******************************************************************************* + */ +package org.eclipse.openk.gridfailureinformation.jobs.importgridfailures.config; + + +import org.eclipse.openk.gridfailureinformation.jobs.importgridfailures.TestImportGridFailuresApplication; +import org.springframework.boot.autoconfigure.domain.EntityScan; +import org.springframework.boot.test.context.ConfigFileApplicationContextInitializer; +import org.springframework.context.annotation.Bean; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.TestPropertySource; + +@EntityScan(basePackageClasses = TestImportGridFailuresApplication.class) +@ContextConfiguration( initializers = {ConfigFileApplicationContextInitializer.class}) +@TestPropertySource("spring.config.location=classpath:application.yml") +public class TestConfiguration { + + + @Bean + public EventProducerConfig myEventProducerConfig() {return new EventProducerConfig();} +} diff --git a/testImportGridFailures/src/test/java/org/eclipse/openk/gridfailureinformation/jobs/importgridfailures/controller/ImportControllerTest.java b/testImportGridFailures/src/test/java/org/eclipse/openk/gridfailureinformation/jobs/importgridfailures/controller/ImportControllerTest.java new file mode 100644 index 0000000000000000000000000000000000000000..054062c53b0cd8050fb4704fce54df457264391a --- /dev/null +++ b/testImportGridFailures/src/test/java/org/eclipse/openk/gridfailureinformation/jobs/importgridfailures/controller/ImportControllerTest.java @@ -0,0 +1,68 @@ +/* + ******************************************************************************* + * Copyright (c) 2019 Contributors to the Eclipse Foundation + * + * See the NOTICE file(s) distributed with this work for additional + * information regarding copyright ownership. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v. 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0. + * + * SPDX-License-Identifier: EPL-2.0 + ******************************************************************************* + */ +package org.eclipse.openk.gridfailureinformation.jobs.importgridfailures.controller; + +import org.eclipse.openk.gridfailureinformation.jobs.importgridfailures.TestImportGridFailuresApplication; +import org.eclipse.openk.gridfailureinformation.jobs.importgridfailures.dtos.ForeignFailureDto; +import org.eclipse.openk.gridfailureinformation.jobs.importgridfailures.service.ImportService; +import org.eclipse.openk.gridfailureinformation.jobs.importgridfailures.support.MockDataHelper; +import org.junit.jupiter.api.Test; +import org.mockito.Mockito; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.http.MediaType; +import org.springframework.test.context.ActiveProfiles; +import org.springframework.test.web.servlet.MockMvc; + +import java.util.List; + +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyString; +import static org.mockito.Mockito.when; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; + +@SpringBootTest(classes = TestImportGridFailuresApplication.class) +@AutoConfigureMockMvc +@ActiveProfiles("test") +public class ImportControllerTest { + + @MockBean + private ImportService importService; + + @MockBean + private ImportService messageImportChannel; + + @Autowired + private MockMvc mockMvc; + + +// @Test +// public void shouldCallImport() throws Exception { +// ForeignFailureDto foreignFailureDto = MockDataHelper.mockForeignFailureDto(); +// +// ImportService spy = Mockito.spy(messageImportChannel); +// Mockito.doNothing().when(spy).setHeader(anyString(), anyString()); +// +// mockMvc.perform(post("/import")) +// .andExpect(status().is2xxSuccessful()); +// +// +// } +} \ No newline at end of file diff --git a/testImportGridFailures/src/test/java/org/eclipse/openk/gridfailureinformation/jobs/importgridfailures/service/ImportServiceTest.java b/testImportGridFailures/src/test/java/org/eclipse/openk/gridfailureinformation/jobs/importgridfailures/service/ImportServiceTest.java new file mode 100644 index 0000000000000000000000000000000000000000..9cc675713c8ec1bc637a60625004892890e0b9d4 --- /dev/null +++ b/testImportGridFailures/src/test/java/org/eclipse/openk/gridfailureinformation/jobs/importgridfailures/service/ImportServiceTest.java @@ -0,0 +1,55 @@ +/* + ******************************************************************************* + * Copyright (c) 2019 Contributors to the Eclipse Foundation + * + * See the NOTICE file(s) distributed with this work for additional + * information regarding copyright ownership. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v. 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0. + * + * SPDX-License-Identifier: EPL-2.0 + ******************************************************************************* + */ +package org.eclipse.openk.gridfailureinformation.jobs.importgridfailures.service; + +import org.eclipse.openk.gridfailureinformation.jobs.importgridfailures.config.TestConfiguration; +import org.eclipse.openk.gridfailureinformation.jobs.importgridfailures.dtos.ForeignFailureDto; +import org.eclipse.openk.gridfailureinformation.jobs.importgridfailures.support.MockDataHelper; +import org.junit.jupiter.api.Test; +import org.mockito.Mockito; +import org.springframework.amqp.core.Message; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.test.context.ContextConfiguration; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.mockito.ArgumentMatchers.anyString; +import static org.mockito.Mockito.when; + +//@RunWith(SpringRunner.class) +@DataJpaTest +@ContextConfiguration(classes = {TestConfiguration.class}) + +public class ImportServiceTest { + @Qualifier("myBranchService") + @Autowired + private ImportService importService; + + @MockBean + private ImportService messageImportChannel; + +// @Test +// public void shouldPushFailure() { +// +// ForeignFailureDto foreignFailureDto = MockDataHelper.mockForeignFailureDto(); +// +// ImportService spy = Mockito.spy(messageImportChannel); +// Mockito.doNothing().when(spy).send(any(Message.class)); +// +// importService.pushForeignFailure(foreignFailureDto); +// } +} diff --git a/testImportGridFailures/src/test/java/org/eclipse/openk/gridfailureinformation/jobs/importgridfailures/support/MockDataHelper.java b/testImportGridFailures/src/test/java/org/eclipse/openk/gridfailureinformation/jobs/importgridfailures/support/MockDataHelper.java new file mode 100644 index 0000000000000000000000000000000000000000..a418690ba2ab3cc85ec62ae2f4fdd582ef382659 --- /dev/null +++ b/testImportGridFailures/src/test/java/org/eclipse/openk/gridfailureinformation/jobs/importgridfailures/support/MockDataHelper.java @@ -0,0 +1,35 @@ +/* + ******************************************************************************* + * Copyright (c) 2019 Contributors to the Eclipse Foundation + * + * See the NOTICE file(s) distributed with this work for additional + * information regarding copyright ownership. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v. 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0. + * + * SPDX-License-Identifier: EPL-2.0 + ******************************************************************************* + */ +package org.eclipse.openk.gridfailureinformation.jobs.importgridfailures.support; + +import org.eclipse.openk.gridfailureinformation.jobs.importgridfailures.dtos.ForeignFailureDto; + +public class MockDataHelper { + + private MockDataHelper() {} + + public static ForeignFailureDto mockForeignFailureDto() { + ForeignFailureDto foreignFailureDto = new ForeignFailureDto(); + foreignFailureDto.setMetaId("XYZ_111_gdfr"); + foreignFailureDto.setSource("FremdsystemXY"); + foreignFailureDto.setDescription("Rohrbruch"); + foreignFailureDto.setPayload("{\"field1\":11111,\"field2\":\"22222\"\"field3\":abcde}"); + foreignFailureDto.setRabbitMqExchangeName("messageImportChannelTest"); + foreignFailureDto.setRabbitMqRoutingKey("messageImportQueueTest"); + + return foreignFailureDto; + } + +}