KNOX-1065 - Add some unit tests for the DefaultTokenAuthorityService
Project: http://git-wip-us.apache.org/repos/asf/knox/repo Commit: http://git-wip-us.apache.org/repos/asf/knox/commit/78ef4e50 Tree: http://git-wip-us.apache.org/repos/asf/knox/tree/78ef4e50 Diff: http://git-wip-us.apache.org/repos/asf/knox/diff/78ef4e50 Branch: refs/heads/KNOX-1049 Commit: 78ef4e50ba6f7522aa363d5d1df8f8d04320003e Parents: c2ca443 Author: Colm O hEigeartaigh <[email protected]> Authored: Mon Sep 25 11:58:24 2017 +0100 Committer: Colm O hEigeartaigh <[email protected]> Committed: Mon Sep 25 11:58:24 2017 +0100 ---------------------------------------------------------------------- .../impl/DefaultTokenAuthorityServiceTest.java | 160 +++++++++++++++++++ .../resources/keystores/server-keystore.jks | Bin 0 -> 1387 bytes 2 files changed, 160 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/knox/blob/78ef4e50/gateway-server/src/test/java/org/apache/hadoop/gateway/services/token/impl/DefaultTokenAuthorityServiceTest.java ---------------------------------------------------------------------- diff --git a/gateway-server/src/test/java/org/apache/hadoop/gateway/services/token/impl/DefaultTokenAuthorityServiceTest.java b/gateway-server/src/test/java/org/apache/hadoop/gateway/services/token/impl/DefaultTokenAuthorityServiceTest.java new file mode 100644 index 0000000..7cc9971 --- /dev/null +++ b/gateway-server/src/test/java/org/apache/hadoop/gateway/services/token/impl/DefaultTokenAuthorityServiceTest.java @@ -0,0 +1,160 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.hadoop.gateway.services.token.impl; + +import java.io.File; +import java.security.Principal; +import java.util.HashMap; + +import org.apache.hadoop.gateway.config.GatewayConfig; +import org.apache.hadoop.gateway.services.security.AliasService; +import org.apache.hadoop.gateway.services.security.KeystoreService; +import org.apache.hadoop.gateway.services.security.MasterService; +import org.apache.hadoop.gateway.services.security.impl.DefaultKeystoreService; +import org.apache.hadoop.gateway.services.security.token.JWTokenAuthority; +import org.apache.hadoop.gateway.services.security.token.impl.JWT; +import org.easymock.EasyMock; +import org.junit.Test; + +/** + * Some unit tests for the DefaultTokenAuthorityService. + */ +public class DefaultTokenAuthorityServiceTest extends org.junit.Assert { + + @Test + public void testTokenCreation() throws Exception { + + Principal principal = EasyMock.createNiceMock(Principal.class); + EasyMock.expect(principal.getName()).andReturn("[email protected]"); + + GatewayConfig config = EasyMock.createNiceMock(GatewayConfig.class); + String basedir = System.getProperty("basedir"); + if (basedir == null) { + basedir = new File(".").getCanonicalPath(); + } + + EasyMock.expect(config.getGatewaySecurityDir()).andReturn(basedir + "/target/test-classes"); + EasyMock.expect(config.getSigningKeystoreName()).andReturn("server-keystore.jks"); + EasyMock.expect(config.getSigningKeyAlias()).andReturn("server").anyTimes(); + + MasterService ms = EasyMock.createNiceMock(MasterService.class); + EasyMock.expect(ms.getMasterSecret()).andReturn("horton".toCharArray()); + + AliasService as = EasyMock.createNiceMock(AliasService.class); + EasyMock.expect(as.getGatewayIdentityPassphrase()).andReturn("horton".toCharArray()); + + EasyMock.replay(principal, config, ms, as); + + KeystoreService ks = new DefaultKeystoreService(); + ((DefaultKeystoreService)ks).setMasterService(ms); + + ((DefaultKeystoreService)ks).init(config, new HashMap<String, String>()); + + JWTokenAuthority ta = new DefaultTokenAuthorityService(); + ((DefaultTokenAuthorityService)ta).setAliasService(as); + ((DefaultTokenAuthorityService)ta).setKeystoreService(ks); + + ((DefaultTokenAuthorityService)ta).init(config, new HashMap<String, String>()); + + JWT token = ta.issueToken(principal, "RS256"); + assertEquals("KNOXSSO", token.getIssuer()); + assertEquals("[email protected]", token.getSubject()); + } + + @Test + public void testTokenCreationAudience() throws Exception { + + Principal principal = EasyMock.createNiceMock(Principal.class); + EasyMock.expect(principal.getName()).andReturn("[email protected]"); + + GatewayConfig config = EasyMock.createNiceMock(GatewayConfig.class); + String basedir = System.getProperty("basedir"); + if (basedir == null) { + basedir = new File(".").getCanonicalPath(); + } + + EasyMock.expect(config.getGatewaySecurityDir()).andReturn(basedir + "/target/test-classes"); + EasyMock.expect(config.getSigningKeystoreName()).andReturn("server-keystore.jks"); + EasyMock.expect(config.getSigningKeyAlias()).andReturn("server").anyTimes(); + + MasterService ms = EasyMock.createNiceMock(MasterService.class); + EasyMock.expect(ms.getMasterSecret()).andReturn("horton".toCharArray()); + + AliasService as = EasyMock.createNiceMock(AliasService.class); + EasyMock.expect(as.getGatewayIdentityPassphrase()).andReturn("horton".toCharArray()); + + EasyMock.replay(principal, config, ms, as); + + KeystoreService ks = new DefaultKeystoreService(); + ((DefaultKeystoreService)ks).setMasterService(ms); + + ((DefaultKeystoreService)ks).init(config, new HashMap<String, String>()); + + JWTokenAuthority ta = new DefaultTokenAuthorityService(); + ((DefaultTokenAuthorityService)ta).setAliasService(as); + ((DefaultTokenAuthorityService)ta).setKeystoreService(ks); + + ((DefaultTokenAuthorityService)ta).init(config, new HashMap<String, String>()); + + JWT token = ta.issueToken(principal, "https://login.example.com", "RS256"); + assertEquals("KNOXSSO", token.getIssuer()); + assertEquals("[email protected]", token.getSubject()); + assertEquals("https://login.example.com", token.getAudience()); + } + + @Test + public void testTokenCreationNullAudience() throws Exception { + + Principal principal = EasyMock.createNiceMock(Principal.class); + EasyMock.expect(principal.getName()).andReturn("[email protected]"); + + GatewayConfig config = EasyMock.createNiceMock(GatewayConfig.class); + String basedir = System.getProperty("basedir"); + if (basedir == null) { + basedir = new File(".").getCanonicalPath(); + } + + EasyMock.expect(config.getGatewaySecurityDir()).andReturn(basedir + "/target/test-classes"); + EasyMock.expect(config.getSigningKeystoreName()).andReturn("server-keystore.jks"); + EasyMock.expect(config.getSigningKeyAlias()).andReturn("server").anyTimes(); + + MasterService ms = EasyMock.createNiceMock(MasterService.class); + EasyMock.expect(ms.getMasterSecret()).andReturn("horton".toCharArray()); + + AliasService as = EasyMock.createNiceMock(AliasService.class); + EasyMock.expect(as.getGatewayIdentityPassphrase()).andReturn("horton".toCharArray()); + + EasyMock.replay(principal, config, ms, as); + + KeystoreService ks = new DefaultKeystoreService(); + ((DefaultKeystoreService)ks).setMasterService(ms); + + ((DefaultKeystoreService)ks).init(config, new HashMap<String, String>()); + + JWTokenAuthority ta = new DefaultTokenAuthorityService(); + ((DefaultTokenAuthorityService)ta).setAliasService(as); + ((DefaultTokenAuthorityService)ta).setKeystoreService(ks); + + ((DefaultTokenAuthorityService)ta).init(config, new HashMap<String, String>()); + + JWT token = ta.issueToken(principal, null, "RS256"); + assertEquals("KNOXSSO", token.getIssuer()); + assertEquals("[email protected]", token.getSubject()); + } + +} http://git-wip-us.apache.org/repos/asf/knox/blob/78ef4e50/gateway-server/src/test/resources/keystores/server-keystore.jks ---------------------------------------------------------------------- diff --git a/gateway-server/src/test/resources/keystores/server-keystore.jks b/gateway-server/src/test/resources/keystores/server-keystore.jks new file mode 100644 index 0000000..570c92c Binary files /dev/null and b/gateway-server/src/test/resources/keystores/server-keystore.jks differ
