Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Tests failed for security exception when using jMock expectations #7

Open
boazlev opened this issue Oct 30, 2012 · 9 comments
Open

Comments

@boazlev
Copy link

boazlev commented Oct 30, 2012

java.lang.SecurityException: class "org.hamcrest.TypeSafeMatcher"'s signer information does not match signer information of other classes in the same package
at java.lang.ClassLoader.checkCerts(Unknown Source)
at java.lang.ClassLoader.preDefineClass(Unknown Source)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.security.SecureClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.access$100(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.security.SecureClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.access$100(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at org.jmock.internal.InvocationExpectationBuilder.createExpectationFrom(InvocationExpectationBuilder.java:86)
at org.jmock.internal.InvocationToExpectationTranslator.invoke(InvocationToExpectationTranslator.java:19)
at org.jmock.internal.FakeObjectMethods.invoke(FakeObjectMethods.java:38)
at org.jmock.lib.legacy.ClassImposteriser$4.invoke(ClassImposteriser.java:137)
at com.boazlev.tdd.sample.integration.IIntegration$$EnhancerByCGLIB$$1b574d34.doSomething()
at com.boazlev.tdd.sample.basic.CodeTest$2.(CodeTest.java:34)
at com.boazlev.tdd.sample.basic.CodeTest.testResult(CodeTest.java:33)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.junit.internal.runners.TestMethod.invoke(TestMethod.java:66)
at org.jmock.integration.junit4.JMock$1.invoke(JMock.java:37)
at org.junit.internal.runners.MethodRoadie.runTestMethod(MethodRoadie.java:105)
at org.junit.internal.runners.MethodRoadie$2.run(MethodRoadie.java:86)
at org.junit.internal.runners.MethodRoadie.runBeforesThenTestThenAfters(MethodRoadie.java:94)
at org.junit.internal.runners.MethodRoadie.runTest(MethodRoadie.java:84)
at org.junit.internal.runners.MethodRoadie.run(MethodRoadie.java:49)
at org.junit.internal.runners.JUnit4ClassRunner.invokeTestMethod(JUnit4ClassRunner.java:98)
at org.junit.internal.runners.JUnit4ClassRunner.runMethods(JUnit4ClassRunner.java:61)
at org.junit.internal.runners.JUnit4ClassRunner$1.run(JUnit4ClassRunner.java:54)
at org.junit.internal.runners.ClassRoadie.runUnprotected(ClassRoadie.java:34)
at org.junit.internal.runners.ClassRoadie.runProtected(ClassRoadie.java:44)
at org.junit.internal.runners.JUnit4ClassRunner.run(JUnit4ClassRunner.java:52)
at org.junit.runners.Suite.runChild(Suite.java:128)
at org.junit.runners.Suite.runChild(Suite.java:24)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222)
at org.junit.runners.ParentRunner.run(ParentRunner.java:300)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)

@mirkoseifert
Copy link
Member

Can you attach a minimal example to reproduce the problem?

@boazlev
Copy link
Author

boazlev commented Oct 30, 2012

Mockery context = new JUnit4Mockery();
@test
public void testResult() {
final IIntegration integration = context.mock(IIntegration.class); // create mock object for third party integration
final int input = 1;
final int output = 2;
context.checking(new Expectations() {{
oneOf(integration).doSomething(input); will(returnValue(output)); // define mock behavior for this test
}});
// rest of the test
}

@mirkoseifert
Copy link
Member

Where can I download jMock? All the links on http://jmock.org/download.html are broken!

@boazlev
Copy link
Author

boazlev commented Oct 30, 2012

email / dropbox / google drive / ftp?

@boazlev
Copy link
Author

boazlev commented Oct 30, 2012

@mirkoseifert
Copy link
Member

Ok, I was able to reproduce the problem. The SecurityException is thrown because the JUnit version (to be more precise: the Hamcrest version) that is bundled with Eclipse is incompatible with the one that is used by jMock. Since JUnitLoop uses the default JUnit version that is part of Eclipse, this problem occurs.

The best option I see to overcome this limitation, is to add a preference page for JUnitLoop where one can configure the JUnit version to use (default vs. custom JAR file in workspace). However, this affects all tests that are launched by JUnitLoop. But, since JUnitLoop must create a single test suite that references all affected tests, this can hardly be avoided. I can't see a way to use different JUnit versions for a single test suite.

What do you think about the solution that uses the preference page?

@boazlev
Copy link
Author

boazlev commented Nov 4, 2012

I think that one workspace may include different projects with different frameworks and versions. Since running the unit tests through the standard Eclipse will use the relevant configuration for each project - it seems like it is also expected from JUnitLoop. That might mean that JUnitLoop should maintain suite per project, since one configuration might not feat all.
Tests might use not only jMock, but also EasyMock, Mockito, PowerMock or any other framework that is not included within Eclipse.
I hope this makes some sense.

@mirkoseifert
Copy link
Member

You're right. There might be indeed multiple projects, each requiting a different version of JUnit.

Please see issue #8 for an explanation of the implications and the effort that would be required to support this. I'd like to keep this as a feature request for future releases, but I can't implement this within the next weeks. If you can supply a patch I'm happy to check and include it.

Still, I think that a configuration option on a preference page that allows to set the default JUnit version to be used by JUnitLoop is something that can be implemented quickly and that will still serve the needs of many users (albeit not the ones that require different JUnit versions for each project).

Do you agree?

@boazlev
Copy link
Author

boazlev commented Nov 4, 2012

Agree.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants