xref: /OpenGrok/plugins/src/test/java/opengrok/auth/plugin/decoders/OSSODecoderTest.java (revision 2f7dccc7cd05ce1957006b093948d5359068ae4f)
1b28a5538SAdam Hornacek /*
2b28a5538SAdam Hornacek  * CDDL HEADER START
3b28a5538SAdam Hornacek  *
4b28a5538SAdam Hornacek  * The contents of this file are subject to the terms of the
5b28a5538SAdam Hornacek  * Common Development and Distribution License (the "License").
6b28a5538SAdam Hornacek  * You may not use this file except in compliance with the License.
7b28a5538SAdam Hornacek  *
8b28a5538SAdam Hornacek  * See LICENSE.txt included in this distribution for the specific
9b28a5538SAdam Hornacek  * language governing permissions and limitations under the License.
10b28a5538SAdam Hornacek  *
11b28a5538SAdam Hornacek  * When distributing Covered Code, include this CDDL HEADER in each
12b28a5538SAdam Hornacek  * file and include the License file at LICENSE.txt.
13b28a5538SAdam Hornacek  * If applicable, add the following below this CDDL HEADER, with the
14b28a5538SAdam Hornacek  * fields enclosed by brackets "[]" replaced with your own identifying
15b28a5538SAdam Hornacek  * information: Portions Copyright [yyyy] [name of copyright owner]
16b28a5538SAdam Hornacek  *
17b28a5538SAdam Hornacek  * CDDL HEADER END
18b28a5538SAdam Hornacek  */
19b28a5538SAdam Hornacek 
20b28a5538SAdam Hornacek /*
21*2f7dccc7SAdam Hornacek  * Copyright (c) 2017, 2021, Oracle and/or its affiliates. All rights reserved.
22b28a5538SAdam Hornacek  */
23b28a5538SAdam Hornacek package opengrok.auth.plugin.decoders;
24b28a5538SAdam Hornacek 
25b28a5538SAdam Hornacek import static opengrok.auth.plugin.decoders.OSSOHeaderDecoder.OSSO_COOKIE_TIMESTAMP_HEADER;
26b28a5538SAdam Hornacek import static opengrok.auth.plugin.decoders.OSSOHeaderDecoder.OSSO_SUBSCRIBER_DN_HEADER;
27b28a5538SAdam Hornacek import static opengrok.auth.plugin.decoders.OSSOHeaderDecoder.OSSO_SUBSCRIBER_HEADER;
28b28a5538SAdam Hornacek import static opengrok.auth.plugin.decoders.OSSOHeaderDecoder.OSSO_TIMEOUT_EXCEEDED_HEADER;
29b28a5538SAdam Hornacek import static opengrok.auth.plugin.decoders.OSSOHeaderDecoder.OSSO_USER_DN_HEADER;
30b28a5538SAdam Hornacek import static opengrok.auth.plugin.decoders.OSSOHeaderDecoder.OSSO_USER_GUID_HEADER;
31*2f7dccc7SAdam Hornacek import static org.junit.jupiter.api.Assertions.assertEquals;
32*2f7dccc7SAdam Hornacek import static org.junit.jupiter.api.Assertions.assertFalse;
33*2f7dccc7SAdam Hornacek import static org.junit.jupiter.api.Assertions.assertNotNull;
34*2f7dccc7SAdam Hornacek import static org.junit.jupiter.api.Assertions.assertNull;
351161d3e8SAdam Hornacek 
36b28a5538SAdam Hornacek import opengrok.auth.plugin.entity.User;
37b28a5538SAdam Hornacek import opengrok.auth.plugin.util.DummyHttpServletRequestUser;
38*2f7dccc7SAdam Hornacek import org.junit.jupiter.api.BeforeEach;
39*2f7dccc7SAdam Hornacek import org.junit.jupiter.api.Test;
40b28a5538SAdam Hornacek 
41b28a5538SAdam Hornacek /**
42b28a5538SAdam Hornacek  * Test OSSO header decoder.
43b28a5538SAdam Hornacek  * @author Krystof Tulinger
44b28a5538SAdam Hornacek  */
45b28a5538SAdam Hornacek public class OSSODecoderTest {
46b28a5538SAdam Hornacek 
47b28a5538SAdam Hornacek     DummyHttpServletRequestUser dummyRequest;
48b28a5538SAdam Hornacek     OSSOHeaderDecoder decoder = new OSSOHeaderDecoder();
49b28a5538SAdam Hornacek 
50*2f7dccc7SAdam Hornacek     @BeforeEach
setUp()51b28a5538SAdam Hornacek     public void setUp() {
52b28a5538SAdam Hornacek         dummyRequest = new DummyHttpServletRequestUser();
53b28a5538SAdam Hornacek         dummyRequest.setHeader(OSSO_COOKIE_TIMESTAMP_HEADER, "5761172f");
54b28a5538SAdam Hornacek         dummyRequest.setHeader(OSSO_TIMEOUT_EXCEEDED_HEADER, "");
55b28a5538SAdam Hornacek         dummyRequest.setHeader(OSSO_SUBSCRIBER_DN_HEADER, "");
56b28a5538SAdam Hornacek         dummyRequest.setHeader(OSSO_SUBSCRIBER_HEADER, "");
57b28a5538SAdam Hornacek         dummyRequest.setHeader(OSSO_USER_DN_HEADER, "007");
58b28a5538SAdam Hornacek         dummyRequest.setHeader(OSSO_USER_GUID_HEADER, "123456");
59b28a5538SAdam Hornacek     }
60b28a5538SAdam Hornacek 
61b28a5538SAdam Hornacek     /**
62b28a5538SAdam Hornacek      * Test of fromRequest method, of class User.
63b28a5538SAdam Hornacek      */
testAll()64b28a5538SAdam Hornacek     public void testAll() {
65b28a5538SAdam Hornacek         dummyRequest.setHeader(OSSO_COOKIE_TIMESTAMP_HEADER, "5761172f");
66b28a5538SAdam Hornacek         dummyRequest.setHeader(OSSO_TIMEOUT_EXCEEDED_HEADER, "false");
67b28a5538SAdam Hornacek         dummyRequest.setHeader(OSSO_SUBSCRIBER_DN_HEADER, "dn=example.com");
68b28a5538SAdam Hornacek         dummyRequest.setHeader(OSSO_SUBSCRIBER_HEADER, "example.com");
69b28a5538SAdam Hornacek         dummyRequest.setHeader(OSSO_USER_DN_HEADER, "dn=specific.dn");
70b28a5538SAdam Hornacek         dummyRequest.setHeader(OSSO_USER_GUID_HEADER, "123456");
71b28a5538SAdam Hornacek 
72b28a5538SAdam Hornacek         User result = decoder.fromRequest(dummyRequest);
73b28a5538SAdam Hornacek 
74*2f7dccc7SAdam Hornacek         assertNotNull(result);
75*2f7dccc7SAdam Hornacek         assertEquals("dn=specific.dn", result.getUsername());
76*2f7dccc7SAdam Hornacek         assertEquals("123456", result.getId());
77*2f7dccc7SAdam Hornacek         assertFalse(result.getTimeouted());
78*2f7dccc7SAdam Hornacek         assertEquals(Long.parseLong("1465980719000"), result.getCookieTimestamp().getTime());
79*2f7dccc7SAdam Hornacek         assertFalse(result.isTimeouted());
80b28a5538SAdam Hornacek     }
81b28a5538SAdam Hornacek 
82b28a5538SAdam Hornacek     /**
83b28a5538SAdam Hornacek      * Test of getUserId method, of class User.
84b28a5538SAdam Hornacek      */
85b28a5538SAdam Hornacek     @Test
testGetUserId()86b28a5538SAdam Hornacek     public void testGetUserId() {
87b28a5538SAdam Hornacek         String[] tests = {
88b28a5538SAdam Hornacek                 "123456",
89b28a5538SAdam Hornacek                 "sd45gfgf5sd4g5ffd54g",
90b28a5538SAdam Hornacek                 "ě5 1g56ew1tč6516re5g1g65d1g65d"
91b28a5538SAdam Hornacek         };
92b28a5538SAdam Hornacek 
931161d3e8SAdam Hornacek         for (String test : tests) {
941161d3e8SAdam Hornacek             dummyRequest.setHeader(OSSO_USER_GUID_HEADER, test);
95b28a5538SAdam Hornacek             User result = decoder.fromRequest(dummyRequest);
96*2f7dccc7SAdam Hornacek             assertNotNull(result);
97*2f7dccc7SAdam Hornacek             assertEquals(test, result.getId());
98b28a5538SAdam Hornacek         }
99b28a5538SAdam Hornacek     }
100b28a5538SAdam Hornacek 
101b28a5538SAdam Hornacek     /**
102b28a5538SAdam Hornacek      * Test of getUserDn method, of class User.
103b28a5538SAdam Hornacek      */
104b28a5538SAdam Hornacek     @Test
testGetUserDn()105b28a5538SAdam Hornacek     public void testGetUserDn() {
106b28a5538SAdam Hornacek         String[] tests = {
107b28a5538SAdam Hornacek                 "123456",
108b28a5538SAdam Hornacek                 "sd45gfgf5sd4g5ffd54g",
109b28a5538SAdam Hornacek                 "ě5 1g56ew1tč6516re5g1g65d1g65d"
110b28a5538SAdam Hornacek         };
111b28a5538SAdam Hornacek 
1121161d3e8SAdam Hornacek         for (String test : tests) {
1131161d3e8SAdam Hornacek             dummyRequest.setHeader(OSSO_USER_DN_HEADER, test);
114b28a5538SAdam Hornacek             User result = decoder.fromRequest(dummyRequest);
115*2f7dccc7SAdam Hornacek             assertNotNull(result);
116*2f7dccc7SAdam Hornacek             assertEquals(test, result.getUsername());
117b28a5538SAdam Hornacek         }
118b28a5538SAdam Hornacek     }
119b28a5538SAdam Hornacek 
120b28a5538SAdam Hornacek     /**
121b28a5538SAdam Hornacek      * Test of getCookieTimestamp method, of class User.
122b28a5538SAdam Hornacek      */
123b28a5538SAdam Hornacek     @Test
testGetCookieTimestamp()124b28a5538SAdam Hornacek     public void testGetCookieTimestamp() {
1251161d3e8SAdam Hornacek         String[] tests = {"123456", "5761172f", "58d137be"};
1261161d3e8SAdam Hornacek         long[] expected = {1193046000L, 1465980719000L, 1490106302000L};
127b28a5538SAdam Hornacek 
128b28a5538SAdam Hornacek         for (int i = 0; i < tests.length; i++) {
129b28a5538SAdam Hornacek             dummyRequest.setHeader(OSSO_COOKIE_TIMESTAMP_HEADER, tests[i]);
130b28a5538SAdam Hornacek             User result = decoder.fromRequest(dummyRequest);
131*2f7dccc7SAdam Hornacek             assertNotNull(result);
132*2f7dccc7SAdam Hornacek             assertEquals(expected[i], result.getCookieTimestamp().getTime());
133b28a5538SAdam Hornacek         }
134b28a5538SAdam Hornacek     }
135b28a5538SAdam Hornacek 
136b28a5538SAdam Hornacek     /**
137b28a5538SAdam Hornacek      * Test of getCookieTimestamp method, of class User.
138b28a5538SAdam Hornacek      */
139b28a5538SAdam Hornacek     @Test
testInvalidGetCookieTimestamp()140b28a5538SAdam Hornacek     public void testInvalidGetCookieTimestamp() {
141b28a5538SAdam Hornacek         String[] tests = {
142b28a5538SAdam Hornacek                 "sd45gfgf5sd4g5ffd54g",
143b28a5538SAdam Hornacek                 "ě5 1g56ew1tč6516re5g1g65d1g65d",
144b28a5538SAdam Hornacek                 "",
145b28a5538SAdam Hornacek                 "ffffx" // not a hex number
146b28a5538SAdam Hornacek         };
147b28a5538SAdam Hornacek 
1481161d3e8SAdam Hornacek         for (String test : tests) {
1491161d3e8SAdam Hornacek             User u;
1501161d3e8SAdam Hornacek             dummyRequest.setHeader(OSSO_COOKIE_TIMESTAMP_HEADER, test);
151*2f7dccc7SAdam Hornacek             assertNotNull(u = decoder.fromRequest(dummyRequest));
152*2f7dccc7SAdam Hornacek             assertNull(u.getCookieTimestamp());
153b28a5538SAdam Hornacek         }
154b28a5538SAdam Hornacek     }
155b28a5538SAdam Hornacek 
156b28a5538SAdam Hornacek     /**
157b28a5538SAdam Hornacek      * Test of getTimeoutExceeded method, of class User.
158b28a5538SAdam Hornacek      */
159b28a5538SAdam Hornacek     @Test
testGetTimeouted()160b28a5538SAdam Hornacek     public void testGetTimeouted() {
1611161d3e8SAdam Hornacek         String[] tests = {"false", "true", "FALSE", "TRUE", "abcd"};
1621161d3e8SAdam Hornacek         boolean[] expected = {false, true, false, true, false};
163b28a5538SAdam Hornacek 
164b28a5538SAdam Hornacek         for (int i = 0; i < tests.length; i++) {
165b28a5538SAdam Hornacek             dummyRequest.setHeader(OSSO_TIMEOUT_EXCEEDED_HEADER, tests[i]);
166b28a5538SAdam Hornacek             User result = decoder.fromRequest(dummyRequest);
167b28a5538SAdam Hornacek             if (expected[i]) {
168*2f7dccc7SAdam Hornacek                 assertNull(result);
169b28a5538SAdam Hornacek             } else {
170*2f7dccc7SAdam Hornacek                 assertNotNull(result);
171b28a5538SAdam Hornacek             }
172b28a5538SAdam Hornacek         }
173b28a5538SAdam Hornacek     }
174b28a5538SAdam Hornacek }
175