ProviderTest.java revision cec4dd4b1d33f78997603d0f89c0d0e56e64dbcd
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 Boris V. Kuznetsov 20 * @version $Revision$ 21 */ 22 23package org.apache.harmony.security.tests.java.security; 24 25import java.io.ByteArrayInputStream; 26import java.io.ByteArrayOutputStream; 27import java.io.IOException; 28import java.io.InputStream; 29import java.io.PrintStream; 30import java.security.NoSuchAlgorithmException; 31import java.security.Permission; 32import java.security.Provider; 33import java.security.Security; 34import java.security.SecurityPermission; 35import java.security.Provider.Service; 36import java.util.Collection; 37import java.util.HashMap; 38import java.util.Iterator; 39import java.util.Map; 40import java.util.Set; 41import java.util.Map.Entry; 42 43import junit.framework.TestCase; 44import dalvik.annotation.KnownFailure; 45import dalvik.annotation.TestLevel; 46import dalvik.annotation.TestTargetClass; 47import dalvik.annotation.TestTargetNew; 48 49@TestTargetClass(Provider.class) 50/** 51 * Tests for <code>Provider</code> constructor and methods 52 * 53 */ 54public class ProviderTest extends TestCase { 55 /* 56 * Implementation note: The algorithm name ASH-1 might seem a bit strange, 57 * but since the algorithms cannot be uninstalled anymore we need to make 58 * sure there are not side-effects on other tests. Simply inserting SHA-1 59 * destroys the existing provider infrastructure. 60 */ 61 62 Provider[] storedProviders; 63 64 Provider p; 65 66 /* 67 * @see TestCase#setUp() 68 */ 69 protected void setUp() throws Exception { 70 super.setUp(); 71 72 storedProviders = Security.getProviders(); 73 74 p = new MyProvider(); 75 } 76 77 @Override 78 protected void tearDown() throws Exception { 79 System.setSecurityManager(null); 80 81 p.remove("MessageDigest.ASH-1"); 82 p.remove("MessageDigest.abc"); 83 p.remove("Alg.Alias.MessageDigest.ASH1"); 84 85 for (Provider p: Security.getProviders()) { 86 Security.removeProvider(p.getName()); 87 } 88 89 for (Provider p: storedProviders) { 90 Security.addProvider(p); 91 } 92 93 super.tearDown(); 94 } 95 96 /* 97 * Class under test for void Provider() 98 */ 99 @TestTargetNew( 100 level = TestLevel.PARTIAL_COMPLETE, 101 notes = "Verifies provider object", 102 method = "Provider", 103 args = {java.lang.String.class, double.class, java.lang.String.class} 104 ) 105 public final void testProvider() { 106 if (!p.getProperty("Provider.id name").equals( 107 String.valueOf(p.getName()))) { 108 fail("Incorrect \"Provider.id name\" value"); 109 } 110 if (!p.getProperty("Provider.id version").equals( 111 String.valueOf(p.getVersion()))) { 112 fail("Incorrect \"Provider.id version\" value"); 113 } 114 if (!p.getProperty("Provider.id info").equals( 115 String.valueOf(p.getInfo()))) { 116 fail("Incorrect \"Provider.id info\" value"); 117 } 118 if (!p.getProperty("Provider.id className").equals( 119 p.getClass().getName())) { 120 fail("Incorrect \"Provider.id className\" value"); 121 } 122 } 123 124 @TestTargetNew( 125 level = TestLevel.PARTIAL_COMPLETE, 126 notes = "", 127 method = "clear", 128 args = {} 129 ) 130 public final void testClear() { 131 p.clear(); 132 assertNull(p.getProperty("MessageDigest.SHA-1")); 133 } 134 135 /* 136 * Class under test for void Provider(String, double, String) 137 */ 138 @TestTargetNew( 139 level = TestLevel.PARTIAL_COMPLETE, 140 notes = "Verifies constructor with non null parameters", 141 method = "Provider", 142 args = {java.lang.String.class, double.class, java.lang.String.class} 143 ) 144 public final void testProviderStringdoubleString() { 145 Provider p = new MyProvider("Provider name", 123.456, "Provider info"); 146 assertEquals("Provider name", p.getName()); 147 assertEquals(123.456, p.getVersion(), 0L); 148 assertEquals("Provider info", p.getInfo()); 149 } 150 151 public final void testGetName() { 152 assertEquals("MyProvider", p.getName()); 153 } 154 155 @TestTargetNew( 156 level = TestLevel.COMPLETE, 157 notes = "", 158 method = "getVersion", 159 args = {} 160 ) 161 public final void testGetVersion() { 162 assertEquals(1.0, p.getVersion(), 0L); 163 } 164 165 @TestTargetNew( 166 level = TestLevel.COMPLETE, 167 notes = "", 168 method = "getInfo", 169 args = {} 170 ) 171 public final void testGetInfo() { 172 assertEquals("Provider for testing", p.getInfo()); 173 } 174 175 /* 176 * Class under test for void putAll(Map) 177 */ 178 @TestTargetNew( 179 level = TestLevel.COMPLETE, 180 notes = "", 181 method = "putAll", 182 args = {java.util.Map.class} 183 ) 184 public final void testPutAllMap() { 185 HashMap hm = new HashMap(); 186 hm.put("MessageDigest.SHA-1", "aaa.bbb.ccc.ddd"); 187 hm.put("Property 1", "value 1"); 188 hm.put("serviceName.algName attrName", "attrValue"); 189 hm.put("Alg.Alias.engineClassName.aliasName", "standardName"); 190 p.putAll(hm); 191 if (!"value 1".equals(p.getProperty("Property 1").trim()) || 192 !"attrValue".equals(p.getProperty("serviceName.algName attrName").trim()) || 193 !"standardName".equals(p.getProperty("Alg.Alias.engineClassName.aliasName").trim()) || 194 !"aaa.bbb.ccc.ddd".equals(p.getProperty("MessageDigest.SHA-1").trim()) ) { 195 fail("Incorrect property value"); 196 } 197 } 198 199 /* 200 * Class under test for Set entrySet() 201 */ 202 @TestTargetNew( 203 level = TestLevel.PARTIAL_COMPLETE, 204 notes = "", 205 method = "entrySet", 206 args = {} 207 ) 208 public final void testEntrySet() { 209 p.put("MessageDigest.SHA-256", "aaa.bbb.ccc.ddd"); 210 211 Set s = p.entrySet(); 212 try { 213 s.clear(); 214 fail("Must return unmodifiable set"); 215 } catch (UnsupportedOperationException e) { 216 } 217 218 assertEquals("Incorrect set size", 8, s.size()); 219 220 for (Iterator it = s.iterator(); it.hasNext();) { 221 Entry e = (Entry)it.next(); 222 String key = (String)e.getKey(); 223 String val = (String)e.getValue(); 224 if (key.equals("MessageDigest.SHA-1") && val.equals("SomeClassName")) { 225 continue; 226 } 227 if (key.equals("Alg.Alias.MessageDigest.SHA1") && val.equals("SHA-1")) { 228 continue; 229 } 230 if (key.equals("MessageDigest.abc") && val.equals("SomeClassName")) { 231 continue; 232 } 233 if (key.equals("Provider.id className") && val.equals(p.getClass().getName())) { 234 continue; 235 } 236 if (key.equals("Provider.id name") && val.equals("MyProvider")) { 237 continue; 238 } 239 if (key.equals("MessageDigest.SHA-256") && val.equals("aaa.bbb.ccc.ddd")) { 240 continue; 241 } 242 if (key.equals("Provider.id version") && val.equals("1.0")) { 243 continue; 244 } 245 if (key.equals("Provider.id info") && val.equals("Provider for testing")) { 246 continue; 247 } 248 fail("Incorrect set"); 249 } 250 } 251 252 /* 253 * Class under test for Set keySet() 254 */ 255 @TestTargetNew( 256 level = TestLevel.COMPLETE, 257 notes = "", 258 method = "keySet", 259 args = {} 260 ) 261 public final void testKeySet() { 262 p.put("MessageDigest.SHA-256", "aaa.bbb.ccc.ddd"); 263 264 Set<Object> s = p.keySet(); 265 try { 266 s.clear(); 267 } catch (UnsupportedOperationException e) { 268 } 269 Set s1 = p.keySet(); 270 271 assertNotSame(s, s1); 272 assertFalse(s1.isEmpty()); 273 assertEquals(8, s1.size()); 274 275 assertTrue(s1.contains("MessageDigest.SHA-256")); 276 assertTrue(s1.contains("MessageDigest.SHA-1")); 277 assertTrue(s1.contains("Alg.Alias.MessageDigest.SHA1")); 278 assertTrue(s1.contains("MessageDigest.abc")); 279 assertTrue(s1.contains("Provider.id info")); 280 assertTrue(s1.contains("Provider.id className")); 281 assertTrue(s1.contains("Provider.id version")); 282 assertTrue(s1.contains("Provider.id name")); 283 } 284 285 /* 286 * Class under test for Collection values() 287 */ 288 @TestTargetNew( 289 level = TestLevel.PARTIAL_COMPLETE, 290 notes = "", 291 method = "values", 292 args = {} 293 ) 294 public final void testValues() { 295 p.put("MessageDigest.ASH-256", "aaa.bbb.ccc.ddd"); 296 297 Collection<Object> c = p.values(); 298 try { 299 c.clear(); 300 } catch (UnsupportedOperationException e) { 301 } 302 Collection c1 = p.values(); 303 304 assertNotSame(c, c1); 305 assertFalse(c1.isEmpty()); 306 assertEquals(8, c1.size()); 307 308 assertTrue(c1.contains("MyProvider")); 309 assertTrue(c1.contains("aaa.bbb.ccc.ddd")); 310 assertTrue(c1.contains("Provider for testing")); 311 assertTrue(c1.contains("1.0")); 312 assertTrue(c1.contains("SomeClassName")); 313 assertTrue(c1.contains("SHA-1")); 314 assertTrue(c1.contains(p.getClass().getName())); 315 } 316 317 /* 318 * Class under test for Object put(Object, Object) 319 */ 320 @TestTargetNew( 321 level = TestLevel.PARTIAL_COMPLETE, 322 notes = "", 323 method = "put", 324 args = {java.lang.Object.class, java.lang.Object.class} 325 ) 326 public final void testPutObjectObject() { 327 p.put("MessageDigest.SHA-1", "aaa.bbb.ccc.ddd"); 328 p.put("Type.Algorithm", "className"); 329 assertEquals("aaa.bbb.ccc.ddd", p.getProperty("MessageDigest.SHA-1") 330 .trim()); 331 332 Set services = p.getServices(); 333 assertEquals(3, services.size()); 334 335 for (Iterator it = services.iterator(); it.hasNext();) { 336 Provider.Service s = (Provider.Service)it.next(); 337 if ("Type".equals(s.getType()) && 338 "Algorithm".equals(s.getAlgorithm()) && 339 "className".equals(s.getClassName())) { 340 continue; 341 } 342 if ("MessageDigest".equals(s.getType()) && 343 "SHA-1".equals(s.getAlgorithm()) && 344 "aaa.bbb.ccc.ddd".equals(s.getClassName())) { 345 continue; 346 } 347 if ("MessageDigest".equals(s.getType()) && 348 "abc".equals(s.getAlgorithm()) && 349 "SomeClassName".equals(s.getClassName())) { 350 continue; 351 } 352 fail("Incorrect service"); 353 } 354 } 355 356 /* 357 * Class under test for Object remove(Object) 358 */ 359 @TestTargetNew( 360 level = TestLevel.COMPLETE, 361 notes = "", 362 method = "remove", 363 args = {java.lang.Object.class} 364 ) 365 public final void testRemoveObject() { 366 Object o = p.remove("MessageDigest.SHA-1"); 367 368 assertEquals("SomeClassName", o); 369 assertNull(p.getProperty("MessageDigest.SHA-1")); 370 assertEquals(1, p.getServices().size()); 371 } 372 373 public final void testService1() { 374 p.put("MessageDigest.SHA-1", "AnotherClassName"); 375 Provider.Service s = p.getService("MessageDigest", "SHA-1"); 376 377 assertEquals("AnotherClassName", s.getClassName()); 378 } 379 380 // Regression for HARMONY-2760. 381 @TestTargetNew( 382 level = TestLevel.PARTIAL_COMPLETE, 383 notes = "Regression test: verifies constructor with two null parameters.", 384 method = "Provider", 385 args = {java.lang.String.class, double.class, java.lang.String.class} 386 ) 387 public void testConstructor() { 388 MyProvider myProvider = new MyProvider(null, 1, null); 389 assertNull(myProvider.getName()); 390 assertNull(myProvider.getInfo()); 391 assertEquals("null", myProvider.getProperty("Provider.id name")); 392 assertEquals("null", myProvider.getProperty("Provider.id info")); 393 } 394 395 class MyProvider extends Provider { 396 MyProvider() { 397 super("MyProvider", 1.0, "Provider for testing"); 398 put("MessageDigest.SHA-1", "SomeClassName"); 399 put("MessageDigest.abc", "SomeClassName"); 400 put("Alg.Alias.MessageDigest.SHA1", "SHA-1"); 401 } 402 403 MyProvider(String name, double version, String info) { 404 super(name, version, info); 405 } 406 407 // BEGIN android-added 408 public void putService(Provider.Service s) { 409 super.putService(s); 410 } 411 // END android-added 412 413 // BEGIN android-added 414 public void removeService(Provider.Service s) { 415 super.removeService(s); 416 } 417 // END android-added 418 419 // BEGIN android-added 420 public int getNumServices() { 421 return getServices().size(); 422 } 423 // END android-added 424 } 425 426 // BEGIN android-added 427 @TestTargetNew( 428 level = TestLevel.PARTIAL_COMPLETE, 429 notes = "", 430 method = "clear", 431 args = {} 432 ) 433 public final void testClear_SecurityManager() { 434 TestSecurityManager sm = new TestSecurityManager("clearProviderProperties.MyProvider"); 435 System.setSecurityManager(sm); 436 p.clear(); 437 assertTrue("Provider.clear must call checkPermission with " 438 + "SecurityPermission clearProviderProperties.NAME", 439 sm.called); 440 System.setSecurityManager(null); 441 } 442 // END android-added 443 444 // BEGIN android-added 445 @TestTargetNew( 446 level = TestLevel.PARTIAL_COMPLETE, 447 notes = "", 448 method = "put", 449 args = {java.lang.Object.class, java.lang.Object.class} 450 ) 451 public final void testPutObjectObject_SecurityManager() { 452 453 TestSecurityManager sm = new TestSecurityManager("putProviderProperty.MyProvider"); 454 Provider p = new MyProvider(); 455 System.setSecurityManager(sm); 456 p.put(new Object(), new Object()); 457 assertTrue("Provider put must call checkPermission " 458 + "SecurityPermission putProviderProperty.Name", sm.called); 459 System.setSecurityManager(null); 460 } 461 // END android-added 462 463 // BEGIN android-added 464 @TestTargetNew( 465 level = TestLevel.PARTIAL_COMPLETE, 466 notes = "", 467 method = "remove", 468 args = {java.lang.Object.class} 469 ) 470 public final void testRemoveObject_SecurityManager() { 471 TestSecurityManager sm = new TestSecurityManager( 472 "removeProviderProperty.MyProvider"); 473 System.setSecurityManager(sm); 474 p.remove(new Object()); 475 assertTrue("Provider.remove must check permission " 476 + "SecurityPermission removeProviderProperty.NAME", 477 sm.called); 478 System.setSecurityManager(null); 479 } 480 // END android-added 481 482 // BEGIN android-added 483 @TestTargetNew( 484 level = TestLevel.COMPLETE, 485 notes = "", 486 method = "getService", 487 args = {java.lang.String.class, java.lang.String.class} 488 ) 489 public final void testService2() { 490 Provider[] pp = Security.getProviders("MessageDigest.ASH-1"); 491 if (pp == null) { 492 return; 493 } 494 Provider p2 = pp[0]; 495 String old = p2.getProperty("MessageDigest.ASH-1"); 496 p2.put("MessageDigest.ASH-1", "AnotherClassName"); 497 Provider.Service s = p2.getService("MessageDigest", "ASH-1"); 498 if (!"AnotherClassName".equals(s.getClassName())) { 499 fail("Incorrect class name " + s.getClassName()); 500 } 501 try { 502 s.newInstance(null); 503 fail("No expected NoSuchAlgorithmException"); 504 } catch (NoSuchAlgorithmException e) { 505 } 506 } 507 // END android-added 508 509 // BEGIN android-added 510 @TestTargetNew( 511 level = TestLevel.COMPLETE, 512 notes = "", 513 method = "getServices", 514 args = {} 515 ) 516 public final void testGetServices() { 517 MyProvider myProvider = new MyProvider(null, 1, null); 518 Set<Provider.Service> services = myProvider.getServices(); 519 assertEquals(0, services.size()); 520 521 Provider.Service s[] = new Provider.Service[3]; 522 523 s[0] = new Provider.Service(p, "type1", "algorithm1", "className1", 524 null, null); 525 s[1] = new Provider.Service(p, "type2", "algorithm2", "className2", 526 null, null); 527 s[2] = new Provider.Service(p, "type3", "algorithm3", "className3", 528 null, null); 529 myProvider.putService(s[0]); 530 myProvider.putService(s[1]); 531 assertEquals(2, myProvider.getNumServices()); 532 Set<Service> actual = myProvider.getServices(); 533 534 assertTrue(actual.contains(s[0])); 535 assertTrue(actual.contains(s[1])); 536 assertTrue(!actual.contains(s[2])); 537 538 myProvider.removeService(s[1]); 539 actual = myProvider.getServices(); 540 assertEquals(1, myProvider.getNumServices()); 541 542 assertTrue(actual.contains(s[0])); 543 assertTrue(!actual.contains(s[1])); 544 assertTrue(!actual.contains(s[2])); 545 546 myProvider.putService(s[2]); 547 actual = myProvider.getServices(); 548 assertEquals(2, myProvider.getNumServices()); 549 assertTrue(actual.contains(s[0])); 550 assertTrue(!actual.contains(s[1])); 551 assertTrue(actual.contains(s[2])); 552 } 553 // END android-added 554 555 // BEGIN android-added 556 @TestTargetNew( 557 level = TestLevel.COMPLETE, 558 notes = "", 559 method = "putService", 560 args = {java.security.Provider.Service.class} 561 ) 562 public final void testPutService() { 563 MyProvider myProvider = new MyProvider(null, 1, null); 564 Provider.Service s[] = new Provider.Service[3]; 565 566 s[0] = new Provider.Service(p, "type1", "algorithm1", "className1", 567 null, null); 568 s[1] = new Provider.Service(p, "type2", "algorithm2", "className2", 569 null, null); 570 s[2] = new Provider.Service(p, "type3", "algorithm3", "className3", 571 null, null); 572 myProvider.putService(s[0]); 573 myProvider.putService(s[1]); 574 assertEquals(2, myProvider.getNumServices()); 575 Set<Service> actual = myProvider.getServices(); 576 577 assertTrue(actual.contains(s[0])); 578 assertTrue(actual.contains(s[1])); 579 assertTrue(!actual.contains(s[2])); 580 581 myProvider.removeService(s[1]); 582 assertEquals(1, myProvider.getNumServices()); 583 actual = myProvider.getServices(); 584 585 assertTrue(actual.contains(s[0])); 586 assertTrue(!actual.contains(s[1])); 587 assertTrue(!actual.contains(s[2])); 588 589 myProvider.putService(s[2]); 590 actual = myProvider.getServices(); 591 assertEquals(2, myProvider.getNumServices()); 592 assertTrue(actual.contains(s[0])); 593 assertTrue(!actual.contains(s[1])); 594 assertTrue(actual.contains(s[2])); 595 596 myProvider.putService(s[2]); 597 actual = myProvider.getServices(); 598 assertEquals(2, myProvider.getNumServices()); 599 assertTrue(actual.contains(s[0])); 600 assertTrue(!actual.contains(s[1])); 601 assertTrue(actual.contains(s[2])); 602 603 try { 604 myProvider.putService(null); 605 fail("NullPointerException expected"); 606 } catch (NullPointerException e) { 607 // expected 608 } 609 } 610 // END android-added 611 612 // BEGIN android-added 613 @TestTargetNew( 614 level = TestLevel.COMPLETE, 615 notes = "", 616 method = "removeService", 617 args = {java.security.Provider.Service.class} 618 ) 619 public final void testRemoveService() { 620 MyProvider myProvider = new MyProvider(null, 1, null); 621 try { 622 myProvider.removeService(null); 623 fail("NullPoiterException expected"); 624 } catch (NullPointerException e) { 625 // expected 626 } 627 628 Provider.Service s[] = new Provider.Service[3]; 629 630 s[0] = new Provider.Service(p, "type0", "algorithm0", "className0", 631 null, null); 632 s[1] = new Provider.Service(p, "type1", "algorithm1", "className1", 633 null, null); 634 s[2] = new Provider.Service(p, "type2", "algorithm2", "className2", 635 null, null); 636 637 try { 638 myProvider.removeService(s[0]); 639 } catch (NullPointerException e) { 640 fail("Unexpected exception"); 641 } 642 643 myProvider.putService(s[0]); 644 myProvider.putService(s[1]); 645 myProvider.putService(s[2]); 646 assertEquals(3, myProvider.getNumServices()); 647 Set<Service> actual = myProvider.getServices(); 648 649 assertTrue(actual.contains(s[0])); 650 assertTrue(actual.contains(s[1])); 651 assertTrue(actual.contains(s[2])); 652 653 myProvider.removeService(s[1]); 654 assertEquals(2, myProvider.getNumServices()); 655 actual = myProvider.getServices(); 656 657 assertTrue(actual.contains(s[0])); 658 assertTrue(!actual.contains(s[1])); 659 assertTrue(actual.contains(s[2])); 660 661 myProvider.removeService(s[0]); 662 assertEquals(1, myProvider.getNumServices()); 663 actual = myProvider.getServices(); 664 665 assertTrue(!actual.contains(s[0])); 666 assertTrue(!actual.contains(s[1])); 667 assertTrue(actual.contains(s[2])); 668 669 myProvider.removeService(s[2]); 670 assertEquals(0, myProvider.getNumServices()); 671 actual = myProvider.getServices(); 672 673 assertTrue(!actual.contains(s[0])); 674 assertTrue(!actual.contains(s[1])); 675 assertTrue(!actual.contains(s[2])); 676 677 try { 678 myProvider.removeService(null); 679 fail("NullPoiterException expected"); 680 } catch (NullPointerException e) { 681 // expected 682 } 683 } 684 // END android-added 685 686 // BEGIN android-added 687 @TestTargetNew( 688 level = TestLevel.PARTIAL_COMPLETE, 689 notes = "", 690 method = "load", 691 args = {java.io.InputStream.class} 692 ) 693 public final void testLoad() throws IOException { 694 InputStream is = new ByteArrayInputStream(writeProperties()); 695 MyProvider myProvider = new MyProvider("name", 1, "info"); 696 myProvider.load(is); 697 assertEquals("tests.security", myProvider.get("test.pkg")); 698 assertEquals("Unit Tests", myProvider.get("test.proj")); 699 assertNull(myProvider.get("#commented.entry")); 700 701 assertEquals("info", myProvider.get("Provider.id info")); 702 String className = myProvider.getClass().toString(); 703 assertEquals( 704 className.substring("class ".length(), className.length()), 705 myProvider.get("Provider.id className")); 706 assertEquals("1.0", myProvider.get("Provider.id version")); 707 708 try { 709 myProvider.load((InputStream) null); 710 fail("NullPointerException expected"); 711 } catch (NullPointerException e) { 712 // expected 713 } 714 } 715 // END android-added 716 717 // BEGIN android-added 718 @TestTargetNew( 719 level = TestLevel.PARTIAL_COMPLETE, 720 notes = "", 721 method = "load", 722 args = {java.io.InputStream.class} 723 ) 724 public final void testLoad2() { 725 class TestInputStream extends InputStream { 726 @Override 727 public int read() throws IOException { 728 throw new IOException(); 729 } 730 } 731 732 MyProvider p = new MyProvider(); 733 try { 734 p.load(new TestInputStream()); 735 fail("expected IOException"); 736 } catch (IOException e) { 737 // expected 738 } 739 } 740 // END android-added 741 742 // BEGIN android-added 743 protected byte[] writeProperties() { 744 ByteArrayOutputStream bout = new ByteArrayOutputStream(); 745 PrintStream ps = new PrintStream(bout); 746 ps.println("#commented.entry=Bogus"); 747 ps.println("test.pkg=tests.security"); 748 ps.println("test.proj=Unit Tests"); 749 ps.close(); 750 return bout.toByteArray(); 751 } 752 // END android-added 753 754 // BEGIN android-added 755 static class TestSecurityManager extends SecurityManager { 756 boolean called = false; 757 private final String permissionName; 758 759 public TestSecurityManager(String permissionName) { 760 this.permissionName = permissionName; 761 } 762 763 @Override 764 public void checkPermission(Permission permission) { 765 if (permission instanceof SecurityPermission) { 766 if (permissionName.equals(permission.getName())) { 767 called = true; 768 } 769 } 770 } 771 } 772 // END android-added 773} 774