2 * ============LICENSE_START=======================================================
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
12 * http://www.apache.org/licenses/LICENSE-2.0
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=========================================================
21 package org.onap.aai.babel.service;
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;
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;
39 * Tests {@link RequestHeaders}.
42 public class TestRequestHeaders {
45 * Tests compatibility with the X-ECOMP-* request headers.
48 public void testEcompHeaders() {
49 String transactionId = "transaction-id";
50 String serviceInstanceId = "service-instance-id";
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"));
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)));
65 public void testMultipleHeaderValues() {
66 String transactionId = "transaction-id";
67 String serviceInstanceId = "service-instance-id";
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"));
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)));
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"));
86 HttpHeaders headers = createMockedHeaders(headersMap);
87 RequestHeaders requestHeaders = new RequestHeaders(headers);
88 assertThat(requestHeaders.getRequestId(), is(nullValue()));
89 assertThat(requestHeaders.getInstanceId(), is(nullValue()));
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"));
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()));
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());
111 HttpHeaders headers = createMockedHeaders(headersMap);
112 RequestHeaders requestHeaders = new RequestHeaders(headers);
113 assertThat(requestHeaders.getRequestId(), is(nullValue()));
114 assertThat(requestHeaders.getInstanceId(), is(nullValue()));
118 public void testNullHeaders() {
119 MultivaluedHashMap<String, String> headersMap = new MultivaluedHashMap<>();
120 headersMap.put(RequestHeaders.HEADER_REQUEST_ID, Collections.emptyList());
122 HttpHeaders headers = createMockedHeaders(headersMap);
123 Mockito.when(headers.getRequestHeader(RequestHeaders.HEADER_SERVICE_INSTANCE_ID)).thenReturn(null);
125 RequestHeaders requestHeaders = new RequestHeaders(headers);
126 assertThat(requestHeaders.getRequestId(), is(nullValue()));
127 assertThat(requestHeaders.getInstanceId(), is(nullValue()));
131 public void testToString() {
132 String transactionId = "transaction-id";
133 String serviceInstanceId = "service-instance-id";
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));
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]")));
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);
152 Mockito.when(headers.getRequestHeaders()).thenReturn(headersMap);
156 private List<String> createSingletonList(String listItem) {
157 return Collections.<String>singletonList(listItem);