Tests failing on release when signing

15 views
Skip to first unread message

Peter Miklosko

unread,
May 3, 2013, 9:33:56 AM5/3/13
to maven-androi...@googlegroups.com
Our projects have following structure
  • core (just Java code + JUnit)
  • app (Android code + JUnit)
  • device tests (end to end test)
project build execute fine with clean install, all tests are run.

However when I want to run release with signing some of the test from "app" module fails with SecurityException, example bellow.

From what I found on internet it is case of first module being already signed and other that is dependent on the first is unsigned. 
Did anyone run into this problem? Is there any solution for this besides disabling test on release?

Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 0.009 sec <<< FAILURE!
initializationError(com.peter.tablet.service.analytics.tasks.TrackPageViewTaskShould)  Time elapsed: 0.006 sec  <<< ERROR!
java.lang.SecurityException: class "com.peter.tablet.service.analytics.Analytics"'s signer information does not match signer information of other classes in the same package
at java.lang.ClassLoader.checkCerts(ClassLoader.java:806)
at java.lang.ClassLoader.preDefineClass(ClassLoader.java:487)
at java.lang.ClassLoader.defineClassCond(ClassLoader.java:625)
at java.lang.ClassLoader.defineClass(ClassLoader.java:615)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
at java.net.URLClassLoader.access$000(URLClassLoader.java:58)
at java.net.URLClassLoader$1.run(URLClassLoader.java:197)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
at java.lang.Class.getDeclaredFields0(Native Method)
at java.lang.Class.privateGetDeclaredFields(Class.java:2300)
at java.lang.Class.getDeclaredFields(Class.java:1745)
at org.junit.runners.model.TestClass.<init>(TestClass.java:40)
at org.junit.runners.ParentRunner.<init>(ParentRunner.java:65)
at org.junit.runners.BlockJUnit4ClassRunner.<init>(BlockJUnit4ClassRunner.java:59)
at org.junit.internal.builders.JUnit4Builder.runnerForClass(JUnit4Builder.java:13)
at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:57)
at org.junit.internal.builders.AllDefaultPossibilitiesBuilder.runnerForClass(AllDefaultPossibilitiesBuilder.java:29)
at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:57)
at org.junit.internal.requests.ClassRequest.getRunner(ClassRequest.java:24)
at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:250)
at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:141)
at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:112)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.maven.surefire.util.ReflectionUtils.invokeMethodWithArray(ReflectionUtils.java:189)
at org.apache.maven.surefire.booter.ProviderFactory$ProviderProxy.invoke(ProviderFactory.java:165)
at org.apache.maven.surefire.booter.ProviderFactory.invokeProvider(ProviderFactory.java:85)
at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:115)
at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:75)

Manfred Moser

unread,
May 3, 2013, 2:48:08 PM5/3/13
to maven-androi...@googlegroups.com
Either disable the test runs on the release profile or make sure that the
test application (the running the instrumentation tests) is also signed
with the same credentials..

> Our projects have following structure
>
> - core (just Java code + JUnit)
> - app (Android code + JUnit)
> - device tests (end to end test)
>
> project build execute fine with clean install, all tests are run.
>
> However when I want to run release with signing some of the test from
> "app"
> module fails with SecurityException, example bellow.
>
>>From what I found on internet it is case of first module being already
> signed and other that is dependent on the first is unsigned.
> Did anyone run into this problem? Is there any solution for this besides
> disabling test on release?
>
> *Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 0.009 sec
> <<< FAILURE!*
> *initializationError(com.peter.tablet.service.analytics.tasks.TrackPageViewTaskShould)
> Time elapsed: 0.006 sec <<< ERROR!*
> *java.lang.SecurityException: class
> "com.peter.tablet.service.analytics.Analytics"'s signer information does
> not match signer information of other classes in the same package*
> * at java.lang.ClassLoader.checkCerts(ClassLoader.java:806)*
> * at java.lang.ClassLoader.preDefineClass(ClassLoader.java:487)*
> * at java.lang.ClassLoader.defineClassCond(ClassLoader.java:625)*
> * at java.lang.ClassLoader.defineClass(ClassLoader.java:615)*
> * at
> java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
> *
> * at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)*
> * at java.net.URLClassLoader.access$000(URLClassLoader.java:58)*
> * at java.net.URLClassLoader$1.run(URLClassLoader.java:197)*
> * at java.security.AccessController.doPrivileged(Native Method)*
> * at java.net.URLClassLoader.findClass(URLClassLoader.java:190)*
> * at java.lang.ClassLoader.loadClass(ClassLoader.java:306)*
> * at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)*
> * at java.lang.ClassLoader.loadClass(ClassLoader.java:247)*
> * at java.lang.Class.getDeclaredFields0(Native Method)*
> * at java.lang.Class.privateGetDeclaredFields(Class.java:2300)*
> * at java.lang.Class.getDeclaredFields(Class.java:1745)*
> * at org.junit.runners.model.TestClass.<init>(TestClass.java:40)*
> * at org.junit.runners.ParentRunner.<init>(ParentRunner.java:65)*
> * at
> org.junit.runners.BlockJUnit4ClassRunner.<init>(BlockJUnit4ClassRunner.java:59)
> *
> * at
> org.junit.internal.builders.JUnit4Builder.runnerForClass(JUnit4Builder.java:13)
> *
> * at
> org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:57)
> *
> * at
> org.junit.internal.builders.AllDefaultPossibilitiesBuilder.runnerForClass(AllDefaultPossibilitiesBuilder.java:29)
> *
> * at
> org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:57)
> *
> * at
> org.junit.internal.requests.ClassRequest.getRunner(ClassRequest.java:24)*
> * at
> org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:250)
> *
> * at
> org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:141)
> *
> * at
> org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:112)
> *
> * at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)*
> * at
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
> *
> * at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
> *
> * at java.lang.reflect.Method.invoke(Method.java:597)*
> * at
> org.apache.maven.surefire.util.ReflectionUtils.invokeMethodWithArray(ReflectionUtils.java:189)
> *
> * at
> org.apache.maven.surefire.booter.ProviderFactory$ProviderProxy.invoke(ProviderFactory.java:165)
> *
> * at
> org.apache.maven.surefire.booter.ProviderFactory.invokeProvider(ProviderFactory.java:85)
> *
> * at
> org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:115)
> *
> * at
> org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:75)*
>
> --
> You received this message because you are subscribed to the Google Groups
> "Maven Android Developers" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to maven-android-deve...@googlegroups.com.
> For more options, visit https://groups.google.com/groups/opt_out.
>
>
>

Peter Miklosko

unread,
May 3, 2013, 4:42:13 PM5/3/13
to maven-androi...@googlegroups.com
Hi Manfred, it is not instrumentation, but "app" JUnit test failing and both "core" and "app" module are signed with same keystore and credentials.
Looks like tests will have to be skipped

Manfred Moser

unread,
May 6, 2013, 1:19:26 PM5/6/13
to maven-androi...@googlegroups.com
Thats seems weird.. maybe you are signing too early (before test..)

Peter Miklosko

unread,
May 6, 2013, 2:10:20 PM5/6/13
to maven-androi...@googlegroups.com
I based my signing on what you have in android maven samples. And it will go test first module, sign first module, test 2nd module (crashes because 1st signed) and then second should get signed. 

Manfred Moser

unread,
May 6, 2013, 2:22:40 PM5/6/13
to maven-androi...@googlegroups.com
So you have cross module test dependencies?

Peter Miklosko

unread,
May 6, 2013, 3:25:11 PM5/6/13
to maven-androi...@googlegroups.com
"app" module dependent on "core", where core is tested and signed first. The object in question creating issues is interface of "core" module use in test of "app" module.
Reply all
Reply to author
Forward
0 new messages