0d818671cbe974a5c1c5443288be613cea53e22d
[aai/babel.git] / src / test / java / org / onap / aai / babel / service / TestRequestHeaders.java
1 /**
2  * ============LICENSE_START=======================================================
3  * org.onap.aai
4  * ================================================================================
5  * Copyright © 2017-2018 AT&T Intellectual Property. All rights reserved.
6  * Copyright © 2017-2018 European Software Marketing Ltd.
7  * ================================================================================
8  * Licensed under the Apache License, Version 2.0 (the "License");
9  * you may not use this file except in compliance with the License.
10  * You may obtain a copy of the License at
11  *
12  *       http://www.apache.org/licenses/LICENSE-2.0
13  *
14  * Unless required by applicable law or agreed to in writing, software
15  * distributed under the License is distributed on an "AS IS" BASIS,
16  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17  * See the License for the specific language governing permissions and
18  * limitations under the License.
19  * ============LICENSE_END=========================================================
20  */
21 package org.onap.aai.babel.service;
22
23 import static org.hamcrest.CoreMatchers.equalTo;
24 import static org.hamcrest.CoreMatchers.is;
25 import static org.hamcrest.CoreMatchers.nullValue;
26 import static org.junit.Assert.assertThat;
27
28 import java.util.Arrays;
29 import java.util.Collections;
30 import java.util.List;
31 import java.util.Map.Entry;
32 import javax.ws.rs.core.HttpHeaders;
33 import javax.ws.rs.core.MultivaluedHashMap;
34 import org.junit.Test;
35 import org.mockito.Mockito;
36 import org.onap.aai.babel.request.RequestHeaders;
37
38 /**
39  * Tests {@link RequestHeaders}.
40  *
41  */
42 public class TestRequestHeaders {
43
44     /**
45      * Tests compatibility with the X-ECOMP-* request headers.
46      */
47     @Test
48     public void testECOMPHeaders() {
49         String transactionId = "transaction-id";
50         String serviceInstanceId = "service-instance-id";
51
52         MultivaluedHashMap<String, String> headersMap = new MultivaluedHashMap<>();
53         headersMap.put(RequestHeaders.HEADER_REQUEST_ID, createSingletonList(transactionId));
54         headersMap.put(RequestHeaders.HEADER_SERVICE_INSTANCE_ID, createSingletonList(serviceInstanceId));
55         headersMap.put("X-FromAppId", createSingletonList("app-id"));
56         headersMap.put("Host", createSingletonList("hostname"));
57
58         HttpHeaders headers = createMockedHeaders(headersMap);
59         RequestHeaders requestHeaders = new RequestHeaders(headers);
60         assertThat(requestHeaders.getRequestId(), is(equalTo(transactionId)));
61         assertThat(requestHeaders.getInstanceId(), is(equalTo(serviceInstanceId)));
62     }
63
64     @Test
65     public void testMultipleHeaderValues() {
66         String transactionId = "transaction-id";
67         String serviceInstanceId = "service-instance-id";
68
69         MultivaluedHashMap<String, String> headersMap = new MultivaluedHashMap<>();
70         headersMap.put(RequestHeaders.HEADER_REQUEST_ID, Arrays.asList(transactionId, "fred"));
71         headersMap.put(RequestHeaders.HEADER_SERVICE_INSTANCE_ID, Arrays.asList(serviceInstanceId, "bob"));
72
73         HttpHeaders headers = createMockedHeaders(headersMap);
74         RequestHeaders requestHeaders = new RequestHeaders(headers);
75         assertThat(requestHeaders.getRequestId(), is(equalTo(transactionId)));
76         assertThat(requestHeaders.getInstanceId(), is(equalTo(serviceInstanceId)));
77     }
78
79     @Test
80     public void testStandardHeaders() {
81         MultivaluedHashMap<String, String> headersMap = new MultivaluedHashMap<>();
82         headersMap.put("X-TransactionId", createSingletonList("transaction-id"));
83         headersMap.put("X-FromAppId", createSingletonList("app-id"));
84         headersMap.put("Host", createSingletonList("hostname"));
85
86         HttpHeaders headers = createMockedHeaders(headersMap);
87         RequestHeaders requestHeaders = new RequestHeaders(headers);
88         assertThat(requestHeaders.getRequestId(), is(nullValue()));
89         assertThat(requestHeaders.getInstanceId(), is(nullValue()));
90     }
91
92     @Test
93     public void testHeadersWithTransactionIdSuffix() {
94         MultivaluedHashMap<String, String> headersMap = new MultivaluedHashMap<>();
95         headersMap.put("X-TransactionId", createSingletonList("transaction-id:123"));
96         headersMap.put("X-FromAppId", createSingletonList("app-id"));
97         headersMap.put("Host", createSingletonList("hostname"));
98
99         HttpHeaders headers = createMockedHeaders(headersMap);
100         RequestHeaders requestHeaders = new RequestHeaders(headers);
101         assertThat(requestHeaders.getCorrelationId(), is(equalTo("transaction-id")));
102         assertThat(requestHeaders.getInstanceId(), is(nullValue()));
103     }
104
105     @Test
106     public void testEmptyHeaders() {
107         MultivaluedHashMap<String, String> headersMap = new MultivaluedHashMap<>();
108         headersMap.put(RequestHeaders.HEADER_REQUEST_ID, Collections.emptyList());
109         headersMap.put(RequestHeaders.HEADER_SERVICE_INSTANCE_ID, Collections.emptyList());
110
111         HttpHeaders headers = createMockedHeaders(headersMap);
112         RequestHeaders requestHeaders = new RequestHeaders(headers);
113         assertThat(requestHeaders.getRequestId(), is(nullValue()));
114         assertThat(requestHeaders.getInstanceId(), is(nullValue()));
115     }
116
117     @Test
118     public void testNullHeaders() {
119         MultivaluedHashMap<String, String> headersMap = new MultivaluedHashMap<>();
120         headersMap.put(RequestHeaders.HEADER_REQUEST_ID, Collections.emptyList());
121
122         HttpHeaders headers = createMockedHeaders(headersMap);
123         Mockito.when(headers.getRequestHeader(RequestHeaders.HEADER_SERVICE_INSTANCE_ID)).thenReturn(null);
124
125         RequestHeaders requestHeaders = new RequestHeaders(headers);
126         assertThat(requestHeaders.getRequestId(), is(nullValue()));
127         assertThat(requestHeaders.getInstanceId(), is(nullValue()));
128     }
129
130     @Test
131     public void testToString() {
132         String transactionId = "transaction-id";
133         String serviceInstanceId = "service-instance-id";
134
135         MultivaluedHashMap<String, String> headersMap = new MultivaluedHashMap<>();
136         headersMap.put(RequestHeaders.HEADER_REQUEST_ID, createSingletonList(transactionId));
137         headersMap.put(RequestHeaders.HEADER_SERVICE_INSTANCE_ID, createSingletonList(serviceInstanceId));
138
139         HttpHeaders headers = createMockedHeaders(headersMap);
140         RequestHeaders requestHeaders = new RequestHeaders(headers);
141         assertThat(requestHeaders.toString(), is(equalTo(
142                 "RequestHeaders [requestId=transaction-id, instanceId=service-instance-id, transactionId=null]")));
143     }
144
145     private HttpHeaders createMockedHeaders(MultivaluedHashMap<String, String> headersMap) {
146         HttpHeaders headers = Mockito.mock(HttpHeaders.class);
147         for (Entry<String, List<String>> entry : headersMap.entrySet()) {
148             List<String> valuesList = entry.getValue();
149             String value = valuesList == null || valuesList.isEmpty() ? null : valuesList.get(0);
150             Mockito.when(headers.getHeaderString(entry.getKey())).thenReturn(value);
151         }
152         Mockito.when(headers.getRequestHeaders()).thenReturn(headersMap);
153         return headers;
154     }
155
156     private List<String> createSingletonList(String listItem) {
157         return Collections.<String>singletonList(listItem);
158     }
159 }