Sync Integ to Master
[sdc.git] / catalog-be / src / test / java / org / openecomp / sdc / be / components / distribution / engine / rest / MsoRestClientTest.java
1 package org.openecomp.sdc.be.components.distribution.engine.rest;
2
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;
7 import fj.data.Either;
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.http.client.api.HttpResponse;
16 import org.openecomp.sdc.common.http.config.*;
17 import org.openecomp.sdc.security.SecurityUtil;
18
19 import static com.github.tomakehurst.wiremock.client.WireMock.*;
20 import static com.github.tomakehurst.wiremock.core.WireMockConfiguration.options;
21 import static org.assertj.core.api.Assertions.assertThat;
22 import static org.mockito.Mockito.when;
23
24 public class MsoRestClientTest {
25
26     private static final String MSO_HOST = "127.0.0.1";
27     private static final String MSO_API_URL = "onap/mso/infra/modelDistributions/v1";
28     private static final String DISTRIBUTION_ID = "1000";
29
30     private MSORestClient msoRestClient;
31
32     @ClassRule
33     public static WireMockRule msoRestServer = new WireMockRule(options()
34             .dynamicPort()
35             .bindAddress(MSO_HOST));
36
37     @Before
38     public void setupMsoServer() throws Exception {
39         String encodedPw = "";
40         Either<String, String> passkey = SecurityUtil.INSTANCE.decrypt(getPwd());
41         if(passkey.isLeft()) {
42             encodedPw = passkey.left().value();
43         }
44         else {
45             throw new IllegalArgumentException(passkey.right().value());
46         }
47         
48         msoRestServer.resetToDefaultMappings();
49         msoRestServer.stubFor(patch(urlMatching(String.format("/%s%s/(.*)", MSO_API_URL, getDistributionsUrl())))
50                 .withBasicAuth(getUserName(), encodedPw)
51                 .withHeader(HttpHeaders.CONTENT_TYPE, containing("application/json"))
52                 .withRequestBody(matchingJsonPath("$.status"))
53                 .withRequestBody(matchingJsonPath("$.errorReason", new AnythingPattern()))//error reason is not mandatory
54                 .willReturn(aResponse().withStatus(200)));
55     }
56
57     @Before
58     public void setUp() throws Exception {
59         DummyDistributionConfigurationManager distributionEngineConfigurationMock = new DummyDistributionConfigurationManager();
60         when(distributionEngineConfigurationMock.getConfigurationMock().getMsoConfig()).thenReturn(new MsoDummyConfig(msoRestServer.port()));
61         msoRestClient = new MSORestClient();
62     }
63
64     @Test
65     public void notifyDistributionComplete_emptyErrReason() throws Exception {
66         HttpResponse<String> response = msoRestClient.notifyDistributionComplete(DISTRIBUTION_ID, DistributionStatusNotificationEnum.DISTRIBUTION_COMPLETE_OK, "");
67         assertThat(response.getStatusCode()).isEqualTo(200);
68     }
69
70     private int getNumOfRetries() {
71         return ConfigurationManager.getConfigurationManager().getDistributionEngineConfiguration().getMsoConfig().getHttpClientConfig().getNumOfRetries();
72     }
73
74     @Test
75     public void notifyDistributionComplete_noErrReason() throws Exception {
76         HttpResponse<String> response = msoRestClient.notifyDistributionComplete(DISTRIBUTION_ID, DistributionStatusNotificationEnum.DISTRIBUTION_COMPLETE_OK, null);
77         assertThat(response.getStatusCode()).isEqualTo(200);
78     }
79
80     @Test
81     public void notifyDistributionComplete_completeWithError() throws Exception {
82         HttpResponse<String> response = msoRestClient.notifyDistributionComplete(DISTRIBUTION_ID, DistributionStatusNotificationEnum.DISTRIBUTION_COMPLETE_ERROR, "my reason");
83         assertThat(response.getStatusCode()).isEqualTo(200);
84     }
85
86     @Test
87     public void testRetries() throws Exception {
88         int readTimeout = ConfigurationManager.getConfigurationManager().getDistributionEngineConfiguration().getMsoConfig().getHttpClientConfig().getTimeouts().getReadTimeoutMs();
89         int expectedNumOfRetries = getNumOfRetries();
90
91         UrlPattern msoReqUrlPattern = urlMatching(String.format("/%s%s/(.*)", MSO_API_URL, getDistributionsUrl()));
92         msoRestServer.stubFor(patch(msoReqUrlPattern)
93                 .willReturn(new ResponseDefinitionBuilder().withFixedDelay(readTimeout + 1)));
94         HttpResponse<String> response = msoRestClient.notifyDistributionComplete(DISTRIBUTION_ID, DistributionStatusNotificationEnum.DISTRIBUTION_COMPLETE_ERROR, "my reason");
95         verify(expectedNumOfRetries + 1, patchRequestedFor(msoReqUrlPattern));
96         assertThat(response.getStatusCode()).isEqualTo(500);
97     }
98
99     private static String getDistributionsUrl() {
100         return "/distributions";
101     }
102
103     private static String getUserName() {
104         return "asdc";
105     }
106
107     private static String getPwd() {
108         return "OTLEp5lfVhYdyw5EAtTUBQ==";
109     }
110
111     private static class MsoDummyConfig extends ExternalServiceConfig {
112         int port;
113
114         MsoDummyConfig(int port) {
115             this.port = port;
116
117             BasicAuthorization basicAuthorization = new BasicAuthorization();
118             basicAuthorization.setUserName(MsoRestClientTest.getUserName());
119             basicAuthorization.setPassword(getPwd());
120             HttpClientConfig httpClientConfig = new HttpClientConfig(new Timeouts(500, 2000), basicAuthorization);
121             httpClientConfig.setNumOfRetries(getNumOfRetries());
122             super.setHttpClientConfig(httpClientConfig);
123
124             HttpRequestConfig httpRequestConfig = new HttpRequestConfig();
125             httpRequestConfig.setServerRootUrl(String.format("http://%s:%s/%s", MSO_HOST, this.port, MSO_API_URL));
126             httpRequestConfig.getResourceNamespaces().put(MSORestClient.DISTRIBUTIONS_RESOURCE_CONFIG_PARAM, getDistributionsUrl());
127             super.setHttpRequestConfig(httpRequestConfig);
128         }
129
130         int getNumOfRetries() {
131             return 1;
132         }
133     }
134
135 }