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 18 /** 19 * @author Stepan M. Mishura 20 */ 21 22 package javax.security.auth; 23 24 import java.io.ByteArrayInputStream; 25 import java.io.ByteArrayOutputStream; 26 import java.io.NotSerializableException; 27 import java.io.ObjectInputStream; 28 import java.io.ObjectOutputStream; 29 import java.io.Serializable; 30 import java.security.AccessControlContext; 31 import java.security.AccessControlException; 32 import java.security.AccessController; 33 import java.security.Principal; 34 import java.security.PrivilegedAction; 35 import java.security.PrivilegedActionException; 36 import java.security.PrivilegedExceptionAction; 37 import java.security.SecurityPermission; 38 import java.util.HashSet; 39 import java.util.Iterator; 40 import java.util.NoSuchElementException; 41 import java.util.Set; 42 43 import org.apache.harmony.auth.internal.SecurityTest; 44 45 import junit.framework.Test; 46 import junit.framework.TestSuite; 47 48 49 /** 50 * Tests Subject and its inner classes implementation. 51 */ 52 53 public class SubjectTest extends SecurityTest { 54 55 private static final Principal principal = new Principal() { 56 public String getName() { 57 return "name"; 58 } 59 }; 60 61 PrivilegedAction<Object> emptyPAction = new PrivilegedAction<Object>() { 62 public Object run() { 63 return null; 64 } 65 }; 66 67 PrivilegedExceptionAction<Object> emptyPEAction = new PrivilegedExceptionAction<Object> 68 () { 69 public Object run() { 70 return null; 71 } 72 }; 73 74 PrivilegedAction<AccessControlContext> contextPAction = new PrivilegedAction<AccessControlContext>() { 75 public AccessControlContext run() { 76 return AccessController.getContext(); 77 } 78 }; 79 80 PrivilegedExceptionAction<AccessControlContext> contextPEAction = new PrivilegedExceptionAction<AccessControlContext>() { 81 public AccessControlContext run() { 82 return AccessController.getContext(); 83 } 84 }; 85 86 PrivilegedAction<Subject> subjectPAction = new PrivilegedAction<Subject>() { 87 public Subject run() { 88 return Subject.getSubject(AccessController.getContext()); 89 } 90 }; 91 92 PrivilegedExceptionAction<Subject> subjectPEAction = new PrivilegedExceptionAction<Subject>() { 93 public Subject run() { 94 return Subject.getSubject(AccessController.getContext()); 95 } 96 }; 97 98 private final HashSet<Principal> h1 = new HashSet<Principal>(); // principals 99 100 private final HashSet<Object> h2 = new HashSet<Object>(); // public credentials 101 102 private final HashSet<Object> h3 = new HashSet<Object>(); // private credentials 103 104 public static Test suite() throws Exception { 105 106 TestSuite setSuite = new TestSuite("SubjectSets"); 107 108 setSuite.addTest(new PrincipalTestSuite()); 109 setSuite.addTest(new PrivateCredentialTestSuite()); 110 setSuite.addTest(new PublicCredentialTestSuite()); 111 112 setSuite.addTest(new PrincipalClassTestSuite()); 113 setSuite.addTest(new PrivateCredentialClassTestSuite()); 114 setSuite.addTest(new PublicCredentialClassTestSuite()); 115 116 TestSuite suite = new TestSuite("Subject"); 117 118 suite.addTestSuite(javax.security.auth.SubjectTest.class); 119 suite.addTest(setSuite); 120 121 return suite; 122 } 123 124 public SubjectTest() { 125 super(); 126 127 h1.add(principal); 128 129 h2.add(new Object()); 130 h2.add(new Object()); 131 132 h3.add(new Object()); 133 h3.add(new Object()); 134 h3.add(new Object()); 135 } 136 137 /** 138 * Testing Subject() constructor 139 */ 140 public final void testSubject() { 141 Subject subject = new Subject(); 142 143 assertFalse("Read only state", subject.isReadOnly()); 144 assertEquals("Principals set", 0, subject.getPrincipals().size()); 145 146 assertEquals("Private credential set", 0, subject 147 .getPrivateCredentials().size()); 148 149 assertEquals("Public credential set", 0, subject.getPublicCredentials() 150 .size()); 151 } 152 153 /** 154 * Testing Subject(boolean,Set,Set,Set) constructor 155 */ 156 public final void testSubject_3Set() { 157 158 Subject subject = new Subject(false, h1, h2, h3); 159 160 assertFalse("Read only state", subject.isReadOnly()); 161 assertEquals("Principals set", h1, subject.getPrincipals()); 162 163 assertEquals("Private credential set", h3, subject 164 .getPrivateCredentials()); 165 166 assertEquals("Public credential set", h2, subject 167 .getPublicCredentials()); 168 169 // the same but for read only subject 170 subject = new Subject(true, h1, h2, h3); 171 172 assertTrue("Read only state", subject.isReadOnly()); 173 174 assertEquals("Principals set", 1, subject.getPrincipals().size()); 175 176 assertEquals("Private credential set", 3, subject 177 .getPrivateCredentials().size()); 178 179 assertEquals("Public credential set", 2, subject.getPublicCredentials() 180 .size()); 181 } 182 183 /** 184 * Testing Subject(boolean,Set,Set,Set) constructor 185 * in restricted security context 186 */ 187 public final void testSubject_3Set_NoPermissions() { 188 189 // all sets modifications are denied 190 denyPermission(new AuthPermission("*")); 191 192 new Subject(true, h1, h2, h3); 193 } 194 195 /** 196 * Testing Subject(boolean,Set,Set,Set) constructor 197 * Checks NullPointerException if one of passed set is null 198 */ 199 @SuppressWarnings("unchecked") 200 public final void testSubject_3Set_NPE() { 201 202 try { 203 new Subject(false, null, new HashSet(), new HashSet()); 204 fail("No expected NullPointerException"); 205 } catch (NullPointerException e) { 206 } 207 208 try { 209 new Subject(false, new HashSet(), null, new HashSet()); 210 fail("No expected NullPointerException"); 211 } catch (NullPointerException e) { 212 } 213 214 try { 215 new Subject(false, new HashSet(), new HashSet(), null); 216 fail("No expected NullPointerException"); 217 } catch (NullPointerException e) { 218 } 219 } 220 221 /** 222 * Testing Subject(boolean,Set,Set,Set) constructor. 223 * Parameter set contains an invalid element. 224 */ 225 @SuppressWarnings("unchecked") 226 public final void testSubject_3Set_InvalidSet() { 227 HashSet hash = new HashSet(); 228 229 hash.add(null); 230 231 try { 232 new Subject(false, hash, new HashSet(), new HashSet()); 233 234 if (!testing) { 235 // possible to add 'null' principal via constructor 236 fail("No expected NullPointerException"); 237 } 238 } catch (NullPointerException e) { 239 } 240 241 try { 242 new Subject(false, new HashSet(), hash, new HashSet()); 243 244 if (!testing) { 245 fail("No expected NullPointerException"); 246 } 247 } catch (NullPointerException e) { 248 } 249 250 try { 251 new Subject(false, new HashSet(), new HashSet(), hash); 252 253 if (!testing) { 254 fail("No expected NullPointerException"); 255 } 256 } catch (NullPointerException e) { 257 } 258 259 hash.clear(); 260 hash.add(new Object()); 261 try { 262 new Subject(false, hash, new HashSet(), new HashSet()); 263 264 if (!testing) { 265 // possible to add 'null' principal via constructor 266 fail("No expected IllegalArgumentException"); 267 } 268 } catch (IllegalArgumentException e) { 269 } 270 } 271 272 /** 273 * Tests SecurityException for Subject.doAs(Subject,PrivilegedAction) 274 */ 275 public final void testACE_doAs_A() throws Exception { 276 277 denyPermission(new AuthPermission("doAs")); 278 try { 279 Subject.doAs(new Subject(), emptyPAction); 280 fail("No expected AccessControlException"); 281 } catch (AccessControlException e) { 282 assertEquals(e, AuthPermission.class); 283 } 284 } 285 286 /** 287 * Tests SecurityException for Subject.doAs(Subject,PrivilegedExceptionAction) 288 */ 289 public final void testACE_doAs_EA() throws Exception { 290 291 denyPermission(new AuthPermission("doAs")); 292 try { 293 Subject.doAs(new Subject(), emptyPEAction); 294 fail("No expected AccessControlException"); 295 } catch (AccessControlException e) { 296 assertEquals(e, AuthPermission.class); 297 } catch (PrivilegedActionException e) { 298 fail("Unexpected PrivilegedActionException"); 299 } 300 } 301 302 /** 303 * Tests SecurityException for Subject.doAsPrivileged( 304 * Subject,PrivilegedAction,AccessControlContext) 305 */ 306 public final void testACE_doAsPrivileged_A() throws Exception { 307 308 denyPermission(new AuthPermission("doAsPrivileged")); 309 try { 310 Subject.doAsPrivileged(new Subject(), emptyPAction, null); 311 fail("No expected AccessControlException"); 312 } catch (AccessControlException e) { 313 assertEquals(e, AuthPermission.class); 314 } 315 } 316 317 /** 318 * Tests SecurityException for Subject.doAsPrivileged( 319 * Subject,PrivilegedExceptionAction,AccessControlContext) 320 */ 321 public final void testACE_doAsPrivileged_EA() throws Exception { 322 323 denyPermission(new AuthPermission("doAsPrivileged")); 324 try { 325 Subject.doAsPrivileged(new Subject(), emptyPEAction, null); 326 fail("No expected AccessControlException"); 327 } catch (AccessControlException e) { 328 assertEquals(e, AuthPermission.class); 329 } 330 } 331 332 /** 333 * Tests SecurityException for Subject.getSubject() 334 */ 335 public final void testACE_getSubject() { 336 337 denyPermission(new AuthPermission("getSubject")); 338 try { 339 Subject.getSubject(AccessController.getContext()); 340 fail("No expected AccessControlException"); 341 } catch (AccessControlException e) { 342 assertEquals(e, AuthPermission.class); 343 } 344 } 345 346 /** 347 * Tests SecurityException for Subject.setReadOnly() 348 */ 349 public final void testACE_setReadOnly() { 350 351 denyPermission(new AuthPermission("setReadOnly")); 352 try { 353 (new Subject()).setReadOnly(); 354 fail("No expected AccessControlException"); 355 } catch (AccessControlException e) { 356 assertEquals(e, AuthPermission.class); 357 } 358 } 359 360 /** 361 * Tests Subject.doAs(Subject, PrivilegedAction) 362 */ 363 public final void testDoAs() { 364 365 Subject subject = new Subject(); 366 367 Subject contextSubject = (Subject) Subject 368 .doAs(subject, subjectPAction); 369 370 assertTrue("Returned subject", subject == contextSubject); 371 372 // null subject 373 contextSubject = (Subject) Subject.doAs(null, subjectPAction); 374 375 assertNull("Subject is null", contextSubject); 376 377 // null subject: check combiner (must be null) 378 AccessControlContext context = (AccessControlContext) Subject.doAs( 379 null, contextPAction); 380 381 assertNull("Combiner for null subject", context.getDomainCombiner()); 382 } 383 384 /** 385 * Tests Subject.doAs(Subject, PrivilegedExceptionAction) 386 */ 387 public final void testDoAs_PEA() throws Exception { 388 389 Subject subject = new Subject(); 390 391 Subject contextSubject = (Subject) Subject.doAs(subject, 392 subjectPEAction); 393 394 assertTrue("Returned subject", subject == contextSubject); 395 396 // null subject 397 contextSubject = (Subject) Subject.doAs(null, subjectPEAction); 398 399 assertNull("Subject is null", contextSubject); 400 401 // null subject: check combiner (must be null) 402 AccessControlContext context = (AccessControlContext) Subject.doAs( 403 null, contextPEAction); 404 405 assertNull("Combiner for null subject", context.getDomainCombiner()); 406 407 } 408 409 /** 410 * Tests Subject.doAsPrivileged(Subject, PrivilegedAction, ACContext) 411 */ 412 public final void testDoAsPrivileged() { 413 414 Subject subject = new Subject(); 415 416 Subject contextSubject = (Subject) Subject.doAsPrivileged(subject, 417 subjectPAction, null); 418 419 assertTrue("Returned subject", subject == contextSubject); 420 421 // null subject 422 contextSubject = (Subject) Subject.doAsPrivileged(null, subjectPAction, 423 null); 424 425 assertNull("Subject is null", contextSubject); 426 427 // null subject: check combiner (must be null) 428 AccessControlContext context = (AccessControlContext) Subject 429 .doAsPrivileged(null, contextPAction, null); 430 431 assertNull("Combiner for null subject", context.getDomainCombiner()); 432 } 433 434 /** 435 * Tests Subject.doAsPrivileged(Subject, PEAction, ACContext) 436 */ 437 public final void testDoAsPrivileged_PEA() throws Exception { 438 439 Subject subject = new Subject(); 440 441 Subject contextSubject = (Subject) Subject.doAsPrivileged(subject, 442 subjectPEAction, null); 443 444 assertTrue("Returned subject", subject == contextSubject); 445 446 // null subject 447 contextSubject = (Subject) Subject.doAsPrivileged(null, 448 subjectPEAction, null); 449 450 assertNull("Subject is null", contextSubject); 451 452 // null subject: check combiner (must be null) 453 AccessControlContext context = (AccessControlContext) Subject 454 .doAsPrivileged(null, contextPEAction, null); 455 456 assertNull("Combiner for null subject", context.getDomainCombiner()); 457 } 458 459 /** 460 * Tests Subject.doAs* methods for creating new context 461 * 462 * Expected: no SecurityException 463 */ 464 public final void testDoAs_newACC() throws Exception { 465 466 Subject subject = new Subject(); 467 468 Subject.doAs(subject, emptyPAction); 469 Subject.doAs(subject, emptyPEAction); 470 Subject.doAsPrivileged(subject, emptyPAction, null); 471 Subject.doAsPrivileged(subject, emptyPEAction, null); 472 473 // each doAs* creates new ACContext 474 denyPermission(new SecurityPermission("createAccessControlContext")); 475 476 try { 477 Subject.doAs(subject, emptyPAction); 478 fail("No expected AccessControlException"); 479 } catch (AccessControlException e) { 480 } 481 482 try { 483 Subject.doAs(subject, emptyPEAction); 484 fail("No expected AccessControlException"); 485 } catch (AccessControlException e) { 486 } 487 488 try { 489 Subject.doAsPrivileged(subject, emptyPAction, null); 490 fail("No expected AccessControlException"); 491 } catch (AccessControlException e) { 492 } 493 494 try { 495 Subject.doAsPrivileged(subject, emptyPEAction, null); 496 fail("No expected AccessControlException"); 497 } catch (AccessControlException e) { 498 } 499 } 500 501 /** 502 * Tests Subject.equals() method 503 */ 504 @SuppressWarnings("unchecked") 505 public final void testEquals() { 506 507 // empty sets 508 Subject s1 = new Subject(); 509 Subject s2 = new Subject(false, new HashSet(), new HashSet(), 510 new HashSet()); 511 Subject s3 = new Subject(true, new HashSet(), new HashSet(), 512 new HashSet()); 513 514 equalsTest(s1, s2, s3); 515 516 // non empty sets 517 518 s1 = new Subject(false, h1, h2, h3); 519 s3 = new Subject(true, h1, h2, h3); 520 521 s2 = new Subject(); 522 s2.getPrincipals().addAll(h1); 523 s2.getPublicCredentials().addAll(h2); 524 s2.getPrivateCredentials().addAll(h3); 525 526 equalsTest(s1, s2, s3); 527 528 // not equal subjects 529 s1 = new Subject(); 530 s2 = new Subject(true, h1, new HashSet(), h3); 531 s3 = new Subject(true, h1, h2, h3); 532 533 assertFalse(s1.equals(s2)); 534 assertFalse(s1.equals(s3)); 535 assertFalse(s2.equals(s3)); 536 } 537 538 private void equalsTest(Object obj1, Object obj2, Object obj3) { 539 540 // Check passed parameters. 541 // Because we don't verify Object.equals() method 542 if (obj1 == obj2 || obj1 == obj3 || obj2 == obj3) { 543 throw new AssertionError("References MUST be different"); 544 } 545 546 // reflexivity 547 assertTrue(obj1.equals(obj1)); 548 549 // symmetry 550 assertTrue(obj1.equals(obj2)); 551 assertTrue(obj2.equals(obj1)); 552 553 // transitivity 554 assertTrue(obj1.equals(obj2)); 555 assertTrue(obj2.equals(obj3)); 556 assertTrue(obj1.equals(obj3)); 557 558 // consistency 559 assertTrue(obj3.equals(obj1)); 560 assertTrue(obj3.equals(obj1)); 561 562 // null value 563 assertFalse(obj1.equals(null)); 564 } 565 566 /** 567 * Verifies that Subject.equals() has defined comparison algorism. 568 * 569 * The sequence of checks is following: 570 * 1)principal set 571 * 2)public credential set 572 * 3)private credential set 573 */ 574 @SuppressWarnings("unchecked") 575 public final void testEquals_VerifyCheckSequence() { 576 577 grantMode(); // no permissions 578 579 HashSet hash = new HashSet(); 580 hash.add(principal); 581 582 Subject subject1 = new Subject(false, new HashSet(), new HashSet(), 583 hash); 584 585 //doesn't verify private credential permissions on itself 586 assertTrue(subject1.equals(subject1)); 587 588 // principals comparison goes before 589 // no SecurityException expected 590 Subject subject2 = new Subject(false, hash, new HashSet(), hash); 591 592 assertFalse(subject1.equals(subject2)); 593 594 // public credential comparison goes before 595 // no SecurityException expected 596 subject2 = new Subject(false, new HashSet(), hash, hash); 597 598 assertFalse(subject1.equals(subject2)); 599 600 // principal and public credentials sets are equal 601 // Expected: SecurityException 602 subject2 = new Subject(false, new HashSet(), new HashSet(), hash); 603 try { 604 subject1.equals(subject2); 605 fail("No expected AccessControlException"); 606 } catch (AccessControlException e) { 607 assertEquals(e, PrivateCredentialPermission.class); 608 } 609 } 610 611 /** 612 * Verifies no PrivateCredentialPermission 613 * for 'this' subject and provided subject 614 */ 615 public final void testEquals_NoPCP() { 616 617 Subject subThis = new Subject(); 618 Subject subThat = new Subject(); 619 620 subThis.getPrivateCredentials().add(new MyClass1()); 621 subThat.getPrivateCredentials().add(new Object()); 622 623 grantMode(); // no permissions 624 grantPermission(new PrivateCredentialPermission( 625 "java.lang.Object * \"*\"", "read")); 626 627 // verify permissions 628 try { 629 subThis.getPrivateCredentials().iterator().next(); 630 fail("No expected AccessControlException"); 631 } catch (AccessControlException e) { 632 assertEquals(e, PrivateCredentialPermission.class); 633 } 634 subThat.getPrivateCredentials().iterator().next(); 635 636 // 'this' subject doesn't have permission 637 try { 638 subThis.equals(subThat); 639 fail("No expected AccessControlException"); 640 } catch (AccessControlException e) { 641 assertEquals(e, PrivateCredentialPermission.class); 642 } 643 644 // provided subject doesn't have permission 645 try { 646 subThat.equals(subThis); 647 fail("No expected AccessControlException"); 648 } catch (AccessControlException e) { 649 assertEquals(e, PrivateCredentialPermission.class); 650 } 651 } 652 653 /** 654 * Tests Subject.get<set>(Class) methods 655 */ 656 @SuppressWarnings("unchecked") 657 public final void testGetSetClass() { 658 HashSet hash = new HashSet(); 659 660 MyClass1 p1 = new MyClass1(); 661 MyClass1 p2 = new MyClass1(); 662 663 hash.add(p1); 664 hash.add(p2); 665 666 HashSet h = new HashSet(); 667 668 h.add(principal); 669 h.addAll(hash); 670 h.add(new MyClass2()); 671 672 Subject subject = new Subject(true, h, h, h); 673 674 assertEquals("Principal", hash, subject.getPrincipals(MyClass1.class)); 675 assertEquals("Private Credentials", hash, subject 676 .getPrivateCredentials(MyClass1.class)); 677 assertEquals("Public Credentials", hash, subject 678 .getPublicCredentials(MyClass1.class)); 679 } 680 681 /** 682 * Tests Subject.get<set>(Class) methods for null parameter 683 */ 684 public final void testGetClass_NullParameter() { 685 686 Subject subject = new Subject(); 687 688 try { 689 subject.getPrincipals(null); 690 fail("No expected NullPointerException"); 691 } catch (NullPointerException e) { 692 } 693 694 try { 695 subject.getPrivateCredentials(null); 696 fail("No expected NullPointerException"); 697 } catch (NullPointerException e) { 698 } 699 700 try { 701 subject.getPublicCredentials(null); 702 fail("No expected NullPointerException"); 703 } catch (NullPointerException e) { 704 } 705 } 706 707 /** 708 * Tests Subject.getSubject() for null parameter 709 */ 710 public final void test_getSubject_NPE() { 711 try { 712 Subject.getSubject(null); 713 fail("No expected NullPointerException"); 714 } catch (NullPointerException e) { 715 } 716 } 717 718 /** 719 * Tests Subject.getSubject() for current context 720 */ 721 public final void test_getSubject() { 722 assertNull("Current context", Subject.getSubject(AccessController 723 .getContext())); 724 725 try { 726 Subject.getSubject(null); 727 fail("No expected NullPointerException"); 728 } catch (NullPointerException e) { 729 } 730 } 731 732 /** 733 * Tests Subject.getSubject() for associated context 734 */ 735 public final void test_getSubject_SameSubject() { 736 737 Subject subject = new Subject(); 738 739 Subject contextSubject = (Subject) Subject 740 .doAs(subject, subjectPAction); 741 742 assertTrue("Subject: ", subject == contextSubject); 743 } 744 745 /** 746 * Tests Subject.getSubject() for associated context (2 subjects) 747 */ 748 @SuppressWarnings("unchecked") 749 public final void test_getSubject_NotSameSubject() { 750 751 final HashSet hash = new HashSet(); 752 hash.add(new MyClass1()); 753 754 PrivilegedAction<Object> action = new PrivilegedAction<Object>() { 755 public Object run() { 756 757 return Subject.doAs(new Subject(false, hash, hash, hash), 758 subjectPAction); 759 } 760 }; 761 762 Subject subject = new Subject(); 763 764 Subject contextSubject = (Subject) Subject.doAs(subject, action); 765 766 assertNotNull("Context subject: ", contextSubject); 767 assertFalse("Subject: ", subject == contextSubject); 768 assertTrue("Principals: ", hash.equals(contextSubject.getPrincipals())); 769 assertTrue("Private Credentials: ", hash.equals(contextSubject 770 .getPrivateCredentials())); 771 assertTrue("Public Credentials: ", hash.equals(contextSubject 772 .getPublicCredentials())); 773 } 774 775 /** 776 * Tests Subject.getSubject() for privileged action in associated context 777 */ 778 public final void test_getSubject_PrivilegedAction() { 779 780 PrivilegedAction<Object> action = new PrivilegedAction<Object>() { 781 public Object run() { 782 return AccessController.doPrivileged(subjectPAction); 783 } 784 }; 785 786 Subject subject = new Subject(); 787 788 Subject contextSubject = (Subject) Subject.doAs(subject, action); 789 790 assertNull("Context subject: ", contextSubject); 791 } 792 793 /** 794 * Tests Subject.hashCode() 795 */ 796 public final void testHashCode() { 797 Subject subject1 = new Subject(false, h1, h2, h3); 798 Subject subject2 = new Subject(true, h1, h2, h3); 799 800 assertTrue(subject1.equals(subject2)); 801 assertTrue(subject1.hashCode() == subject2.hashCode()); 802 } 803 804 /** 805 * Tests Subject.hashCode() for SecurityException 806 */ 807 public final void testHashCode_ACE() { 808 809 grantMode(); 810 try { 811 (new Subject(false, h1, h2, h3)).hashCode(); 812 813 if (!testing) { 814 fail("No expected AccessControlException"); 815 } 816 } catch (AccessControlException e) { 817 assertEquals(e, PrivateCredentialPermission.class); 818 } 819 } 820 821 /** 822 * Tests Subject.isReadOnly() and Subject.setReadOnly() 823 */ 824 public final void testSetReadOnly_isReadOnly() { 825 Subject subject = new Subject(); 826 827 // check initialized value 828 assertFalse("Read only state", subject.isReadOnly()); 829 830 // set the subject as read only 831 subject.setReadOnly(); 832 assertTrue("Read only state", subject.isReadOnly()); 833 834 // anyway invoke it again to verify subject's state 835 subject.setReadOnly(); 836 assertTrue("Read only state", subject.isReadOnly()); 837 } 838 839 public final void testToString() { 840 //FIXME grantMode(); 841 //denyPermission(new PrivateCredentialPermission("* * \"*\"", "read")); 842 //System.out.println((new Subject(false, h1, h2, h3)).toString()); 843 } 844 845 public final void testSerialization() throws Exception { 846 847 Subject subject = new Subject(); 848 849 subject.getPrincipals().add(new MyClass2()); 850 851 ByteArrayOutputStream out = new ByteArrayOutputStream(); 852 ObjectOutputStream sOut = new ObjectOutputStream(out); 853 854 try { 855 sOut.writeObject(subject); 856 fail("No expected NotSerializableException"); 857 } catch (NotSerializableException e) { 858 } finally { 859 sOut.close(); 860 } 861 862 subject = new Subject(); 863 864 subject.getPrincipals().add(new MyClass1()); 865 subject.getPublicCredentials().add(new MyClass1()); 866 subject.getPrivateCredentials().add(new MyClass1()); 867 868 subject.setReadOnly(); 869 870 out = new ByteArrayOutputStream(); 871 sOut = new ObjectOutputStream(out); 872 873 sOut.writeObject(subject); 874 875 sOut.flush(); 876 sOut.close(); 877 878 ByteArrayInputStream in = new ByteArrayInputStream(out.toByteArray()); 879 ObjectInputStream sIn = new ObjectInputStream(in); 880 881 Subject ss = (Subject) sIn.readObject(); 882 883 assertTrue(ss.isReadOnly()); 884 assertEquals(1, ss.getPrincipals().size()); 885 assertTrue(ss.getPrincipals().iterator().next() instanceof MyClass1); 886 assertEquals(0, ss.getPublicCredentials().size()); 887 assertEquals(0, ss.getPrivateCredentials().size()); 888 889 try { 890 ss.getPrincipals().add(new MyClass1()); 891 fail("No expected IllegalStateException"); 892 } catch (IllegalStateException e) { 893 } 894 } 895 896 /** 897 * Test subject's deserialization in case of invalid('null') principals 898 * 899 * Serialization byte array contains null element in principal set 900 * The array is invalid because it is not possible to add null element 901 * to principal set via public API methods. 902 */ 903 public final void testSerialization_NullPrincipal() throws Exception { 904 905 // The array was produced in the following way: 906 // 1) A check that verifies a passed principal object for null 907 // value was disabled in Subject class. 908 // 2) Subject object was created 909 // 3) A null was added to subject's principal set by invoking 910 // getPrincipals().add(null); 911 // 4) ByteArrayOutputStream class was used to write subject object 912 // and to get resulting array of bytes 913 byte[] nullPrincipal = new byte[] { (byte) 0xac, (byte) 0xed, 914 (byte) 0x00, (byte) 0x05, (byte) 0x73, (byte) 0x72, 915 (byte) 0x00, (byte) 0x1b, (byte) 0x6a, (byte) 0x61, 916 (byte) 0x76, (byte) 0x61, (byte) 0x78, (byte) 0x2e, 917 (byte) 0x73, (byte) 0x65, (byte) 0x63, (byte) 0x75, 918 (byte) 0x72, (byte) 0x69, (byte) 0x74, (byte) 0x79, 919 (byte) 0x2e, (byte) 0x61, (byte) 0x75, (byte) 0x74, 920 (byte) 0x68, (byte) 0x2e, (byte) 0x53, (byte) 0x75, 921 (byte) 0x62, (byte) 0x6a, (byte) 0x65, (byte) 0x63, 922 (byte) 0x74, (byte) 0x8c, (byte) 0xb2, (byte) 0x32, 923 (byte) 0x93, (byte) 0x00, (byte) 0x33, (byte) 0xfa, 924 (byte) 0x68, (byte) 0x03, (byte) 0x00, (byte) 0x02, 925 (byte) 0x5a, (byte) 0x00, (byte) 0x0a, (byte) 0x69, 926 (byte) 0x73, (byte) 0x52, (byte) 0x65, (byte) 0x61, 927 (byte) 0x64, (byte) 0x4f, (byte) 0x6e, (byte) 0x6c, 928 (byte) 0x79, (byte) 0x4c, (byte) 0x00, (byte) 0x0a, 929 (byte) 0x70, (byte) 0x72, (byte) 0x69, (byte) 0x6e, 930 (byte) 0x63, (byte) 0x69, (byte) 0x70, (byte) 0x61, 931 (byte) 0x6c, (byte) 0x73, (byte) 0x74, (byte) 0x00, 932 (byte) 0x0f, (byte) 0x4c, (byte) 0x6a, (byte) 0x61, 933 (byte) 0x76, (byte) 0x61, (byte) 0x2f, (byte) 0x75, 934 (byte) 0x74, (byte) 0x69, (byte) 0x6c, (byte) 0x2f, 935 (byte) 0x53, (byte) 0x65, (byte) 0x74, (byte) 0x3b, 936 (byte) 0x78, (byte) 0x70, (byte) 0x00, (byte) 0x73, 937 (byte) 0x72, (byte) 0x00, (byte) 0x25, (byte) 0x6a, 938 (byte) 0x61, (byte) 0x76, (byte) 0x61, (byte) 0x78, 939 (byte) 0x2e, (byte) 0x73, (byte) 0x65, (byte) 0x63, 940 (byte) 0x75, (byte) 0x72, (byte) 0x69, (byte) 0x74, 941 (byte) 0x79, (byte) 0x2e, (byte) 0x61, (byte) 0x75, 942 (byte) 0x74, (byte) 0x68, (byte) 0x2e, (byte) 0x53, 943 (byte) 0x75, (byte) 0x62, (byte) 0x6a, (byte) 0x65, 944 (byte) 0x63, (byte) 0x74, (byte) 0x24, (byte) 0x53, 945 (byte) 0x65, (byte) 0x63, (byte) 0x75, (byte) 0x72, 946 (byte) 0x65, (byte) 0x53, (byte) 0x65, (byte) 0x74, 947 (byte) 0x6d, (byte) 0xcc, (byte) 0x32, (byte) 0x80, 948 (byte) 0x17, (byte) 0x55, (byte) 0x7e, (byte) 0x27, 949 (byte) 0x03, (byte) 0x00, (byte) 0x03, (byte) 0x49, 950 (byte) 0x00, (byte) 0x07, (byte) 0x73, (byte) 0x65, 951 (byte) 0x74, (byte) 0x54, (byte) 0x79, (byte) 0x70, 952 (byte) 0x65, (byte) 0x4c, (byte) 0x00, (byte) 0x08, 953 (byte) 0x65, (byte) 0x6c, (byte) 0x65, (byte) 0x6d, 954 (byte) 0x65, (byte) 0x6e, (byte) 0x74, (byte) 0x73, 955 (byte) 0x74, (byte) 0x00, (byte) 0x16, (byte) 0x4c, 956 (byte) 0x6a, (byte) 0x61, (byte) 0x76, (byte) 0x61, 957 (byte) 0x2f, (byte) 0x75, (byte) 0x74, (byte) 0x69, 958 (byte) 0x6c, (byte) 0x2f, (byte) 0x4c, (byte) 0x69, 959 (byte) 0x6e, (byte) 0x6b, (byte) 0x65, (byte) 0x64, 960 (byte) 0x4c, (byte) 0x69, (byte) 0x73, (byte) 0x74, 961 (byte) 0x3b, (byte) 0x4c, (byte) 0x00, (byte) 0x06, 962 (byte) 0x74, (byte) 0x68, (byte) 0x69, (byte) 0x73, 963 (byte) 0x24, (byte) 0x30, (byte) 0x74, (byte) 0x00, 964 (byte) 0x1d, (byte) 0x4c, (byte) 0x6a, (byte) 0x61, 965 (byte) 0x76, (byte) 0x61, (byte) 0x78, (byte) 0x2f, 966 (byte) 0x73, (byte) 0x65, (byte) 0x63, (byte) 0x75, 967 (byte) 0x72, (byte) 0x69, (byte) 0x74, (byte) 0x79, 968 (byte) 0x2f, (byte) 0x61, (byte) 0x75, (byte) 0x74, 969 (byte) 0x68, (byte) 0x2f, (byte) 0x53, (byte) 0x75, 970 (byte) 0x62, (byte) 0x6a, (byte) 0x65, (byte) 0x63, 971 (byte) 0x74, (byte) 0x3b, (byte) 0x78, (byte) 0x70, 972 (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, 973 (byte) 0x73, (byte) 0x72, (byte) 0x00, (byte) 0x14, 974 (byte) 0x6a, (byte) 0x61, (byte) 0x76, (byte) 0x61, 975 (byte) 0x2e, (byte) 0x75, (byte) 0x74, (byte) 0x69, 976 (byte) 0x6c, (byte) 0x2e, (byte) 0x4c, (byte) 0x69, 977 (byte) 0x6e, (byte) 0x6b, (byte) 0x65, (byte) 0x64, 978 (byte) 0x4c, (byte) 0x69, (byte) 0x73, (byte) 0x74, 979 (byte) 0x0c, (byte) 0x29, (byte) 0x53, (byte) 0x5d, 980 (byte) 0x4a, (byte) 0x60, (byte) 0x88, (byte) 0x22, 981 (byte) 0x03, (byte) 0x00, (byte) 0x00, (byte) 0x78, 982 (byte) 0x70, (byte) 0x77, (byte) 0x04, (byte) 0x00, 983 (byte) 0x00, (byte) 0x00, (byte) 0x01, (byte) 0x70, 984 (byte) 0x78, (byte) 0x71, (byte) 0x00, (byte) 0x7e, 985 (byte) 0x00, (byte) 0x02, (byte) 0x78, (byte) 0x78 }; 986 987 ByteArrayInputStream in = new ByteArrayInputStream(nullPrincipal); 988 ObjectInputStream sIn = new ObjectInputStream(in); 989 990 try { 991 sIn.readObject(); 992 if (!testing) { 993 fail("No expected NullPointerException"); 994 } 995 } catch (NullPointerException e) { 996 } 997 } 998 999 /** 1000 * Test subject's deserialization in case of invalid principals 1001 * Byte stream contains object in principal set that doesn't 1002 * implement Principal interface. 1003 * The array is invalid because it is not possible to add such object 1004 * to principal set via public API methods. 1005 */ 1006 public final void testSerialization_IllegalPrincipal() throws Exception { 1007 1008 // The array was produced in the following way: 1009 // 1) A check for verifying that passed principal object 1010 // implements Principal interface was disabled in Subject class. 1011 // 2) Subject object was created 1012 // 3) A serializable object was added to subject's principal 1013 // set by invoking: getPrincipals().add(object); 1014 // 4) ByteArrayOutputStream class was used to write subject object 1015 // and to get resulting array of bytes 1016 byte[] objectPrincipal = new byte[] { (byte) 0xac, (byte) 0xed, 1017 (byte) 0x00, (byte) 0x05, (byte) 0x73, (byte) 0x72, 1018 (byte) 0x00, (byte) 0x1b, (byte) 0x6a, (byte) 0x61, 1019 (byte) 0x76, (byte) 0x61, (byte) 0x78, (byte) 0x2e, 1020 (byte) 0x73, (byte) 0x65, (byte) 0x63, (byte) 0x75, 1021 (byte) 0x72, (byte) 0x69, (byte) 0x74, (byte) 0x79, 1022 (byte) 0x2e, (byte) 0x61, (byte) 0x75, (byte) 0x74, 1023 (byte) 0x68, (byte) 0x2e, (byte) 0x53, (byte) 0x75, 1024 (byte) 0x62, (byte) 0x6a, (byte) 0x65, (byte) 0x63, 1025 (byte) 0x74, (byte) 0x8c, (byte) 0xb2, (byte) 0x32, 1026 (byte) 0x93, (byte) 0x00, (byte) 0x33, (byte) 0xfa, 1027 (byte) 0x68, (byte) 0x03, (byte) 0x00, (byte) 0x02, 1028 (byte) 0x5a, (byte) 0x00, (byte) 0x0a, (byte) 0x69, 1029 (byte) 0x73, (byte) 0x52, (byte) 0x65, (byte) 0x61, 1030 (byte) 0x64, (byte) 0x4f, (byte) 0x6e, (byte) 0x6c, 1031 (byte) 0x79, (byte) 0x4c, (byte) 0x00, (byte) 0x0a, 1032 (byte) 0x70, (byte) 0x72, (byte) 0x69, (byte) 0x6e, 1033 (byte) 0x63, (byte) 0x69, (byte) 0x70, (byte) 0x61, 1034 (byte) 0x6c, (byte) 0x73, (byte) 0x74, (byte) 0x00, 1035 (byte) 0x0f, (byte) 0x4c, (byte) 0x6a, (byte) 0x61, 1036 (byte) 0x76, (byte) 0x61, (byte) 0x2f, (byte) 0x75, 1037 (byte) 0x74, (byte) 0x69, (byte) 0x6c, (byte) 0x2f, 1038 (byte) 0x53, (byte) 0x65, (byte) 0x74, (byte) 0x3b, 1039 (byte) 0x78, (byte) 0x70, (byte) 0x00, (byte) 0x73, 1040 (byte) 0x72, (byte) 0x00, (byte) 0x25, (byte) 0x6a, 1041 (byte) 0x61, (byte) 0x76, (byte) 0x61, (byte) 0x78, 1042 (byte) 0x2e, (byte) 0x73, (byte) 0x65, (byte) 0x63, 1043 (byte) 0x75, (byte) 0x72, (byte) 0x69, (byte) 0x74, 1044 (byte) 0x79, (byte) 0x2e, (byte) 0x61, (byte) 0x75, 1045 (byte) 0x74, (byte) 0x68, (byte) 0x2e, (byte) 0x53, 1046 (byte) 0x75, (byte) 0x62, (byte) 0x6a, (byte) 0x65, 1047 (byte) 0x63, (byte) 0x74, (byte) 0x24, (byte) 0x53, 1048 (byte) 0x65, (byte) 0x63, (byte) 0x75, (byte) 0x72, 1049 (byte) 0x65, (byte) 0x53, (byte) 0x65, (byte) 0x74, 1050 (byte) 0x6d, (byte) 0xcc, (byte) 0x32, (byte) 0x80, 1051 (byte) 0x17, (byte) 0x55, (byte) 0x7e, (byte) 0x27, 1052 (byte) 0x03, (byte) 0x00, (byte) 0x03, (byte) 0x49, 1053 (byte) 0x00, (byte) 0x07, (byte) 0x73, (byte) 0x65, 1054 (byte) 0x74, (byte) 0x54, (byte) 0x79, (byte) 0x70, 1055 (byte) 0x65, (byte) 0x4c, (byte) 0x00, (byte) 0x08, 1056 (byte) 0x65, (byte) 0x6c, (byte) 0x65, (byte) 0x6d, 1057 (byte) 0x65, (byte) 0x6e, (byte) 0x74, (byte) 0x73, 1058 (byte) 0x74, (byte) 0x00, (byte) 0x16, (byte) 0x4c, 1059 (byte) 0x6a, (byte) 0x61, (byte) 0x76, (byte) 0x61, 1060 (byte) 0x2f, (byte) 0x75, (byte) 0x74, (byte) 0x69, 1061 (byte) 0x6c, (byte) 0x2f, (byte) 0x4c, (byte) 0x69, 1062 (byte) 0x6e, (byte) 0x6b, (byte) 0x65, (byte) 0x64, 1063 (byte) 0x4c, (byte) 0x69, (byte) 0x73, (byte) 0x74, 1064 (byte) 0x3b, (byte) 0x4c, (byte) 0x00, (byte) 0x06, 1065 (byte) 0x74, (byte) 0x68, (byte) 0x69, (byte) 0x73, 1066 (byte) 0x24, (byte) 0x30, (byte) 0x74, (byte) 0x00, 1067 (byte) 0x1d, (byte) 0x4c, (byte) 0x6a, (byte) 0x61, 1068 (byte) 0x76, (byte) 0x61, (byte) 0x78, (byte) 0x2f, 1069 (byte) 0x73, (byte) 0x65, (byte) 0x63, (byte) 0x75, 1070 (byte) 0x72, (byte) 0x69, (byte) 0x74, (byte) 0x79, 1071 (byte) 0x2f, (byte) 0x61, (byte) 0x75, (byte) 0x74, 1072 (byte) 0x68, (byte) 0x2f, (byte) 0x53, (byte) 0x75, 1073 (byte) 0x62, (byte) 0x6a, (byte) 0x65, (byte) 0x63, 1074 (byte) 0x74, (byte) 0x3b, (byte) 0x78, (byte) 0x70, 1075 (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, 1076 (byte) 0x73, (byte) 0x72, (byte) 0x00, (byte) 0x14, 1077 (byte) 0x6a, (byte) 0x61, (byte) 0x76, (byte) 0x61, 1078 (byte) 0x2e, (byte) 0x75, (byte) 0x74, (byte) 0x69, 1079 (byte) 0x6c, (byte) 0x2e, (byte) 0x4c, (byte) 0x69, 1080 (byte) 0x6e, (byte) 0x6b, (byte) 0x65, (byte) 0x64, 1081 (byte) 0x4c, (byte) 0x69, (byte) 0x73, (byte) 0x74, 1082 (byte) 0x0c, (byte) 0x29, (byte) 0x53, (byte) 0x5d, 1083 (byte) 0x4a, (byte) 0x60, (byte) 0x88, (byte) 0x22, 1084 (byte) 0x03, (byte) 0x00, (byte) 0x00, (byte) 0x78, 1085 (byte) 0x70, (byte) 0x77, (byte) 0x04, (byte) 0x00, 1086 (byte) 0x00, (byte) 0x00, (byte) 0x01, (byte) 0x73, 1087 (byte) 0x72, (byte) 0x00, (byte) 0x28, (byte) 0x6a, 1088 (byte) 0x61, (byte) 0x76, (byte) 0x61, (byte) 0x78, 1089 (byte) 0x2e, (byte) 0x73, (byte) 0x65, (byte) 0x63, 1090 (byte) 0x75, (byte) 0x72, (byte) 0x69, (byte) 0x74, 1091 (byte) 0x79, (byte) 0x2e, (byte) 0x61, (byte) 0x75, 1092 (byte) 0x74, (byte) 0x68, (byte) 0x2e, (byte) 0x53, 1093 (byte) 0x75, (byte) 0x62, (byte) 0x6a, (byte) 0x65, 1094 (byte) 0x63, (byte) 0x74, (byte) 0x54, (byte) 0x65, 1095 (byte) 0x73, (byte) 0x74, (byte) 0x24, (byte) 0x4d, 1096 (byte) 0x79, (byte) 0x4f, (byte) 0x62, (byte) 0x6a, 1097 (byte) 0x65, (byte) 0x63, (byte) 0x74, (byte) 0xf7, 1098 (byte) 0xbc, (byte) 0xdc, (byte) 0x95, (byte) 0xb2, 1099 (byte) 0x33, (byte) 0x3a, (byte) 0x0f, (byte) 0x02, 1100 (byte) 0x00, (byte) 0x00, (byte) 0x78, (byte) 0x70, 1101 (byte) 0x78, (byte) 0x71, (byte) 0x00, (byte) 0x7e, 1102 (byte) 0x00, (byte) 0x02, (byte) 0x78, (byte) 0x78 }; 1103 1104 ByteArrayInputStream in = new ByteArrayInputStream(objectPrincipal); 1105 ObjectInputStream sIn = new ObjectInputStream(in); 1106 1107 try { 1108 sIn.readObject(); 1109 if (!testing) { 1110 fail("No expected IllegalArgumentException"); 1111 } 1112 } catch (IllegalArgumentException e) { 1113 } 1114 } 1115 1116 /** 1117 * Test subject's principal set deserialization in case 1118 * of invalid principal set's elements. Two cases are tested: 1119 * 1) null object 1120 * 2) an object in principal set that doesn't implement Principal interface. 1121 */ 1122 public void test_PrincipalSetInvalidSerForm() throws Exception { 1123 1124 // The array was produced in the following way: 1125 // 1) A check that verifies a passed principal object for null 1126 // value was disabled in Subject class. 1127 // 2) Subject object was created 1128 // 3) A null was added to subject's principal set by invoking 1129 // getPrincipals().add(null); 1130 // 4) ByteArrayOutputStream class was used to write 1131 // subject's principal set object and to get resulting array of bytes 1132 byte[] nullElement = new byte[] { (byte) 0xac, (byte) 0xed, 1133 (byte) 0x00, (byte) 0x05, (byte) 0x73, (byte) 0x72, 1134 (byte) 0x00, (byte) 0x25, (byte) 0x6a, (byte) 0x61, 1135 (byte) 0x76, (byte) 0x61, (byte) 0x78, (byte) 0x2e, 1136 (byte) 0x73, (byte) 0x65, (byte) 0x63, (byte) 0x75, 1137 (byte) 0x72, (byte) 0x69, (byte) 0x74, (byte) 0x79, 1138 (byte) 0x2e, (byte) 0x61, (byte) 0x75, (byte) 0x74, 1139 (byte) 0x68, (byte) 0x2e, (byte) 0x53, (byte) 0x75, 1140 (byte) 0x62, (byte) 0x6a, (byte) 0x65, (byte) 0x63, 1141 (byte) 0x74, (byte) 0x24, (byte) 0x53, (byte) 0x65, 1142 (byte) 0x63, (byte) 0x75, (byte) 0x72, (byte) 0x65, 1143 (byte) 0x53, (byte) 0x65, (byte) 0x74, (byte) 0x6d, 1144 (byte) 0xcc, (byte) 0x32, (byte) 0x80, (byte) 0x17, 1145 (byte) 0x55, (byte) 0x7e, (byte) 0x27, (byte) 0x03, 1146 (byte) 0x00, (byte) 0x02, (byte) 0x4c, (byte) 0x00, 1147 (byte) 0x08, (byte) 0x65, (byte) 0x6c, (byte) 0x65, 1148 (byte) 0x6d, (byte) 0x65, (byte) 0x6e, (byte) 0x74, 1149 (byte) 0x73, (byte) 0x74, (byte) 0x00, (byte) 0x16, 1150 (byte) 0x4c, (byte) 0x6a, (byte) 0x61, (byte) 0x76, 1151 (byte) 0x61, (byte) 0x2f, (byte) 0x75, (byte) 0x74, 1152 (byte) 0x69, (byte) 0x6c, (byte) 0x2f, (byte) 0x4c, 1153 (byte) 0x69, (byte) 0x6e, (byte) 0x6b, (byte) 0x65, 1154 (byte) 0x64, (byte) 0x4c, (byte) 0x69, (byte) 0x73, 1155 (byte) 0x74, (byte) 0x3b, (byte) 0x4c, (byte) 0x00, 1156 (byte) 0x06, (byte) 0x74, (byte) 0x68, (byte) 0x69, 1157 (byte) 0x73, (byte) 0x24, (byte) 0x30, (byte) 0x74, 1158 (byte) 0x00, (byte) 0x1d, (byte) 0x4c, (byte) 0x6a, 1159 (byte) 0x61, (byte) 0x76, (byte) 0x61, (byte) 0x78, 1160 (byte) 0x2f, (byte) 0x73, (byte) 0x65, (byte) 0x63, 1161 (byte) 0x75, (byte) 0x72, (byte) 0x69, (byte) 0x74, 1162 (byte) 0x79, (byte) 0x2f, (byte) 0x61, (byte) 0x75, 1163 (byte) 0x74, (byte) 0x68, (byte) 0x2f, (byte) 0x53, 1164 (byte) 0x75, (byte) 0x62, (byte) 0x6a, (byte) 0x65, 1165 (byte) 0x63, (byte) 0x74, (byte) 0x3b, (byte) 0x78, 1166 (byte) 0x70, (byte) 0x73, (byte) 0x72, (byte) 0x00, 1167 (byte) 0x14, (byte) 0x6a, (byte) 0x61, (byte) 0x76, 1168 (byte) 0x61, (byte) 0x2e, (byte) 0x75, (byte) 0x74, 1169 (byte) 0x69, (byte) 0x6c, (byte) 0x2e, (byte) 0x4c, 1170 (byte) 0x69, (byte) 0x6e, (byte) 0x6b, (byte) 0x65, 1171 (byte) 0x64, (byte) 0x4c, (byte) 0x69, (byte) 0x73, 1172 (byte) 0x74, (byte) 0x0c, (byte) 0x29, (byte) 0x53, 1173 (byte) 0x5d, (byte) 0x4a, (byte) 0x60, (byte) 0x88, 1174 (byte) 0x22, (byte) 0x03, (byte) 0x00, (byte) 0x00, 1175 (byte) 0x78, (byte) 0x70, (byte) 0x77, (byte) 0x04, 1176 (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x01, 1177 (byte) 0x70, (byte) 0x78, (byte) 0x73, (byte) 0x72, 1178 (byte) 0x00, (byte) 0x1b, (byte) 0x6a, (byte) 0x61, 1179 (byte) 0x76, (byte) 0x61, (byte) 0x78, (byte) 0x2e, 1180 (byte) 0x73, (byte) 0x65, (byte) 0x63, (byte) 0x75, 1181 (byte) 0x72, (byte) 0x69, (byte) 0x74, (byte) 0x79, 1182 (byte) 0x2e, (byte) 0x61, (byte) 0x75, (byte) 0x74, 1183 (byte) 0x68, (byte) 0x2e, (byte) 0x53, (byte) 0x75, 1184 (byte) 0x62, (byte) 0x6a, (byte) 0x65, (byte) 0x63, 1185 (byte) 0x74, (byte) 0x8c, (byte) 0xb2, (byte) 0x32, 1186 (byte) 0x93, (byte) 0x00, (byte) 0x33, (byte) 0xfa, 1187 (byte) 0x68, (byte) 0x03, (byte) 0x00, (byte) 0x02, 1188 (byte) 0x5a, (byte) 0x00, (byte) 0x0a, (byte) 0x69, 1189 (byte) 0x73, (byte) 0x52, (byte) 0x65, (byte) 0x61, 1190 (byte) 0x64, (byte) 0x4f, (byte) 0x6e, (byte) 0x6c, 1191 (byte) 0x79, (byte) 0x4c, (byte) 0x00, (byte) 0x0a, 1192 (byte) 0x70, (byte) 0x72, (byte) 0x69, (byte) 0x6e, 1193 (byte) 0x63, (byte) 0x69, (byte) 0x70, (byte) 0x61, 1194 (byte) 0x6c, (byte) 0x73, (byte) 0x74, (byte) 0x00, 1195 (byte) 0x0f, (byte) 0x4c, (byte) 0x6a, (byte) 0x61, 1196 (byte) 0x76, (byte) 0x61, (byte) 0x2f, (byte) 0x75, 1197 (byte) 0x74, (byte) 0x69, (byte) 0x6c, (byte) 0x2f, 1198 (byte) 0x53, (byte) 0x65, (byte) 0x74, (byte) 0x3b, 1199 (byte) 0x78, (byte) 0x70, (byte) 0x00, (byte) 0x71, 1200 (byte) 0x00, (byte) 0x7e, (byte) 0x00, (byte) 0x03, 1201 (byte) 0x78, (byte) 0x78 }; 1202 1203 // The array was produced in the following way: 1204 // 1) A check for verifying that passed principal object 1205 // implements Principal interface was disabled in Subject class. 1206 // 2) Subject object was created 1207 // 3) A serializable object was added to subject's principal 1208 // set by invoking: getPrincipals().add(object); 1209 // 4) ByteArrayOutputStream class was used to write 1210 // subject's principal set object and to get resulting array of bytes 1211 byte[] notPrincipalElement = new byte[] { (byte) 0xac, (byte) 0xed, 1212 (byte) 0x00, (byte) 0x05, (byte) 0x73, (byte) 0x72, 1213 (byte) 0x00, (byte) 0x25, (byte) 0x6a, (byte) 0x61, 1214 (byte) 0x76, (byte) 0x61, (byte) 0x78, (byte) 0x2e, 1215 (byte) 0x73, (byte) 0x65, (byte) 0x63, (byte) 0x75, 1216 (byte) 0x72, (byte) 0x69, (byte) 0x74, (byte) 0x79, 1217 (byte) 0x2e, (byte) 0x61, (byte) 0x75, (byte) 0x74, 1218 (byte) 0x68, (byte) 0x2e, (byte) 0x53, (byte) 0x75, 1219 (byte) 0x62, (byte) 0x6a, (byte) 0x65, (byte) 0x63, 1220 (byte) 0x74, (byte) 0x24, (byte) 0x53, (byte) 0x65, 1221 (byte) 0x63, (byte) 0x75, (byte) 0x72, (byte) 0x65, 1222 (byte) 0x53, (byte) 0x65, (byte) 0x74, (byte) 0x6d, 1223 (byte) 0xcc, (byte) 0x32, (byte) 0x80, (byte) 0x17, 1224 (byte) 0x55, (byte) 0x7e, (byte) 0x27, (byte) 0x03, 1225 (byte) 0x00, (byte) 0x02, (byte) 0x4c, (byte) 0x00, 1226 (byte) 0x08, (byte) 0x65, (byte) 0x6c, (byte) 0x65, 1227 (byte) 0x6d, (byte) 0x65, (byte) 0x6e, (byte) 0x74, 1228 (byte) 0x73, (byte) 0x74, (byte) 0x00, (byte) 0x16, 1229 (byte) 0x4c, (byte) 0x6a, (byte) 0x61, (byte) 0x76, 1230 (byte) 0x61, (byte) 0x2f, (byte) 0x75, (byte) 0x74, 1231 (byte) 0x69, (byte) 0x6c, (byte) 0x2f, (byte) 0x4c, 1232 (byte) 0x69, (byte) 0x6e, (byte) 0x6b, (byte) 0x65, 1233 (byte) 0x64, (byte) 0x4c, (byte) 0x69, (byte) 0x73, 1234 (byte) 0x74, (byte) 0x3b, (byte) 0x4c, (byte) 0x00, 1235 (byte) 0x06, (byte) 0x74, (byte) 0x68, (byte) 0x69, 1236 (byte) 0x73, (byte) 0x24, (byte) 0x30, (byte) 0x74, 1237 (byte) 0x00, (byte) 0x1d, (byte) 0x4c, (byte) 0x6a, 1238 (byte) 0x61, (byte) 0x76, (byte) 0x61, (byte) 0x78, 1239 (byte) 0x2f, (byte) 0x73, (byte) 0x65, (byte) 0x63, 1240 (byte) 0x75, (byte) 0x72, (byte) 0x69, (byte) 0x74, 1241 (byte) 0x79, (byte) 0x2f, (byte) 0x61, (byte) 0x75, 1242 (byte) 0x74, (byte) 0x68, (byte) 0x2f, (byte) 0x53, 1243 (byte) 0x75, (byte) 0x62, (byte) 0x6a, (byte) 0x65, 1244 (byte) 0x63, (byte) 0x74, (byte) 0x3b, (byte) 0x78, 1245 (byte) 0x70, (byte) 0x73, (byte) 0x72, (byte) 0x00, 1246 (byte) 0x14, (byte) 0x6a, (byte) 0x61, (byte) 0x76, 1247 (byte) 0x61, (byte) 0x2e, (byte) 0x75, (byte) 0x74, 1248 (byte) 0x69, (byte) 0x6c, (byte) 0x2e, (byte) 0x4c, 1249 (byte) 0x69, (byte) 0x6e, (byte) 0x6b, (byte) 0x65, 1250 (byte) 0x64, (byte) 0x4c, (byte) 0x69, (byte) 0x73, 1251 (byte) 0x74, (byte) 0x0c, (byte) 0x29, (byte) 0x53, 1252 (byte) 0x5d, (byte) 0x4a, (byte) 0x60, (byte) 0x88, 1253 (byte) 0x22, (byte) 0x03, (byte) 0x00, (byte) 0x00, 1254 (byte) 0x78, (byte) 0x70, (byte) 0x77, (byte) 0x04, 1255 (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x01, 1256 (byte) 0x73, (byte) 0x72, (byte) 0x00, (byte) 0x28, 1257 (byte) 0x6a, (byte) 0x61, (byte) 0x76, (byte) 0x61, 1258 (byte) 0x78, (byte) 0x2e, (byte) 0x73, (byte) 0x65, 1259 (byte) 0x63, (byte) 0x75, (byte) 0x72, (byte) 0x69, 1260 (byte) 0x74, (byte) 0x79, (byte) 0x2e, (byte) 0x61, 1261 (byte) 0x75, (byte) 0x74, (byte) 0x68, (byte) 0x2e, 1262 (byte) 0x53, (byte) 0x75, (byte) 0x62, (byte) 0x6a, 1263 (byte) 0x65, (byte) 0x63, (byte) 0x74, (byte) 0x54, 1264 (byte) 0x65, (byte) 0x73, (byte) 0x74, (byte) 0x24, 1265 (byte) 0x4d, (byte) 0x79, (byte) 0x4f, (byte) 0x62, 1266 (byte) 0x6a, (byte) 0x65, (byte) 0x63, (byte) 0x74, 1267 (byte) 0xf7, (byte) 0xbc, (byte) 0xdc, (byte) 0x95, 1268 (byte) 0xb2, (byte) 0x33, (byte) 0x3a, (byte) 0x0f, 1269 (byte) 0x02, (byte) 0x00, (byte) 0x00, (byte) 0x78, 1270 (byte) 0x70, (byte) 0x78, (byte) 0x73, (byte) 0x72, 1271 (byte) 0x00, (byte) 0x1b, (byte) 0x6a, (byte) 0x61, 1272 (byte) 0x76, (byte) 0x61, (byte) 0x78, (byte) 0x2e, 1273 (byte) 0x73, (byte) 0x65, (byte) 0x63, (byte) 0x75, 1274 (byte) 0x72, (byte) 0x69, (byte) 0x74, (byte) 0x79, 1275 (byte) 0x2e, (byte) 0x61, (byte) 0x75, (byte) 0x74, 1276 (byte) 0x68, (byte) 0x2e, (byte) 0x53, (byte) 0x75, 1277 (byte) 0x62, (byte) 0x6a, (byte) 0x65, (byte) 0x63, 1278 (byte) 0x74, (byte) 0x8c, (byte) 0xb2, (byte) 0x32, 1279 (byte) 0x93, (byte) 0x00, (byte) 0x33, (byte) 0xfa, 1280 (byte) 0x68, (byte) 0x03, (byte) 0x00, (byte) 0x02, 1281 (byte) 0x5a, (byte) 0x00, (byte) 0x0a, (byte) 0x69, 1282 (byte) 0x73, (byte) 0x52, (byte) 0x65, (byte) 0x61, 1283 (byte) 0x64, (byte) 0x4f, (byte) 0x6e, (byte) 0x6c, 1284 (byte) 0x79, (byte) 0x4c, (byte) 0x00, (byte) 0x0a, 1285 (byte) 0x70, (byte) 0x72, (byte) 0x69, (byte) 0x6e, 1286 (byte) 0x63, (byte) 0x69, (byte) 0x70, (byte) 0x61, 1287 (byte) 0x6c, (byte) 0x73, (byte) 0x74, (byte) 0x00, 1288 (byte) 0x0f, (byte) 0x4c, (byte) 0x6a, (byte) 0x61, 1289 (byte) 0x76, (byte) 0x61, (byte) 0x2f, (byte) 0x75, 1290 (byte) 0x74, (byte) 0x69, (byte) 0x6c, (byte) 0x2f, 1291 (byte) 0x53, (byte) 0x65, (byte) 0x74, (byte) 0x3b, 1292 (byte) 0x78, (byte) 0x70, (byte) 0x00, (byte) 0x71, 1293 (byte) 0x00, (byte) 0x7e, (byte) 0x00, (byte) 0x03, 1294 (byte) 0x78, (byte) 0x78 }; 1295 1296 ByteArrayInputStream in = new ByteArrayInputStream(nullElement); 1297 ObjectInputStream sIn = new ObjectInputStream(in); 1298 1299 try { 1300 sIn.readObject(); 1301 if (!testing) { 1302 fail("No expected NullPointerException"); 1303 } 1304 } catch (NullPointerException e) { 1305 } finally { 1306 sIn.close(); 1307 } 1308 1309 in = new ByteArrayInputStream(notPrincipalElement); 1310 sIn = new ObjectInputStream(in); 1311 1312 try { 1313 sIn.readObject(); 1314 if (!testing) { 1315 fail("No expected IllegalArgumentException"); 1316 } 1317 } catch (IllegalArgumentException e) { 1318 } finally { 1319 sIn.close(); 1320 } 1321 } 1322 1323 /** 1324 * Test subject's private credential set deserialization in case 1325 * of invalid null element. 1326 */ 1327 public void test_PrivateCredentialSetInvalidSerForm() throws Exception { 1328 1329 // The array was produced in the following way: 1330 // 1) A check that verifies a passed private credential object for null 1331 // value was disabled in Subject class. 1332 // 2) Subject object was created 1333 // 3) A null was added to subject's private credential set by invoking 1334 // getPrivateCredentials().add(null); 1335 // 4) ByteArrayOutputStream class was used to write 1336 // subject's private credential set object 1337 // and to get resulting array of bytes 1338 byte[] nullElement = new byte[] { (byte) 0xac, (byte) 0xed, 1339 (byte) 0x00, (byte) 0x05, (byte) 0x73, (byte) 0x72, 1340 (byte) 0x00, (byte) 0x25, (byte) 0x6a, (byte) 0x61, 1341 (byte) 0x76, (byte) 0x61, (byte) 0x78, (byte) 0x2e, 1342 (byte) 0x73, (byte) 0x65, (byte) 0x63, (byte) 0x75, 1343 (byte) 0x72, (byte) 0x69, (byte) 0x74, (byte) 0x79, 1344 (byte) 0x2e, (byte) 0x61, (byte) 0x75, (byte) 0x74, 1345 (byte) 0x68, (byte) 0x2e, (byte) 0x53, (byte) 0x75, 1346 (byte) 0x62, (byte) 0x6a, (byte) 0x65, (byte) 0x63, 1347 (byte) 0x74, (byte) 0x24, (byte) 0x53, (byte) 0x65, 1348 (byte) 0x63, (byte) 0x75, (byte) 0x72, (byte) 0x65, 1349 (byte) 0x53, (byte) 0x65, (byte) 0x74, (byte) 0x6d, 1350 (byte) 0xcc, (byte) 0x32, (byte) 0x80, (byte) 0x17, 1351 (byte) 0x55, (byte) 0x7e, (byte) 0x27, (byte) 0x03, 1352 (byte) 0x00, (byte) 0x03, (byte) 0x49, (byte) 0x00, 1353 (byte) 0x07, (byte) 0x73, (byte) 0x65, (byte) 0x74, 1354 (byte) 0x54, (byte) 0x79, (byte) 0x70, (byte) 0x65, 1355 (byte) 0x4c, (byte) 0x00, (byte) 0x08, (byte) 0x65, 1356 (byte) 0x6c, (byte) 0x65, (byte) 0x6d, (byte) 0x65, 1357 (byte) 0x6e, (byte) 0x74, (byte) 0x73, (byte) 0x74, 1358 (byte) 0x00, (byte) 0x16, (byte) 0x4c, (byte) 0x6a, 1359 (byte) 0x61, (byte) 0x76, (byte) 0x61, (byte) 0x2f, 1360 (byte) 0x75, (byte) 0x74, (byte) 0x69, (byte) 0x6c, 1361 (byte) 0x2f, (byte) 0x4c, (byte) 0x69, (byte) 0x6e, 1362 (byte) 0x6b, (byte) 0x65, (byte) 0x64, (byte) 0x4c, 1363 (byte) 0x69, (byte) 0x73, (byte) 0x74, (byte) 0x3b, 1364 (byte) 0x4c, (byte) 0x00, (byte) 0x06, (byte) 0x74, 1365 (byte) 0x68, (byte) 0x69, (byte) 0x73, (byte) 0x24, 1366 (byte) 0x30, (byte) 0x74, (byte) 0x00, (byte) 0x1d, 1367 (byte) 0x4c, (byte) 0x6a, (byte) 0x61, (byte) 0x76, 1368 (byte) 0x61, (byte) 0x78, (byte) 0x2f, (byte) 0x73, 1369 (byte) 0x65, (byte) 0x63, (byte) 0x75, (byte) 0x72, 1370 (byte) 0x69, (byte) 0x74, (byte) 0x79, (byte) 0x2f, 1371 (byte) 0x61, (byte) 0x75, (byte) 0x74, (byte) 0x68, 1372 (byte) 0x2f, (byte) 0x53, (byte) 0x75, (byte) 0x62, 1373 (byte) 0x6a, (byte) 0x65, (byte) 0x63, (byte) 0x74, 1374 (byte) 0x3b, (byte) 0x78, (byte) 0x70, (byte) 0x00, 1375 (byte) 0x00, (byte) 0x00, (byte) 0x01, (byte) 0x73, 1376 (byte) 0x72, (byte) 0x00, (byte) 0x14, (byte) 0x6a, 1377 (byte) 0x61, (byte) 0x76, (byte) 0x61, (byte) 0x2e, 1378 (byte) 0x75, (byte) 0x74, (byte) 0x69, (byte) 0x6c, 1379 (byte) 0x2e, (byte) 0x4c, (byte) 0x69, (byte) 0x6e, 1380 (byte) 0x6b, (byte) 0x65, (byte) 0x64, (byte) 0x4c, 1381 (byte) 0x69, (byte) 0x73, (byte) 0x74, (byte) 0x0c, 1382 (byte) 0x29, (byte) 0x53, (byte) 0x5d, (byte) 0x4a, 1383 (byte) 0x60, (byte) 0x88, (byte) 0x22, (byte) 0x03, 1384 (byte) 0x00, (byte) 0x00, (byte) 0x78, (byte) 0x70, 1385 (byte) 0x77, (byte) 0x04, (byte) 0x00, (byte) 0x00, 1386 (byte) 0x00, (byte) 0x01, (byte) 0x70, (byte) 0x78, 1387 (byte) 0x73, (byte) 0x72, (byte) 0x00, (byte) 0x1b, 1388 (byte) 0x6a, (byte) 0x61, (byte) 0x76, (byte) 0x61, 1389 (byte) 0x78, (byte) 0x2e, (byte) 0x73, (byte) 0x65, 1390 (byte) 0x63, (byte) 0x75, (byte) 0x72, (byte) 0x69, 1391 (byte) 0x74, (byte) 0x79, (byte) 0x2e, (byte) 0x61, 1392 (byte) 0x75, (byte) 0x74, (byte) 0x68, (byte) 0x2e, 1393 (byte) 0x53, (byte) 0x75, (byte) 0x62, (byte) 0x6a, 1394 (byte) 0x65, (byte) 0x63, (byte) 0x74, (byte) 0x8c, 1395 (byte) 0xb2, (byte) 0x32, (byte) 0x93, (byte) 0x00, 1396 (byte) 0x33, (byte) 0xfa, (byte) 0x68, (byte) 0x03, 1397 (byte) 0x00, (byte) 0x02, (byte) 0x5a, (byte) 0x00, 1398 (byte) 0x0a, (byte) 0x69, (byte) 0x73, (byte) 0x52, 1399 (byte) 0x65, (byte) 0x61, (byte) 0x64, (byte) 0x4f, 1400 (byte) 0x6e, (byte) 0x6c, (byte) 0x79, (byte) 0x4c, 1401 (byte) 0x00, (byte) 0x0a, (byte) 0x70, (byte) 0x72, 1402 (byte) 0x69, (byte) 0x6e, (byte) 0x63, (byte) 0x69, 1403 (byte) 0x70, (byte) 0x61, (byte) 0x6c, (byte) 0x73, 1404 (byte) 0x74, (byte) 0x00, (byte) 0x0f, (byte) 0x4c, 1405 (byte) 0x6a, (byte) 0x61, (byte) 0x76, (byte) 0x61, 1406 (byte) 0x2f, (byte) 0x75, (byte) 0x74, (byte) 0x69, 1407 (byte) 0x6c, (byte) 0x2f, (byte) 0x53, (byte) 0x65, 1408 (byte) 0x74, (byte) 0x3b, (byte) 0x78, (byte) 0x70, 1409 (byte) 0x00, (byte) 0x73, (byte) 0x71, (byte) 0x00, 1410 (byte) 0x7e, (byte) 0x00, (byte) 0x00, (byte) 0x00, 1411 (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x73, 1412 (byte) 0x71, (byte) 0x00, (byte) 0x7e, (byte) 0x00, 1413 (byte) 0x04, (byte) 0x77, (byte) 0x04, (byte) 0x00, 1414 (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x78, 1415 (byte) 0x71, (byte) 0x00, (byte) 0x7e, (byte) 0x00, 1416 (byte) 0x08, (byte) 0x78, (byte) 0x78, (byte) 0x78 }; 1417 1418 ByteArrayInputStream in = new ByteArrayInputStream(nullElement); 1419 ObjectInputStream sIn = new ObjectInputStream(in); 1420 1421 try { 1422 sIn.readObject(); 1423 if (!testing) { 1424 fail("No expected NullPointerException"); 1425 } 1426 } catch (NullPointerException e) { 1427 } finally { 1428 sIn.close(); 1429 } 1430 } 1431 1432 public static class PermissionTest extends SecurityTest { 1433 1434 private final Subject subject = new Subject(); 1435 1436 /* 1437 * FIXME??? presence of unaccessible element 1438 * forbids all operations except adding new elements 1439 */ 1440 public void testForbiddenElement() { 1441 1442 grantMode(); // no permissions 1443 grantPermission(new AuthPermission("modifyPrivateCredentials")); 1444 1445 Principal privCr1 = new MyClass1(); 1446 Object privCr2 = new Object(); 1447 1448 HashSet<Object> hash = new HashSet<Object>(); 1449 hash.add(privCr1); 1450 hash.add(new Object()); 1451 1452 Set<Object> set = subject.getPrivateCredentials(); 1453 1454 // Adding is not prohibited 1455 set.add(privCr1); 1456 1457 set.add(privCr2); 1458 1459 try { 1460 set.clear(); 1461 fail("No expected AccessControlException"); 1462 } catch (AccessControlException e) { 1463 // PrivateCredentialPermission check goes first 1464 assertEquals(e, PrivateCredentialPermission.class); 1465 } 1466 1467 try { 1468 set.contains(privCr1); 1469 fail("No expected AccessControlException"); 1470 } catch (AccessControlException e) { 1471 assertEquals(e, PrivateCredentialPermission.class); 1472 } 1473 1474 try { 1475 set.contains(new Object()); 1476 fail("No expected AccessControlException"); 1477 } catch (AccessControlException e) { 1478 assertEquals(e, PrivateCredentialPermission.class); 1479 } 1480 1481 assertTrue(set.equals(set)); 1482 assertFalse(set.equals(new HashSet<Object>())); 1483 try { 1484 // set with equal size initiates iteration 1485 set.equals(hash); 1486 fail("No expected AccessControlException"); 1487 } catch (AccessControlException e) { 1488 assertEquals(e, PrivateCredentialPermission.class); 1489 } 1490 1491 set.isEmpty(); 1492 1493 try { 1494 set.hashCode(); 1495 fail("No expected AccessControlException"); 1496 } catch (AccessControlException e) { 1497 assertEquals(e, PrivateCredentialPermission.class); 1498 } 1499 1500 try { 1501 set.remove(privCr1); 1502 fail("No expected AccessControlException"); 1503 } catch (AccessControlException e) { 1504 // PrivateCredentialPermission check goes first 1505 assertEquals(e, PrivateCredentialPermission.class); 1506 } 1507 1508 try { 1509 set.remove(new Object()); 1510 fail("No expected AccessControlException"); 1511 } catch (AccessControlException e) { 1512 // PrivateCredentialPermission check goes first 1513 assertEquals(e, PrivateCredentialPermission.class); 1514 } 1515 1516 try { 1517 set.retainAll(new HashSet<Object>()); 1518 fail("No expected AccessControlException"); 1519 } catch (AccessControlException e) { 1520 // PrivateCredentialPermission check goes first 1521 assertEquals(e, PrivateCredentialPermission.class); 1522 } 1523 1524 try { 1525 set.toArray(); 1526 fail("No expected AccessControlException"); 1527 } catch (AccessControlException e) { 1528 assertEquals(e, PrivateCredentialPermission.class); 1529 } 1530 1531 try { 1532 set.toArray(new Object[5]); 1533 fail("No expected AccessControlException"); 1534 } catch (AccessControlException e) { 1535 assertEquals(e, PrivateCredentialPermission.class); 1536 } 1537 } 1538 1539 public void testIteratorNext_EmptySet() { 1540 1541 grantMode(); // no permissions 1542 try { 1543 (new Subject()).getPrivateCredentials().iterator().next(); 1544 fail("No expected NoSuchElementException"); 1545 } catch (NoSuchElementException e) { 1546 } catch (IndexOutOfBoundsException e) { 1547 if (!testing) { 1548 throw e; 1549 } 1550 } 1551 } 1552 1553 public void testIteratorNext() { 1554 1555 subject.getPrincipals().add(new MyClass1()); 1556 1557 Set<Object> set = subject.getPrivateCredentials(); 1558 1559 Object obj1 = new Object(); 1560 Object obj2 = new Object(); 1561 Object obj3 = new Object(); 1562 1563 set.add(obj1); 1564 set.add(new HashSet<Object>()); 1565 set.add(obj2); 1566 set.add(new HashSet<Object>()); 1567 set.add(obj3); 1568 1569 grantMode(); // no permissions 1570 1571 HashSet<Object> hash = new HashSet<Object>(); 1572 1573 grantPermission(new PrivateCredentialPermission( 1574 "java.lang.Object * \"*\"", "read")); 1575 1576 Iterator<Object> it = set.iterator(); 1577 while (it.hasNext()) { 1578 try { 1579 hash.add(it.next()); 1580 } catch (AccessControlException e) { 1581 assertEquals(e, PrivateCredentialPermission.class); 1582 } 1583 } 1584 1585 assertEquals("Size: ", 3, hash.size()); 1586 assertTrue("1 element", hash.contains(obj1)); 1587 assertTrue("2 element", hash.contains(obj2)); 1588 assertTrue("3 element", hash.contains(obj3)); 1589 } 1590 1591 public void test_Remove_NotExistingElement_EmptySet() { 1592 1593 denyPermission(new PrivateCredentialPermission("* * \"*\"", "read")); 1594 1595 subject.getPrivateCredentials().remove(new Object()); 1596 } 1597 1598 public void test_PrivateCredentialPermission() { 1599 1600 if (!testing) { 1601 class P implements Principal { 1602 public String getName() { 1603 return "name"; 1604 } 1605 } 1606 1607 P p = new P(); 1608 HashSet<Principal> hash = new HashSet<Principal>(); 1609 hash.add(p); 1610 1611 PrivateCredentialPermission p1 = new PrivateCredentialPermission( 1612 "java.lang.Object", hash); 1613 1614 PrivateCredentialPermission p2 = new PrivateCredentialPermission( 1615 "java.lang.Object " + P.class.getName() + " \"name\"", 1616 "read"); 1617 1618 assertTrue(p1.implies(p2)); 1619 assertTrue(p2.implies(p1)); 1620 } 1621 1622 PrivateCredentialPermission p3 = new PrivateCredentialPermission( 1623 "java.lang.Object * \"*\"", "read"); 1624 PrivateCredentialPermission p4 = new PrivateCredentialPermission( 1625 "java.lang.Object", new HashSet<Principal>()); 1626 1627 assertTrue(p3.implies(p4)); 1628 } 1629 1630 public void test_Principal() { 1631 1632 Principal p1 = new MyClass1(); 1633 Principal p2 = new MyClass2(); 1634 1635 HashSet<Principal> hash = new HashSet<Principal>(); 1636 hash.add(p2); 1637 1638 Set<Object> set = subject.getPrivateCredentials(); 1639 1640 set.add(new Object()); 1641 1642 grantMode(); // no permissions 1643 1644 grantPermission(new AuthPermission("modifyPrincipals")); 1645 grantPermission(getPermission("java.lang.Object", hash)); 1646 1647 Iterator<Object> it = set.iterator(); 1648 it.next(); 1649 1650 subject.getPrincipals().add(p1); 1651 it = set.iterator(); 1652 try { 1653 it.next(); 1654 fail("No expected AccessControlException"); 1655 } catch (AccessControlException e) { 1656 assertEquals(e, PrivateCredentialPermission.class); 1657 } 1658 1659 subject.getPrincipals().add(p2); 1660 1661 it = set.iterator(); 1662 it.next(); 1663 } 1664 1665 public void test_Serialization() throws Exception { 1666 1667 subject.getPrivateCredentials().add(new MyClass1()); 1668 1669 denyPermission(new PrivateCredentialPermission("* * \"*\"", "read")); 1670 1671 ByteArrayOutputStream out = new ByteArrayOutputStream(); 1672 ObjectOutputStream sOut = new ObjectOutputStream(out); 1673 1674 try { 1675 sOut.writeObject(subject.getPrivateCredentials()); 1676 fail("No expected AccessControlException"); 1677 } catch (AccessControlException e) { 1678 assertEquals(e, PrivateCredentialPermission.class); 1679 } finally { 1680 sOut.close(); 1681 } 1682 } 1683 1684 @SuppressWarnings("unchecked") 1685 public void testGetClass() { 1686 1687 HashSet hash = new HashSet(); 1688 hash.add(new MyClass1()); 1689 1690 subject.getPrincipals().add(new MyClass1()); 1691 1692 subject.getPrivateCredentials().add(new MyClass1()); 1693 subject.getPrivateCredentials().add(new MyClass2()); 1694 1695 grantMode(); // no permissions 1696 1697 try { 1698 subject.getPrivateCredentials(MyClass1.class); 1699 fail("No expected AccessControlException"); 1700 } catch (AccessControlException e) { 1701 assertEquals(e, PrivateCredentialPermission.class); 1702 } 1703 1704 try { 1705 subject.getPrivateCredentials(MyClass2.class); 1706 fail("No expected AccessControlException"); 1707 } catch (AccessControlException e) { 1708 assertEquals(e, PrivateCredentialPermission.class); 1709 } 1710 1711 // subject hash partial permissions (only for MyClass1 class) 1712 grantPermission(getPermission(MyClass1.class.getName(), hash)); 1713 1714 // FIXME why security exception is thrown? 1715 // the spec. require permissions for requested class only 1716 try { 1717 subject.getPrivateCredentials(MyClass1.class); 1718 fail("No expected AccessControlException"); 1719 } catch (AccessControlException e) { 1720 assertEquals(e, PrivateCredentialPermission.class); 1721 } 1722 1723 try { 1724 subject.getPrivateCredentials(MyClass2.class); 1725 fail("No expected AccessControlException"); 1726 } catch (AccessControlException e) { 1727 assertEquals(e, PrivateCredentialPermission.class); 1728 } 1729 1730 // now subject has all permissions 1731 grantPermission(getPermission(MyClass2.class.getName(), hash)); 1732 1733 subject.getPrivateCredentials(MyClass1.class); 1734 subject.getPrivateCredentials(MyClass2.class); 1735 } 1736 1737 public PrivateCredentialPermission getPermission(String c, Set<? extends Principal> p) { 1738 StringBuffer buf = new StringBuffer(c); 1739 1740 for (Iterator<? extends Principal> it = p.iterator(); it.hasNext();) { 1741 Object o = it.next(); 1742 buf.append(" "); 1743 buf.append(o.getClass().getName()); 1744 buf.append(" \""); 1745 buf.append(((Principal) o).getName()); 1746 buf.append("\""); 1747 } 1748 return new PrivateCredentialPermission(buf.toString(), "read"); 1749 } 1750 } 1751 1752 /** 1753 * Test subject's public credential set deserialization in case 1754 * of invalid null element. 1755 */ 1756 public void test_PublicCredentialInvalidSerForm() throws Exception { 1757 1758 // The array was produced in the following way: 1759 // 1) A check that verifies a passed public credential object for null 1760 // value was disabled in Subject class. 1761 // 2) Subject object was created 1762 // 3) A null was added to subject's public credential set by invoking 1763 // getPublicCredentials().add(null); 1764 // 4) ByteArrayOutputStream class was used to write 1765 // subject's public credential set object 1766 // and to get resulting array of bytes 1767 byte[] nullElement = new byte[] { (byte) 0xac, (byte) 0xed, 1768 (byte) 0x00, (byte) 0x05, (byte) 0x73, (byte) 0x72, 1769 (byte) 0x00, (byte) 0x25, (byte) 0x6a, (byte) 0x61, 1770 (byte) 0x76, (byte) 0x61, (byte) 0x78, (byte) 0x2e, 1771 (byte) 0x73, (byte) 0x65, (byte) 0x63, (byte) 0x75, 1772 (byte) 0x72, (byte) 0x69, (byte) 0x74, (byte) 0x79, 1773 (byte) 0x2e, (byte) 0x61, (byte) 0x75, (byte) 0x74, 1774 (byte) 0x68, (byte) 0x2e, (byte) 0x53, (byte) 0x75, 1775 (byte) 0x62, (byte) 0x6a, (byte) 0x65, (byte) 0x63, 1776 (byte) 0x74, (byte) 0x24, (byte) 0x53, (byte) 0x65, 1777 (byte) 0x63, (byte) 0x75, (byte) 0x72, (byte) 0x65, 1778 (byte) 0x53, (byte) 0x65, (byte) 0x74, (byte) 0x6d, 1779 (byte) 0xcc, (byte) 0x32, (byte) 0x80, (byte) 0x17, 1780 (byte) 0x55, (byte) 0x7e, (byte) 0x27, (byte) 0x03, 1781 (byte) 0x00, (byte) 0x03, (byte) 0x49, (byte) 0x00, 1782 (byte) 0x07, (byte) 0x73, (byte) 0x65, (byte) 0x74, 1783 (byte) 0x54, (byte) 0x79, (byte) 0x70, (byte) 0x65, 1784 (byte) 0x4c, (byte) 0x00, (byte) 0x08, (byte) 0x65, 1785 (byte) 0x6c, (byte) 0x65, (byte) 0x6d, (byte) 0x65, 1786 (byte) 0x6e, (byte) 0x74, (byte) 0x73, (byte) 0x74, 1787 (byte) 0x00, (byte) 0x16, (byte) 0x4c, (byte) 0x6a, 1788 (byte) 0x61, (byte) 0x76, (byte) 0x61, (byte) 0x2f, 1789 (byte) 0x75, (byte) 0x74, (byte) 0x69, (byte) 0x6c, 1790 (byte) 0x2f, (byte) 0x4c, (byte) 0x69, (byte) 0x6e, 1791 (byte) 0x6b, (byte) 0x65, (byte) 0x64, (byte) 0x4c, 1792 (byte) 0x69, (byte) 0x73, (byte) 0x74, (byte) 0x3b, 1793 (byte) 0x4c, (byte) 0x00, (byte) 0x06, (byte) 0x74, 1794 (byte) 0x68, (byte) 0x69, (byte) 0x73, (byte) 0x24, 1795 (byte) 0x30, (byte) 0x74, (byte) 0x00, (byte) 0x1d, 1796 (byte) 0x4c, (byte) 0x6a, (byte) 0x61, (byte) 0x76, 1797 (byte) 0x61, (byte) 0x78, (byte) 0x2f, (byte) 0x73, 1798 (byte) 0x65, (byte) 0x63, (byte) 0x75, (byte) 0x72, 1799 (byte) 0x69, (byte) 0x74, (byte) 0x79, (byte) 0x2f, 1800 (byte) 0x61, (byte) 0x75, (byte) 0x74, (byte) 0x68, 1801 (byte) 0x2f, (byte) 0x53, (byte) 0x75, (byte) 0x62, 1802 (byte) 0x6a, (byte) 0x65, (byte) 0x63, (byte) 0x74, 1803 (byte) 0x3b, (byte) 0x78, (byte) 0x70, (byte) 0x00, 1804 (byte) 0x00, (byte) 0x00, (byte) 0x02, (byte) 0x73, 1805 (byte) 0x72, (byte) 0x00, (byte) 0x14, (byte) 0x6a, 1806 (byte) 0x61, (byte) 0x76, (byte) 0x61, (byte) 0x2e, 1807 (byte) 0x75, (byte) 0x74, (byte) 0x69, (byte) 0x6c, 1808 (byte) 0x2e, (byte) 0x4c, (byte) 0x69, (byte) 0x6e, 1809 (byte) 0x6b, (byte) 0x65, (byte) 0x64, (byte) 0x4c, 1810 (byte) 0x69, (byte) 0x73, (byte) 0x74, (byte) 0x0c, 1811 (byte) 0x29, (byte) 0x53, (byte) 0x5d, (byte) 0x4a, 1812 (byte) 0x60, (byte) 0x88, (byte) 0x22, (byte) 0x03, 1813 (byte) 0x00, (byte) 0x00, (byte) 0x78, (byte) 0x70, 1814 (byte) 0x77, (byte) 0x04, (byte) 0x00, (byte) 0x00, 1815 (byte) 0x00, (byte) 0x01, (byte) 0x70, (byte) 0x78, 1816 (byte) 0x73, (byte) 0x72, (byte) 0x00, (byte) 0x1b, 1817 (byte) 0x6a, (byte) 0x61, (byte) 0x76, (byte) 0x61, 1818 (byte) 0x78, (byte) 0x2e, (byte) 0x73, (byte) 0x65, 1819 (byte) 0x63, (byte) 0x75, (byte) 0x72, (byte) 0x69, 1820 (byte) 0x74, (byte) 0x79, (byte) 0x2e, (byte) 0x61, 1821 (byte) 0x75, (byte) 0x74, (byte) 0x68, (byte) 0x2e, 1822 (byte) 0x53, (byte) 0x75, (byte) 0x62, (byte) 0x6a, 1823 (byte) 0x65, (byte) 0x63, (byte) 0x74, (byte) 0x8c, 1824 (byte) 0xb2, (byte) 0x32, (byte) 0x93, (byte) 0x00, 1825 (byte) 0x33, (byte) 0xfa, (byte) 0x68, (byte) 0x03, 1826 (byte) 0x00, (byte) 0x02, (byte) 0x5a, (byte) 0x00, 1827 (byte) 0x0a, (byte) 0x69, (byte) 0x73, (byte) 0x52, 1828 (byte) 0x65, (byte) 0x61, (byte) 0x64, (byte) 0x4f, 1829 (byte) 0x6e, (byte) 0x6c, (byte) 0x79, (byte) 0x4c, 1830 (byte) 0x00, (byte) 0x0a, (byte) 0x70, (byte) 0x72, 1831 (byte) 0x69, (byte) 0x6e, (byte) 0x63, (byte) 0x69, 1832 (byte) 0x70, (byte) 0x61, (byte) 0x6c, (byte) 0x73, 1833 (byte) 0x74, (byte) 0x00, (byte) 0x0f, (byte) 0x4c, 1834 (byte) 0x6a, (byte) 0x61, (byte) 0x76, (byte) 0x61, 1835 (byte) 0x2f, (byte) 0x75, (byte) 0x74, (byte) 0x69, 1836 (byte) 0x6c, (byte) 0x2f, (byte) 0x53, (byte) 0x65, 1837 (byte) 0x74, (byte) 0x3b, (byte) 0x78, (byte) 0x70, 1838 (byte) 0x00, (byte) 0x73, (byte) 0x71, (byte) 0x00, 1839 (byte) 0x7e, (byte) 0x00, (byte) 0x00, (byte) 0x00, 1840 (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x73, 1841 (byte) 0x71, (byte) 0x00, (byte) 0x7e, (byte) 0x00, 1842 (byte) 0x04, (byte) 0x77, (byte) 0x04, (byte) 0x00, 1843 (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x78, 1844 (byte) 0x71, (byte) 0x00, (byte) 0x7e, (byte) 0x00, 1845 (byte) 0x08, (byte) 0x78, (byte) 0x78, (byte) 0x78 }; 1846 1847 ByteArrayInputStream in = new ByteArrayInputStream(nullElement); 1848 ObjectInputStream sIn = new ObjectInputStream(in); 1849 1850 try { 1851 sIn.readObject(); 1852 if (!testing) { 1853 fail("No expected NullPointerException"); 1854 } 1855 } catch (NullPointerException e) { 1856 } finally { 1857 sIn.close(); 1858 } 1859 } 1860 1861 @SuppressWarnings("serial") 1862 public static class MyClass1 implements Principal, Serializable { 1863 public String getName() { 1864 return "MyClass1"; 1865 } 1866 } 1867 1868 public static class MyClass2 implements Principal { 1869 public String getName() { 1870 return "MyClass2"; 1871 } 1872 } 1873 1874 @SuppressWarnings("serial") 1875 public static class MyObject implements Serializable { 1876 } 1877 1878 public static class PrincipalTestSuite extends TestSuite { 1879 1880 public PrincipalTestSuite() { 1881 super("Principal"); 1882 1883 TestSuite iterator = new TestSuite("Iterator"); 1884 1885 iterator 1886 .addTest(new TestSuite(IteratorInterface.class, "Interface")); 1887 iterator.addTest(new TestSuite(IteratorReadOnly.class, "ReadOnly")); 1888 iterator.addTest(new TestSuite(IteratorSecure.class, "Secure")); 1889 1890 TestSuite set = new TestSuite("Set"); 1891 set.addTest(new TestSuite(SetInterface.class, "Interface")); 1892 set 1893 .addTest(new TestSuite(UnsupportedNull.class, 1894 "UnsupportedNull")); 1895 set.addTest(new TestSuite(IneligibleElement.class, 1896 "IneligibleElement")); 1897 set.addTest(new TestSuite(ReadOnlySet.class, "ReadOnly")); 1898 set.addTest(new TestSuite(SecureSet.class, "Secure")); 1899 1900 TestSuite object = new TestSuite("Object"); 1901 object.addTest(new TestSuite(SObjectTest.class, "Object")); 1902 1903 addTest(iterator); 1904 addTest(set); 1905 addTest(object); 1906 } 1907 1908 public static class IteratorInterface extends SecurityTest.IteratorTest { 1909 public IteratorInterface() { 1910 set = (new Subject()).getPrincipals(); 1911 element = principal; 1912 } 1913 } 1914 1915 public static class IteratorReadOnly extends 1916 SecurityTest.ReadOnlyIteratorTest { 1917 1918 private final Subject subject = new Subject(); 1919 1920 public IteratorReadOnly() { 1921 set = subject.getPrincipals(); 1922 element = principal; 1923 } 1924 1925 @Override 1926 public void setReadOnly() { 1927 subject.setReadOnly(); 1928 } 1929 } 1930 1931 public static class IteratorSecure extends 1932 SecurityTest.SecureIteratorTest { 1933 1934 public IteratorSecure() { 1935 set = (new Subject()).getPrincipals(); 1936 element = principal; 1937 } 1938 1939 @Override 1940 public void setSecure() { 1941 denyPermission(new AuthPermission("modifyPrincipals")); 1942 } 1943 } 1944 1945 public static class SetInterface extends SecurityTest.SetTest { 1946 public SetInterface() { 1947 set = (new Subject()).getPrincipals(); 1948 element = principal; 1949 } 1950 } 1951 1952 public static class UnsupportedNull extends 1953 SecurityTest.UnsupportedNullTest { 1954 1955 public UnsupportedNull() { 1956 set = (new Subject()).getPrincipals(); 1957 element = principal; 1958 } 1959 } 1960 1961 public static class IneligibleElement extends 1962 SecurityTest.IneligibleElementTest { 1963 1964 public IneligibleElement() { 1965 set = (new Subject()).getPrincipals(); 1966 element = principal; 1967 iElement = new Object(); 1968 } 1969 } 1970 1971 public static class ReadOnlySet extends SecurityTest.ReadOnlySetTest { 1972 private final Subject subject = new Subject(); 1973 1974 public ReadOnlySet() { 1975 set = subject.getPrincipals(); 1976 element = principal; 1977 } 1978 1979 @Override 1980 public void setReadOnly() { 1981 subject.setReadOnly(); 1982 } 1983 } 1984 1985 public static class SecureSet extends SecurityTest.SecureSetTest { 1986 1987 public SecureSet() { 1988 set = (new Subject()).getPrincipals(); 1989 element = principal; 1990 } 1991 1992 @Override 1993 public void setSecure() { 1994 denyPermission(new AuthPermission("modifyPrincipals")); 1995 } 1996 } 1997 1998 public static class SObjectTest extends 1999 SecurityTest.SubjectSetObjectTest { 2000 public SObjectTest() { 2001 obj1 = subject.getPrincipals(); 2002 2003 //intentionally another set 2004 obj2 = subject.getPrivateCredentials(); 2005 } 2006 } 2007 } 2008 2009 public static class PrivateCredentialTestSuite extends TestSuite { 2010 2011 public PrivateCredentialTestSuite() { 2012 super("PrivateCredential"); 2013 2014 TestSuite iterator = new TestSuite("Iterator"); 2015 2016 iterator 2017 .addTest(new TestSuite(IteratorInterface.class, "Interface")); 2018 iterator.addTest(new TestSuite(IteratorReadOnly.class, "ReadOnly")); 2019 iterator.addTest(new TestSuite(IteratorSecure.class, "Secure")); 2020 2021 TestSuite set = new TestSuite("Set"); 2022 set.addTest(new TestSuite(SetInterface.class, "Interface")); 2023 set 2024 .addTest(new TestSuite(UnsupportedNull.class, 2025 "UnsupportedNull")); 2026 set.addTest(new TestSuite(ReadOnlySet.class, "ReadOnly")); 2027 set.addTest(new TestSuite(SecureSet.class, "Secure")); 2028 set.addTest(new TestSuite(PermissionTest.class, "PermissionTest")); 2029 2030 TestSuite object = new TestSuite("Object"); 2031 object.addTest(new TestSuite(SObjectTest.class, "Object")); 2032 2033 addTest(iterator); 2034 addTest(set); 2035 addTest(object); 2036 } 2037 2038 public static class IteratorInterface extends SecurityTest.IteratorTest { 2039 public IteratorInterface() { 2040 set = (new Subject()).getPrivateCredentials(); 2041 element = principal; 2042 } 2043 2044 @Override 2045 public void testNext_EmptySet_NoSuchElementException() { 2046 2047 if (testing) { 2048 //Unexpected: IndexOutOfBoundsException 2049 try { 2050 super.testNext_EmptySet_NoSuchElementException(); 2051 } catch (IndexOutOfBoundsException e) { 2052 } 2053 } else { 2054 super.testNext_EmptySet_NoSuchElementException(); 2055 } 2056 } 2057 2058 @Override 2059 public void testNext_NoSuchElementException() { 2060 if (testing) { 2061 //Unexpected: IndexOutOfBoundsException 2062 try { 2063 super.testNext_NoSuchElementException(); 2064 } catch (IndexOutOfBoundsException e) { 2065 } 2066 } else { 2067 super.testNext_NoSuchElementException(); 2068 } 2069 } 2070 } 2071 2072 public static class IteratorReadOnly extends 2073 SecurityTest.ReadOnlyIteratorTest { 2074 2075 private final Subject subject = new Subject(); 2076 2077 public IteratorReadOnly() { 2078 set = subject.getPrivateCredentials(); 2079 element = principal; 2080 } 2081 2082 @Override 2083 public void setReadOnly() { 2084 subject.setReadOnly(); 2085 } 2086 2087 @Override 2088 public void testNext_EmptySet_NoSuchElementException() { 2089 2090 if (testing) { 2091 //Unexpected: IndexOutOfBoundsException 2092 try { 2093 super.testNext_EmptySet_NoSuchElementException(); 2094 } catch (IndexOutOfBoundsException e) { 2095 } 2096 } else { 2097 super.testNext_EmptySet_NoSuchElementException(); 2098 } 2099 } 2100 2101 @Override 2102 public void testNext_NoSuchElementException() { 2103 if (testing) { 2104 //Unexpected: IndexOutOfBoundsException 2105 try { 2106 super.testNext_NoSuchElementException(); 2107 } catch (IndexOutOfBoundsException e) { 2108 } 2109 } else { 2110 super.testNext_NoSuchElementException(); 2111 } 2112 } 2113 } 2114 2115 public static class IteratorSecure extends 2116 SecurityTest.SecureIteratorTest { 2117 2118 public IteratorSecure() { 2119 set = (new Subject()).getPrivateCredentials(); 2120 element = principal; 2121 } 2122 2123 @Override 2124 public void setSecure() { 2125 denyPermission(new AuthPermission("modifyPrivateCredentials")); 2126 } 2127 2128 @Override 2129 public void testNext_EmptySet_NoSuchElementException() { 2130 2131 if (testing) { 2132 //Unexpected: IndexOutOfBoundsException 2133 try { 2134 super.testNext_EmptySet_NoSuchElementException(); 2135 } catch (IndexOutOfBoundsException e) { 2136 } 2137 } else { 2138 super.testNext_EmptySet_NoSuchElementException(); 2139 } 2140 } 2141 2142 @Override 2143 public void testNext_NoSuchElementException() { 2144 if (testing) { 2145 //Unexpected: IndexOutOfBoundsException 2146 try { 2147 super.testNext_NoSuchElementException(); 2148 } catch (IndexOutOfBoundsException e) { 2149 } 2150 } else { 2151 super.testNext_NoSuchElementException(); 2152 } 2153 } 2154 } 2155 2156 public static class SetInterface extends SecurityTest.SetTest { 2157 public SetInterface() { 2158 set = (new Subject()).getPrivateCredentials(); 2159 element = principal; 2160 } 2161 } 2162 2163 public static class UnsupportedNull extends 2164 SecurityTest.UnsupportedNullTest { 2165 2166 public UnsupportedNull() { 2167 set = (new Subject()).getPrivateCredentials(); 2168 element = principal; 2169 } 2170 } 2171 2172 public static class ReadOnlySet extends SecurityTest.ReadOnlySetTest { 2173 private final Subject subject = new Subject(); 2174 2175 public ReadOnlySet() { 2176 set = subject.getPrivateCredentials(); 2177 element = principal; 2178 } 2179 2180 @Override 2181 public void setReadOnly() { 2182 subject.setReadOnly(); 2183 } 2184 } 2185 2186 public static class SecureSet extends SecurityTest.SecureSetTest { 2187 2188 public SecureSet() { 2189 set = (new Subject()).getPrivateCredentials(); 2190 element = principal; 2191 } 2192 2193 @Override 2194 public void setSecure() { 2195 denyPermission(new AuthPermission("modifyPrivateCredentials")); 2196 } 2197 } 2198 2199 public static class SObjectTest extends 2200 SecurityTest.SubjectSetObjectTest { 2201 public SObjectTest() { 2202 obj1 = subject.getPrivateCredentials(); 2203 2204 //intentionally another set 2205 obj2 = subject.getPublicCredentials(); 2206 } 2207 } 2208 } 2209 2210 public static class PublicCredentialTestSuite extends TestSuite { 2211 2212 public PublicCredentialTestSuite() { 2213 super("PublicCredential"); 2214 2215 TestSuite iterator = new TestSuite("Iterator"); 2216 2217 iterator 2218 .addTest(new TestSuite(IteratorInterface.class, "Interface")); 2219 iterator.addTest(new TestSuite(IteratorReadOnly.class, "ReadOnly")); 2220 iterator.addTest(new TestSuite(IteratorSecure.class, "Secure")); 2221 2222 TestSuite set = new TestSuite("Set"); 2223 set.addTest(new TestSuite(SetInterface.class, "Interface")); 2224 set 2225 .addTest(new TestSuite(UnsupportedNull.class, 2226 "UnsupportedNull")); 2227 set.addTest(new TestSuite(ReadOnlySet.class, "ReadOnly")); 2228 set.addTest(new TestSuite(SecureSet.class, "Secure")); 2229 2230 TestSuite object = new TestSuite("Object"); 2231 object.addTest(new TestSuite(SObjectTest.class, "Object")); 2232 2233 addTest(iterator); 2234 addTest(set); 2235 addTest(object); 2236 } 2237 2238 public static class IteratorInterface extends SecurityTest.IteratorTest { 2239 public IteratorInterface() { 2240 set = (new Subject()).getPublicCredentials(); 2241 element = principal; 2242 } 2243 } 2244 2245 public static class IteratorReadOnly extends 2246 SecurityTest.ReadOnlyIteratorTest { 2247 2248 private final Subject subject = new Subject(); 2249 2250 public IteratorReadOnly() { 2251 set = subject.getPublicCredentials(); 2252 element = principal; 2253 } 2254 2255 @Override 2256 public void setReadOnly() { 2257 subject.setReadOnly(); 2258 } 2259 } 2260 2261 public static class IteratorSecure extends 2262 SecurityTest.SecureIteratorTest { 2263 2264 public IteratorSecure() { 2265 set = (new Subject()).getPublicCredentials(); 2266 element = principal; 2267 } 2268 2269 @Override 2270 public void setSecure() { 2271 denyPermission(new AuthPermission("modifyPublicCredentials")); 2272 } 2273 } 2274 2275 public static class SetInterface extends SecurityTest.SetTest { 2276 public SetInterface() { 2277 set = (new Subject()).getPublicCredentials(); 2278 element = principal; 2279 } 2280 } 2281 2282 public static class UnsupportedNull extends 2283 SecurityTest.UnsupportedNullTest { 2284 2285 public UnsupportedNull() { 2286 set = (new Subject()).getPublicCredentials(); 2287 element = principal; 2288 } 2289 } 2290 2291 public static class ReadOnlySet extends SecurityTest.ReadOnlySetTest { 2292 private final Subject subject = new Subject(); 2293 2294 public ReadOnlySet() { 2295 set = subject.getPublicCredentials(); 2296 element = principal; 2297 } 2298 2299 @Override 2300 public void setReadOnly() { 2301 subject.setReadOnly(); 2302 } 2303 } 2304 2305 public static class SecureSet extends SecurityTest.SecureSetTest { 2306 2307 public SecureSet() { 2308 set = (new Subject()).getPublicCredentials(); 2309 element = principal; 2310 } 2311 2312 @Override 2313 public void setSecure() { 2314 denyPermission(new AuthPermission("modifyPublicCredentials")); 2315 } 2316 } 2317 2318 public static class SObjectTest extends 2319 SecurityTest.SubjectSetObjectTest { 2320 public SObjectTest() { 2321 obj1 = subject.getPublicCredentials(); 2322 2323 //intentionally another set 2324 obj2 = subject.getPrincipals(); 2325 } 2326 } 2327 } 2328 2329 public static class PrincipalClassTestSuite extends TestSuite { 2330 2331 public PrincipalClassTestSuite() { 2332 super("PrincipalClass"); 2333 2334 TestSuite set = new TestSuite("Set"); 2335 set.addTest(new TestSuite(SetInterface.class, "Interface")); 2336 set 2337 .addTest(new TestSuite(UnsupportedNull.class, 2338 "UnsupportedNull")); 2339 set.addTest(new TestSuite(IneligibleElement.class, 2340 "IneligibleElement")); 2341 2342 TestSuite object = new TestSuite("Object"); 2343 object.addTest(new TestSuite(SObjectTest.class, "Object")); 2344 2345 addTest(set); 2346 addTest(object); 2347 } 2348 2349 public static class SetInterface extends SecurityTest.SetTest { 2350 public SetInterface() { 2351 set = (new Subject()).getPrincipals(MyClass1.class); 2352 element = new MyClass1(); 2353 } 2354 } 2355 2356 public static class UnsupportedNull extends 2357 SecurityTest.UnsupportedNullTest { 2358 2359 public UnsupportedNull() { 2360 set = (new Subject()).getPrincipals(MyClass1.class); 2361 element = new MyClass1(); 2362 } 2363 } 2364 2365 public static class IneligibleElement extends 2366 SecurityTest.IneligibleElementTest { 2367 2368 public IneligibleElement() { 2369 set = (new Subject()).getPrincipals(MyClass1.class); 2370 element = new MyClass1(); 2371 iElement = new MyClass2(); 2372 } 2373 } 2374 2375 public static class SObjectTest extends 2376 SecurityTest.SubjectSetObjectTest { 2377 public SObjectTest() { 2378 obj1 = subject.getPrincipals(MyClass1.class); 2379 2380 //intentionally another set 2381 obj2 = subject.getPrivateCredentials(MyClass1.class); 2382 } 2383 } 2384 } 2385 2386 public static class PrivateCredentialClassTestSuite extends TestSuite { 2387 2388 public PrivateCredentialClassTestSuite() { 2389 super("PrivateCredentialClass"); 2390 2391 TestSuite set = new TestSuite("Set"); 2392 set.addTest(new TestSuite(SetInterface.class, "Interface")); 2393 set 2394 .addTest(new TestSuite(UnsupportedNull.class, 2395 "UnsupportedNull")); 2396 set.addTest(new TestSuite(IneligibleElement.class, 2397 "IneligibleElement")); 2398 2399 TestSuite object = new TestSuite("Object"); 2400 object.addTest(new TestSuite(SObjectTest.class, "Object")); 2401 2402 addTest(set); 2403 addTest(object); 2404 } 2405 2406 public static class SetInterface extends SecurityTest.SetTest { 2407 public SetInterface() { 2408 set = (new Subject()).getPrivateCredentials(MyClass1.class); 2409 element = new MyClass1(); 2410 } 2411 } 2412 2413 public static class UnsupportedNull extends 2414 SecurityTest.UnsupportedNullTest { 2415 2416 public UnsupportedNull() { 2417 set = (new Subject()).getPrivateCredentials(MyClass1.class); 2418 element = new MyClass1(); 2419 } 2420 } 2421 2422 public static class IneligibleElement extends 2423 SecurityTest.IneligibleElementTest { 2424 2425 public IneligibleElement() { 2426 set = (new Subject()).getPrivateCredentials(MyClass1.class); 2427 element = new MyClass1(); 2428 iElement = new MyClass2(); 2429 } 2430 } 2431 2432 public static class SObjectTest extends 2433 SecurityTest.SubjectSetObjectTest { 2434 public SObjectTest() { 2435 obj1 = subject.getPrivateCredentials(MyClass1.class); 2436 2437 //intentionally another set 2438 obj2 = subject.getPublicCredentials(MyClass1.class); 2439 } 2440 } 2441 } 2442 2443 public static class PublicCredentialClassTestSuite extends TestSuite { 2444 2445 public PublicCredentialClassTestSuite() { 2446 super("PublicCredentialClass"); 2447 2448 TestSuite set = new TestSuite("Set"); 2449 set.addTest(new TestSuite(SetInterface.class, "Interface")); 2450 set 2451 .addTest(new TestSuite(UnsupportedNull.class, 2452 "UnsupportedNull")); 2453 set.addTest(new TestSuite(IneligibleElement.class, 2454 "IneligibleElement")); 2455 2456 TestSuite object = new TestSuite("Object"); 2457 object.addTest(new TestSuite(SObjectTest.class, "Object")); 2458 2459 addTest(set); 2460 addTest(object); 2461 } 2462 2463 public static class SetInterface extends SecurityTest.SetTest { 2464 public SetInterface() { 2465 set = (new Subject()).getPublicCredentials(MyClass1.class); 2466 element = new MyClass1(); 2467 } 2468 } 2469 2470 public static class UnsupportedNull extends 2471 SecurityTest.UnsupportedNullTest { 2472 2473 public UnsupportedNull() { 2474 set = (new Subject()).getPublicCredentials(MyClass1.class); 2475 element = new MyClass1(); 2476 } 2477 } 2478 2479 public static class IneligibleElement extends 2480 SecurityTest.IneligibleElementTest { 2481 2482 public IneligibleElement() { 2483 set = (new Subject()).getPublicCredentials(MyClass1.class); 2484 element = new MyClass1(); 2485 iElement = new MyClass2(); 2486 } 2487 } 2488 2489 public static class SObjectTest extends 2490 SecurityTest.SubjectSetObjectTest { 2491 public SObjectTest() { 2492 obj1 = subject.getPublicCredentials(MyClass1.class); 2493 2494 //intentionally another set 2495 obj2 = subject.getPrincipals(MyClass1.class); 2496 } 2497 } 2498 } 2499 }