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