diff options
author | Pete Gillin <peteg@google.com> | 2018-03-20 14:55:37 +0000 |
---|---|---|
committer | Pete Gillin <peteg@google.com> | 2018-03-20 15:04:10 +0000 |
commit | fbdae2c2089483a18a01771141434299412df13f (patch) | |
tree | 908ea4cf5bfbe70fcbac30b0bc1ca8dc4b41a517 /jsr166-tests/src/test/java/jsr166/AtomicReferenceFieldUpdaterTest.java | |
parent | 26204f5aef6e48da7d244a975bcb9b71dad93f0c (diff) |
Restore the visibility checks in Atomic.*FieldUpdater.
This change is just reverting unintended diffs against upstream
sources. (The call to checkPackageAccess is a noop on Android because
it only does SecurityManager checks, so this change leaves that
suppresses as it is right now. The call to ensureMemberAccess does
regular visibility checks, and is restored in this change.)
Bug: 75269521
Test: cts-tradefed run cts-dev -m CtsLibcoreJsr166TestCases
Test: cts-tradefed run cts-dev -m CtsLibcoreTestCases
Change-Id: I5e050f786709fb28543ca4ea409eb9876539fc6f
Diffstat (limited to 'jsr166-tests/src/test/java/jsr166/AtomicReferenceFieldUpdaterTest.java')
-rw-r--r-- | jsr166-tests/src/test/java/jsr166/AtomicReferenceFieldUpdaterTest.java | 117 |
1 files changed, 57 insertions, 60 deletions
diff --git a/jsr166-tests/src/test/java/jsr166/AtomicReferenceFieldUpdaterTest.java b/jsr166-tests/src/test/java/jsr166/AtomicReferenceFieldUpdaterTest.java index 9b2e9a9adf..a662e11d76 100644 --- a/jsr166-tests/src/test/java/jsr166/AtomicReferenceFieldUpdaterTest.java +++ b/jsr166-tests/src/test/java/jsr166/AtomicReferenceFieldUpdaterTest.java @@ -32,56 +32,55 @@ public class AtomicReferenceFieldUpdaterTest extends JSR166TestCase { // } // for testing subclass access - // android-note: Removed because android doesn't restrict reflection access - // static class AtomicReferenceFieldUpdaterTestSubclass extends AtomicReferenceFieldUpdaterTest { - // public void checkPrivateAccess() { - // try { - // AtomicReferenceFieldUpdater<AtomicReferenceFieldUpdaterTest,Integer> a = - // AtomicReferenceFieldUpdater.newUpdater - // (AtomicReferenceFieldUpdaterTest.class, Integer.class, "privateField"); - // shouldThrow(); - // } catch (RuntimeException success) { - // assertNotNull(success.getCause()); - // } - // } - - // public void checkCompareAndSetProtectedSub() { - // AtomicReferenceFieldUpdater<AtomicReferenceFieldUpdaterTest,Integer> a = - // AtomicReferenceFieldUpdater.newUpdater - // (AtomicReferenceFieldUpdaterTest.class, Integer.class, "protectedField"); - // this.protectedField = one; - // assertTrue(a.compareAndSet(this, one, two)); - // assertTrue(a.compareAndSet(this, two, m4)); - // assertSame(m4, a.get(this)); - // assertFalse(a.compareAndSet(this, m5, seven)); - // assertFalse(seven == a.get(this)); - // assertTrue(a.compareAndSet(this, m4, seven)); - // assertSame(seven, a.get(this)); - // } - // } + static class AtomicReferenceFieldUpdaterTestSubclass extends AtomicReferenceFieldUpdaterTest { + public void checkPrivateAccess() { + try { + AtomicReferenceFieldUpdater<AtomicReferenceFieldUpdaterTest,Integer> a = + AtomicReferenceFieldUpdater.newUpdater + (AtomicReferenceFieldUpdaterTest.class, Integer.class, "privateField"); + shouldThrow(); + } catch (RuntimeException success) { + assertNotNull(success.getCause()); + } + } - // static class UnrelatedClass { - // public void checkPackageAccess(AtomicReferenceFieldUpdaterTest obj) { - // obj.x = one; - // AtomicReferenceFieldUpdater<AtomicReferenceFieldUpdaterTest,Integer> a = - // AtomicReferenceFieldUpdater.newUpdater - // (AtomicReferenceFieldUpdaterTest.class, Integer.class, "x"); - // assertSame(one, a.get(obj)); - // assertTrue(a.compareAndSet(obj, one, two)); - // assertSame(two, a.get(obj)); - // } - - // public void checkPrivateAccess(AtomicReferenceFieldUpdaterTest obj) { - // try { - // AtomicReferenceFieldUpdater<AtomicReferenceFieldUpdaterTest,Integer> a = - // AtomicReferenceFieldUpdater.newUpdater - // (AtomicReferenceFieldUpdaterTest.class, Integer.class, "privateField"); - // throw new AssertionError("should throw"); - // } catch (RuntimeException success) { - // assertNotNull(success.getCause()); - // } - // } - // } + public void checkCompareAndSetProtectedSub() { + AtomicReferenceFieldUpdater<AtomicReferenceFieldUpdaterTest,Integer> a = + AtomicReferenceFieldUpdater.newUpdater + (AtomicReferenceFieldUpdaterTest.class, Integer.class, "protectedField"); + this.protectedField = one; + assertTrue(a.compareAndSet(this, one, two)); + assertTrue(a.compareAndSet(this, two, m4)); + assertSame(m4, a.get(this)); + assertFalse(a.compareAndSet(this, m5, seven)); + assertFalse(seven == a.get(this)); + assertTrue(a.compareAndSet(this, m4, seven)); + assertSame(seven, a.get(this)); + } + } + + static class UnrelatedClass { + public void checkPackageAccess(AtomicReferenceFieldUpdaterTest obj) { + obj.x = one; + AtomicReferenceFieldUpdater<AtomicReferenceFieldUpdaterTest,Integer> a = + AtomicReferenceFieldUpdater.newUpdater + (AtomicReferenceFieldUpdaterTest.class, Integer.class, "x"); + assertSame(one, a.get(obj)); + assertTrue(a.compareAndSet(obj, one, two)); + assertSame(two, a.get(obj)); + } + + public void checkPrivateAccess(AtomicReferenceFieldUpdaterTest obj) { + try { + AtomicReferenceFieldUpdater<AtomicReferenceFieldUpdaterTest,Integer> a = + AtomicReferenceFieldUpdater.newUpdater + (AtomicReferenceFieldUpdaterTest.class, Integer.class, "privateField"); + throw new AssertionError("should throw"); + } catch (RuntimeException success) { + assertNotNull(success.getCause()); + } + } + } static AtomicReferenceFieldUpdater<AtomicReferenceFieldUpdaterTest, Integer> updaterFor(String fieldName) { return AtomicReferenceFieldUpdater.newUpdater @@ -133,22 +132,20 @@ public class AtomicReferenceFieldUpdaterTest extends JSR166TestCase { /** * construction using private field from subclass throws RuntimeException */ - // android-note: Removed because android doesn't restrict reflection access - // public void testPrivateFieldInSubclass() { - // AtomicReferenceFieldUpdaterTestSubclass s = - // new AtomicReferenceFieldUpdaterTestSubclass(); - // s.checkPrivateAccess(); - // } + public void testPrivateFieldInSubclass() { + AtomicReferenceFieldUpdaterTestSubclass s = + new AtomicReferenceFieldUpdaterTestSubclass(); + s.checkPrivateAccess(); + } /** * construction from unrelated class; package access is allowed, * private access is not */ - // android-note: Removed because android doesn't restrict reflection access - // public void testUnrelatedClassAccess() { - // new UnrelatedClass().checkPackageAccess(this); - // new UnrelatedClass().checkPrivateAccess(this); - // } + public void testUnrelatedClassAccess() { + new UnrelatedClass().checkPackageAccess(this); + new UnrelatedClass().checkPrivateAccess(this); + } /** * get returns the last value set or assigned |