1 package org.openecomp.sdc.be.components.distribution.engine.rest;
3 import com.github.tomakehurst.wiremock.client.ResponseDefinitionBuilder;
4 import com.github.tomakehurst.wiremock.junit.WireMockRule;
5 import com.github.tomakehurst.wiremock.matching.AnythingPattern;
6 import com.github.tomakehurst.wiremock.matching.UrlPattern;
8 import org.apache.http.HttpHeaders;
9 import org.junit.Before;
10 import org.junit.ClassRule;
11 import org.junit.Test;
12 import org.openecomp.sdc.be.components.distribution.engine.DistributionStatusNotificationEnum;
13 import org.openecomp.sdc.be.components.distribution.engine.DummyDistributionConfigurationManager;
14 import org.openecomp.sdc.be.config.ConfigurationManager;
15 import org.openecomp.sdc.common.api.ConfigurationSource;
16 import org.openecomp.sdc.common.http.client.api.HttpResponse;
17 import org.openecomp.sdc.common.http.config.*;
18 import org.openecomp.sdc.common.impl.ExternalConfiguration;
19 import org.openecomp.sdc.common.impl.FSConfigurationSource;
20 import org.openecomp.sdc.security.SecurityUtil;
22 import static com.github.tomakehurst.wiremock.client.WireMock.*;
23 import static com.github.tomakehurst.wiremock.core.WireMockConfiguration.options;
24 import static org.assertj.core.api.Assertions.assertThat;
25 import static org.mockito.Mockito.when;
27 public class MsoRestClientTest {
29 private static final String MSO_HOST = "127.0.0.1";
30 private static final String MSO_API_URL = "onap/mso/infra/modelDistributions/v1";
31 private static final String DISTRIBUTION_ID = "1000";
33 private MSORestClient msoRestClient;
34 static ConfigurationSource configurationSource = new FSConfigurationSource(ExternalConfiguration.getChangeListener(), "src/test/resources/config/catalog-be");
35 static ConfigurationManager configurationManager = new ConfigurationManager(configurationSource);
39 public static WireMockRule msoRestServer = new WireMockRule(options()
41 .bindAddress(MSO_HOST));
44 public void setupMsoServer() throws Exception {
45 String encodedPw = "";
46 Either<String, String> passkey = SecurityUtil.INSTANCE.decrypt(getPwd());
47 if(passkey.isLeft()) {
48 encodedPw = passkey.left().value();
51 throw new IllegalArgumentException(passkey.right().value());
54 msoRestServer.resetToDefaultMappings();
55 msoRestServer.stubFor(patch(urlMatching(String.format("/%s%s/(.*)", MSO_API_URL, getDistributionsUrl())))
56 .withBasicAuth(getUserName(), encodedPw)
57 .withHeader(HttpHeaders.CONTENT_TYPE, containing("application/json"))
58 .withRequestBody(matchingJsonPath("$.status"))
59 .withRequestBody(matchingJsonPath("$.errorReason", new AnythingPattern()))//error reason is not mandatory
60 .willReturn(aResponse().withStatus(200)));
64 public void setUp() throws Exception {
65 DummyDistributionConfigurationManager distributionEngineConfigurationMock = new DummyDistributionConfigurationManager();
66 when(distributionEngineConfigurationMock.getConfigurationMock().getMsoConfig()).thenReturn(new MsoDummyConfig(msoRestServer.port()));
67 msoRestClient = new MSORestClient();
71 public void notifyDistributionComplete_emptyErrReason() throws Exception {
72 HttpResponse<String> response = msoRestClient.notifyDistributionComplete(DISTRIBUTION_ID, DistributionStatusNotificationEnum.DISTRIBUTION_COMPLETE_OK, "");
73 assertThat(response.getStatusCode()).isEqualTo(200);
76 private int getNumOfRetries() {
77 return ConfigurationManager.getConfigurationManager().getDistributionEngineConfiguration().getMsoConfig().getHttpClientConfig().getNumOfRetries();
81 public void notifyDistributionComplete_noErrReason() throws Exception {
82 HttpResponse<String> response = msoRestClient.notifyDistributionComplete(DISTRIBUTION_ID, DistributionStatusNotificationEnum.DISTRIBUTION_COMPLETE_OK, null);
83 assertThat(response.getStatusCode()).isEqualTo(200);
87 public void notifyDistributionComplete_completeWithError() throws Exception {
88 HttpResponse<String> response = msoRestClient.notifyDistributionComplete(DISTRIBUTION_ID, DistributionStatusNotificationEnum.DISTRIBUTION_COMPLETE_ERROR, "my reason");
89 assertThat(response.getStatusCode()).isEqualTo(200);
93 public void testRetries() throws Exception {
94 int readTimeout = ConfigurationManager.getConfigurationManager().getDistributionEngineConfiguration().getMsoConfig().getHttpClientConfig().getTimeouts().getReadTimeoutMs();
95 int expectedNumOfRetries = getNumOfRetries();
97 UrlPattern msoReqUrlPattern = urlMatching(String.format("/%s%s/(.*)", MSO_API_URL, getDistributionsUrl()));
98 msoRestServer.stubFor(patch(msoReqUrlPattern)
99 .willReturn(new ResponseDefinitionBuilder().withFixedDelay(readTimeout + 1)));
100 HttpResponse<String> response = msoRestClient.notifyDistributionComplete(DISTRIBUTION_ID, DistributionStatusNotificationEnum.DISTRIBUTION_COMPLETE_ERROR, "my reason");
101 verify(expectedNumOfRetries + 1, patchRequestedFor(msoReqUrlPattern));
102 assertThat(response.getStatusCode()).isEqualTo(500);
105 private static String getDistributionsUrl() {
106 return "/distributions";
109 private static String getUserName() {
113 private static String getPwd() {
114 return "OTLEp5lfVhYdyw5EAtTUBQ==";
117 private static class MsoDummyConfig extends ExternalServiceConfig {
120 MsoDummyConfig(int port) {
123 BasicAuthorization basicAuthorization = new BasicAuthorization();
124 basicAuthorization.setUserName(MsoRestClientTest.getUserName());
125 basicAuthorization.setPassword(getPwd());
126 HttpClientConfig httpClientConfig = new HttpClientConfig(new Timeouts(500, 2000), basicAuthorization);
127 httpClientConfig.setNumOfRetries(getNumOfRetries());
128 super.setHttpClientConfig(httpClientConfig);
130 HttpRequestConfig httpRequestConfig = new HttpRequestConfig();
131 httpRequestConfig.setServerRootUrl(String.format("http://%s:%s/%s", MSO_HOST, this.port, MSO_API_URL));
132 httpRequestConfig.getResourceNamespaces().put(MSORestClient.DISTRIBUTIONS_RESOURCE_CONFIG_PARAM, getDistributionsUrl());
133 super.setHttpRequestConfig(httpRequestConfig);
136 int getNumOfRetries() {