/* * Copyright 1999-2010 University of Chicago * * Licensed 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.globus.gsi.gssapi.jaas; import org.globus.gsi.gssapi.jaas.JaasSubject; import java.security.PrivilegedAction; import java.security.AccessController; import javax.security.auth.Subject; import junit.framework.TestCase; public class GlobusSubjectTest extends TestCase { private static final String CRED = "testCred1"; private static final String CRED2 = "testCred2"; public void testSubject() throws Exception { Subject subject = new Subject(); subject.getPublicCredentials().add(CRED); TestAction action = new TestAction(); JaasSubject.doAs(subject, action); assertEquals(subject, action.subject1); assertEquals(subject, action.innerSubject); assertEquals(subject, action.subject2); } class TestAction implements PrivilegedAction { Subject subject1, innerSubject, subject2; public Object run() { this.subject1 = JaasSubject.getCurrentSubject(); this.innerSubject = (Subject)AccessController.doPrivileged(new PrivilegedAction() { public Object run() { return JaasSubject.getCurrentSubject(); } }); this.subject2 = JaasSubject.getCurrentSubject(); return null; } } public void testNestedSubject() throws Exception { Subject subject = new Subject(); subject.getPublicCredentials().add(CRED); Subject anotherSubject = new Subject(); anotherSubject.getPublicCredentials().add(CRED2); NestedTestAction action = new NestedTestAction(anotherSubject); JaasSubject.doAs(subject, action); assertEquals(subject, action.subject1); assertEquals(subject, action.subject2); assertEquals(anotherSubject, action.innerSubject1); assertEquals(anotherSubject, action.innerSubject2); assertEquals(anotherSubject, action.innerInnerSubject); } class NestedTestAction implements PrivilegedAction { Subject subject1, subject2; Subject innerSubject1, innerSubject2, innerInnerSubject; Subject anotherSubject; public NestedTestAction(Subject anotherSubject) { this.anotherSubject = anotherSubject; } public Object run() { this.subject1 = JaasSubject.getCurrentSubject(); TestAction action = new TestAction(); JaasSubject.doAs(anotherSubject, action); this.innerSubject1 = action.subject1; this.innerSubject2 = action.subject2; this.innerInnerSubject = action.innerSubject; this.subject2 = JaasSubject.getCurrentSubject(); return null; } } public void testGetSubjectSameThread() throws Exception { Subject subject = new Subject(); subject.getPublicCredentials().add(CRED); SimpleTestAction action = new SimpleTestAction(); Subject returnedSubject = (Subject)JaasSubject.doAs(subject, action); assertEquals(subject, returnedSubject); } class SimpleTestAction implements PrivilegedAction { public Object run() { return JaasSubject.getCurrentSubject(); } } public void testGetSubjectInheritThread() throws Exception { Subject subject = new Subject(); subject.getPublicCredentials().add(CRED); ThreadTestAction action = new ThreadTestAction(); Subject returnedSubject = (Subject)JaasSubject.doAs(subject, action); assertEquals(subject, returnedSubject); } class ThreadTestAction implements PrivilegedAction { public Object run() { TestThread t = new TestThread(); t.start(); try { t.join(); } catch (Exception e) { } return t.subject; } } class TestThread extends Thread { Subject subject; public void run() { this.subject = JaasSubject.getCurrentSubject(); } } }