[
https://issues.apache.org/jira/browse/DERBY-5514?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13156611#comment-13156611
]
Knut Anders Hatlen commented on DERBY-5514:
-------------------------------------------
Running the network server with a special default policy file when we run with
EMMA is probably the right thing to do, but running with -noSecurityManager
also sounds perfectly acceptable.
The patch didn't compile in my environment:
junitcomponents:
[javac] Compiling 1 source file to /code/derby/trunk/classes
[javac]
/code/derby/trunk/java/testing/org/apache/derbyTesting/junit/NetworkServerTestSetup.java:264:
cannot find symbol
[javac] symbol : method contains(java.lang.String)
[javac] location: class java.lang.String
[javac] classpath.contains("emma.jar"))
[javac] ^
[javac] 1 error
Changing contains() to indexOf() made it work, and I could run SecureServerTest
without seeing the stack traces getting printed.
If I added the following line to NetworkServerTestSetup.startSeparateProcess()
al.add("-Demma.verbosity.level=silent");
I didn't have to change the assert in SecureServerTest.
SecureServerTest.runServerCommand() and Driver40UnbootedTest.test_notBooted()
also set this property to prevent that EMMA interferes with the canons.
As to the problem with spawned processes possibly corrupting coverage.ec,
perhaps we could run the spawned processes with the emma.coverage.out.file
system property set, and use a counter to prevent name clashes? If so, I'd
prefer that we do that in BaseTestCase.execJavaCmd() so that it works for most
of the tests. NetworkServerTestSetup doesn't use BaseTestCase.execJavaCmd()
yet, but making it do so should be trivial. Maybe it would also make sense to
push the setting of emma.verbosity.level down to that method too, so that we
don't have to do that in every test that happens to spawn a process.
> SecureServerTest doesn't play nice with EMMA: AccessControlException
> --------------------------------------------------------------------
>
> Key: DERBY-5514
> URL: https://issues.apache.org/jira/browse/DERBY-5514
> Project: Derby
> Issue Type: Bug
> Affects Versions: 10.9.0.0
> Reporter: Dag H. Wanvik
> Attachments: derby-5514-1.diff, derby-5514-1.stat
>
>
> When running SecureServerTest with jars instrumented with EMMA using the ant
> emma-all target, I see:
> [junit] (net)derbynet.SecureServerTest.testServerStartup used 8475 ms
> junit.framework.TestListener: endTest(testServerStartup)
> [junit] START-SPAWNED:SpawnedNetworkServer ERROR OUTPUT:
> [junit] java.security.policy: error adding Entry:
> [junit] java.net.MalformedURLException: no protocol:
> /export/home/dag/java/sb/sb1/tools/java/emma.jar
> [junit] java.security.AccessControlException: access denied
> (java.io.FilePermission coverage.ec read)
> [junit] at
> java.security.AccessControlContext.checkPermission(AccessControlContext.java:374)
> [junit] at
> java.security.AccessController.checkPermission(AccessController.java:546)
> [junit] at
> java.lang.SecurityManager.checkPermission(SecurityManager.java:532)
> [junit] at java.lang.SecurityManager.checkRead(SecurityManager.java:871)
> [junit] at java.io.File.exists(File.java:731)
> [junit] at
> com.vladium.emma.data.DataFactory.persist(DataFactory.java:525)
> [junit] at
> com.vladium.emma.data.DataFactory.persist(DataFactory.java:86)
> [junit] at
> com.vladium.emma.rt.RTCoverageDataPersister.dumpCoverageData(RTCoverageDataPersister.java:54)
> [junit] at com.vladium.emma.rt.RTExitHook.run(RTExitHook.java:32)
> [junit] at java.lang.Thread.run(Thread.java:662)
> [junit] Exception in thread "EMMA shutdown handler thread"
> java.lang.RuntimeException: EMMA failed to dump coverage data:
> java.security.AccessControlException: access denied (java.io.FilePermission
> coverage.ec read)
> [junit] at
> com.vladium.emma.rt.RTCoverageDataPersister.dumpCoverageData(RTCoverageDataPersister.java:71)
> [junit] at com.vladium.emma.rt.RTExitHook.run(RTExitHook.java:32)
> [junit] at java.lang.Thread.run(Thread.java:662)
> [junit] END-SPAWNED :SpawnedNetworkServer ERROR OUTPUT:
> This is presumably because the test spawns a server which runs with the
> default server policy.
> Another thing is that is seems dangerous to let the spawned process write to
> EMMA's "coverage.ec", since we don't know when the parent process will write
> to it. This behavior could be what's been causing our corrutions in the EMMA
> runs earlier. The missing permissions just highlight what's happening.
> In this case the spawned process was started with this command line (I
> instrumented the code):
> XXX server startup command = /usr/jdk/instances/jdk1.6.0/jre/bin/java
> -classpath /<my sandbox>/tools/java/emma.jar:/<my
> sandbox>/jars/sane/derbyTesting.jar:/<my
> sandbox>/jars/emma/lib/derbyclient.jar:/<my
> sandbox>/jars/emma/lib/derbynet.jar:/<my
> sandbox>/jars/emma/lib/derby.jar:/<my
> sandbox>/jars/emma/lib/derbytools.jar:/<my
> sandbox>/jars/emma/lib/derbyrun.jar:/<my
> sandbox>/tools/java/junit.jar:/usr/share/lib/ant/ant-launcher.jar:/usr/share/lib/ant/ant.jar:/usr/share/lib/ant/ant-junit.jar
> org.apache.derby.drda.NetworkServerControl start -h localhost -p 1527
> Possible approaches:
> run the spawned VMs with plain jars (downside: we won't get coverage
> for those)
> run the spawned with a special default policy file when we run with
> EMMA ++
> run the spawned VM with -noSecurityManager if with EMMA jars
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators:
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira