import org.onap.dcaegen2.services.prh.model.ConsumerDmaapModel;
import org.onap.dcaegen2.services.prh.service.consumer.DMaaPConsumerReactiveHttpClient;
import reactor.core.publisher.Flux;
-import reactor.core.publisher.Mono;
/**
* @author <a href="mailto:przemyslaw.wasala@nokia.com">Przemysław Wąsala</a> on 4/13/18
Flux<ConsumerDmaapModel> execute(String object);
- Flux<ConsumerDmaapModel> consume(Mono<String> message);
-
DMaaPConsumerReactiveHttpClient resolveClient();
}
import org.onap.dcaegen2.services.prh.configuration.Config;
import org.onap.dcaegen2.services.prh.model.ConsumerDmaapModel;
-import org.onap.dcaegen2.services.prh.service.DMaaPReactiveWebClient;
import org.onap.dcaegen2.services.prh.service.DmaapConsumerJsonParser;
+import org.onap.dcaegen2.services.prh.service.consumer.ConsumerReactiveHttpClientFactory;
import org.onap.dcaegen2.services.prh.service.consumer.DMaaPConsumerReactiveHttpClient;
+import org.onap.dcaegen2.services.prh.service.consumer.DMaaPReactiveWebClient;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import reactor.core.publisher.Flux;
-import reactor.core.publisher.Mono;
/**
* @author <a href="mailto:przemyslaw.wasala@nokia.com">Przemysław Wąsala</a> on 3/23/18
private static final Logger LOGGER = LoggerFactory.getLogger(DmaapConsumerTaskImpl.class);
private final Config config;
private final DmaapConsumerJsonParser dmaapConsumerJsonParser;
- private final DMaaPReactiveWebClient dmaapReactiveWebClient;
+ private final ConsumerReactiveHttpClientFactory httpClientFactory;
@Autowired
public DmaapConsumerTaskImpl(Config config) {
- this(config, new DmaapConsumerJsonParser(), new DMaaPReactiveWebClient());
+ this(config, new DmaapConsumerJsonParser(),
+ new ConsumerReactiveHttpClientFactory(new DMaaPReactiveWebClient()));
}
- DmaapConsumerTaskImpl(Config prhAppConfig, DmaapConsumerJsonParser dmaapConsumerJsonParser,
- DMaaPReactiveWebClient dmaapReactiveWebClient) {
+ DmaapConsumerTaskImpl(Config prhAppConfig,
+ DmaapConsumerJsonParser dmaapConsumerJsonParser,
+ ConsumerReactiveHttpClientFactory httpClientFactory) {
this.config = prhAppConfig;
this.dmaapConsumerJsonParser = dmaapConsumerJsonParser;
- this.dmaapReactiveWebClient = dmaapReactiveWebClient;
+ this.httpClientFactory = httpClientFactory;
}
@Override
public Flux<ConsumerDmaapModel> execute(String object) {
DMaaPConsumerReactiveHttpClient dmaaPConsumerReactiveHttpClient = resolveClient();
LOGGER.debug("Method called with arg {}", object);
- return consume(dmaaPConsumerReactiveHttpClient.getDMaaPConsumerResponse());
- }
-
- @Override
- public Flux<ConsumerDmaapModel> consume(Mono<String> message) {
- return dmaapConsumerJsonParser.getJsonObject(message);
+ return dmaapConsumerJsonParser.getJsonObject(dmaaPConsumerReactiveHttpClient.getDMaaPConsumerResponse());
}
@Override
public DMaaPConsumerReactiveHttpClient resolveClient() {
- return new DMaaPConsumerReactiveHttpClient(
- config.getDmaapConsumerConfiguration()).createDMaaPWebClient(dmaapReactiveWebClient.build());
+ return httpClientFactory.create(config.getDmaapConsumerConfiguration());
}
}
Mono<ResponseEntity<String>> execute(ConsumerDmaapModel consumerDmaapModel) throws PrhTaskException;
- Mono<ResponseEntity<String>> publish(ConsumerDmaapModel consumerDmaapModel) throws PrhTaskException;
-
DMaaPPublisherReactiveHttpClient resolveClient();
}
import org.onap.dcaegen2.services.prh.exceptions.DmaapNotFoundException;
import org.onap.dcaegen2.services.prh.model.ConsumerDmaapModel;
import org.onap.dcaegen2.services.prh.service.producer.DMaaPPublisherReactiveHttpClient;
+import org.onap.dcaegen2.services.prh.service.producer.PublisherReactiveHttpClientFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Component;
-import org.springframework.web.client.RestTemplate;
import reactor.core.publisher.Mono;
/**
private static final Logger LOGGER = LoggerFactory.getLogger(DmaapPublisherTaskImpl.class);
private final Config config;
- private DMaaPPublisherReactiveHttpClient dmaapPublisherReactiveHttpClient;
+ private final PublisherReactiveHttpClientFactory httpClientFactory;
@Autowired
public DmaapPublisherTaskImpl(Config config) {
+ this(config, new PublisherReactiveHttpClientFactory());
+ }
+
+ DmaapPublisherTaskImpl(Config config, PublisherReactiveHttpClientFactory httpClientFactory) {
this.config = config;
+ this.httpClientFactory = httpClientFactory;
}
@Override
if (consumerDmaapModel == null) {
throw new DmaapNotFoundException("Invoked null object to DMaaP task");
}
- dmaapPublisherReactiveHttpClient = resolveClient();
+ DMaaPPublisherReactiveHttpClient dmaapPublisherReactiveHttpClient = resolveClient();
LOGGER.info("Method called with arg {}", consumerDmaapModel);
- return publish(consumerDmaapModel);
- }
-
- @Override
- public Mono<ResponseEntity<String>> publish(ConsumerDmaapModel consumerDmaapModel) {
return dmaapPublisherReactiveHttpClient.getDMaaPProducerResponse(consumerDmaapModel);
}
@Override
public DMaaPPublisherReactiveHttpClient resolveClient() {
- return new DMaaPPublisherReactiveHttpClient(config.getDmaapPublisherConfiguration())
- .createDMaaPWebClient(new RestTemplate());
+ return httpClientFactory.create(config.getDmaapPublisherConfiguration());
}
}
\ No newline at end of file
import org.onap.dcaegen2.services.prh.configuration.AppConfig;
import org.onap.dcaegen2.services.prh.model.ConsumerDmaapModel;
import org.onap.dcaegen2.services.prh.model.ImmutableConsumerDmaapModel;
-import org.onap.dcaegen2.services.prh.service.DMaaPReactiveWebClient;
import org.onap.dcaegen2.services.prh.service.DmaapConsumerJsonParser;
+import org.onap.dcaegen2.services.prh.service.consumer.ConsumerReactiveHttpClientFactory;
import org.onap.dcaegen2.services.prh.service.consumer.DMaaPConsumerReactiveHttpClient;
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;
dMaaPConsumerReactiveHttpClient = mock(DMaaPConsumerReactiveHttpClient.class);
when(dMaaPConsumerReactiveHttpClient.getDMaaPConsumerResponse()).thenReturn(Mono.just(message.orElse("")));
when(appConfig.getDmaapConsumerConfiguration()).thenReturn(dmaapConsumerConfiguration);
- DMaaPReactiveWebClient dmaapReactiveWebClient = mock(DMaaPReactiveWebClient.class);
- dmaapConsumerTask =
- spy(new DmaapConsumerTaskImpl(appConfig, new DmaapConsumerJsonParser(), dmaapReactiveWebClient));
- doReturn(dMaaPConsumerReactiveHttpClient).when(dmaapConsumerTask).resolveClient();
+ ConsumerReactiveHttpClientFactory httpClientFactory = mock(ConsumerReactiveHttpClientFactory.class);
+ doReturn(dMaaPConsumerReactiveHttpClient).when(httpClientFactory).create(dmaapConsumerConfiguration);
+ dmaapConsumerTask = new DmaapConsumerTaskImpl(appConfig, new DmaapConsumerJsonParser(), httpClientFactory);
}
}
\ No newline at end of file
import org.onap.dcaegen2.services.prh.model.ConsumerDmaapModel;
import org.onap.dcaegen2.services.prh.model.ImmutableConsumerDmaapModel;
import org.onap.dcaegen2.services.prh.service.producer.DMaaPPublisherReactiveHttpClient;
+import org.onap.dcaegen2.services.prh.service.producer.PublisherReactiveHttpClientFactory;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import reactor.core.publisher.Mono;
dMaaPPublisherReactiveHttpClient = mock(DMaaPPublisherReactiveHttpClient.class);
when(dMaaPPublisherReactiveHttpClient.getDMaaPProducerResponse(any()))
.thenReturn(Mono.just(responseEntity));
- dmaapPublisherTask = spy(new DmaapPublisherTaskImpl(appConfig));
- doReturn(dMaaPPublisherReactiveHttpClient).when(dmaapPublisherTask).resolveClient();
+ PublisherReactiveHttpClientFactory httpClientFactory = mock(PublisherReactiveHttpClientFactory.class);
+ doReturn(dMaaPPublisherReactiveHttpClient).when(httpClientFactory).create(dmaapPublisherConfiguration);
+ dmaapPublisherTask = new DmaapPublisherTaskImpl(appConfig, httpClientFactory);
return responseEntity;
}
}
\ No newline at end of file
--- /dev/null
+/*
+ * ============LICENSE_START=======================================================
+ * PNF-REGISTRATION-HANDLER
+ * ================================================================================
+ * Copyright (C) 2018 NOKIA Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.dcaegen2.services.prh.service.consumer;
+
+import org.onap.dcaegen2.services.prh.config.DmaapConsumerConfiguration;
+
+public class ConsumerReactiveHttpClientFactory {
+
+ private final DMaaPReactiveWebClient reactiveWebClient;
+
+ public ConsumerReactiveHttpClientFactory(DMaaPReactiveWebClient reactiveWebClient) {
+ this.reactiveWebClient = reactiveWebClient;
+ }
+
+ public DMaaPConsumerReactiveHttpClient create(DmaapConsumerConfiguration consumerConfiguration) {
+ return new DMaaPConsumerReactiveHttpClient(consumerConfiguration, reactiveWebClient.build());
+ }
+
+}
private final String consumerGroup;
private final String consumerId;
private final String contentType;
- private WebClient webClient;
+ private final WebClient webClient;
/**
* Constructor of DMaaPConsumerReactiveHttpClient.
*
* @param consumerConfiguration - DMaaP consumer configuration object
*/
- public DMaaPConsumerReactiveHttpClient(DmaapConsumerConfiguration consumerConfiguration) {
+ DMaaPConsumerReactiveHttpClient(DmaapConsumerConfiguration consumerConfiguration, WebClient webClient) {
this.dmaapHostName = consumerConfiguration.dmaapHostName();
this.dmaapProtocol = consumerConfiguration.dmaapProtocol();
this.dmaapPortNumber = consumerConfiguration.dmaapPortNumber();
this.consumerGroup = consumerConfiguration.consumerGroup();
this.consumerId = consumerConfiguration.consumerId();
this.contentType = consumerConfiguration.dmaapContentType();
+ this.webClient = webClient;
}
/**
return dmaapTopicName + "/" + consumerGroup + "/" + consumerId;
}
- public DMaaPConsumerReactiveHttpClient createDMaaPWebClient(WebClient webClient) {
- this.webClient = webClient;
- return this;
- }
URI getUri() {
return new DefaultUriBuilderFactory().builder().scheme(dmaapProtocol).host(dmaapHostName).port(dmaapPortNumber)
* ============LICENSE_END=========================================================
*/
-package org.onap.dcaegen2.services.prh.service;
+package org.onap.dcaegen2.services.prh.service.consumer;
import static org.onap.dcaegen2.services.prh.model.logging.MdcVariables.RESPONSE_CODE;
import static org.onap.dcaegen2.services.prh.model.logging.MdcVariables.SERVICE_NAME;
private final String dmaapProtocol;
private final String dmaapTopicName;
private final String dmaapContentType;
-
- private RestTemplate restTemplate;
+ private final RestTemplate restTemplate;
/**
* Constructor DMaaPPublisherReactiveHttpClient.
*
* @param dmaapPublisherConfiguration - DMaaP producer configuration object
*/
- public DMaaPPublisherReactiveHttpClient(DmaapPublisherConfiguration dmaapPublisherConfiguration) {
+ DMaaPPublisherReactiveHttpClient(DmaapPublisherConfiguration dmaapPublisherConfiguration,
+ RestTemplate restTemplate) {
this.dmaapHostName = dmaapPublisherConfiguration.dmaapHostName();
this.dmaapProtocol = dmaapPublisherConfiguration.dmaapProtocol();
this.dmaapPortNumber = dmaapPublisherConfiguration.dmaapPortNumber();
this.dmaapTopicName = dmaapPublisherConfiguration.dmaapTopicName();
this.dmaapContentType = dmaapPublisherConfiguration.dmaapContentType();
+ this.restTemplate = restTemplate;
}
/**
}
- public DMaaPPublisherReactiveHttpClient createDMaaPWebClient(RestTemplate restTemplate) {
- this.restTemplate = restTemplate;
- return this;
- }
-
URI getUri() {
return new DefaultUriBuilderFactory().builder().scheme(dmaapProtocol).host(dmaapHostName).port(dmaapPortNumber)
.path(dmaapTopicName).build();
--- /dev/null
+/*
+ * ============LICENSE_START=======================================================
+ * PNF-REGISTRATION-HANDLER
+ * ================================================================================
+ * Copyright (C) 2018 NOKIA Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.dcaegen2.services.prh.service.producer;
+
+import org.onap.dcaegen2.services.prh.config.DmaapPublisherConfiguration;
+import org.springframework.web.client.RestTemplate;
+
+public class PublisherReactiveHttpClientFactory {
+
+ public DMaaPPublisherReactiveHttpClient create(DmaapPublisherConfiguration publisherConfiguration) {
+ return new DMaaPPublisherReactiveHttpClient(publisherConfiguration, new RestTemplate());
+ }
+
+}
--- /dev/null
+/*
+ * ============LICENSE_START=======================================================
+ * PNF-REGISTRATION-HANDLER
+ * ================================================================================
+ * Copyright (C) 2018 NOKIA Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.dcaegen2.services.prh.service.consumer;
+
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.verify;
+
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
+import org.onap.dcaegen2.services.prh.config.DmaapConsumerConfiguration;
+
+class ConsumerReactiveHttpClientFactoryTest {
+
+ private DmaapConsumerConfiguration dmaapConsumerConfiguration = mock(DmaapConsumerConfiguration.class);
+ private DMaaPReactiveWebClient reactiveWebClient = mock(DMaaPReactiveWebClient.class);
+ private ConsumerReactiveHttpClientFactory httpClientFactory =
+ new ConsumerReactiveHttpClientFactory(reactiveWebClient);
+
+ @Test
+ void create_shouldReturnNotNullFactoryInstance() {
+ Assertions.assertNotNull(httpClientFactory.create(dmaapConsumerConfiguration));
+ verify(reactiveWebClient).build();
+ }
+}
\ No newline at end of file
when(consumerConfigurationMock.consumerGroup()).thenReturn("OpenDCAE-c12");
when(consumerConfigurationMock.consumerId()).thenReturn("c12");
- dmaapConsumerReactiveHttpClient = new DMaaPConsumerReactiveHttpClient(consumerConfigurationMock);
webClient = spy(WebClient.builder()
.defaultHeader(HttpHeaders.CONTENT_TYPE, consumerConfigurationMock.dmaapContentType())
.filter(basicAuthentication(consumerConfigurationMock.dmaapUserName(),
consumerConfigurationMock.dmaapUserPassword()))
.build());
+ dmaapConsumerReactiveHttpClient = new DMaaPConsumerReactiveHttpClient(consumerConfigurationMock, webClient);
requestHeadersSpec = mock(RequestHeadersUriSpec.class);
responseSpec = mock(ResponseSpec.class);
}
//when
mockDependantObjects();
doReturn(expectedResult).when(responseSpec).bodyToMono(String.class);
- dmaapConsumerReactiveHttpClient.createDMaaPWebClient(webClient);
Mono<String> response = dmaapConsumerReactiveHttpClient.getDMaaPConsumerResponse();
//then
* ============LICENSE_END=========================================================
*/
-package org.onap.dcaegen2.services.prh.service;
+package org.onap.dcaegen2.services.prh.service.consumer;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import org.springframework.web.client.RestTemplate;
import reactor.test.StepVerifier;
-
-
/**
* @author <a href="mailto:przemyslaw.wasala@nokia.com">Przemysław Wąsala</a> on 7/4/18
*/
class DMaaPPublisherReactiveHttpClientTest {
private DMaaPPublisherReactiveHttpClient dmaapPublisherReactiveHttpClient;
-
private DmaapPublisherConfiguration dmaapPublisherConfigurationMock = mock(
- DmaapPublisherConfiguration.class);
+ DmaapPublisherConfiguration.class);
private ConsumerDmaapModel consumerDmaapModel = new ConsumerDmaapModelForUnitTest();
+ private RestTemplate restTemplate = mock(RestTemplate.class);
@BeforeEach
when(dmaapPublisherConfigurationMock.dmaapUserPassword()).thenReturn("PRH");
when(dmaapPublisherConfigurationMock.dmaapContentType()).thenReturn("application/json");
when(dmaapPublisherConfigurationMock.dmaapTopicName()).thenReturn("unauthenticated.PNF_READY");
- dmaapPublisherReactiveHttpClient = new DMaaPPublisherReactiveHttpClient(dmaapPublisherConfigurationMock);
+ dmaapPublisherReactiveHttpClient =
+ new DMaaPPublisherReactiveHttpClient(dmaapPublisherConfigurationMock, restTemplate);
}
//given
int responseSuccess = 200;
ResponseEntity<String> mockedResponseEntity = mock(ResponseEntity.class);
- RestTemplate restTemplate = mock(RestTemplate.class);
//when
when(mockedResponseEntity.getStatusCode()).thenReturn(HttpStatus.valueOf(responseSuccess));
doReturn(mockedResponseEntity).when(restTemplate)
- .exchange(any(URI.class), any(HttpMethod.class), any(HttpEntity.class), (Class<Object>) any());
- dmaapPublisherReactiveHttpClient.createDMaaPWebClient(restTemplate);
+ .exchange(any(URI.class), any(HttpMethod.class), any(HttpEntity.class), (Class<Object>) any());
//then
StepVerifier.create(dmaapPublisherReactiveHttpClient.getDMaaPProducerResponse(consumerDmaapModel))
- .expectSubscription().expectNext(mockedResponseEntity).verifyComplete();
+ .expectSubscription().expectNext(mockedResponseEntity).verifyComplete();
}
@Test
void getAppropriateUri_whenPassingCorrectedPathForPnf() {
Assertions.assertEquals(dmaapPublisherReactiveHttpClient.getUri(),
- URI.create("https://54.45.33.2:1234/unauthenticated.PNF_READY"));
+ URI.create("https://54.45.33.2:1234/unauthenticated.PNF_READY"));
}
}
\ No newline at end of file
--- /dev/null
+/*
+ * ============LICENSE_START=======================================================
+ * PNF-REGISTRATION-HANDLER
+ * ================================================================================
+ * Copyright (C) 2018 NOKIA Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.dcaegen2.services.prh.service.producer;
+
+import static org.mockito.Mockito.mock;
+
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
+import org.onap.dcaegen2.services.prh.config.DmaapPublisherConfiguration;
+
+
+class PublisherReactiveHttpClientFactoryTest {
+
+ private DmaapPublisherConfiguration dmaapPublisherConfiguration = mock(DmaapPublisherConfiguration.class);
+ private PublisherReactiveHttpClientFactory httpClientFactory = new PublisherReactiveHttpClientFactory();
+
+ @Test
+ void create_shouldReturnNotNullFactoryInstance() {
+ Assertions.assertNotNull(httpClientFactory.create(dmaapPublisherConfiguration));
+ }
+}
\ No newline at end of file