Merge "Added support for using oauth token for Kafka"
[nonrtric/plt/ranpm.git] / datafilecollector / src / test / java / org / onap / dcaegen2 / collectors / datafile / service / HttpUtilsTest.java
1 /*
2  * ============LICENSE_START======================================================================
3  * Copyright (C) 2018-2019 Nordix Foundation. All rights reserved.
4  * Modifications Copyright (C) 2021 Nokia. All rights reserved.
5  * ===============================================================================================
6  * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
7  * in compliance with the License. You may obtain a copy of the License at
8  *
9  * http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software distributed under the License
12  * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
13  * or implied. See the License for the specific language governing permissions and limitations under
14  * the License.
15  * ============LICENSE_END========================================================================
16  */
17
18 package org.onap.dcaegen2.collectors.datafile.service;
19
20 import static org.junit.jupiter.api.Assertions.assertEquals;
21 import static org.junit.jupiter.api.Assertions.assertFalse;
22 import static org.junit.jupiter.api.Assertions.assertTrue;
23
24 import java.net.URISyntaxException;
25 import java.util.List;
26
27 import org.apache.hc.core5.http.NameValuePair;
28 import org.apache.hc.core5.net.URIBuilder;
29 import org.junit.jupiter.api.Test;
30 import org.onap.dcaegen2.collectors.datafile.commons.FileServerData;
31
32 class HttpUtilsTest {
33
34     private static final String XNF_ADDRESS = "127.0.0.1";
35     private static final int PORT = 443;
36     private static final String JWT_PASSWORD = "thisIsThePassword";
37     private static final String ACCESS_TOKEN = "access_token";
38     private static final String ANOTHER_TOKEN = "another_token";
39     private static final String ANOTHER_DATA = "another_data";
40     private static final String FRAGMENT = "thisIsTheFragment";
41     private static final String USERNAME = "bob";
42     private static final String PASSWORD = "123";
43
44     @Test
45     void shouldReturnSuccessfulResponse() {
46         assertTrue(HttpUtils.isSuccessfulResponseCodeWithDataRouter(200));
47     }
48
49     @Test
50     void shouldReturnBadResponse() {
51         assertFalse(HttpUtils.isSuccessfulResponseCodeWithDataRouter(404));
52     }
53
54     @Test
55     void isSingleQueryWithJWT_validToken() throws URISyntaxException {
56         assertTrue(HttpUtils.isQueryWithSingleJWT(validTokenSingleQueryData()));
57         assertTrue(HttpUtils.isQueryWithSingleJWT(validTokenDoubleQueryData()));
58     }
59
60     @Test
61     void isSingleQueryWithJWT_invalidToken() throws URISyntaxException {
62         assertFalse(HttpUtils.isQueryWithSingleJWT(validQueryNoToken()));
63         assertFalse(HttpUtils.isQueryWithSingleJWT(queryDataDoubleToken()));
64         assertFalse(HttpUtils.isQueryWithSingleJWT(null));
65     }
66
67     @Test
68     void getJWTToken_jWTTokenPresent() throws URISyntaxException {
69         assertEquals(JWT_PASSWORD, HttpUtils.getJWTToken(fileServerDataWithJWTToken()));
70         assertEquals(JWT_PASSWORD, HttpUtils.getJWTToken(fileServerDataWithJWTTokenLongQueryAndFragment()));
71     }
72
73     @Test
74     void getJWTToken_JWTTokenNotPresent() throws URISyntaxException {
75         assertEquals("", HttpUtils.getJWTToken(fileServerDataQueryWithoutToken()));
76     }
77
78     @Test
79     void prepareUri_UriWithoutPort() {
80         FileServerData serverData =
81             FileServerData.builder().serverAddress(XNF_ADDRESS).userId(USERNAME).password(PASSWORD).build();
82         String REMOTE_FILE = "any";
83
84         String retrievedUri = HttpUtils.prepareUri("http", serverData, REMOTE_FILE, 80);
85         assertTrue(retrievedUri.startsWith("http://" + XNF_ADDRESS + ":80"));
86     }
87
88     @Test
89     void prepareUri_verifyUriWithTokenAndFragment() throws URISyntaxException {
90         String file = "/file";
91         String expected = "http://" + XNF_ADDRESS + ":" + PORT + file + "?" + ANOTHER_TOKEN + "=" + ANOTHER_DATA + "&"
92             + ANOTHER_TOKEN + "=" + ANOTHER_DATA + "&" + ANOTHER_TOKEN + "=" + ANOTHER_DATA + "#" + FRAGMENT;
93         assertEquals(expected,
94             HttpUtils.prepareUri("http", fileServerDataWithJWTTokenLongQueryAndFragment(), file, 443));
95     }
96
97     @Test
98     void prepareUri_verifyUriWithoutTokenAndWithoutFragment() throws URISyntaxException {
99         String file = "/file";
100         String expected = "http://" + XNF_ADDRESS + ":" + PORT + file;
101         assertEquals(expected, HttpUtils.prepareUri("http", fileServerDataNoTokenNoFragment(), file, 443));
102     }
103
104     private List<NameValuePair> validTokenSingleQueryData() throws URISyntaxException {
105         String query = "?" + ACCESS_TOKEN + "=" + JWT_PASSWORD;
106         return new URIBuilder(query).getQueryParams();
107     }
108
109     private List<NameValuePair> validTokenDoubleQueryData() throws URISyntaxException {
110         StringBuilder doubleQuery = new StringBuilder();
111         doubleQuery.append("?" + ANOTHER_TOKEN + "=" + ANOTHER_DATA + "&");
112         doubleQuery.append(ACCESS_TOKEN + "=" + JWT_PASSWORD);
113         return new URIBuilder(doubleQuery.toString()).getQueryParams();
114     }
115
116     private List<NameValuePair> validQueryNoToken() throws URISyntaxException {
117         String query = "?" + ANOTHER_TOKEN + "=" + JWT_PASSWORD;
118         return new URIBuilder(query).getQueryParams();
119     }
120
121     private List<NameValuePair> queryDataDoubleToken() throws URISyntaxException {
122         StringBuilder doubleToken = new StringBuilder();
123         doubleToken.append("?" + ACCESS_TOKEN + "=" + JWT_PASSWORD + "&");
124         doubleToken.append(ACCESS_TOKEN + "=" + JWT_PASSWORD + "&");
125         doubleToken.append(ANOTHER_TOKEN + "=" + ANOTHER_DATA);
126         return new URIBuilder(doubleToken.toString()).getQueryParams();
127     }
128
129     private FileServerData fileServerDataWithJWTToken() throws URISyntaxException {
130         String query = "?" + ACCESS_TOKEN + "=" + JWT_PASSWORD;
131
132         return FileServerData.builder().serverAddress(XNF_ADDRESS).userId("").password("").port(PORT)
133             .queryParameters(new URIBuilder(query).getQueryParams()).build();
134     }
135
136     private FileServerData fileServerDataWithJWTTokenLongQueryAndFragment() throws URISyntaxException {
137         StringBuilder query = new StringBuilder();
138         query.append("?" + ANOTHER_TOKEN + "=" + ANOTHER_DATA + "&");
139         query.append(ANOTHER_TOKEN + "=" + ANOTHER_DATA + "&");
140         query.append(ACCESS_TOKEN + "=" + JWT_PASSWORD + "&");
141         query.append(ANOTHER_TOKEN + "=" + ANOTHER_DATA);
142
143         return FileServerData.builder().serverAddress(XNF_ADDRESS).userId("").password("").port(PORT)
144             .queryParameters(new URIBuilder(query.toString()).getQueryParams()).uriRawFragment(FRAGMENT).build();
145     }
146
147     private FileServerData fileServerDataQueryWithoutToken() throws URISyntaxException {
148         StringBuilder query = new StringBuilder();
149         query.append("?" + ANOTHER_TOKEN + "=" + ANOTHER_DATA);
150
151         return FileServerData.builder().serverAddress(XNF_ADDRESS).userId("").password("").port(PORT)
152             .queryParameters(new URIBuilder(query.toString()).getQueryParams()).build();
153     }
154
155     private FileServerData fileServerDataNoTokenNoFragment() throws URISyntaxException {
156         return FileServerData.builder().serverAddress(XNF_ADDRESS).userId("").password("").port(PORT)
157             .queryParameters(new URIBuilder("").getQueryParams()).uriRawFragment("").build();
158     }
159 }