1561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes/*
2561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  Licensed to the Apache Software Foundation (ASF) under one or more
3561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  contributor license agreements.  See the NOTICE file distributed with
4561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  this work for additional information regarding copyright ownership.
5561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  The ASF licenses this file to You under the Apache License, Version 2.0
6561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  (the "License"); you may not use this file except in compliance with
7561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  the License.  You may obtain a copy of the License at
8561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *
9561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *     http://www.apache.org/licenses/LICENSE-2.0
10561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *
11561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  Unless required by applicable law or agreed to in writing, software
12561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  distributed under the License is distributed on an "AS IS" BASIS,
13561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  See the License for the specific language governing permissions and
15561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  limitations under the License.
16561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */
17561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
18561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes/**
19561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes* @author Stepan M. Mishura
20561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes*/
21561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
22561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughespackage javax.security.auth;
23561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
24561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.ByteArrayInputStream;
25561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.ByteArrayOutputStream;
26561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.NotSerializableException;
27561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.ObjectInputStream;
28561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.ObjectOutputStream;
29561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.Serializable;
30561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.security.AccessControlContext;
31561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.security.AccessControlException;
32561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.security.AccessController;
33561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.security.Principal;
34561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.security.PrivilegedAction;
35561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.security.PrivilegedActionException;
36561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.security.PrivilegedExceptionAction;
37561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.security.SecurityPermission;
38561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.HashSet;
39561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.Iterator;
40561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.NoSuchElementException;
41561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.util.Set;
42561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
43561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport org.apache.harmony.auth.internal.SecurityTest;
44561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
45561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport junit.framework.Test;
46561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport junit.framework.TestSuite;
47561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
48561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
49561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes/**
50561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Tests Subject and its inner classes implementation.
51561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */
52561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
53561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughespublic class SubjectTest extends SecurityTest {
54561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
55561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    private static final Principal principal = new Principal() {
56561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        public String getName() {
57561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            return "name";
58561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
59561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    };
60561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
61561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    PrivilegedAction<Object> emptyPAction = new PrivilegedAction<Object>() {
62561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        public Object run() {
63561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            return null;
64561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
65561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    };
66561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
67561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    PrivilegedExceptionAction<Object> emptyPEAction = new PrivilegedExceptionAction<Object>
68561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    () {
69561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        public Object run() {
70561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            return null;
71561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
72561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    };
73561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
74561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    PrivilegedAction<AccessControlContext> contextPAction = new PrivilegedAction<AccessControlContext>() {
75561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        public AccessControlContext run() {
76561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            return AccessController.getContext();
77561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
78561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    };
79561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
80561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    PrivilegedExceptionAction<AccessControlContext> contextPEAction = new PrivilegedExceptionAction<AccessControlContext>() {
81561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        public AccessControlContext run() {
82561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            return AccessController.getContext();
83561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
84561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    };
85561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
86561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    PrivilegedAction<Subject> subjectPAction = new PrivilegedAction<Subject>() {
87561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        public Subject run() {
88561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            return Subject.getSubject(AccessController.getContext());
89561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
90561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    };
91561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
92561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    PrivilegedExceptionAction<Subject> subjectPEAction = new PrivilegedExceptionAction<Subject>() {
93561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        public Subject run() {
94561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            return Subject.getSubject(AccessController.getContext());
95561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
96561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    };
97561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
98561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    private final HashSet<Principal> h1 = new HashSet<Principal>(); // principals
99561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
100561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    private final HashSet<Object> h2 = new HashSet<Object>(); // public credentials
101561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
102561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    private final HashSet<Object> h3 = new HashSet<Object>(); // private credentials
103561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
104561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public static Test suite() throws Exception {
105561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
106561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        TestSuite setSuite = new TestSuite("SubjectSets");
107561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
108561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        setSuite.addTest(new PrincipalTestSuite());
109561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        setSuite.addTest(new PrivateCredentialTestSuite());
110561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        setSuite.addTest(new PublicCredentialTestSuite());
111561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
112561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        setSuite.addTest(new PrincipalClassTestSuite());
113561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        setSuite.addTest(new PrivateCredentialClassTestSuite());
114561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        setSuite.addTest(new PublicCredentialClassTestSuite());
115561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
116561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        TestSuite suite = new TestSuite("Subject");
117561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
118561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        suite.addTestSuite(javax.security.auth.SubjectTest.class);
119561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        suite.addTest(setSuite);
120561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
121561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        return suite;
122561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
123561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
124561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public SubjectTest() {
125561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        super();
126561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
127561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        h1.add(principal);
128561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
129561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        h2.add(new Object());
130561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        h2.add(new Object());
131561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
132561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        h3.add(new Object());
133561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        h3.add(new Object());
134561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        h3.add(new Object());
135561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
136561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
137561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
138561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Testing Subject() constructor
139561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
140561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public final void testSubject() {
141561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Subject subject = new Subject();
142561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
143561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertFalse("Read only state", subject.isReadOnly());
144561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("Principals set", 0, subject.getPrincipals().size());
145561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
146561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("Private credential set", 0, subject
147561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                .getPrivateCredentials().size());
148561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
149561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("Public credential set", 0, subject.getPublicCredentials()
150561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                .size());
151561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
152561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
153561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
154561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Testing Subject(boolean,Set,Set,Set) constructor
155561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
156561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public final void testSubject_3Set() {
157561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
158561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Subject subject = new Subject(false, h1, h2, h3);
159561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
160561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertFalse("Read only state", subject.isReadOnly());
161561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("Principals set", h1, subject.getPrincipals());
162561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
163561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("Private credential set", h3, subject
164561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                .getPrivateCredentials());
165561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
166561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("Public credential set", h2, subject
167561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                .getPublicCredentials());
168561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
169561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // the same but for read only subject
170561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        subject = new Subject(true, h1, h2, h3);
171561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
172561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue("Read only state", subject.isReadOnly());
173561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
174561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("Principals set", 1, subject.getPrincipals().size());
175561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
176561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("Private credential set", 3, subject
177561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                .getPrivateCredentials().size());
178561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
179561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("Public credential set", 2, subject.getPublicCredentials()
180561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                .size());
181561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
182561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
183561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
184561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Testing Subject(boolean,Set,Set,Set) constructor
185561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * in restricted security context
186561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
187561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public final void testSubject_3Set_NoPermissions() {
188561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
189561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // all sets modifications are denied
190561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        denyPermission(new AuthPermission("*"));
191561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
192561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        new Subject(true, h1, h2, h3);
193561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
194561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
195561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
196561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Testing Subject(boolean,Set,Set,Set) constructor
197561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Checks NullPointerException if one of passed set is null
198561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
199561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    @SuppressWarnings("unchecked")
200561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public final void testSubject_3Set_NPE() {
201561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
202561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
203561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            new Subject(false, null, new HashSet(), new HashSet());
204561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("No expected NullPointerException");
205561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (NullPointerException e) {
206561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
207561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
208561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
209561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            new Subject(false, new HashSet(), null, new HashSet());
210561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("No expected NullPointerException");
211561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (NullPointerException e) {
212561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
213561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
214561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
215561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            new Subject(false, new HashSet(), new HashSet(), null);
216561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("No expected NullPointerException");
217561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (NullPointerException e) {
218561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
219561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
220561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
221561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
222561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Testing Subject(boolean,Set,Set,Set) constructor.
223561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Parameter set contains an invalid element.
224561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
225561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    @SuppressWarnings("unchecked")
226561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public final void testSubject_3Set_InvalidSet() {
227561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        HashSet hash = new HashSet();
228561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
229561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        hash.add(null);
230561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
231561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
232561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            new Subject(false, hash, new HashSet(), new HashSet());
233561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
234561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            if (!testing) {
235561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // possible to add 'null' principal via constructor
236561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                fail("No expected NullPointerException");
237561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
238561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (NullPointerException e) {
239561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
240561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
241561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
242561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            new Subject(false, new HashSet(), hash, new HashSet());
243561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
244561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            if (!testing) {
245561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                fail("No expected NullPointerException");
246561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
247561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (NullPointerException e) {
248561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
249561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
250561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
251561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            new Subject(false, new HashSet(), new HashSet(), hash);
252561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
253561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            if (!testing) {
254561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                fail("No expected NullPointerException");
255561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
256561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (NullPointerException e) {
257561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
258561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
259561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        hash.clear();
260561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        hash.add(new Object());
261561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
262561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            new Subject(false, hash, new HashSet(), new HashSet());
263561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
264561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            if (!testing) {
265561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // possible to add 'null' principal via constructor
266561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                fail("No expected IllegalArgumentException");
267561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
268561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (IllegalArgumentException e) {
269561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
270561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
271561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
272561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
273561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Tests SecurityException for Subject.doAs(Subject,PrivilegedAction)
274561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
275561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public final void testACE_doAs_A() throws Exception {
276561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
277561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        denyPermission(new AuthPermission("doAs"));
278561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
279561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            Subject.doAs(new Subject(), emptyPAction);
280561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("No expected AccessControlException");
281561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (AccessControlException e) {
282561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            assertEquals(e, AuthPermission.class);
283561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
284561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
285561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
286561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
287561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Tests SecurityException for Subject.doAs(Subject,PrivilegedExceptionAction)
288561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
289561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public final void testACE_doAs_EA() throws Exception {
290561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
291561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        denyPermission(new AuthPermission("doAs"));
292561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
293561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            Subject.doAs(new Subject(), emptyPEAction);
294561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("No expected AccessControlException");
295561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (AccessControlException e) {
296561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            assertEquals(e, AuthPermission.class);
297561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (PrivilegedActionException e) {
298561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("Unexpected PrivilegedActionException");
299561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
300561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
301561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
302561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
303561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Tests SecurityException for Subject.doAsPrivileged(
304561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     *     Subject,PrivilegedAction,AccessControlContext)
305561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
306561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public final void testACE_doAsPrivileged_A() throws Exception {
307561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
308561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        denyPermission(new AuthPermission("doAsPrivileged"));
309561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
310561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            Subject.doAsPrivileged(new Subject(), emptyPAction, null);
311561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("No expected AccessControlException");
312561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (AccessControlException e) {
313561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            assertEquals(e, AuthPermission.class);
314561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
315561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
316561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
317561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
318561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Tests SecurityException for Subject.doAsPrivileged(
319561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     *     Subject,PrivilegedExceptionAction,AccessControlContext)
320561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
321561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public final void testACE_doAsPrivileged_EA() throws Exception {
322561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
323561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        denyPermission(new AuthPermission("doAsPrivileged"));
324561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
325561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            Subject.doAsPrivileged(new Subject(), emptyPEAction, null);
326561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("No expected AccessControlException");
327561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (AccessControlException e) {
328561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            assertEquals(e, AuthPermission.class);
329561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
330561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
331561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
332561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
333561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Tests SecurityException for Subject.getSubject()
334561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
335561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public final void testACE_getSubject() {
336561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
337561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        denyPermission(new AuthPermission("getSubject"));
338561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
339561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            Subject.getSubject(AccessController.getContext());
340561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("No expected AccessControlException");
341561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (AccessControlException e) {
342561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            assertEquals(e, AuthPermission.class);
343561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
344561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
345561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
346561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
347561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Tests SecurityException for Subject.setReadOnly()
348561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
349561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public final void testACE_setReadOnly() {
350561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
351561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        denyPermission(new AuthPermission("setReadOnly"));
352561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
353561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (new Subject()).setReadOnly();
354561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("No expected AccessControlException");
355561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (AccessControlException e) {
356561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            assertEquals(e, AuthPermission.class);
357561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
358561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
359561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
360561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
361561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Tests Subject.doAs(Subject, PrivilegedAction)
362561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
363561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public final void testDoAs() {
364561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
365561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Subject subject = new Subject();
366561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
367561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Subject contextSubject = (Subject) Subject
368561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                .doAs(subject, subjectPAction);
369561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
370561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue("Returned subject", subject == contextSubject);
371561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
372561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // null subject
373561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        contextSubject = (Subject) Subject.doAs(null, subjectPAction);
374561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
375561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertNull("Subject is null", contextSubject);
376561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
377561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // null subject: check combiner (must be null)
378561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        AccessControlContext context = (AccessControlContext) Subject.doAs(
379561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                null, contextPAction);
380561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
381561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertNull("Combiner for null subject", context.getDomainCombiner());
382561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
383561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
384561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
385561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Tests Subject.doAs(Subject, PrivilegedExceptionAction)
386561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
387561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public final void testDoAs_PEA() throws Exception {
388561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
389561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Subject subject = new Subject();
390561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
391561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Subject contextSubject = (Subject) Subject.doAs(subject,
392561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                subjectPEAction);
393561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
394561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue("Returned subject", subject == contextSubject);
395561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
396561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // null subject
397561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        contextSubject = (Subject) Subject.doAs(null, subjectPEAction);
398561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
399561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertNull("Subject is null", contextSubject);
400561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
401561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // null subject: check combiner (must be null)
402561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        AccessControlContext context = (AccessControlContext) Subject.doAs(
403561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                null, contextPEAction);
404561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
405561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertNull("Combiner for null subject", context.getDomainCombiner());
406561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
407561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
408561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
409561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
410561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Tests Subject.doAsPrivileged(Subject, PrivilegedAction, ACContext)
411561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
412561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public final void testDoAsPrivileged() {
413561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
414561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Subject subject = new Subject();
415561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
416561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Subject contextSubject = (Subject) Subject.doAsPrivileged(subject,
417561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                subjectPAction, null);
418561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
419561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue("Returned subject", subject == contextSubject);
420561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
421561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // null subject
422561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        contextSubject = (Subject) Subject.doAsPrivileged(null, subjectPAction,
423561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                null);
424561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
425561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertNull("Subject is null", contextSubject);
426561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
427561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // null subject: check combiner (must be null)
428561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        AccessControlContext context = (AccessControlContext) Subject
429561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                .doAsPrivileged(null, contextPAction, null);
430561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
431561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertNull("Combiner for null subject", context.getDomainCombiner());
432561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
433561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
434561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
435561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Tests Subject.doAsPrivileged(Subject, PEAction, ACContext)
436561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
437561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public final void testDoAsPrivileged_PEA() throws Exception {
438561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
439561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Subject subject = new Subject();
440561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
441561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Subject contextSubject = (Subject) Subject.doAsPrivileged(subject,
442561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                subjectPEAction, null);
443561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
444561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue("Returned subject", subject == contextSubject);
445561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
446561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // null subject
447561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        contextSubject = (Subject) Subject.doAsPrivileged(null,
448561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                subjectPEAction, null);
449561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
450561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertNull("Subject is null", contextSubject);
451561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
452561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // null subject: check combiner (must be null)
453561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        AccessControlContext context = (AccessControlContext) Subject
454561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                .doAsPrivileged(null, contextPEAction, null);
455561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
456561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertNull("Combiner for null subject", context.getDomainCombiner());
457561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
458561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
459561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
460561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Tests Subject.doAs* methods for creating new context
461561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     *
462561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Expected: no SecurityException
463561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
464561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public final void testDoAs_newACC() throws Exception {
465561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
466561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Subject subject = new Subject();
467561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
468561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Subject.doAs(subject, emptyPAction);
469561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Subject.doAs(subject, emptyPEAction);
470561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Subject.doAsPrivileged(subject, emptyPAction, null);
471561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Subject.doAsPrivileged(subject, emptyPEAction, null);
472561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
473561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // each doAs* creates new ACContext
474561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        denyPermission(new SecurityPermission("createAccessControlContext"));
475561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
476561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
477561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            Subject.doAs(subject, emptyPAction);
478561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("No expected AccessControlException");
479561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (AccessControlException e) {
480561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
481561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
482561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
483561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            Subject.doAs(subject, emptyPEAction);
484561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("No expected AccessControlException");
485561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (AccessControlException e) {
486561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
487561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
488561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
489561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            Subject.doAsPrivileged(subject, emptyPAction, null);
490561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("No expected AccessControlException");
491561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (AccessControlException e) {
492561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
493561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
494561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
495561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            Subject.doAsPrivileged(subject, emptyPEAction, null);
496561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("No expected AccessControlException");
497561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (AccessControlException e) {
498561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
499561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
500561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
501561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
502561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Tests Subject.equals() method
503561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
504561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    @SuppressWarnings("unchecked")
505561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public final void testEquals() {
506561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
507561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // empty sets
508561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Subject s1 = new Subject();
509561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Subject s2 = new Subject(false, new HashSet(), new HashSet(),
510561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                new HashSet());
511561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Subject s3 = new Subject(true, new HashSet(), new HashSet(),
512561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                new HashSet());
513561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
514561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        equalsTest(s1, s2, s3);
515561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
516561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // non empty sets
517561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
518561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        s1 = new Subject(false, h1, h2, h3);
519561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        s3 = new Subject(true, h1, h2, h3);
520561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
521561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        s2 = new Subject();
522561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        s2.getPrincipals().addAll(h1);
523561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        s2.getPublicCredentials().addAll(h2);
524561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        s2.getPrivateCredentials().addAll(h3);
525561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
526561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        equalsTest(s1, s2, s3);
527561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
528561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // not equal subjects
529561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        s1 = new Subject();
530561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        s2 = new Subject(true, h1, new HashSet(), h3);
531561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        s3 = new Subject(true, h1, h2, h3);
532561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
533561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertFalse(s1.equals(s2));
534561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertFalse(s1.equals(s3));
535561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertFalse(s2.equals(s3));
536561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
537561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
538561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    private void equalsTest(Object obj1, Object obj2, Object obj3) {
539561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
540561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // Check passed parameters.
541561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // Because we don't verify Object.equals() method
542561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        if (obj1 == obj2 || obj1 == obj3 || obj2 == obj3) {
543561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            throw new AssertionError("References MUST be different");
544561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
545561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
546561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // reflexivity
547561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue(obj1.equals(obj1));
548561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
549561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // symmetry
550561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue(obj1.equals(obj2));
551561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue(obj2.equals(obj1));
552561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
553561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // transitivity
554561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue(obj1.equals(obj2));
555561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue(obj2.equals(obj3));
556561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue(obj1.equals(obj3));
557561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
558561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // consistency
559561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue(obj3.equals(obj1));
560561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue(obj3.equals(obj1));
561561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
562561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // null value
563561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertFalse(obj1.equals(null));
564561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
565561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
566561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
567561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Verifies that Subject.equals() has defined comparison algorism.
568561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     *
569561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * The sequence of checks is following:
570561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * 1)principal set
571561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * 2)public credential set
572561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * 3)private credential set
573561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
574561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    @SuppressWarnings("unchecked")
575561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public final void testEquals_VerifyCheckSequence() {
576561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
577561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        grantMode(); // no permissions
578561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
579561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        HashSet hash = new HashSet();
580561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        hash.add(principal);
581561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
582561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Subject subject1 = new Subject(false, new HashSet(), new HashSet(),
583561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                hash);
584561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
585561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        //doesn't verify private credential permissions on itself
586561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue(subject1.equals(subject1));
587561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
588561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // principals comparison goes before
589561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // no SecurityException expected
590561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Subject subject2 = new Subject(false, hash, new HashSet(), hash);
591561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
592561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertFalse(subject1.equals(subject2));
593561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
594561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // public credential comparison goes before
595561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // no SecurityException expected
596561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        subject2 = new Subject(false, new HashSet(), hash, hash);
597561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
598561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertFalse(subject1.equals(subject2));
599561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
600561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // principal and public credentials sets are equal
601561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // Expected: SecurityException
602561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        subject2 = new Subject(false, new HashSet(), new HashSet(), hash);
603561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
604561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            subject1.equals(subject2);
605561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("No expected AccessControlException");
606561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (AccessControlException e) {
607561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            assertEquals(e, PrivateCredentialPermission.class);
608561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
609561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
610561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
611561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
612561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Verifies no PrivateCredentialPermission
613561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * for 'this' subject and provided subject
614561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
615561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public final void testEquals_NoPCP() {
616561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
617561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Subject subThis = new Subject();
618561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Subject subThat = new Subject();
619561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
620561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        subThis.getPrivateCredentials().add(new MyClass1());
621561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        subThat.getPrivateCredentials().add(new Object());
622561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
623561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        grantMode(); // no permissions
624561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        grantPermission(new PrivateCredentialPermission(
625561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                "java.lang.Object * \"*\"", "read"));
626561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
627561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // verify permissions
628561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
629561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            subThis.getPrivateCredentials().iterator().next();
630561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("No expected AccessControlException");
631561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (AccessControlException e) {
632561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            assertEquals(e, PrivateCredentialPermission.class);
633561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
634561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        subThat.getPrivateCredentials().iterator().next();
635561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
636561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // 'this' subject doesn't have permission
637561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
638561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            subThis.equals(subThat);
639561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("No expected AccessControlException");
640561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (AccessControlException e) {
641561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            assertEquals(e, PrivateCredentialPermission.class);
642561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
643561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
644561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // provided subject doesn't have permission
645561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
646561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            subThat.equals(subThis);
647561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("No expected AccessControlException");
648561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (AccessControlException e) {
649561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            assertEquals(e, PrivateCredentialPermission.class);
650561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
651561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
652561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
653561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
654561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Tests Subject.get<set>(Class) methods
655561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
656561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    @SuppressWarnings("unchecked")
657561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public final void testGetSetClass() {
658561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        HashSet hash = new HashSet();
659561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
660561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        MyClass1 p1 = new MyClass1();
661561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        MyClass1 p2 = new MyClass1();
662561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
663561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        hash.add(p1);
664561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        hash.add(p2);
665561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
666561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        HashSet h = new HashSet();
667561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
668561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        h.add(principal);
669561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        h.addAll(hash);
670561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        h.add(new MyClass2());
671561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
672561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Subject subject = new Subject(true, h, h, h);
673561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
674561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("Principal", hash, subject.getPrincipals(MyClass1.class));
675561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("Private Credentials", hash, subject
676561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                .getPrivateCredentials(MyClass1.class));
677561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals("Public Credentials", hash, subject
678561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                .getPublicCredentials(MyClass1.class));
679561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
680561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
681561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
682561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Tests Subject.get<set>(Class) methods for null parameter
683561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
684561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public final void testGetClass_NullParameter() {
685561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
686561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Subject subject = new Subject();
687561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
688561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
689561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            subject.getPrincipals(null);
690561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("No expected NullPointerException");
691561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (NullPointerException e) {
692561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
693561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
694561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
695561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            subject.getPrivateCredentials(null);
696561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("No expected NullPointerException");
697561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (NullPointerException e) {
698561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
699561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
700561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
701561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            subject.getPublicCredentials(null);
702561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("No expected NullPointerException");
703561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (NullPointerException e) {
704561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
705561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
706561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
707561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
708561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Tests Subject.getSubject() for null parameter
709561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
710561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public final void test_getSubject_NPE() {
711561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
712561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            Subject.getSubject(null);
713561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("No expected NullPointerException");
714561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (NullPointerException e) {
715561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
716561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
717561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
718561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
719561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Tests Subject.getSubject() for current context
720561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
721561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public final void test_getSubject() {
722561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertNull("Current context", Subject.getSubject(AccessController
723561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                .getContext()));
724561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
725561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
726561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            Subject.getSubject(null);
727561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("No expected NullPointerException");
728561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (NullPointerException e) {
729561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
730561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
731561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
732561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
733561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Tests Subject.getSubject() for associated context
734561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
735561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public final void test_getSubject_SameSubject() {
736561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
737561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Subject subject = new Subject();
738561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
739561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Subject contextSubject = (Subject) Subject
740561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                .doAs(subject, subjectPAction);
741561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
742561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue("Subject: ", subject == contextSubject);
743561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
744561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
745561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
746561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Tests Subject.getSubject() for associated context (2 subjects)
747561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
748561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    @SuppressWarnings("unchecked")
749561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public final void test_getSubject_NotSameSubject() {
750561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
751561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        final HashSet hash = new HashSet();
752561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        hash.add(new MyClass1());
753561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
754561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        PrivilegedAction<Object> action = new PrivilegedAction<Object>() {
755561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            public Object run() {
756561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
757561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                return Subject.doAs(new Subject(false, hash, hash, hash),
758561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        subjectPAction);
759561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
760561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        };
761561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
762561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Subject subject = new Subject();
763561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
764561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Subject contextSubject = (Subject) Subject.doAs(subject, action);
765561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
766561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertNotNull("Context subject: ", contextSubject);
767561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertFalse("Subject: ", subject == contextSubject);
768561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue("Principals: ", hash.equals(contextSubject.getPrincipals()));
769561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue("Private Credentials: ", hash.equals(contextSubject
770561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                .getPrivateCredentials()));
771561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue("Public Credentials: ", hash.equals(contextSubject
772561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                .getPublicCredentials()));
773561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
774561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
775561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
776561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Tests Subject.getSubject() for privileged action in associated context
777561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
778561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public final void test_getSubject_PrivilegedAction() {
779561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
780561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        PrivilegedAction<Object> action = new PrivilegedAction<Object>() {
781561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            public Object run() {
782561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                return AccessController.doPrivileged(subjectPAction);
783561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
784561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        };
785561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
786561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Subject subject = new Subject();
787561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
788561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Subject contextSubject = (Subject) Subject.doAs(subject, action);
789561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
790561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertNull("Context subject: ", contextSubject);
791561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
792561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
793561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
794561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Tests Subject.hashCode()
795561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
796561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public final void testHashCode() {
797561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Subject subject1 = new Subject(false, h1, h2, h3);
798561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Subject subject2 = new Subject(true, h1, h2, h3);
799561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
800561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue(subject1.equals(subject2));
801561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue(subject1.hashCode() == subject2.hashCode());
802561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
803561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
804561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
805561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Tests Subject.hashCode() for SecurityException
806561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
807561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public final void testHashCode_ACE() {
808561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
809561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        grantMode();
810561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
811561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            (new Subject(false, h1, h2, h3)).hashCode();
812561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
813561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            if (!testing) {
814561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                fail("No expected AccessControlException");
815561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
816561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (AccessControlException e) {
817561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            assertEquals(e, PrivateCredentialPermission.class);
818561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
819561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
820561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
821561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
822561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Tests Subject.isReadOnly() and Subject.setReadOnly()
823561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
824561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public final void testSetReadOnly_isReadOnly() {
825561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Subject subject = new Subject();
826561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
827561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // check initialized value
828561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertFalse("Read only state", subject.isReadOnly());
829561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
830561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // set the subject as read only
831561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        subject.setReadOnly();
832561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue("Read only state", subject.isReadOnly());
833561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
834561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // anyway invoke it again to verify subject's state
835561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        subject.setReadOnly();
836561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue("Read only state", subject.isReadOnly());
837561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
838561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
839561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public final void testToString() {
840561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        //FIXME        grantMode();
841561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        //denyPermission(new PrivateCredentialPermission("* * \"*\"", "read"));
842561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        //System.out.println((new Subject(false, h1, h2, h3)).toString());
843561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
844561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
845561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public final void testSerialization() throws Exception {
846561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
847561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Subject subject = new Subject();
848561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
849561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        subject.getPrincipals().add(new MyClass2());
850561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
851561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ByteArrayOutputStream out = new ByteArrayOutputStream();
852561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ObjectOutputStream sOut = new ObjectOutputStream(out);
853561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
854561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
855561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            sOut.writeObject(subject);
856561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("No expected NotSerializableException");
857561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (NotSerializableException e) {
858561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } finally {
859561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            sOut.close();
860561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
861561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
862561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        subject = new Subject();
863561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
864561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        subject.getPrincipals().add(new MyClass1());
865561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        subject.getPublicCredentials().add(new MyClass1());
866561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        subject.getPrivateCredentials().add(new MyClass1());
867561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
868561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        subject.setReadOnly();
869561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
870561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        out = new ByteArrayOutputStream();
871561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        sOut = new ObjectOutputStream(out);
872561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
873561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        sOut.writeObject(subject);
874561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
875561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        sOut.flush();
876561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        sOut.close();
877561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
878561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ByteArrayInputStream in = new ByteArrayInputStream(out.toByteArray());
879561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ObjectInputStream sIn = new ObjectInputStream(in);
880561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
881561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Subject ss = (Subject) sIn.readObject();
882561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
883561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue(ss.isReadOnly());
884561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(1, ss.getPrincipals().size());
885561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue(ss.getPrincipals().iterator().next() instanceof MyClass1);
886561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(0, ss.getPublicCredentials().size());
887561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(0, ss.getPrivateCredentials().size());
888561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
889561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
890561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            ss.getPrincipals().add(new MyClass1());
891561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("No expected IllegalStateException");
892561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (IllegalStateException e) {
893561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
894561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
895561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
896561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
897561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Test subject's deserialization in case of invalid('null') principals
898561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     *
899561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Serialization byte array contains null element in principal set
900561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * The array is invalid because it is not possible to add null element
901561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * to principal set via public API methods.
902561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
903561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public final void testSerialization_NullPrincipal() throws Exception {
904561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
905561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // The array was produced in the following way:
906561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // 1) A check that verifies a passed principal object for null
907561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        //    value was disabled in Subject class.
908561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // 2) Subject object was created
909561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // 3) A null was added to subject's principal set by invoking
910561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        //        getPrincipals().add(null);
911561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // 4) ByteArrayOutputStream class was used to write subject object
912561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        //    and to get resulting array of bytes
913561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        byte[] nullPrincipal = new byte[] { (byte) 0xac, (byte) 0xed,
914561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x00, (byte) 0x05, (byte) 0x73, (byte) 0x72,
915561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x00, (byte) 0x1b, (byte) 0x6a, (byte) 0x61,
916561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x76, (byte) 0x61, (byte) 0x78, (byte) 0x2e,
917561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x73, (byte) 0x65, (byte) 0x63, (byte) 0x75,
918561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x72, (byte) 0x69, (byte) 0x74, (byte) 0x79,
919561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x2e, (byte) 0x61, (byte) 0x75, (byte) 0x74,
920561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x68, (byte) 0x2e, (byte) 0x53, (byte) 0x75,
921561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x62, (byte) 0x6a, (byte) 0x65, (byte) 0x63,
922561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x74, (byte) 0x8c, (byte) 0xb2, (byte) 0x32,
923561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x93, (byte) 0x00, (byte) 0x33, (byte) 0xfa,
924561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x68, (byte) 0x03, (byte) 0x00, (byte) 0x02,
925561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x5a, (byte) 0x00, (byte) 0x0a, (byte) 0x69,
926561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x73, (byte) 0x52, (byte) 0x65, (byte) 0x61,
927561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x64, (byte) 0x4f, (byte) 0x6e, (byte) 0x6c,
928561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x79, (byte) 0x4c, (byte) 0x00, (byte) 0x0a,
929561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x70, (byte) 0x72, (byte) 0x69, (byte) 0x6e,
930561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x63, (byte) 0x69, (byte) 0x70, (byte) 0x61,
931561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x6c, (byte) 0x73, (byte) 0x74, (byte) 0x00,
932561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x0f, (byte) 0x4c, (byte) 0x6a, (byte) 0x61,
933561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x76, (byte) 0x61, (byte) 0x2f, (byte) 0x75,
934561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x74, (byte) 0x69, (byte) 0x6c, (byte) 0x2f,
935561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x53, (byte) 0x65, (byte) 0x74, (byte) 0x3b,
936561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x78, (byte) 0x70, (byte) 0x00, (byte) 0x73,
937561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x72, (byte) 0x00, (byte) 0x25, (byte) 0x6a,
938561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x61, (byte) 0x76, (byte) 0x61, (byte) 0x78,
939561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x2e, (byte) 0x73, (byte) 0x65, (byte) 0x63,
940561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x75, (byte) 0x72, (byte) 0x69, (byte) 0x74,
941561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x79, (byte) 0x2e, (byte) 0x61, (byte) 0x75,
942561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x74, (byte) 0x68, (byte) 0x2e, (byte) 0x53,
943561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x75, (byte) 0x62, (byte) 0x6a, (byte) 0x65,
944561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x63, (byte) 0x74, (byte) 0x24, (byte) 0x53,
945561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x65, (byte) 0x63, (byte) 0x75, (byte) 0x72,
946561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x65, (byte) 0x53, (byte) 0x65, (byte) 0x74,
947561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x6d, (byte) 0xcc, (byte) 0x32, (byte) 0x80,
948561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x17, (byte) 0x55, (byte) 0x7e, (byte) 0x27,
949561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x03, (byte) 0x00, (byte) 0x03, (byte) 0x49,
950561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x00, (byte) 0x07, (byte) 0x73, (byte) 0x65,
951561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x74, (byte) 0x54, (byte) 0x79, (byte) 0x70,
952561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x65, (byte) 0x4c, (byte) 0x00, (byte) 0x08,
953561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x65, (byte) 0x6c, (byte) 0x65, (byte) 0x6d,
954561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x65, (byte) 0x6e, (byte) 0x74, (byte) 0x73,
955561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x74, (byte) 0x00, (byte) 0x16, (byte) 0x4c,
956561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x6a, (byte) 0x61, (byte) 0x76, (byte) 0x61,
957561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x2f, (byte) 0x75, (byte) 0x74, (byte) 0x69,
958561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x6c, (byte) 0x2f, (byte) 0x4c, (byte) 0x69,
959561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x6e, (byte) 0x6b, (byte) 0x65, (byte) 0x64,
960561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x4c, (byte) 0x69, (byte) 0x73, (byte) 0x74,
961561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x3b, (byte) 0x4c, (byte) 0x00, (byte) 0x06,
962561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x74, (byte) 0x68, (byte) 0x69, (byte) 0x73,
963561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x24, (byte) 0x30, (byte) 0x74, (byte) 0x00,
964561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x1d, (byte) 0x4c, (byte) 0x6a, (byte) 0x61,
965561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x76, (byte) 0x61, (byte) 0x78, (byte) 0x2f,
966561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x73, (byte) 0x65, (byte) 0x63, (byte) 0x75,
967561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x72, (byte) 0x69, (byte) 0x74, (byte) 0x79,
968561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x2f, (byte) 0x61, (byte) 0x75, (byte) 0x74,
969561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x68, (byte) 0x2f, (byte) 0x53, (byte) 0x75,
970561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x62, (byte) 0x6a, (byte) 0x65, (byte) 0x63,
971561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x74, (byte) 0x3b, (byte) 0x78, (byte) 0x70,
972561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
973561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x73, (byte) 0x72, (byte) 0x00, (byte) 0x14,
974561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x6a, (byte) 0x61, (byte) 0x76, (byte) 0x61,
975561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x2e, (byte) 0x75, (byte) 0x74, (byte) 0x69,
976561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x6c, (byte) 0x2e, (byte) 0x4c, (byte) 0x69,
977561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x6e, (byte) 0x6b, (byte) 0x65, (byte) 0x64,
978561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x4c, (byte) 0x69, (byte) 0x73, (byte) 0x74,
979561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x0c, (byte) 0x29, (byte) 0x53, (byte) 0x5d,
980561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x4a, (byte) 0x60, (byte) 0x88, (byte) 0x22,
981561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x03, (byte) 0x00, (byte) 0x00, (byte) 0x78,
982561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x70, (byte) 0x77, (byte) 0x04, (byte) 0x00,
983561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x00, (byte) 0x00, (byte) 0x01, (byte) 0x70,
984561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x78, (byte) 0x71, (byte) 0x00, (byte) 0x7e,
985561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x00, (byte) 0x02, (byte) 0x78, (byte) 0x78 };
986561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
987561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ByteArrayInputStream in = new ByteArrayInputStream(nullPrincipal);
988561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ObjectInputStream sIn = new ObjectInputStream(in);
989561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
990561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
991561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            sIn.readObject();
992561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            if (!testing) {
993561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                fail("No expected NullPointerException");
994561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
995561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (NullPointerException e) {
996561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
997561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
998561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
999561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
1000561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Test subject's deserialization in case of invalid principals
1001561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Byte stream contains object in principal set that doesn't
1002561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * implement Principal interface.
1003561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * The array is invalid because it is not possible to add such object
1004561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * to principal set via public API methods.
1005561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
1006561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public final void testSerialization_IllegalPrincipal() throws Exception {
1007561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1008561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // The array was produced in the following way:
1009561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // 1) A check for verifying that passed principal object
1010561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        //    implements Principal interface was disabled in Subject class.
1011561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // 2) Subject object was created
1012561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // 3) A serializable object was added to subject's principal
1013561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        //    set by invoking: getPrincipals().add(object);
1014561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // 4) ByteArrayOutputStream class was used to write subject object
1015561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        //    and to get resulting array of bytes
1016561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        byte[] objectPrincipal = new byte[] { (byte) 0xac, (byte) 0xed,
1017561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x00, (byte) 0x05, (byte) 0x73, (byte) 0x72,
1018561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x00, (byte) 0x1b, (byte) 0x6a, (byte) 0x61,
1019561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x76, (byte) 0x61, (byte) 0x78, (byte) 0x2e,
1020561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x73, (byte) 0x65, (byte) 0x63, (byte) 0x75,
1021561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x72, (byte) 0x69, (byte) 0x74, (byte) 0x79,
1022561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x2e, (byte) 0x61, (byte) 0x75, (byte) 0x74,
1023561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x68, (byte) 0x2e, (byte) 0x53, (byte) 0x75,
1024561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x62, (byte) 0x6a, (byte) 0x65, (byte) 0x63,
1025561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x74, (byte) 0x8c, (byte) 0xb2, (byte) 0x32,
1026561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x93, (byte) 0x00, (byte) 0x33, (byte) 0xfa,
1027561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x68, (byte) 0x03, (byte) 0x00, (byte) 0x02,
1028561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x5a, (byte) 0x00, (byte) 0x0a, (byte) 0x69,
1029561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x73, (byte) 0x52, (byte) 0x65, (byte) 0x61,
1030561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x64, (byte) 0x4f, (byte) 0x6e, (byte) 0x6c,
1031561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x79, (byte) 0x4c, (byte) 0x00, (byte) 0x0a,
1032561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x70, (byte) 0x72, (byte) 0x69, (byte) 0x6e,
1033561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x63, (byte) 0x69, (byte) 0x70, (byte) 0x61,
1034561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x6c, (byte) 0x73, (byte) 0x74, (byte) 0x00,
1035561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x0f, (byte) 0x4c, (byte) 0x6a, (byte) 0x61,
1036561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x76, (byte) 0x61, (byte) 0x2f, (byte) 0x75,
1037561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x74, (byte) 0x69, (byte) 0x6c, (byte) 0x2f,
1038561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x53, (byte) 0x65, (byte) 0x74, (byte) 0x3b,
1039561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x78, (byte) 0x70, (byte) 0x00, (byte) 0x73,
1040561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x72, (byte) 0x00, (byte) 0x25, (byte) 0x6a,
1041561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x61, (byte) 0x76, (byte) 0x61, (byte) 0x78,
1042561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x2e, (byte) 0x73, (byte) 0x65, (byte) 0x63,
1043561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x75, (byte) 0x72, (byte) 0x69, (byte) 0x74,
1044561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x79, (byte) 0x2e, (byte) 0x61, (byte) 0x75,
1045561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x74, (byte) 0x68, (byte) 0x2e, (byte) 0x53,
1046561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x75, (byte) 0x62, (byte) 0x6a, (byte) 0x65,
1047561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x63, (byte) 0x74, (byte) 0x24, (byte) 0x53,
1048561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x65, (byte) 0x63, (byte) 0x75, (byte) 0x72,
1049561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x65, (byte) 0x53, (byte) 0x65, (byte) 0x74,
1050561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x6d, (byte) 0xcc, (byte) 0x32, (byte) 0x80,
1051561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x17, (byte) 0x55, (byte) 0x7e, (byte) 0x27,
1052561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x03, (byte) 0x00, (byte) 0x03, (byte) 0x49,
1053561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x00, (byte) 0x07, (byte) 0x73, (byte) 0x65,
1054561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x74, (byte) 0x54, (byte) 0x79, (byte) 0x70,
1055561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x65, (byte) 0x4c, (byte) 0x00, (byte) 0x08,
1056561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x65, (byte) 0x6c, (byte) 0x65, (byte) 0x6d,
1057561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x65, (byte) 0x6e, (byte) 0x74, (byte) 0x73,
1058561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x74, (byte) 0x00, (byte) 0x16, (byte) 0x4c,
1059561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x6a, (byte) 0x61, (byte) 0x76, (byte) 0x61,
1060561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x2f, (byte) 0x75, (byte) 0x74, (byte) 0x69,
1061561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x6c, (byte) 0x2f, (byte) 0x4c, (byte) 0x69,
1062561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x6e, (byte) 0x6b, (byte) 0x65, (byte) 0x64,
1063561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x4c, (byte) 0x69, (byte) 0x73, (byte) 0x74,
1064561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x3b, (byte) 0x4c, (byte) 0x00, (byte) 0x06,
1065561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x74, (byte) 0x68, (byte) 0x69, (byte) 0x73,
1066561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x24, (byte) 0x30, (byte) 0x74, (byte) 0x00,
1067561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x1d, (byte) 0x4c, (byte) 0x6a, (byte) 0x61,
1068561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x76, (byte) 0x61, (byte) 0x78, (byte) 0x2f,
1069561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x73, (byte) 0x65, (byte) 0x63, (byte) 0x75,
1070561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x72, (byte) 0x69, (byte) 0x74, (byte) 0x79,
1071561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x2f, (byte) 0x61, (byte) 0x75, (byte) 0x74,
1072561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x68, (byte) 0x2f, (byte) 0x53, (byte) 0x75,
1073561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x62, (byte) 0x6a, (byte) 0x65, (byte) 0x63,
1074561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x74, (byte) 0x3b, (byte) 0x78, (byte) 0x70,
1075561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
1076561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x73, (byte) 0x72, (byte) 0x00, (byte) 0x14,
1077561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x6a, (byte) 0x61, (byte) 0x76, (byte) 0x61,
1078561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x2e, (byte) 0x75, (byte) 0x74, (byte) 0x69,
1079561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x6c, (byte) 0x2e, (byte) 0x4c, (byte) 0x69,
1080561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x6e, (byte) 0x6b, (byte) 0x65, (byte) 0x64,
1081561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x4c, (byte) 0x69, (byte) 0x73, (byte) 0x74,
1082561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x0c, (byte) 0x29, (byte) 0x53, (byte) 0x5d,
1083561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x4a, (byte) 0x60, (byte) 0x88, (byte) 0x22,
1084561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x03, (byte) 0x00, (byte) 0x00, (byte) 0x78,
1085561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x70, (byte) 0x77, (byte) 0x04, (byte) 0x00,
1086561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x00, (byte) 0x00, (byte) 0x01, (byte) 0x73,
1087561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x72, (byte) 0x00, (byte) 0x28, (byte) 0x6a,
1088561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x61, (byte) 0x76, (byte) 0x61, (byte) 0x78,
1089561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x2e, (byte) 0x73, (byte) 0x65, (byte) 0x63,
1090561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x75, (byte) 0x72, (byte) 0x69, (byte) 0x74,
1091561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x79, (byte) 0x2e, (byte) 0x61, (byte) 0x75,
1092561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x74, (byte) 0x68, (byte) 0x2e, (byte) 0x53,
1093561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x75, (byte) 0x62, (byte) 0x6a, (byte) 0x65,
1094561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x63, (byte) 0x74, (byte) 0x54, (byte) 0x65,
1095561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x73, (byte) 0x74, (byte) 0x24, (byte) 0x4d,
1096561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x79, (byte) 0x4f, (byte) 0x62, (byte) 0x6a,
1097561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x65, (byte) 0x63, (byte) 0x74, (byte) 0xf7,
1098561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0xbc, (byte) 0xdc, (byte) 0x95, (byte) 0xb2,
1099561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x33, (byte) 0x3a, (byte) 0x0f, (byte) 0x02,
1100561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x00, (byte) 0x00, (byte) 0x78, (byte) 0x70,
1101561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x78, (byte) 0x71, (byte) 0x00, (byte) 0x7e,
1102561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x00, (byte) 0x02, (byte) 0x78, (byte) 0x78 };
1103561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1104561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ByteArrayInputStream in = new ByteArrayInputStream(objectPrincipal);
1105561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ObjectInputStream sIn = new ObjectInputStream(in);
1106561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1107561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
1108561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            sIn.readObject();
1109561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            if (!testing) {
1110561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                fail("No expected IllegalArgumentException");
1111561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
1112561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (IllegalArgumentException e) {
1113561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
1114561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
1115561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1116561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
1117561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Test subject's principal set deserialization in case
1118561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * of invalid principal set's elements. Two cases are tested:
1119561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * 1) null object
1120561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * 2) an object in principal set that doesn't implement Principal interface.
1121561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
1122561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_PrincipalSetInvalidSerForm() throws Exception {
1123561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1124561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // The array was produced in the following way:
1125561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // 1) A check that verifies a passed principal object for null
1126561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        //    value was disabled in Subject class.
1127561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // 2) Subject object was created
1128561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // 3) A null was added to subject's principal set by invoking
1129561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        //        getPrincipals().add(null);
1130561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // 4) ByteArrayOutputStream class was used to write
1131561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        //    subject's principal set object and to get resulting array of bytes
1132561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        byte[] nullElement = new byte[] { (byte) 0xac, (byte) 0xed,
1133561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x00, (byte) 0x05, (byte) 0x73, (byte) 0x72,
1134561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x00, (byte) 0x25, (byte) 0x6a, (byte) 0x61,
1135561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x76, (byte) 0x61, (byte) 0x78, (byte) 0x2e,
1136561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x73, (byte) 0x65, (byte) 0x63, (byte) 0x75,
1137561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x72, (byte) 0x69, (byte) 0x74, (byte) 0x79,
1138561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x2e, (byte) 0x61, (byte) 0x75, (byte) 0x74,
1139561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x68, (byte) 0x2e, (byte) 0x53, (byte) 0x75,
1140561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x62, (byte) 0x6a, (byte) 0x65, (byte) 0x63,
1141561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x74, (byte) 0x24, (byte) 0x53, (byte) 0x65,
1142561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x63, (byte) 0x75, (byte) 0x72, (byte) 0x65,
1143561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x53, (byte) 0x65, (byte) 0x74, (byte) 0x6d,
1144561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0xcc, (byte) 0x32, (byte) 0x80, (byte) 0x17,
1145561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x55, (byte) 0x7e, (byte) 0x27, (byte) 0x03,
1146561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x00, (byte) 0x02, (byte) 0x4c, (byte) 0x00,
1147561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x08, (byte) 0x65, (byte) 0x6c, (byte) 0x65,
1148561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x6d, (byte) 0x65, (byte) 0x6e, (byte) 0x74,
1149561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x73, (byte) 0x74, (byte) 0x00, (byte) 0x16,
1150561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x4c, (byte) 0x6a, (byte) 0x61, (byte) 0x76,
1151561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x61, (byte) 0x2f, (byte) 0x75, (byte) 0x74,
1152561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x69, (byte) 0x6c, (byte) 0x2f, (byte) 0x4c,
1153561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x69, (byte) 0x6e, (byte) 0x6b, (byte) 0x65,
1154561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x64, (byte) 0x4c, (byte) 0x69, (byte) 0x73,
1155561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x74, (byte) 0x3b, (byte) 0x4c, (byte) 0x00,
1156561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x06, (byte) 0x74, (byte) 0x68, (byte) 0x69,
1157561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x73, (byte) 0x24, (byte) 0x30, (byte) 0x74,
1158561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x00, (byte) 0x1d, (byte) 0x4c, (byte) 0x6a,
1159561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x61, (byte) 0x76, (byte) 0x61, (byte) 0x78,
1160561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x2f, (byte) 0x73, (byte) 0x65, (byte) 0x63,
1161561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x75, (byte) 0x72, (byte) 0x69, (byte) 0x74,
1162561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x79, (byte) 0x2f, (byte) 0x61, (byte) 0x75,
1163561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x74, (byte) 0x68, (byte) 0x2f, (byte) 0x53,
1164561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x75, (byte) 0x62, (byte) 0x6a, (byte) 0x65,
1165561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x63, (byte) 0x74, (byte) 0x3b, (byte) 0x78,
1166561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x70, (byte) 0x73, (byte) 0x72, (byte) 0x00,
1167561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x14, (byte) 0x6a, (byte) 0x61, (byte) 0x76,
1168561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x61, (byte) 0x2e, (byte) 0x75, (byte) 0x74,
1169561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x69, (byte) 0x6c, (byte) 0x2e, (byte) 0x4c,
1170561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x69, (byte) 0x6e, (byte) 0x6b, (byte) 0x65,
1171561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x64, (byte) 0x4c, (byte) 0x69, (byte) 0x73,
1172561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x74, (byte) 0x0c, (byte) 0x29, (byte) 0x53,
1173561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x5d, (byte) 0x4a, (byte) 0x60, (byte) 0x88,
1174561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x22, (byte) 0x03, (byte) 0x00, (byte) 0x00,
1175561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x78, (byte) 0x70, (byte) 0x77, (byte) 0x04,
1176561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x01,
1177561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x70, (byte) 0x78, (byte) 0x73, (byte) 0x72,
1178561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x00, (byte) 0x1b, (byte) 0x6a, (byte) 0x61,
1179561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x76, (byte) 0x61, (byte) 0x78, (byte) 0x2e,
1180561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x73, (byte) 0x65, (byte) 0x63, (byte) 0x75,
1181561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x72, (byte) 0x69, (byte) 0x74, (byte) 0x79,
1182561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x2e, (byte) 0x61, (byte) 0x75, (byte) 0x74,
1183561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x68, (byte) 0x2e, (byte) 0x53, (byte) 0x75,
1184561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x62, (byte) 0x6a, (byte) 0x65, (byte) 0x63,
1185561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x74, (byte) 0x8c, (byte) 0xb2, (byte) 0x32,
1186561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x93, (byte) 0x00, (byte) 0x33, (byte) 0xfa,
1187561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x68, (byte) 0x03, (byte) 0x00, (byte) 0x02,
1188561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x5a, (byte) 0x00, (byte) 0x0a, (byte) 0x69,
1189561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x73, (byte) 0x52, (byte) 0x65, (byte) 0x61,
1190561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x64, (byte) 0x4f, (byte) 0x6e, (byte) 0x6c,
1191561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x79, (byte) 0x4c, (byte) 0x00, (byte) 0x0a,
1192561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x70, (byte) 0x72, (byte) 0x69, (byte) 0x6e,
1193561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x63, (byte) 0x69, (byte) 0x70, (byte) 0x61,
1194561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x6c, (byte) 0x73, (byte) 0x74, (byte) 0x00,
1195561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x0f, (byte) 0x4c, (byte) 0x6a, (byte) 0x61,
1196561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x76, (byte) 0x61, (byte) 0x2f, (byte) 0x75,
1197561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x74, (byte) 0x69, (byte) 0x6c, (byte) 0x2f,
1198561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x53, (byte) 0x65, (byte) 0x74, (byte) 0x3b,
1199561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x78, (byte) 0x70, (byte) 0x00, (byte) 0x71,
1200561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x00, (byte) 0x7e, (byte) 0x00, (byte) 0x03,
1201561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x78, (byte) 0x78 };
1202561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1203561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // The array was produced in the following way:
1204561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // 1) A check for verifying that passed principal object
1205561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        //    implements Principal interface was disabled in Subject class.
1206561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // 2) Subject object was created
1207561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // 3) A serializable object was added to subject's principal
1208561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        //    set by invoking: getPrincipals().add(object);
1209561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // 4) ByteArrayOutputStream class was used to write
1210561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        //    subject's principal set object and to get resulting array of bytes
1211561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        byte[] notPrincipalElement = new byte[] { (byte) 0xac, (byte) 0xed,
1212561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x00, (byte) 0x05, (byte) 0x73, (byte) 0x72,
1213561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x00, (byte) 0x25, (byte) 0x6a, (byte) 0x61,
1214561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x76, (byte) 0x61, (byte) 0x78, (byte) 0x2e,
1215561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x73, (byte) 0x65, (byte) 0x63, (byte) 0x75,
1216561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x72, (byte) 0x69, (byte) 0x74, (byte) 0x79,
1217561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x2e, (byte) 0x61, (byte) 0x75, (byte) 0x74,
1218561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x68, (byte) 0x2e, (byte) 0x53, (byte) 0x75,
1219561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x62, (byte) 0x6a, (byte) 0x65, (byte) 0x63,
1220561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x74, (byte) 0x24, (byte) 0x53, (byte) 0x65,
1221561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x63, (byte) 0x75, (byte) 0x72, (byte) 0x65,
1222561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x53, (byte) 0x65, (byte) 0x74, (byte) 0x6d,
1223561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0xcc, (byte) 0x32, (byte) 0x80, (byte) 0x17,
1224561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x55, (byte) 0x7e, (byte) 0x27, (byte) 0x03,
1225561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x00, (byte) 0x02, (byte) 0x4c, (byte) 0x00,
1226561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x08, (byte) 0x65, (byte) 0x6c, (byte) 0x65,
1227561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x6d, (byte) 0x65, (byte) 0x6e, (byte) 0x74,
1228561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x73, (byte) 0x74, (byte) 0x00, (byte) 0x16,
1229561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x4c, (byte) 0x6a, (byte) 0x61, (byte) 0x76,
1230561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x61, (byte) 0x2f, (byte) 0x75, (byte) 0x74,
1231561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x69, (byte) 0x6c, (byte) 0x2f, (byte) 0x4c,
1232561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x69, (byte) 0x6e, (byte) 0x6b, (byte) 0x65,
1233561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x64, (byte) 0x4c, (byte) 0x69, (byte) 0x73,
1234561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x74, (byte) 0x3b, (byte) 0x4c, (byte) 0x00,
1235561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x06, (byte) 0x74, (byte) 0x68, (byte) 0x69,
1236561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x73, (byte) 0x24, (byte) 0x30, (byte) 0x74,
1237561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x00, (byte) 0x1d, (byte) 0x4c, (byte) 0x6a,
1238561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x61, (byte) 0x76, (byte) 0x61, (byte) 0x78,
1239561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x2f, (byte) 0x73, (byte) 0x65, (byte) 0x63,
1240561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x75, (byte) 0x72, (byte) 0x69, (byte) 0x74,
1241561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x79, (byte) 0x2f, (byte) 0x61, (byte) 0x75,
1242561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x74, (byte) 0x68, (byte) 0x2f, (byte) 0x53,
1243561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x75, (byte) 0x62, (byte) 0x6a, (byte) 0x65,
1244561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x63, (byte) 0x74, (byte) 0x3b, (byte) 0x78,
1245561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x70, (byte) 0x73, (byte) 0x72, (byte) 0x00,
1246561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x14, (byte) 0x6a, (byte) 0x61, (byte) 0x76,
1247561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x61, (byte) 0x2e, (byte) 0x75, (byte) 0x74,
1248561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x69, (byte) 0x6c, (byte) 0x2e, (byte) 0x4c,
1249561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x69, (byte) 0x6e, (byte) 0x6b, (byte) 0x65,
1250561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x64, (byte) 0x4c, (byte) 0x69, (byte) 0x73,
1251561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x74, (byte) 0x0c, (byte) 0x29, (byte) 0x53,
1252561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x5d, (byte) 0x4a, (byte) 0x60, (byte) 0x88,
1253561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x22, (byte) 0x03, (byte) 0x00, (byte) 0x00,
1254561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x78, (byte) 0x70, (byte) 0x77, (byte) 0x04,
1255561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x01,
1256561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x73, (byte) 0x72, (byte) 0x00, (byte) 0x28,
1257561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x6a, (byte) 0x61, (byte) 0x76, (byte) 0x61,
1258561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x78, (byte) 0x2e, (byte) 0x73, (byte) 0x65,
1259561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x63, (byte) 0x75, (byte) 0x72, (byte) 0x69,
1260561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x74, (byte) 0x79, (byte) 0x2e, (byte) 0x61,
1261561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x75, (byte) 0x74, (byte) 0x68, (byte) 0x2e,
1262561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x53, (byte) 0x75, (byte) 0x62, (byte) 0x6a,
1263561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x65, (byte) 0x63, (byte) 0x74, (byte) 0x54,
1264561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x65, (byte) 0x73, (byte) 0x74, (byte) 0x24,
1265561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x4d, (byte) 0x79, (byte) 0x4f, (byte) 0x62,
1266561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x6a, (byte) 0x65, (byte) 0x63, (byte) 0x74,
1267561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0xf7, (byte) 0xbc, (byte) 0xdc, (byte) 0x95,
1268561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0xb2, (byte) 0x33, (byte) 0x3a, (byte) 0x0f,
1269561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x02, (byte) 0x00, (byte) 0x00, (byte) 0x78,
1270561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x70, (byte) 0x78, (byte) 0x73, (byte) 0x72,
1271561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x00, (byte) 0x1b, (byte) 0x6a, (byte) 0x61,
1272561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x76, (byte) 0x61, (byte) 0x78, (byte) 0x2e,
1273561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x73, (byte) 0x65, (byte) 0x63, (byte) 0x75,
1274561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x72, (byte) 0x69, (byte) 0x74, (byte) 0x79,
1275561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x2e, (byte) 0x61, (byte) 0x75, (byte) 0x74,
1276561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x68, (byte) 0x2e, (byte) 0x53, (byte) 0x75,
1277561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x62, (byte) 0x6a, (byte) 0x65, (byte) 0x63,
1278561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x74, (byte) 0x8c, (byte) 0xb2, (byte) 0x32,
1279561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x93, (byte) 0x00, (byte) 0x33, (byte) 0xfa,
1280561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x68, (byte) 0x03, (byte) 0x00, (byte) 0x02,
1281561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x5a, (byte) 0x00, (byte) 0x0a, (byte) 0x69,
1282561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x73, (byte) 0x52, (byte) 0x65, (byte) 0x61,
1283561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x64, (byte) 0x4f, (byte) 0x6e, (byte) 0x6c,
1284561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x79, (byte) 0x4c, (byte) 0x00, (byte) 0x0a,
1285561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x70, (byte) 0x72, (byte) 0x69, (byte) 0x6e,
1286561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x63, (byte) 0x69, (byte) 0x70, (byte) 0x61,
1287561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x6c, (byte) 0x73, (byte) 0x74, (byte) 0x00,
1288561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x0f, (byte) 0x4c, (byte) 0x6a, (byte) 0x61,
1289561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x76, (byte) 0x61, (byte) 0x2f, (byte) 0x75,
1290561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x74, (byte) 0x69, (byte) 0x6c, (byte) 0x2f,
1291561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x53, (byte) 0x65, (byte) 0x74, (byte) 0x3b,
1292561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x78, (byte) 0x70, (byte) 0x00, (byte) 0x71,
1293561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x00, (byte) 0x7e, (byte) 0x00, (byte) 0x03,
1294561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x78, (byte) 0x78 };
1295561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1296561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ByteArrayInputStream in = new ByteArrayInputStream(nullElement);
1297561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ObjectInputStream sIn = new ObjectInputStream(in);
1298561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1299561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
1300561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            sIn.readObject();
1301561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            if (!testing) {
1302561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                fail("No expected NullPointerException");
1303561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
1304561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (NullPointerException e) {
1305561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } finally {
1306561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            sIn.close();
1307561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
1308561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1309561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        in = new ByteArrayInputStream(notPrincipalElement);
1310561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        sIn = new ObjectInputStream(in);
1311561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1312561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
1313561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            sIn.readObject();
1314561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            if (!testing) {
1315561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                fail("No expected IllegalArgumentException");
1316561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
1317561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (IllegalArgumentException e) {
1318561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } finally {
1319561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            sIn.close();
1320561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
1321561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
1322561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1323561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
1324561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Test subject's private credential set deserialization in case
1325561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * of invalid null element.
1326561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
1327561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_PrivateCredentialSetInvalidSerForm() throws Exception {
1328561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1329561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // The array was produced in the following way:
1330561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // 1) A check that verifies a passed private credential object for null
1331561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        //    value was disabled in Subject class.
1332561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // 2) Subject object was created
1333561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // 3) A null was added to subject's private credential set by invoking
1334561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        //        getPrivateCredentials().add(null);
1335561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // 4) ByteArrayOutputStream class was used to write
1336561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        //    subject's private credential set object
1337561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        //    and to get resulting array of bytes
1338561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        byte[] nullElement = new byte[] { (byte) 0xac, (byte) 0xed,
1339561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x00, (byte) 0x05, (byte) 0x73, (byte) 0x72,
1340561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x00, (byte) 0x25, (byte) 0x6a, (byte) 0x61,
1341561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x76, (byte) 0x61, (byte) 0x78, (byte) 0x2e,
1342561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x73, (byte) 0x65, (byte) 0x63, (byte) 0x75,
1343561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x72, (byte) 0x69, (byte) 0x74, (byte) 0x79,
1344561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x2e, (byte) 0x61, (byte) 0x75, (byte) 0x74,
1345561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x68, (byte) 0x2e, (byte) 0x53, (byte) 0x75,
1346561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x62, (byte) 0x6a, (byte) 0x65, (byte) 0x63,
1347561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x74, (byte) 0x24, (byte) 0x53, (byte) 0x65,
1348561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x63, (byte) 0x75, (byte) 0x72, (byte) 0x65,
1349561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x53, (byte) 0x65, (byte) 0x74, (byte) 0x6d,
1350561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0xcc, (byte) 0x32, (byte) 0x80, (byte) 0x17,
1351561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x55, (byte) 0x7e, (byte) 0x27, (byte) 0x03,
1352561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x00, (byte) 0x03, (byte) 0x49, (byte) 0x00,
1353561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x07, (byte) 0x73, (byte) 0x65, (byte) 0x74,
1354561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x54, (byte) 0x79, (byte) 0x70, (byte) 0x65,
1355561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x4c, (byte) 0x00, (byte) 0x08, (byte) 0x65,
1356561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x6c, (byte) 0x65, (byte) 0x6d, (byte) 0x65,
1357561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x6e, (byte) 0x74, (byte) 0x73, (byte) 0x74,
1358561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x00, (byte) 0x16, (byte) 0x4c, (byte) 0x6a,
1359561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x61, (byte) 0x76, (byte) 0x61, (byte) 0x2f,
1360561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x75, (byte) 0x74, (byte) 0x69, (byte) 0x6c,
1361561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x2f, (byte) 0x4c, (byte) 0x69, (byte) 0x6e,
1362561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x6b, (byte) 0x65, (byte) 0x64, (byte) 0x4c,
1363561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x69, (byte) 0x73, (byte) 0x74, (byte) 0x3b,
1364561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x4c, (byte) 0x00, (byte) 0x06, (byte) 0x74,
1365561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x68, (byte) 0x69, (byte) 0x73, (byte) 0x24,
1366561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x30, (byte) 0x74, (byte) 0x00, (byte) 0x1d,
1367561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x4c, (byte) 0x6a, (byte) 0x61, (byte) 0x76,
1368561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x61, (byte) 0x78, (byte) 0x2f, (byte) 0x73,
1369561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x65, (byte) 0x63, (byte) 0x75, (byte) 0x72,
1370561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x69, (byte) 0x74, (byte) 0x79, (byte) 0x2f,
1371561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x61, (byte) 0x75, (byte) 0x74, (byte) 0x68,
1372561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x2f, (byte) 0x53, (byte) 0x75, (byte) 0x62,
1373561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x6a, (byte) 0x65, (byte) 0x63, (byte) 0x74,
1374561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x3b, (byte) 0x78, (byte) 0x70, (byte) 0x00,
1375561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x00, (byte) 0x00, (byte) 0x01, (byte) 0x73,
1376561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x72, (byte) 0x00, (byte) 0x14, (byte) 0x6a,
1377561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x61, (byte) 0x76, (byte) 0x61, (byte) 0x2e,
1378561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x75, (byte) 0x74, (byte) 0x69, (byte) 0x6c,
1379561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x2e, (byte) 0x4c, (byte) 0x69, (byte) 0x6e,
1380561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x6b, (byte) 0x65, (byte) 0x64, (byte) 0x4c,
1381561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x69, (byte) 0x73, (byte) 0x74, (byte) 0x0c,
1382561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x29, (byte) 0x53, (byte) 0x5d, (byte) 0x4a,
1383561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x60, (byte) 0x88, (byte) 0x22, (byte) 0x03,
1384561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x00, (byte) 0x00, (byte) 0x78, (byte) 0x70,
1385561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x77, (byte) 0x04, (byte) 0x00, (byte) 0x00,
1386561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x00, (byte) 0x01, (byte) 0x70, (byte) 0x78,
1387561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x73, (byte) 0x72, (byte) 0x00, (byte) 0x1b,
1388561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x6a, (byte) 0x61, (byte) 0x76, (byte) 0x61,
1389561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x78, (byte) 0x2e, (byte) 0x73, (byte) 0x65,
1390561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x63, (byte) 0x75, (byte) 0x72, (byte) 0x69,
1391561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x74, (byte) 0x79, (byte) 0x2e, (byte) 0x61,
1392561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x75, (byte) 0x74, (byte) 0x68, (byte) 0x2e,
1393561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x53, (byte) 0x75, (byte) 0x62, (byte) 0x6a,
1394561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x65, (byte) 0x63, (byte) 0x74, (byte) 0x8c,
1395561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0xb2, (byte) 0x32, (byte) 0x93, (byte) 0x00,
1396561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x33, (byte) 0xfa, (byte) 0x68, (byte) 0x03,
1397561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x00, (byte) 0x02, (byte) 0x5a, (byte) 0x00,
1398561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x0a, (byte) 0x69, (byte) 0x73, (byte) 0x52,
1399561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x65, (byte) 0x61, (byte) 0x64, (byte) 0x4f,
1400561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x6e, (byte) 0x6c, (byte) 0x79, (byte) 0x4c,
1401561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x00, (byte) 0x0a, (byte) 0x70, (byte) 0x72,
1402561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x69, (byte) 0x6e, (byte) 0x63, (byte) 0x69,
1403561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x70, (byte) 0x61, (byte) 0x6c, (byte) 0x73,
1404561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x74, (byte) 0x00, (byte) 0x0f, (byte) 0x4c,
1405561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x6a, (byte) 0x61, (byte) 0x76, (byte) 0x61,
1406561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x2f, (byte) 0x75, (byte) 0x74, (byte) 0x69,
1407561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x6c, (byte) 0x2f, (byte) 0x53, (byte) 0x65,
1408561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x74, (byte) 0x3b, (byte) 0x78, (byte) 0x70,
1409561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x00, (byte) 0x73, (byte) 0x71, (byte) 0x00,
1410561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x7e, (byte) 0x00, (byte) 0x00, (byte) 0x00,
1411561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x73,
1412561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x71, (byte) 0x00, (byte) 0x7e, (byte) 0x00,
1413561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x04, (byte) 0x77, (byte) 0x04, (byte) 0x00,
1414561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x78,
1415561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x71, (byte) 0x00, (byte) 0x7e, (byte) 0x00,
1416561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x08, (byte) 0x78, (byte) 0x78, (byte) 0x78 };
1417561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1418561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ByteArrayInputStream in = new ByteArrayInputStream(nullElement);
1419561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ObjectInputStream sIn = new ObjectInputStream(in);
1420561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1421561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
1422561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            sIn.readObject();
1423561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            if (!testing) {
1424561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                fail("No expected NullPointerException");
1425561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
1426561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (NullPointerException e) {
1427561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } finally {
1428561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            sIn.close();
1429561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
1430561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
1431561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1432561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public static class PermissionTest extends SecurityTest {
1433561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1434561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        private final Subject subject = new Subject();
1435561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1436561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        /*
1437561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes         * FIXME??? presence of unaccessible element
1438561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes         * forbids all operations except adding new elements
1439561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes         */
1440561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        public void testForbiddenElement() {
1441561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1442561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            grantMode(); // no permissions
1443561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            grantPermission(new AuthPermission("modifyPrivateCredentials"));
1444561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1445561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            Principal privCr1 = new MyClass1();
1446561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            Object privCr2 = new Object();
1447561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1448561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            HashSet<Object> hash = new HashSet<Object>();
1449561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            hash.add(privCr1);
1450561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            hash.add(new Object());
1451561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1452561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            Set<Object> set = subject.getPrivateCredentials();
1453561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1454561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // Adding is not prohibited
1455561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            set.add(privCr1);
1456561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1457561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            set.add(privCr2);
1458561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1459561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            try {
1460561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                set.clear();
1461561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                fail("No expected AccessControlException");
1462561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            } catch (AccessControlException e) {
1463561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // PrivateCredentialPermission check goes first
1464561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                assertEquals(e, PrivateCredentialPermission.class);
1465561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
1466561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1467561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            try {
1468561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                set.contains(privCr1);
1469561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                fail("No expected AccessControlException");
1470561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            } catch (AccessControlException e) {
1471561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                assertEquals(e, PrivateCredentialPermission.class);
1472561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
1473561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1474561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            try {
1475561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                set.contains(new Object());
1476561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                fail("No expected AccessControlException");
1477561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            } catch (AccessControlException e) {
1478561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                assertEquals(e, PrivateCredentialPermission.class);
1479561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
1480561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1481561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            assertTrue(set.equals(set));
1482561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            assertFalse(set.equals(new HashSet<Object>()));
1483561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            try {
1484561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // set with equal size initiates iteration
1485561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                set.equals(hash);
1486561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                fail("No expected AccessControlException");
1487561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            } catch (AccessControlException e) {
1488561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                assertEquals(e, PrivateCredentialPermission.class);
1489561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
1490561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1491561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            set.isEmpty();
1492561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1493561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            try {
1494561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                set.hashCode();
1495561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                fail("No expected AccessControlException");
1496561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            } catch (AccessControlException e) {
1497561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                assertEquals(e, PrivateCredentialPermission.class);
1498561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
1499561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1500561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            try {
1501561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                set.remove(privCr1);
1502561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                fail("No expected AccessControlException");
1503561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            } catch (AccessControlException e) {
1504561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // PrivateCredentialPermission check goes first
1505561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                assertEquals(e, PrivateCredentialPermission.class);
1506561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
1507561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1508561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            try {
1509561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                set.remove(new Object());
1510561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                fail("No expected AccessControlException");
1511561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            } catch (AccessControlException e) {
1512561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // PrivateCredentialPermission check goes first
1513561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                assertEquals(e, PrivateCredentialPermission.class);
1514561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
1515561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1516561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            try {
1517561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                set.retainAll(new HashSet<Object>());
1518561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                fail("No expected AccessControlException");
1519561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            } catch (AccessControlException e) {
1520561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // PrivateCredentialPermission check goes first
1521561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                assertEquals(e, PrivateCredentialPermission.class);
1522561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
1523561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1524561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            try {
1525561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                set.toArray();
1526561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                fail("No expected AccessControlException");
1527561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            } catch (AccessControlException e) {
1528561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                assertEquals(e, PrivateCredentialPermission.class);
1529561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
1530561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1531561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            try {
1532561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                set.toArray(new Object[5]);
1533561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                fail("No expected AccessControlException");
1534561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            } catch (AccessControlException e) {
1535561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                assertEquals(e, PrivateCredentialPermission.class);
1536561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
1537561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
1538561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1539561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        public void testIteratorNext_EmptySet() {
1540561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1541561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            grantMode(); // no permissions
1542561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            try {
1543561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (new Subject()).getPrivateCredentials().iterator().next();
1544561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                fail("No expected NoSuchElementException");
1545561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            } catch (NoSuchElementException e) {
1546561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            } catch (IndexOutOfBoundsException e) {
1547561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                if (!testing) {
1548561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    throw e;
1549561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                }
1550561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
1551561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
1552561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1553561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        public void testIteratorNext() {
1554561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1555561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            subject.getPrincipals().add(new MyClass1());
1556561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1557561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            Set<Object> set = subject.getPrivateCredentials();
1558561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1559561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            Object obj1 = new Object();
1560561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            Object obj2 = new Object();
1561561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            Object obj3 = new Object();
1562561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1563561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            set.add(obj1);
1564561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            set.add(new HashSet<Object>());
1565561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            set.add(obj2);
1566561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            set.add(new HashSet<Object>());
1567561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            set.add(obj3);
1568561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1569561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            grantMode(); // no permissions
1570561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1571561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            HashSet<Object> hash = new HashSet<Object>();
1572561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1573561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            grantPermission(new PrivateCredentialPermission(
1574561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    "java.lang.Object * \"*\"", "read"));
1575561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1576561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            Iterator<Object> it = set.iterator();
1577561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            while (it.hasNext()) {
1578561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                try {
1579561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    hash.add(it.next());
1580561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                } catch (AccessControlException e) {
1581561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    assertEquals(e, PrivateCredentialPermission.class);
1582561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                }
1583561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
1584561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1585561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            assertEquals("Size: ", 3, hash.size());
1586561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            assertTrue("1 element", hash.contains(obj1));
1587561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            assertTrue("2 element", hash.contains(obj2));
1588561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            assertTrue("3 element", hash.contains(obj3));
1589561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
1590561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1591561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        public void test_Remove_NotExistingElement_EmptySet() {
1592561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1593561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            denyPermission(new PrivateCredentialPermission("* * \"*\"", "read"));
1594561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1595561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            subject.getPrivateCredentials().remove(new Object());
1596561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
1597561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1598561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        public void test_PrivateCredentialPermission() {
1599561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1600561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            if (!testing) {
1601561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                class P implements Principal {
1602561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    public String getName() {
1603561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        return "name";
1604561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    }
1605561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                }
1606561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1607561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                P p = new P();
1608561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                HashSet<Principal> hash = new HashSet<Principal>();
1609561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                hash.add(p);
1610561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1611561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                PrivateCredentialPermission p1 = new PrivateCredentialPermission(
1612561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        "java.lang.Object", hash);
1613561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1614561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                PrivateCredentialPermission p2 = new PrivateCredentialPermission(
1615561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        "java.lang.Object " + P.class.getName() + " \"name\"",
1616561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        "read");
1617561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1618561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                assertTrue(p1.implies(p2));
1619561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                assertTrue(p2.implies(p1));
1620561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
1621561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1622561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            PrivateCredentialPermission p3 = new PrivateCredentialPermission(
1623561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    "java.lang.Object * \"*\"", "read");
1624561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            PrivateCredentialPermission p4 = new PrivateCredentialPermission(
1625561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    "java.lang.Object", new HashSet<Principal>());
1626561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1627561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            assertTrue(p3.implies(p4));
1628561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
1629561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1630561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        public void test_Principal() {
1631561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1632561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            Principal p1 = new MyClass1();
1633561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            Principal p2 = new MyClass2();
1634561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1635561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            HashSet<Principal> hash = new HashSet<Principal>();
1636561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            hash.add(p2);
1637561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1638561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            Set<Object> set = subject.getPrivateCredentials();
1639561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1640561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            set.add(new Object());
1641561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1642561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            grantMode(); // no permissions
1643561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1644561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            grantPermission(new AuthPermission("modifyPrincipals"));
1645561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            grantPermission(getPermission("java.lang.Object", hash));
1646561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1647561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            Iterator<Object> it = set.iterator();
1648561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            it.next();
1649561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1650561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            subject.getPrincipals().add(p1);
1651561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            it = set.iterator();
1652561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            try {
1653561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                it.next();
1654561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                fail("No expected AccessControlException");
1655561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            } catch (AccessControlException e) {
1656561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                assertEquals(e, PrivateCredentialPermission.class);
1657561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
1658561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1659561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            subject.getPrincipals().add(p2);
1660561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1661561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            it = set.iterator();
1662561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            it.next();
1663561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
1664561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1665561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        public void test_Serialization() throws Exception {
1666561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1667561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            subject.getPrivateCredentials().add(new MyClass1());
1668561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1669561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            denyPermission(new PrivateCredentialPermission("* * \"*\"", "read"));
1670561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1671561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            ByteArrayOutputStream out = new ByteArrayOutputStream();
1672561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            ObjectOutputStream sOut = new ObjectOutputStream(out);
1673561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1674561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            try {
1675561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                sOut.writeObject(subject.getPrivateCredentials());
1676561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                fail("No expected AccessControlException");
1677561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            } catch (AccessControlException e) {
1678561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                assertEquals(e, PrivateCredentialPermission.class);
1679561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            } finally {
1680561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                sOut.close();
1681561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
1682561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
1683561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1684561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        @SuppressWarnings("unchecked")
1685561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        public void testGetClass() {
1686561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1687561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            HashSet hash = new HashSet();
1688561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            hash.add(new MyClass1());
1689561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1690561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            subject.getPrincipals().add(new MyClass1());
1691561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1692561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            subject.getPrivateCredentials().add(new MyClass1());
1693561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            subject.getPrivateCredentials().add(new MyClass2());
1694561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1695561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            grantMode(); // no permissions
1696561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1697561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            try {
1698561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                subject.getPrivateCredentials(MyClass1.class);
1699561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                fail("No expected AccessControlException");
1700561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            } catch (AccessControlException e) {
1701561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                assertEquals(e, PrivateCredentialPermission.class);
1702561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
1703561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1704561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            try {
1705561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                subject.getPrivateCredentials(MyClass2.class);
1706561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                fail("No expected AccessControlException");
1707561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            } catch (AccessControlException e) {
1708561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                assertEquals(e, PrivateCredentialPermission.class);
1709561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
1710561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1711561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // subject hash partial permissions (only for MyClass1 class)
1712561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            grantPermission(getPermission(MyClass1.class.getName(), hash));
1713561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1714561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // FIXME why security exception is thrown?
1715561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // the spec. require permissions for requested class only
1716561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            try {
1717561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                subject.getPrivateCredentials(MyClass1.class);
1718561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                fail("No expected AccessControlException");
1719561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            } catch (AccessControlException e) {
1720561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                assertEquals(e, PrivateCredentialPermission.class);
1721561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
1722561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1723561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            try {
1724561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                subject.getPrivateCredentials(MyClass2.class);
1725561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                fail("No expected AccessControlException");
1726561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            } catch (AccessControlException e) {
1727561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                assertEquals(e, PrivateCredentialPermission.class);
1728561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
1729561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1730561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // now subject has all permissions
1731561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            grantPermission(getPermission(MyClass2.class.getName(), hash));
1732561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1733561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            subject.getPrivateCredentials(MyClass1.class);
1734561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            subject.getPrivateCredentials(MyClass2.class);
1735561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
1736561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1737561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        public PrivateCredentialPermission getPermission(String c, Set<? extends Principal> p) {
1738561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            StringBuffer buf = new StringBuffer(c);
1739561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1740561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            for (Iterator<? extends Principal> it = p.iterator(); it.hasNext();) {
1741561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                Object o = it.next();
1742561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                buf.append(" ");
1743561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                buf.append(o.getClass().getName());
1744561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                buf.append(" \"");
1745561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                buf.append(((Principal) o).getName());
1746561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                buf.append("\"");
1747561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
1748561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            return new PrivateCredentialPermission(buf.toString(), "read");
1749561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
1750561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
1751561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1752561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
1753561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Test subject's public credential set deserialization in case
1754561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * of invalid null element.
1755561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
1756561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_PublicCredentialInvalidSerForm() throws Exception {
1757561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1758561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // The array was produced in the following way:
1759561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // 1) A check that verifies a passed public credential object for null
1760561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        //    value was disabled in Subject class.
1761561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // 2) Subject object was created
1762561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // 3) A null was added to subject's public credential set by invoking
1763561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        //        getPublicCredentials().add(null);
1764561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // 4) ByteArrayOutputStream class was used to write
1765561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        //    subject's public credential set object
1766561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        //    and to get resulting array of bytes
1767561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        byte[] nullElement = new byte[] { (byte) 0xac, (byte) 0xed,
1768561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x00, (byte) 0x05, (byte) 0x73, (byte) 0x72,
1769561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x00, (byte) 0x25, (byte) 0x6a, (byte) 0x61,
1770561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x76, (byte) 0x61, (byte) 0x78, (byte) 0x2e,
1771561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x73, (byte) 0x65, (byte) 0x63, (byte) 0x75,
1772561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x72, (byte) 0x69, (byte) 0x74, (byte) 0x79,
1773561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x2e, (byte) 0x61, (byte) 0x75, (byte) 0x74,
1774561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x68, (byte) 0x2e, (byte) 0x53, (byte) 0x75,
1775561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x62, (byte) 0x6a, (byte) 0x65, (byte) 0x63,
1776561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x74, (byte) 0x24, (byte) 0x53, (byte) 0x65,
1777561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x63, (byte) 0x75, (byte) 0x72, (byte) 0x65,
1778561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x53, (byte) 0x65, (byte) 0x74, (byte) 0x6d,
1779561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0xcc, (byte) 0x32, (byte) 0x80, (byte) 0x17,
1780561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x55, (byte) 0x7e, (byte) 0x27, (byte) 0x03,
1781561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x00, (byte) 0x03, (byte) 0x49, (byte) 0x00,
1782561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x07, (byte) 0x73, (byte) 0x65, (byte) 0x74,
1783561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x54, (byte) 0x79, (byte) 0x70, (byte) 0x65,
1784561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x4c, (byte) 0x00, (byte) 0x08, (byte) 0x65,
1785561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x6c, (byte) 0x65, (byte) 0x6d, (byte) 0x65,
1786561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x6e, (byte) 0x74, (byte) 0x73, (byte) 0x74,
1787561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x00, (byte) 0x16, (byte) 0x4c, (byte) 0x6a,
1788561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x61, (byte) 0x76, (byte) 0x61, (byte) 0x2f,
1789561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x75, (byte) 0x74, (byte) 0x69, (byte) 0x6c,
1790561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x2f, (byte) 0x4c, (byte) 0x69, (byte) 0x6e,
1791561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x6b, (byte) 0x65, (byte) 0x64, (byte) 0x4c,
1792561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x69, (byte) 0x73, (byte) 0x74, (byte) 0x3b,
1793561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x4c, (byte) 0x00, (byte) 0x06, (byte) 0x74,
1794561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x68, (byte) 0x69, (byte) 0x73, (byte) 0x24,
1795561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x30, (byte) 0x74, (byte) 0x00, (byte) 0x1d,
1796561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x4c, (byte) 0x6a, (byte) 0x61, (byte) 0x76,
1797561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x61, (byte) 0x78, (byte) 0x2f, (byte) 0x73,
1798561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x65, (byte) 0x63, (byte) 0x75, (byte) 0x72,
1799561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x69, (byte) 0x74, (byte) 0x79, (byte) 0x2f,
1800561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x61, (byte) 0x75, (byte) 0x74, (byte) 0x68,
1801561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x2f, (byte) 0x53, (byte) 0x75, (byte) 0x62,
1802561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x6a, (byte) 0x65, (byte) 0x63, (byte) 0x74,
1803561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x3b, (byte) 0x78, (byte) 0x70, (byte) 0x00,
1804561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x00, (byte) 0x00, (byte) 0x02, (byte) 0x73,
1805561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x72, (byte) 0x00, (byte) 0x14, (byte) 0x6a,
1806561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x61, (byte) 0x76, (byte) 0x61, (byte) 0x2e,
1807561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x75, (byte) 0x74, (byte) 0x69, (byte) 0x6c,
1808561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x2e, (byte) 0x4c, (byte) 0x69, (byte) 0x6e,
1809561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x6b, (byte) 0x65, (byte) 0x64, (byte) 0x4c,
1810561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x69, (byte) 0x73, (byte) 0x74, (byte) 0x0c,
1811561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x29, (byte) 0x53, (byte) 0x5d, (byte) 0x4a,
1812561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x60, (byte) 0x88, (byte) 0x22, (byte) 0x03,
1813561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x00, (byte) 0x00, (byte) 0x78, (byte) 0x70,
1814561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x77, (byte) 0x04, (byte) 0x00, (byte) 0x00,
1815561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x00, (byte) 0x01, (byte) 0x70, (byte) 0x78,
1816561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x73, (byte) 0x72, (byte) 0x00, (byte) 0x1b,
1817561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x6a, (byte) 0x61, (byte) 0x76, (byte) 0x61,
1818561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x78, (byte) 0x2e, (byte) 0x73, (byte) 0x65,
1819561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x63, (byte) 0x75, (byte) 0x72, (byte) 0x69,
1820561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x74, (byte) 0x79, (byte) 0x2e, (byte) 0x61,
1821561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x75, (byte) 0x74, (byte) 0x68, (byte) 0x2e,
1822561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x53, (byte) 0x75, (byte) 0x62, (byte) 0x6a,
1823561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x65, (byte) 0x63, (byte) 0x74, (byte) 0x8c,
1824561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0xb2, (byte) 0x32, (byte) 0x93, (byte) 0x00,
1825561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x33, (byte) 0xfa, (byte) 0x68, (byte) 0x03,
1826561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x00, (byte) 0x02, (byte) 0x5a, (byte) 0x00,
1827561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x0a, (byte) 0x69, (byte) 0x73, (byte) 0x52,
1828561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x65, (byte) 0x61, (byte) 0x64, (byte) 0x4f,
1829561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x6e, (byte) 0x6c, (byte) 0x79, (byte) 0x4c,
1830561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x00, (byte) 0x0a, (byte) 0x70, (byte) 0x72,
1831561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x69, (byte) 0x6e, (byte) 0x63, (byte) 0x69,
1832561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x70, (byte) 0x61, (byte) 0x6c, (byte) 0x73,
1833561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x74, (byte) 0x00, (byte) 0x0f, (byte) 0x4c,
1834561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x6a, (byte) 0x61, (byte) 0x76, (byte) 0x61,
1835561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x2f, (byte) 0x75, (byte) 0x74, (byte) 0x69,
1836561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x6c, (byte) 0x2f, (byte) 0x53, (byte) 0x65,
1837561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x74, (byte) 0x3b, (byte) 0x78, (byte) 0x70,
1838561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x00, (byte) 0x73, (byte) 0x71, (byte) 0x00,
1839561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x7e, (byte) 0x00, (byte) 0x00, (byte) 0x00,
1840561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x73,
1841561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x71, (byte) 0x00, (byte) 0x7e, (byte) 0x00,
1842561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x04, (byte) 0x77, (byte) 0x04, (byte) 0x00,
1843561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x78,
1844561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x71, (byte) 0x00, (byte) 0x7e, (byte) 0x00,
1845561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                (byte) 0x08, (byte) 0x78, (byte) 0x78, (byte) 0x78 };
1846561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1847561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ByteArrayInputStream in = new ByteArrayInputStream(nullElement);
1848561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ObjectInputStream sIn = new ObjectInputStream(in);
1849561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1850561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
1851561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            sIn.readObject();
1852561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            if (!testing) {
1853561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                fail("No expected NullPointerException");
1854561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
1855561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (NullPointerException e) {
1856561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } finally {
1857561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            sIn.close();
1858561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
1859561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
1860561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1861561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    @SuppressWarnings("serial")
1862561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public static class MyClass1 implements Principal, Serializable {
1863561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        public String getName() {
1864561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            return "MyClass1";
1865561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
1866561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
1867561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1868561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public static class MyClass2 implements Principal {
1869561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        public String getName() {
1870561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            return "MyClass2";
1871561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
1872561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
1873561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1874561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    @SuppressWarnings("serial")
1875561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public static class MyObject implements Serializable {
1876561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
1877561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1878561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public static class PrincipalTestSuite extends TestSuite {
1879561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1880561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        public PrincipalTestSuite() {
1881561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            super("Principal");
1882561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1883561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            TestSuite iterator = new TestSuite("Iterator");
1884561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1885561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            iterator
1886561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    .addTest(new TestSuite(IteratorInterface.class, "Interface"));
1887561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            iterator.addTest(new TestSuite(IteratorReadOnly.class, "ReadOnly"));
1888561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            iterator.addTest(new TestSuite(IteratorSecure.class, "Secure"));
1889561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1890561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            TestSuite set = new TestSuite("Set");
1891561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            set.addTest(new TestSuite(SetInterface.class, "Interface"));
1892561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            set
1893561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    .addTest(new TestSuite(UnsupportedNull.class,
1894561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                            "UnsupportedNull"));
1895561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            set.addTest(new TestSuite(IneligibleElement.class,
1896561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    "IneligibleElement"));
1897561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            set.addTest(new TestSuite(ReadOnlySet.class, "ReadOnly"));
1898561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            set.addTest(new TestSuite(SecureSet.class, "Secure"));
1899561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1900561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            TestSuite object = new TestSuite("Object");
1901561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            object.addTest(new TestSuite(SObjectTest.class, "Object"));
1902561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1903561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            addTest(iterator);
1904561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            addTest(set);
1905561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            addTest(object);
1906561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
1907561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1908561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        public static class IteratorInterface extends SecurityTest.IteratorTest {
1909561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            public IteratorInterface() {
1910561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                set = (new Subject()).getPrincipals();
1911561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                element = principal;
1912561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
1913561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
1914561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1915561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        public static class IteratorReadOnly extends
1916561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                SecurityTest.ReadOnlyIteratorTest {
1917561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1918561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            private final Subject subject = new Subject();
1919561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1920561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            public IteratorReadOnly() {
1921561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                set = subject.getPrincipals();
1922561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                element = principal;
1923561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
1924561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1925561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            @Override
1926561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            public void setReadOnly() {
1927561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                subject.setReadOnly();
1928561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
1929561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
1930561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1931561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        public static class IteratorSecure extends
1932561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                SecurityTest.SecureIteratorTest {
1933561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1934561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            public IteratorSecure() {
1935561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                set = (new Subject()).getPrincipals();
1936561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                element = principal;
1937561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
1938561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1939561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            @Override
1940561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            public void setSecure() {
1941561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                denyPermission(new AuthPermission("modifyPrincipals"));
1942561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
1943561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
1944561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1945561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        public static class SetInterface extends SecurityTest.SetTest {
1946561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            public SetInterface() {
1947561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                set = (new Subject()).getPrincipals();
1948561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                element = principal;
1949561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
1950561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
1951561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1952561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        public static class UnsupportedNull extends
1953561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                SecurityTest.UnsupportedNullTest {
1954561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1955561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            public UnsupportedNull() {
1956561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                set = (new Subject()).getPrincipals();
1957561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                element = principal;
1958561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
1959561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
1960561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1961561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        public static class IneligibleElement extends
1962561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                SecurityTest.IneligibleElementTest {
1963561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1964561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            public IneligibleElement() {
1965561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                set = (new Subject()).getPrincipals();
1966561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                element = principal;
1967561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                iElement = new Object();
1968561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
1969561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
1970561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1971561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        public static class ReadOnlySet extends SecurityTest.ReadOnlySetTest {
1972561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            private final Subject subject = new Subject();
1973561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1974561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            public ReadOnlySet() {
1975561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                set = subject.getPrincipals();
1976561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                element = principal;
1977561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
1978561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1979561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            @Override
1980561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            public void setReadOnly() {
1981561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                subject.setReadOnly();
1982561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
1983561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
1984561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1985561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        public static class SecureSet extends SecurityTest.SecureSetTest {
1986561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1987561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            public SecureSet() {
1988561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                set = (new Subject()).getPrincipals();
1989561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                element = principal;
1990561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
1991561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1992561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            @Override
1993561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            public void setSecure() {
1994561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                denyPermission(new AuthPermission("modifyPrincipals"));
1995561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
1996561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
1997561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
1998561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        public static class SObjectTest extends
1999561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                SecurityTest.SubjectSetObjectTest {
2000561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            public SObjectTest() {
2001561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                obj1 = subject.getPrincipals();
2002561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
2003561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                //intentionally another set
2004561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                obj2 = subject.getPrivateCredentials();
2005561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
2006561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
2007561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
2008561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
2009561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public static class PrivateCredentialTestSuite extends TestSuite {
2010561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
2011561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        public PrivateCredentialTestSuite() {
2012561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            super("PrivateCredential");
2013561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
2014561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            TestSuite iterator = new TestSuite("Iterator");
2015561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
2016561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            iterator
2017561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    .addTest(new TestSuite(IteratorInterface.class, "Interface"));
2018561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            iterator.addTest(new TestSuite(IteratorReadOnly.class, "ReadOnly"));
2019561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            iterator.addTest(new TestSuite(IteratorSecure.class, "Secure"));
2020561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
2021561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            TestSuite set = new TestSuite("Set");
2022561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            set.addTest(new TestSuite(SetInterface.class, "Interface"));
2023561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            set
2024561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    .addTest(new TestSuite(UnsupportedNull.class,
2025561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                            "UnsupportedNull"));
2026561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            set.addTest(new TestSuite(ReadOnlySet.class, "ReadOnly"));
2027561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            set.addTest(new TestSuite(SecureSet.class, "Secure"));
2028561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            set.addTest(new TestSuite(PermissionTest.class, "PermissionTest"));
2029561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
2030561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            TestSuite object = new TestSuite("Object");
2031561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            object.addTest(new TestSuite(SObjectTest.class, "Object"));
2032561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
2033561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            addTest(iterator);
2034561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            addTest(set);
2035561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            addTest(object);
2036561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
2037561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
2038561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        public static class IteratorInterface extends SecurityTest.IteratorTest {
2039561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            public IteratorInterface() {
2040561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                set = (new Subject()).getPrivateCredentials();
2041561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                element = principal;
2042561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
2043561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
2044561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            @Override
2045561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            public void testNext_EmptySet_NoSuchElementException() {
2046561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
2047561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                if (testing) {
2048561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    //Unexpected: IndexOutOfBoundsException
2049561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    try {
2050561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        super.testNext_EmptySet_NoSuchElementException();
2051561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    } catch (IndexOutOfBoundsException e) {
2052561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    }
2053561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                } else {
2054561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    super.testNext_EmptySet_NoSuchElementException();
2055561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                }
2056561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
2057561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
2058561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            @Override
2059561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            public void testNext_NoSuchElementException() {
2060561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                if (testing) {
2061561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    //Unexpected: IndexOutOfBoundsException
2062561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    try {
2063561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        super.testNext_NoSuchElementException();
2064561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    } catch (IndexOutOfBoundsException e) {
2065561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    }
2066561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                } else {
2067561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    super.testNext_NoSuchElementException();
2068561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                }
2069561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
2070561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
2071561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
2072561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        public static class IteratorReadOnly extends
2073561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                SecurityTest.ReadOnlyIteratorTest {
2074561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
2075561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            private final Subject subject = new Subject();
2076561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
2077561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            public IteratorReadOnly() {
2078561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                set = subject.getPrivateCredentials();
2079561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                element = principal;
2080561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
2081561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
2082561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            @Override
2083561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            public void setReadOnly() {
2084561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                subject.setReadOnly();
2085561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
2086561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
2087561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            @Override
2088561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            public void testNext_EmptySet_NoSuchElementException() {
2089561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
2090561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                if (testing) {
2091561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    //Unexpected: IndexOutOfBoundsException
2092561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    try {
2093561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        super.testNext_EmptySet_NoSuchElementException();
2094561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    } catch (IndexOutOfBoundsException e) {
2095561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    }
2096561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                } else {
2097561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    super.testNext_EmptySet_NoSuchElementException();
2098561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                }
2099561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
2100561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
2101561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            @Override
2102561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            public void testNext_NoSuchElementException() {
2103561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                if (testing) {
2104561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    //Unexpected: IndexOutOfBoundsException
2105561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    try {
2106561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        super.testNext_NoSuchElementException();
2107561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    } catch (IndexOutOfBoundsException e) {
2108561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    }
2109561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                } else {
2110561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    super.testNext_NoSuchElementException();
2111561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                }
2112561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
2113561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
2114561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
2115561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        public static class IteratorSecure extends
2116561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                SecurityTest.SecureIteratorTest {
2117561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
2118561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            public IteratorSecure() {
2119561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                set = (new Subject()).getPrivateCredentials();
2120561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                element = principal;
2121561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
2122561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
2123561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            @Override
2124561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            public void setSecure() {
2125561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                denyPermission(new AuthPermission("modifyPrivateCredentials"));
2126561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
2127561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
2128561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            @Override
2129561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            public void testNext_EmptySet_NoSuchElementException() {
2130561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
2131561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                if (testing) {
2132561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    //Unexpected: IndexOutOfBoundsException
2133561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    try {
2134561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        super.testNext_EmptySet_NoSuchElementException();
2135561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    } catch (IndexOutOfBoundsException e) {
2136561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    }
2137561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                } else {
2138561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    super.testNext_EmptySet_NoSuchElementException();
2139561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                }
2140561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
2141561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
2142561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            @Override
2143561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            public void testNext_NoSuchElementException() {
2144561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                if (testing) {
2145561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    //Unexpected: IndexOutOfBoundsException
2146561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    try {
2147561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                        super.testNext_NoSuchElementException();
2148561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    } catch (IndexOutOfBoundsException e) {
2149561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    }
2150561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                } else {
2151561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    super.testNext_NoSuchElementException();
2152561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                }
2153561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
2154561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
2155561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
2156561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        public static class SetInterface extends SecurityTest.SetTest {
2157561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            public SetInterface() {
2158561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                set = (new Subject()).getPrivateCredentials();
2159561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                element = principal;
2160561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
2161561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
2162561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
2163561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        public static class UnsupportedNull extends
2164561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                SecurityTest.UnsupportedNullTest {
2165561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
2166561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            public UnsupportedNull() {
2167561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                set = (new Subject()).getPrivateCredentials();
2168561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                element = principal;
2169561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
2170561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
2171561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
2172561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        public static class ReadOnlySet extends SecurityTest.ReadOnlySetTest {
2173561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            private final Subject subject = new Subject();
2174561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
2175561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            public ReadOnlySet() {
2176561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                set = subject.getPrivateCredentials();
2177561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                element = principal;
2178561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
2179561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
2180561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            @Override
2181561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            public void setReadOnly() {
2182561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                subject.setReadOnly();
2183561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
2184561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
2185561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
2186561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        public static class SecureSet extends SecurityTest.SecureSetTest {
2187561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
2188561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            public SecureSet() {
2189561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                set = (new Subject()).getPrivateCredentials();
2190561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                element = principal;
2191561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
2192561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
2193561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            @Override
2194561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            public void setSecure() {
2195561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                denyPermission(new AuthPermission("modifyPrivateCredentials"));
2196561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
2197561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
2198561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
2199561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        public static class SObjectTest extends
2200561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                SecurityTest.SubjectSetObjectTest {
2201561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            public SObjectTest() {
2202561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                obj1 = subject.getPrivateCredentials();
2203561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
2204561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                //intentionally another set
2205561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                obj2 = subject.getPublicCredentials();
2206561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
2207561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
2208561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
2209561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
2210561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public static class PublicCredentialTestSuite extends TestSuite {
2211561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
2212561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        public PublicCredentialTestSuite() {
2213561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            super("PublicCredential");
2214561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
2215561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            TestSuite iterator = new TestSuite("Iterator");
2216561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
2217561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            iterator
2218561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    .addTest(new TestSuite(IteratorInterface.class, "Interface"));
2219561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            iterator.addTest(new TestSuite(IteratorReadOnly.class, "ReadOnly"));
2220561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            iterator.addTest(new TestSuite(IteratorSecure.class, "Secure"));
2221561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
2222561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            TestSuite set = new TestSuite("Set");
2223561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            set.addTest(new TestSuite(SetInterface.class, "Interface"));
2224561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            set
2225561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    .addTest(new TestSuite(UnsupportedNull.class,
2226561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                            "UnsupportedNull"));
2227561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            set.addTest(new TestSuite(ReadOnlySet.class, "ReadOnly"));
2228561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            set.addTest(new TestSuite(SecureSet.class, "Secure"));
2229561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
2230561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            TestSuite object = new TestSuite("Object");
2231561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            object.addTest(new TestSuite(SObjectTest.class, "Object"));
2232561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
2233561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            addTest(iterator);
2234561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            addTest(set);
2235561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            addTest(object);
2236561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
2237561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
2238561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        public static class IteratorInterface extends SecurityTest.IteratorTest {
2239561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            public IteratorInterface() {
2240561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                set = (new Subject()).getPublicCredentials();
2241561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                element = principal;
2242561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
2243561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
2244561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
2245561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        public static class IteratorReadOnly extends
2246561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                SecurityTest.ReadOnlyIteratorTest {
2247561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
2248561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            private final Subject subject = new Subject();
2249561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
2250561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            public IteratorReadOnly() {
2251561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                set = subject.getPublicCredentials();
2252561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                element = principal;
2253561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
2254561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
2255561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            @Override
2256561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            public void setReadOnly() {
2257561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                subject.setReadOnly();
2258561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
2259561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
2260561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
2261561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        public static class IteratorSecure extends
2262561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                SecurityTest.SecureIteratorTest {
2263561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
2264561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            public IteratorSecure() {
2265561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                set = (new Subject()).getPublicCredentials();
2266561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                element = principal;
2267561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
2268561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
2269561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            @Override
2270561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            public void setSecure() {
2271561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                denyPermission(new AuthPermission("modifyPublicCredentials"));
2272561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
2273561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
2274561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
2275561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        public static class SetInterface extends SecurityTest.SetTest {
2276561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            public SetInterface() {
2277561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                set = (new Subject()).getPublicCredentials();
2278561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                element = principal;
2279561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
2280561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
2281561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
2282561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        public static class UnsupportedNull extends
2283561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                SecurityTest.UnsupportedNullTest {
2284561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
2285561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            public UnsupportedNull() {
2286561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                set = (new Subject()).getPublicCredentials();
2287561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                element = principal;
2288561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
2289561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
2290561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
2291561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        public static class ReadOnlySet extends SecurityTest.ReadOnlySetTest {
2292561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            private final Subject subject = new Subject();
2293561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
2294561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            public ReadOnlySet() {
2295561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                set = subject.getPublicCredentials();
2296561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                element = principal;
2297561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
2298561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
2299561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            @Override
2300561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            public void setReadOnly() {
2301561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                subject.setReadOnly();
2302561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
2303561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
2304561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
2305561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        public static class SecureSet extends SecurityTest.SecureSetTest {
2306561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
2307561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            public SecureSet() {
2308561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                set = (new Subject()).getPublicCredentials();
2309561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                element = principal;
2310561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
2311561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
2312561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            @Override
2313561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            public void setSecure() {
2314561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                denyPermission(new AuthPermission("modifyPublicCredentials"));
2315561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
2316561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
2317561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
2318561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        public static class SObjectTest extends
2319561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                SecurityTest.SubjectSetObjectTest {
2320561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            public SObjectTest() {
2321561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                obj1 = subject.getPublicCredentials();
2322561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
2323561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                //intentionally another set
2324561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                obj2 = subject.getPrincipals();
2325561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
2326561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
2327561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
2328561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
2329561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public static class PrincipalClassTestSuite extends TestSuite {
2330561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
2331561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        public PrincipalClassTestSuite() {
2332561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            super("PrincipalClass");
2333561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
2334561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            TestSuite set = new TestSuite("Set");
2335561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            set.addTest(new TestSuite(SetInterface.class, "Interface"));
2336561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            set
2337561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    .addTest(new TestSuite(UnsupportedNull.class,
2338561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                            "UnsupportedNull"));
2339561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            set.addTest(new TestSuite(IneligibleElement.class,
2340561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    "IneligibleElement"));
2341561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
2342561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            TestSuite object = new TestSuite("Object");
2343561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            object.addTest(new TestSuite(SObjectTest.class, "Object"));
2344561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
2345561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            addTest(set);
2346561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            addTest(object);
2347561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
2348561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
2349561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        public static class SetInterface extends SecurityTest.SetTest {
2350561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            public SetInterface() {
2351561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                set = (new Subject()).getPrincipals(MyClass1.class);
2352561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                element = new MyClass1();
2353561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
2354561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
2355561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
2356561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        public static class UnsupportedNull extends
2357561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                SecurityTest.UnsupportedNullTest {
2358561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
2359561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            public UnsupportedNull() {
2360561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                set = (new Subject()).getPrincipals(MyClass1.class);
2361561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                element = new MyClass1();
2362561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
2363561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
2364561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
2365561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        public static class IneligibleElement extends
2366561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                SecurityTest.IneligibleElementTest {
2367561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
2368561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            public IneligibleElement() {
2369561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                set = (new Subject()).getPrincipals(MyClass1.class);
2370561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                element = new MyClass1();
2371561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                iElement = new MyClass2();
2372561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
2373561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
2374561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
2375561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        public static class SObjectTest extends
2376561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                SecurityTest.SubjectSetObjectTest {
2377561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            public SObjectTest() {
2378561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                obj1 = subject.getPrincipals(MyClass1.class);
2379561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
2380561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                //intentionally another set
2381561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                obj2 = subject.getPrivateCredentials(MyClass1.class);
2382561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
2383561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
2384561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
2385561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
2386561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public static class PrivateCredentialClassTestSuite extends TestSuite {
2387561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
2388561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        public PrivateCredentialClassTestSuite() {
2389561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            super("PrivateCredentialClass");
2390561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
2391561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            TestSuite set = new TestSuite("Set");
2392561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            set.addTest(new TestSuite(SetInterface.class, "Interface"));
2393561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            set
2394561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    .addTest(new TestSuite(UnsupportedNull.class,
2395561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                            "UnsupportedNull"));
2396561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            set.addTest(new TestSuite(IneligibleElement.class,
2397561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    "IneligibleElement"));
2398561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
2399561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            TestSuite object = new TestSuite("Object");
2400561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            object.addTest(new TestSuite(SObjectTest.class, "Object"));
2401561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
2402561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            addTest(set);
2403561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            addTest(object);
2404561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
2405561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
2406561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        public static class SetInterface extends SecurityTest.SetTest {
2407561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            public SetInterface() {
2408561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                set = (new Subject()).getPrivateCredentials(MyClass1.class);
2409561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                element = new MyClass1();
2410561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
2411561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
2412561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
2413561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        public static class UnsupportedNull extends
2414561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                SecurityTest.UnsupportedNullTest {
2415561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
2416561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            public UnsupportedNull() {
2417561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                set = (new Subject()).getPrivateCredentials(MyClass1.class);
2418561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                element = new MyClass1();
2419561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
2420561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
2421561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
2422561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        public static class IneligibleElement extends
2423561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                SecurityTest.IneligibleElementTest {
2424561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
2425561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            public IneligibleElement() {
2426561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                set = (new Subject()).getPrivateCredentials(MyClass1.class);
2427561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                element = new MyClass1();
2428561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                iElement = new MyClass2();
2429561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
2430561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
2431561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
2432561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        public static class SObjectTest extends
2433561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                SecurityTest.SubjectSetObjectTest {
2434561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            public SObjectTest() {
2435561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                obj1 = subject.getPrivateCredentials(MyClass1.class);
2436561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
2437561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                //intentionally another set
2438561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                obj2 = subject.getPublicCredentials(MyClass1.class);
2439561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
2440561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
2441561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
2442561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
2443561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public static class PublicCredentialClassTestSuite extends TestSuite {
2444561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
2445561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        public PublicCredentialClassTestSuite() {
2446561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            super("PublicCredentialClass");
2447561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
2448561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            TestSuite set = new TestSuite("Set");
2449561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            set.addTest(new TestSuite(SetInterface.class, "Interface"));
2450561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            set
2451561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    .addTest(new TestSuite(UnsupportedNull.class,
2452561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                            "UnsupportedNull"));
2453561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            set.addTest(new TestSuite(IneligibleElement.class,
2454561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    "IneligibleElement"));
2455561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
2456561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            TestSuite object = new TestSuite("Object");
2457561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            object.addTest(new TestSuite(SObjectTest.class, "Object"));
2458561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
2459561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            addTest(set);
2460561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            addTest(object);
2461561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
2462561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
2463561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        public static class SetInterface extends SecurityTest.SetTest {
2464561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            public SetInterface() {
2465561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                set = (new Subject()).getPublicCredentials(MyClass1.class);
2466561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                element = new MyClass1();
2467561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
2468561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
2469561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
2470561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        public static class UnsupportedNull extends
2471561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                SecurityTest.UnsupportedNullTest {
2472561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
2473561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            public UnsupportedNull() {
2474561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                set = (new Subject()).getPublicCredentials(MyClass1.class);
2475561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                element = new MyClass1();
2476561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
2477561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
2478561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
2479561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        public static class IneligibleElement extends
2480561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                SecurityTest.IneligibleElementTest {
2481561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
2482561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            public IneligibleElement() {
2483561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                set = (new Subject()).getPublicCredentials(MyClass1.class);
2484561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                element = new MyClass1();
2485561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                iElement = new MyClass2();
2486561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
2487561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
2488561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
2489561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        public static class SObjectTest extends
2490561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                SecurityTest.SubjectSetObjectTest {
2491561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            public SObjectTest() {
2492561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                obj1 = subject.getPublicCredentials(MyClass1.class);
2493561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
2494561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                //intentionally another set
2495561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                obj2 = subject.getPrincipals(MyClass1.class);
2496561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
2497561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
2498561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
2499561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes}