1/*
2 *  Licensed to the Apache Software Foundation (ASF) under one or more
3 *  contributor license agreements.  See the NOTICE file distributed with
4 *  this work for additional information regarding copyright ownership.
5 *  The ASF licenses this file to You under the Apache License, Version 2.0
6 *  (the "License"); you may not use this file except in compliance with
7 *  the License.  You may obtain a copy of the License at
8 *
9 *     http://www.apache.org/licenses/LICENSE-2.0
10 *
11 *  Unless required by applicable law or agreed to in writing, software
12 *  distributed under the License is distributed on an "AS IS" BASIS,
13 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 *  See the License for the specific language governing permissions and
15 *  limitations under the License.
16 */
17
18package tests.api.javax.security.auth;
19
20import dalvik.annotation.TestLevel;
21import dalvik.annotation.TestTargetClass;
22import dalvik.annotation.TestTargetNew;
23import dalvik.annotation.TestTargets;
24
25import junit.framework.TestCase;
26
27import javax.security.auth.AuthPermission;
28import javax.security.auth.PrivateCredentialPermission;
29import javax.security.auth.Subject;
30
31import java.util.Set;
32import java.util.HashSet;
33import java.security.Permission;
34import java.security.Principal;
35import java.security.PrivilegedAction;
36import java.security.PrivilegedActionException;
37import java.security.PrivilegedExceptionAction;
38import java.security.AccessControlContext;
39import java.security.AccessController;
40import java.security.ProtectionDomain;
41
42import org.apache.harmony.security.tests.support.acl.PrincipalImpl;
43
44
45/**
46 * Tests for <code>Subject</code> class constructors and methods.
47 *
48 */
49@TestTargetClass(Subject.class)
50public class SubjectTest extends TestCase {
51
52    SecurityManager old;
53
54    @Override
55    protected void setUp() throws Exception {
56        old = System.getSecurityManager();
57        super.setUp();
58    }
59
60    @Override
61    protected void tearDown() throws Exception {
62        System.setSecurityManager(old);
63        super.tearDown();
64    }
65
66    /**
67     * @tests javax.security.auth.Subject#Subject()
68     */
69    @TestTargetNew(
70        level = TestLevel.COMPLETE,
71        notes = "",
72        method = "Subject",
73        args = {}
74    )
75    public void test_Constructor_01() {
76        try {
77            Subject s = new Subject();
78            assertNotNull("Null object returned", s);
79            assertTrue("Set of principal is not empty", s.getPrincipals().isEmpty());
80            assertTrue("Set of private credentials is not empty", s.getPrivateCredentials().isEmpty());
81            assertTrue("Set of public credentials is not empty", s.getPublicCredentials().isEmpty());
82        } catch (Exception e) {
83            fail("Unexpected exception: " + e);
84        }
85    }
86
87    /**
88     * @tests javax.security.auth.Subject#Subject(boolean readOnly,
89     *                                            Set<? extends Principal> principals,
90     *                                            Set<?> pubCredentials,
91     *                                            Set<?> privCredentials)
92     */
93    @TestTargetNew(
94        level = TestLevel.COMPLETE,
95        notes = "",
96        method = "Subject",
97        args = {boolean.class, Set.class, Set.class, Set.class}
98    )
99    public void test_Constructor_02() {
100        Set <Principal> principal = new HashSet<Principal>();
101        Set <Object> pubCredentials = new HashSet<Object>();
102        Set <Object> privCredentials = new HashSet<Object>();
103        Principal pr1 = new PrincipalImpl("TestPrincipal1");
104        Principal pr2 = new PrincipalImpl("TestPrincipal2");
105        principal.add(pr1);
106        principal.add(pr2);
107        Object pubCredential1 = new Object();
108        Object pubCredential2 = new Object();
109        pubCredentials.add(pubCredential1);
110        pubCredentials.add(pubCredential2);
111        Object privCredential1 = new Object();
112        Object privCredential2 = new Object();
113        privCredentials.add(privCredential1);
114        privCredentials.add(privCredential2);
115
116        try {
117            Subject s = new Subject(true, principal, pubCredentials, privCredentials);
118            assertNotNull("Null object returned", s);
119            assertTrue("Not read-only object", s.isReadOnly());
120            assertFalse("Set of principal is empty", s.getPrincipals().isEmpty());
121            assertFalse("Set of private credentials is empty", s.getPrivateCredentials().isEmpty());
122            assertFalse("Set of public credentials is empty", s.getPublicCredentials().isEmpty());
123        } catch (Exception e) {
124            fail("Unexpected exception: " + e);
125        }
126
127        try {
128            Subject s = new Subject(false, principal, pubCredentials, privCredentials);
129            assertNotNull("Null object returned", s);
130            assertFalse("Read-only object", s.isReadOnly());
131            assertFalse("Set of principal is empty", s.getPrincipals().isEmpty());
132            assertFalse("Set of private credentials is empty", s.getPrivateCredentials().isEmpty());
133            assertFalse("Set of public credentials is empty", s.getPublicCredentials().isEmpty());
134        } catch (Exception e) {
135            fail("Unexpected exception: " + e);
136        }
137
138        try {
139            Subject s = new Subject(true, null, pubCredentials, privCredentials);
140            fail("NullPointerException wasn't thrown");
141        } catch (NullPointerException npe) {
142        }
143
144        try {
145            Subject s = new Subject(true, principal, null, privCredentials);
146            fail("NullPointerException wasn't thrown");
147        } catch (NullPointerException npe) {
148        }
149
150        try {
151            Subject s = new Subject(true, principal, pubCredentials, null);
152            fail("NullPointerException wasn't thrown");
153        } catch (NullPointerException npe) {
154        }
155
156        try {
157            Subject s = new Subject(true, null, null, null);
158            fail("NullPointerException wasn't thrown");
159        } catch (NullPointerException npe) {
160        }
161    }
162
163    /**
164     * @tests javax.security.auth.Subject#doAs(Subject subject, PrivilegedAction action)
165     */
166    @TestTargetNew(
167        level = TestLevel.COMPLETE,
168        notes = "",
169        method = "doAs",
170        args = {Subject.class, PrivilegedAction.class}
171    )
172    public void test_doAs_01() {
173        Subject subj = new Subject();
174        PrivilegedAction<Object> pa = new myPrivilegedAction();
175        PrivilegedAction<Object> paNull = null;
176
177        try {
178            Object obj = Subject.doAs(null, pa);
179        } catch (Exception e) {
180            fail("Unexpected exception: " + e);
181        }
182
183        try {
184            Object obj = Subject.doAs(subj, pa);
185        } catch (Exception e) {
186            fail("Unexpected exception: " + e);
187        }
188
189        try {
190            Object obj = Subject.doAs(subj, paNull);
191            fail("NullPointerException wasn't thrown");
192        } catch (NullPointerException npe) {
193        }
194
195        class TestSecurityManager extends SecurityManager {
196            @Override
197            public void checkPermission(Permission permission) {
198                if (permission instanceof AuthPermission
199                        && "doAs".equals(permission.getName())) {
200                    throw new SecurityException();
201                }
202                super.checkPermission(permission);
203            }
204        }
205        TestSecurityManager s = new TestSecurityManager();
206        System.setSecurityManager(s);
207        try {
208            Object obj = Subject.doAs(subj, pa);
209            fail("SecurityException wasn't thrown");
210        } catch (SecurityException se) {
211        }
212    }
213
214    /**
215     * @tests javax.security.auth.Subject#doAs(Subject subject, PrivilegedExceptionAction action)
216     */
217    @TestTargetNew(
218        level = TestLevel.COMPLETE,
219        notes = "",
220        method = "doAs",
221        args = {Subject.class, PrivilegedExceptionAction.class}
222    )
223    public void test_doAs_02() {
224        Subject subj = new Subject();
225        PrivilegedExceptionAction<Object> pea = new myPrivilegedExceptionAction();
226        PrivilegedExceptionAction<Object> peaNull = null;
227
228        try {
229            Object obj = Subject.doAs(null, pea);
230        } catch (Exception e) {
231            fail("Unexpected exception: " + e);
232        }
233
234        try {
235            Object obj = Subject.doAs(subj, pea);
236        } catch (Exception e) {
237            fail("Unexpected exception: " + e);
238        }
239
240        try {
241            Object obj = Subject.doAs(subj, peaNull);
242            fail("NullPointerException wasn't thrown");
243        } catch (NullPointerException npe) {
244        } catch (Exception e) {
245            fail(e + " was thrown instead of NullPointerException");
246        }
247
248        try {
249            Subject.doAs(subj, new PrivilegedExceptionAction<Object>(){
250                public Object run() throws PrivilegedActionException {
251                    throw new PrivilegedActionException(null);
252                }
253            });
254            fail("PrivilegedActionException wasn't thrown");
255        } catch (PrivilegedActionException e) {
256        }
257
258        class TestSecurityManager extends SecurityManager {
259            @Override
260            public void checkPermission(Permission permission) {
261                if (permission instanceof AuthPermission
262                        && "doAs".equals(permission.getName())) {
263                    throw new SecurityException();
264                }
265                super.checkPermission(permission);
266            }
267        }
268        TestSecurityManager s = new TestSecurityManager();
269        System.setSecurityManager(s);
270        try {
271            Object obj = Subject.doAs(subj, pea);
272            fail("SecurityException wasn't thrown");
273        } catch (SecurityException se) {
274        } catch (Exception e) {
275            fail(e + " was thrown instead of SecurityException");
276        }
277    }
278
279    /**
280     * @tests javax.security.auth.Subject#doAsPrivileged(Subject subject,
281     *                                                   PrivilegedAction action,
282     *                                                   AccessControlContext acc)
283     */
284    @TestTargetNew(
285        level = TestLevel.COMPLETE,
286        notes = "",
287        method = "doAsPrivileged",
288        args = {Subject.class, PrivilegedAction.class, AccessControlContext.class}
289    )
290    public void test_doAsPrivileged_01() {
291        Subject subj = new Subject();
292        PrivilegedAction<Object> pa = new myPrivilegedAction();
293        PrivilegedAction<Object> paNull = null;
294        AccessControlContext acc = AccessController.getContext();
295
296        try {
297            Object obj = Subject.doAsPrivileged(null, pa, acc);
298        } catch (Exception e) {
299            fail("Unexpected exception: " + e);
300        }
301
302        try {
303            Object obj = Subject.doAsPrivileged(subj, pa, acc);
304        } catch (Exception e) {
305            fail("Unexpected exception: " + e);
306        }
307
308        try {
309            Object obj = Subject.doAsPrivileged(subj, paNull, acc);
310            fail("NullPointerException wasn't thrown");
311        } catch (NullPointerException npe) {
312        }
313
314        class TestSecurityManager extends SecurityManager {
315            @Override
316            public void checkPermission(Permission permission) {
317                if (permission instanceof AuthPermission
318                        && "doAsPrivileged".equals(permission.getName())) {
319                    throw new SecurityException();
320                }
321                super.checkPermission(permission);
322            }
323        }
324        TestSecurityManager s = new TestSecurityManager();
325        System.setSecurityManager(s);
326        try {
327            Object obj = Subject.doAsPrivileged(subj, pa, acc);
328            fail("SecurityException wasn't thrown");
329        } catch (SecurityException se) {
330        }
331    }
332
333    /**
334     * @tests javax.security.auth.Subject#doAsPrivileged(Subject subject,
335     *                                                   PrivilegedExceptionAction action,
336     *                                                   AccessControlContext acc)
337     */
338    @TestTargetNew(
339        level = TestLevel.COMPLETE,
340        notes = "",
341        method = "doAsPrivileged",
342        args = {Subject.class, PrivilegedExceptionAction.class, AccessControlContext.class}
343    )
344    public void test_doAsPrivileged_02() {
345        Subject subj = new Subject();
346        PrivilegedExceptionAction<Object> pea = new myPrivilegedExceptionAction();
347        PrivilegedExceptionAction<Object> peaNull = null;
348        AccessControlContext acc = AccessController.getContext();
349
350        try {
351            Object obj = Subject.doAsPrivileged(null, pea, acc);
352        } catch (Exception e) {
353            fail("Unexpected exception: " + e);
354        }
355
356        try {
357            Object obj = Subject.doAsPrivileged(subj, pea, acc);
358        } catch (Exception e) {
359            fail("Unexpected exception: " + e);
360        }
361
362        try {
363            Object obj = Subject.doAsPrivileged(subj, peaNull, acc);
364            fail("NullPointerException wasn't thrown");
365        } catch (NullPointerException npe) {
366        } catch (Exception e) {
367            fail(e + " was thrown instead of NullPointerException");
368        }
369
370        try {
371            Subject.doAsPrivileged(subj, new PrivilegedExceptionAction<Object>(){
372                public Object run() throws PrivilegedActionException {
373                    throw new PrivilegedActionException(null);
374                }
375            }, acc);
376            fail("PrivilegedActionException wasn't thrown");
377        } catch (PrivilegedActionException e) {
378        }
379
380        class TestSecurityManager extends SecurityManager {
381            @Override
382            public void checkPermission(Permission permission) {
383                if (permission instanceof AuthPermission
384                        && "doAsPrivileged".equals(permission.getName())) {
385                    throw new SecurityException();
386                }
387                super.checkPermission(permission);
388            }
389        }
390        TestSecurityManager s = new TestSecurityManager();
391        System.setSecurityManager(s);
392        try {
393            Object obj = Subject.doAsPrivileged(subj, pea, acc);
394            fail("SecurityException wasn't thrown");
395        } catch (SecurityException se) {
396        } catch (Exception e) {
397            fail(e + " was thrown instead of SecurityException");
398        }
399    }
400
401    /**
402     * @tests javax.security.auth.Subject#equals(Object o)
403     */
404    @TestTargetNew(
405        level = TestLevel.SUFFICIENT,
406        notes = "SecurityException wasn't tested",
407        method = "equals",
408        args = {Object.class}
409    )
410    public void test_equals() {
411        Set <Principal> principal = new HashSet<Principal>();
412        Set <Principal> principal1 = new HashSet<Principal>();
413        Set <Object> pubCredentials = new HashSet<Object>();
414        Set <Object> privCredentials = new HashSet<Object>();
415        Principal pr1 = new PrincipalImpl("TestPrincipal1");
416        Principal pr2 = new PrincipalImpl("TestPrincipal2");
417        principal.add(pr1);
418        principal.add(pr2);
419        principal1.add(pr1);
420        Object pubCredential1 = new Object();
421        Object pubCredential2 = new Object();
422        pubCredentials.add(pubCredential1);
423        pubCredentials.add(pubCredential2);
424        Object privCredential1 = new Object();
425        Object privCredential2 = new Object();
426        privCredentials.add(privCredential1);
427        privCredentials.add(privCredential2);
428
429        Subject s1 = new Subject(true, principal, pubCredentials, privCredentials);
430        Subject s2 = new Subject(true, principal1, pubCredentials, privCredentials);
431        Subject s3 = new Subject(true, principal, pubCredentials, privCredentials);
432
433        try {
434            assertTrue(s1.equals(s1));
435            assertFalse(s1.equals(s2));
436            assertTrue(s1.equals(s3));
437            assertFalse(s1.equals(new Object()));
438        } catch (Exception e) {
439            fail("Unexpected exception: " + e);
440        }
441
442
443        class TestSecurityManager extends SecurityManager {
444            @Override
445            public void checkPermission(Permission permission) {
446                if (permission instanceof PrivateCredentialPermission
447                        && "equals".equals(permission.getName())) {
448                    throw new SecurityException();
449                }
450                super.checkPermission(permission);
451            }
452        }
453        TestSecurityManager s = new TestSecurityManager();
454        System.setSecurityManager(s);
455        try {
456            s1.equals(s1);
457            //fail("SecurityException wasn't thrown");
458        } catch (SecurityException se) {
459        }
460    }
461
462    /**
463     * @tests javax.security.auth.Subject#getPrincipals()
464     * @tests javax.security.auth.Subject#getPrivateCredentials()
465     * @tests javax.security.auth.Subject#getPublicCredentials()
466     * @tests javax.security.auth.Subject#isReadOnly()
467     * @tests javax.security.auth.Subject#setReadOnly()
468     */
469    @TestTargets({
470        @TestTargetNew(
471            level = TestLevel.COMPLETE,
472            notes = "",
473            method = "getPrincipals",
474            args = {}
475        ),
476        @TestTargetNew(
477            level = TestLevel.COMPLETE,
478            notes = "",
479            method = "getPrivateCredentials",
480            args = {}
481        ),
482        @TestTargetNew(
483            level = TestLevel.COMPLETE,
484            notes = "",
485            method = "getPublicCredentials",
486            args = {}
487        )
488    })
489    public void test_getPrincipals() {
490        Set <Principal> principal = new HashSet<Principal>();
491        Set <Object> pubCredentials = new HashSet<Object>();
492        Set <Object> privCredentials = new HashSet<Object>();
493        Principal pr1 = new PrincipalImpl("TestPrincipal1");
494        Principal pr2 = new PrincipalImpl("TestPrincipal2");
495        principal.add(pr1);
496        principal.add(pr2);
497        Object pubCredential1 = new Object();
498        pubCredentials.add(pubCredential1);
499        Object privCredential1 = new Object();
500        Object privCredential2 = new Object();
501        privCredentials.add(privCredential1);
502        privCredentials.add(privCredential2);
503
504        Subject s = new Subject(false, principal, pubCredentials, privCredentials);
505
506        try {
507            Set<Principal> pr = s.getPrincipals();
508            assertNotNull(pr);
509            assertEquals(principal.size(), pr.size());
510        } catch (Exception e) {
511            fail("Unexpected exception: " + e);
512        }
513
514        try {
515            Set<Object> privC = s.getPrivateCredentials();
516            assertNotNull(privC);
517            assertEquals(privCredentials.size(), privC.size());
518        } catch (Exception e) {
519            fail("Unexpected exception: " + e);
520        }
521
522        try {
523            Set<Object> pubC = s.getPublicCredentials();
524            assertNotNull(pubC);
525            assertEquals(pubCredentials.size(), pubC.size());
526        } catch (Exception e) {
527            fail("Unexpected exception: " + e);
528        }
529    }
530
531    /**
532     * @tests javax.security.auth.Subject#isReadOnly()
533     * @tests javax.security.auth.Subject#setReadOnly()
534     */
535    @TestTargets({
536        @TestTargetNew(
537            level = TestLevel.COMPLETE,
538            notes = "",
539            method = "isReadOnly",
540            args = {}
541        ),
542        @TestTargetNew(
543            level = TestLevel.COMPLETE,
544            notes = "",
545            method = "setReadOnly",
546            args = {}
547        )
548    })
549    public void test_ReadOnly() {
550        Set <Principal> principal = new HashSet<Principal>();
551        Set <Object> pubCredentials = new HashSet<Object>();
552        Set <Object> privCredentials = new HashSet<Object>();
553        Principal pr1 = new PrincipalImpl("TestPrincipal1");
554        Principal pr2 = new PrincipalImpl("TestPrincipal2");
555        principal.add(pr1);
556        principal.add(pr2);
557        Object pubCredential1 = new Object();
558        pubCredentials.add(pubCredential1);
559        Object privCredential1 = new Object();
560        Object privCredential2 = new Object();
561        privCredentials.add(privCredential1);
562        privCredentials.add(privCredential2);
563
564        Subject s = new Subject(false, principal, pubCredentials, privCredentials);
565
566        try {
567            assertFalse(s.isReadOnly());
568            s.setReadOnly();
569            assertTrue(s.isReadOnly());
570        } catch (Exception e) {
571            fail("Unexpected exception " + e);
572        }
573
574        class TestSecurityManager extends SecurityManager {
575            @Override
576            public void checkPermission(Permission permission) {
577                if (permission instanceof AuthPermission
578                        && "setReadOnly".equals(permission.getName())) {
579                    throw new SecurityException();
580                }
581                super.checkPermission(permission);
582            }
583        }
584        TestSecurityManager ss = new TestSecurityManager();
585        System.setSecurityManager(ss);
586        try {
587            s.setReadOnly();
588            fail("SecurityException wasn't thrown");
589        } catch (SecurityException se) {
590        }
591    }
592
593    /**
594     * @tests javax.security.auth.Subject#getSubject(AccessControlContext acc)
595     */
596    @TestTargetNew(
597        level = TestLevel.COMPLETE,
598        notes = "",
599        method = "getSubject",
600        args = {AccessControlContext.class}
601    )
602    public void test_getSubject() {
603        Subject subj = new Subject();
604        AccessControlContext acc = new AccessControlContext(new ProtectionDomain[0]);
605
606        try {
607            assertNull(Subject.getSubject(acc));
608        } catch (Exception e) {
609            fail("Unexpected exception " + e);
610        }
611
612        class TestSecurityManager extends SecurityManager {
613            @Override
614            public void checkPermission(Permission permission) {
615                if (permission instanceof AuthPermission
616                        && "getSubject".equals(permission.getName())) {
617                    throw new SecurityException();
618                }
619                super.checkPermission(permission);
620            }
621        }
622        TestSecurityManager s = new TestSecurityManager();
623        System.setSecurityManager(s);
624        try {
625            Subject.getSubject(acc);
626            fail("SecurityException wasn't thrown");
627        } catch (SecurityException se) {
628        }
629    }
630
631    /**
632     * @tests javax.security.auth.Subject#toString()
633     */
634    @TestTargetNew(
635        level = TestLevel.COMPLETE,
636        notes = "",
637        method = "toString",
638        args = {}
639    )
640    public void test_toString() {
641        Subject subj = new Subject();
642
643        try {
644            assertNotNull("Null returned", subj.toString());
645        } catch (Exception e) {
646            fail("Unexpected exception: " + e);
647        }
648    }
649
650    /**
651     * @tests javax.security.auth.Subject#hashCode()
652     */
653    @TestTargetNew(
654        level = TestLevel.SUFFICIENT,
655        notes = "SecurityException wasn't tested",
656        method = "hashCode",
657        args = {}
658    )
659    public void test_hashCode() {
660        Subject subj = new Subject();
661
662        try {
663            assertNotNull("Null returned", subj.hashCode());
664        } catch (Exception e) {
665            fail("Unexpected exception: " + e);
666        }
667
668        class TestSecurityManager extends SecurityManager {
669            @Override
670            public void checkPermission(Permission permission) {
671                if (permission instanceof AuthPermission
672                        && "hashCode".equals(permission.getName())) {
673                    throw new SecurityException();
674                }
675                super.checkPermission(permission);
676            }
677        }
678        TestSecurityManager s = new TestSecurityManager();
679        System.setSecurityManager(s);
680        try {
681            subj.hashCode();
682            //fail("SecurityException wasn't thrown");
683        } catch (SecurityException se) {
684        }
685    }
686
687    /**
688     * @tests javax.security.auth.Subject#getPrincipals(Class<T> c)
689     * @tests javax.security.auth.Subject#getPrivateCredentials(Class<T> c)
690     * @tests javax.security.auth.Subject#getPublicCredentials(Class<T> c)
691     */
692    @TestTargets({
693        @TestTargetNew(
694            level = TestLevel.COMPLETE,
695            notes = "",
696            method = "getPrincipals",
697            args = {Class.class}
698        ),
699        @TestTargetNew(
700            level = TestLevel.SUFFICIENT,
701            notes = "",
702            method = "getPrivateCredentials",
703            args = {Class.class}
704        ),
705        @TestTargetNew(
706            level = TestLevel.SUFFICIENT,
707            notes = "",
708            method = "getPublicCredentials",
709            args = {Class.class}
710        )
711    })
712    public void test_getPrincipals_Class() {
713        Set <Principal> principal = new HashSet<Principal>();
714        Set <Object> pubCredentials = new HashSet<Object>();
715        Set <Object> privCredentials = new HashSet<Object>();
716        Principal pr1 = new PrincipalImpl("TestPrincipal1");
717        Principal pr2 = new PrincipalImpl("TestPrincipal2");
718        principal.add(pr1);
719        principal.add(pr2);
720        Object pubCredential1 = new Object();
721        pubCredentials.add(pubCredential1);
722        Object privCredential1 = new Object();
723        Object privCredential2 = new Object();
724        privCredentials.add(privCredential1);
725        privCredentials.add(privCredential2);
726
727        Subject s = new Subject(true, principal, pubCredentials, privCredentials);
728
729        try {
730            Set<Principal> pr = s.getPrincipals(null);
731            fail("NullPointerException wasn't thrown");
732        } catch (NullPointerException npe) {
733        }
734
735        try {
736            Set<Object> privC = s.getPrivateCredentials(null);
737            fail("NullPointerException wasn't thrown");
738        } catch (NullPointerException npe) {
739        }
740
741        try {
742            Set<Object> pubC = s.getPublicCredentials(null);
743            fail("NullPointerException wasn't thrown");
744        } catch (NullPointerException npe) {
745        }
746
747        try {
748            Set<Principal> pr = s.getPrincipals(Principal.class);
749            assertNotNull(pr);
750            assertEquals(principal.size(), pr.size());
751        } catch (Exception e) {
752            fail("Unexpected exception: " + e);
753        }
754
755        try {
756            Set<Object> privC = s.getPrivateCredentials(Object.class);
757            assertNotNull(privC);
758            assertEquals(privCredentials.size(), privC.size());
759        } catch (Exception e) {
760            fail("Unexpected exception: " + e);
761        }
762
763        try {
764            Set<Object> pubC = s.getPublicCredentials(Object.class);
765            assertNotNull(pubC);
766            assertEquals(pubCredentials.size(), pubC.size());
767        } catch (Exception e) {
768            fail("Unexpected exception: " + e);
769        }
770    }
771}
772
773
774class myPrivilegedAction implements PrivilegedAction <Object> {
775    myPrivilegedAction(){}
776    public Object run() {
777        return new Object();
778    }
779}
780
781class myPrivilegedExceptionAction implements PrivilegedExceptionAction <Object> {
782    myPrivilegedExceptionAction(){}
783    public Object run() {
784        return new Object();
785    }
786}
787