jdk.internal.reflect.ReflectionFactory and SecurityManager
Martin Buchholz
martinrb at google.com
Mon Jan 9 22:45:45 UTC 2017
I followed up on my own suggestion and wrote a race-simulating test without
the big hammer:
/**
* Checks that traversal operations collapse a random pattern of
* dead nodes as could normally only occur with a race.
*/
@Test(dataProvider = "traversalActions")
public void traversalOperationsCollapseNodes(
Consumer<LinkedTransferQueue> traversalAction) {
LinkedTransferQueue q = new LinkedTransferQueue();
int n = rnd.nextInt(6);
for (int i = 0; i < n; i++) q.add(i);
ArrayList nulledOut = new ArrayList();
for (Object p = head(q); p != null; p = next(p))
if (rnd.nextBoolean()) {
nulledOut.add(item(p));
ITEM.setVolatile(p, null);
}
traversalAction.accept(q);
if (n == 0)
assertEquals(nodeCount(q), 0);
else {
int c = nodeCount(q);
assertEquals(q.size(), c - (q.contains(n - 1) ? 0 : 1));
for (int i = 0; i < n; i++)
assertTrue(nulledOut.contains(i) ^ q.contains(i));
}
}
On Mon, Jan 9, 2017 at 2:07 PM, Paul Sandoz <paul.sandoz at oracle.com> wrote:
>
> On 9 Jan 2017, at 13:27, Martin Buchholz <martinrb at google.com> wrote:
>
> My whitebox tests tend to use private access only for reading, but I can
> imagine cases where it is useful to give testing code stronger access than
> for regular VarHandles, maybe even to write final fields, for example for
> fuzz testing or reliably creating an internal state that can only happen
> with a race. There's may be a case for providing such a big hammer, if
> it's sufficiently hard to get at, but I can live without it.
>
>
>
> That big hammer could be jdk.internal.misc.Unsafe for certain tightly
> bound tests that really need it.
>
>
> My preference would be to encourage people to use
>> MethodHandles.privateLookupIn.
>>
>
> I'm a convert!
>
>
> Great!
>
>
> It will take a while for privateLookupIn to become "common knowledge".
>
>
> I shall endeavour to mention it at Devoxx US in March where John and I
> will present on java.lang.invoke.
>
> Paul.
>
More information about the core-libs-dev
mailing list