2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright © 2025 Deutsche Telekom. All rights reserved.
6 * ================================================================================
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
11 * http://www.apache.org/licenses/LICENSE-2.0
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
18 * ============LICENSE_END=========================================================
20 package org.onap.aai.schemaservice.interceptors.pre;
22 import org.junit.jupiter.api.BeforeEach;
23 import org.junit.jupiter.api.Test;
24 import org.junit.jupiter.api.extension.ExtendWith;
25 import org.mockito.InjectMocks;
26 import org.mockito.Mock;
27 import org.mockito.junit.jupiter.MockitoExtension;
28 import org.mockito.junit.jupiter.MockitoSettings;
29 import org.mockito.quality.Strictness;
30 import org.onap.aai.schemaservice.service.AuthorizationService;
31 import javax.ws.rs.container.ContainerRequestContext;
32 import javax.ws.rs.core.MediaType;
33 import javax.ws.rs.core.Response;
34 import javax.ws.rs.core.UriInfo;
35 import java.lang.reflect.Method;
37 import java.util.Arrays;
38 import java.util.List;
39 import java.util.Optional;
40 import static org.mockito.Mockito.*;
41 import static org.junit.jupiter.api.Assertions.assertEquals;
42 import static org.junit.jupiter.api.Assertions.assertTrue;
44 @ExtendWith(MockitoExtension.class)
45 @MockitoSettings(strictness = Strictness.LENIENT)
46 public class OneWaySslAuthorizationTest {
49 private AuthorizationService authorizationService;
52 private ContainerRequestContext containerRequestContext;
55 private OneWaySslAuthorization oneWaySslAuthorization;
59 lenient().when(authorizationService.checkIfUserAuthorized(anyString())).thenReturn(true);
63 public void testFilterWithValidBasicAuth() throws Exception {
64 String basicAuth = "Basic validToken";
65 List<MediaType> acceptHeaderValues = Arrays.asList(MediaType.APPLICATION_JSON_TYPE);
67 when(containerRequestContext.getHeaderString("Authorization")).thenReturn(basicAuth);
68 when(containerRequestContext.getAcceptableMediaTypes()).thenReturn(acceptHeaderValues);
70 UriInfo uriInfoMock = mock(UriInfo.class);
71 when(containerRequestContext.getUriInfo()).thenReturn(uriInfoMock);
72 when(uriInfoMock.getRequestUri()).thenReturn(URI.create("http://localhost/some/other/path"));
73 when(uriInfoMock.getPath()).thenReturn("/some/other/path");
75 oneWaySslAuthorization.filter(containerRequestContext);
77 verify(containerRequestContext, times(0)).abortWith(any());
81 public void testFilterWithInvalidBasicAuth() throws Exception {
82 String basicAuth = "Basic invalidToken";
83 List<MediaType> acceptHeaderValues = Arrays.asList(MediaType.APPLICATION_JSON_TYPE);
85 UriInfo uriInfoMock = mock(UriInfo.class);
86 when(containerRequestContext.getUriInfo()).thenReturn(uriInfoMock);
87 when(uriInfoMock.getRequestUri()).thenReturn(URI.create("http://localhost/some/other/path"));
88 when(uriInfoMock.getPath()).thenReturn("/some/other/path");
90 when(containerRequestContext.getHeaderString("Authorization")).thenReturn(basicAuth);
91 when(containerRequestContext.getAcceptableMediaTypes()).thenReturn(acceptHeaderValues);
93 when(authorizationService.checkIfUserAuthorized("invalidToken")).thenReturn(false);
95 oneWaySslAuthorization.filter(containerRequestContext);
97 verify(containerRequestContext, times(1)).abortWith(any(Response.class));
101 public void testFilterWithNoAuthorizationHeader() throws Exception {
102 String basicAuth = null;
103 List<MediaType> acceptHeaderValues = Arrays.asList(MediaType.APPLICATION_JSON_TYPE);
105 when(containerRequestContext.getHeaderString("Authorization")).thenReturn(basicAuth);
106 when(containerRequestContext.getAcceptableMediaTypes()).thenReturn(acceptHeaderValues);
108 UriInfo uriInfoMock = mock(UriInfo.class);
109 when(containerRequestContext.getUriInfo()).thenReturn(uriInfoMock);
110 when(uriInfoMock.getRequestUri()).thenReturn(URI.create("http://localhost/some/other/path"));
111 when(uriInfoMock.getPath()).thenReturn("/some/other/path");
113 oneWaySslAuthorization.filter(containerRequestContext);
115 verify(containerRequestContext, times(1)).abortWith(any(Response.class));
119 public void testFilterWithInvalidAuthorizationHeaderFormat() throws Exception {
120 String basicAuth = "Bearer invalidToken"; // Header doesn't start with "Basic "
121 List<MediaType> acceptHeaderValues = Arrays.asList(MediaType.APPLICATION_JSON_TYPE);
123 when(containerRequestContext.getHeaderString("Authorization")).thenReturn(basicAuth);
124 when(containerRequestContext.getAcceptableMediaTypes()).thenReturn(acceptHeaderValues);
126 UriInfo uriInfoMock = mock(UriInfo.class);
127 when(containerRequestContext.getUriInfo()).thenReturn(uriInfoMock);
128 when(uriInfoMock.getRequestUri()).thenReturn(URI.create("http://localhost/some/other/path"));
129 when(uriInfoMock.getPath()).thenReturn("/some/other/path");
131 oneWaySslAuthorization.filter(containerRequestContext);
133 verify(containerRequestContext, times(1)).abortWith(any(Response.class));
137 public void testFilterForEchoPath() throws Exception {
138 String path = "/util/echo";
140 UriInfo uriInfoMock = mock(UriInfo.class);
141 when(containerRequestContext.getUriInfo()).thenReturn(uriInfoMock);
142 when(uriInfoMock.getRequestUri()).thenReturn(URI.create("http://localhost" + path));
143 when(uriInfoMock.getPath()).thenReturn(path);
145 oneWaySslAuthorization.filter(containerRequestContext);
147 verify(containerRequestContext, times(0)).abortWith(any());
151 public void testErrorResponse() throws Exception {
152 Method errorResponseMethod = OneWaySslAuthorization.class.getDeclaredMethod("errorResponse", String.class, List.class);
153 errorResponseMethod.setAccessible(true);
155 String errorCode = "AAI_3300";
156 List<MediaType> acceptHeaderValues = Arrays.asList(MediaType.APPLICATION_JSON_TYPE);
158 Object result = errorResponseMethod.invoke(oneWaySslAuthorization, errorCode, acceptHeaderValues);
160 assertTrue(result instanceof Optional);
161 Optional<Response> responseOptional = (Optional<Response>) result;
162 assertTrue(responseOptional.isPresent());
163 assertEquals(Response.Status.FORBIDDEN.getStatusCode(), responseOptional.get().getStatus());