CDAP plugin test fails when using maven-failsafe-plugin

23 views
Skip to first unread message

Pavel Kocka

unread,
Oct 28, 2018, 8:38:15 AM10/28/18
to CDAP User
Hello all,
I've made a CDAP plugin with a test that is working fine in the IDE and when executed using maven-surefire-plugin with `mvn test` but the moment I try to convert it into an integration test and execute it with maven-failsafe-plugin it fails with the following error:

java.util.concurrent.ExecutionException: java.lang.IllegalArgumentException: No plugin of type transform and name MyCustomPlugin could be found for stage transform.

I get the same result with any plugin I tried to test with failsafe. Any idea what is causing this?

Used CDAP version is 4.3.4. A snippet of pom file included. 

Full stacktrace:

2018-10-27 20:57:50,004 - ERROR [main:c.c.c.g.h.AppLifecycleHttpHandler$1@413] - Deploy failure
java
.util.concurrent.ExecutionException: java.lang.IllegalArgumentException: No plugin of type transform and name MyCustomPlugin could be found for stage transform.
 at com
.google.common.util.concurrent.AbstractFuture$Sync.getValue(AbstractFuture.java:294) ~[guava-13.0.1.jar:na]
 at com
.google.common.util.concurrent.AbstractFuture$Sync.get(AbstractFuture.java:267) ~[guava-13.0.1.jar:na]
 at com
.google.common.util.concurrent.AbstractFuture.get(AbstractFuture.java:96) ~[guava-13.0.1.jar:na]
 at co
.cask.cdap.internal.app.deploy.pipeline.LocalArtifactLoaderStage.process(LocalArtifactLoaderStage.java:109) ~[na:na]
 at co
.cask.cdap.internal.app.deploy.pipeline.LocalArtifactLoaderStage.process(LocalArtifactLoaderStage.java:55) ~[na:na]
 at co
.cask.cdap.pipeline.AbstractStage.process(AbstractStage.java:52) ~[na:na]
 at co
.cask.cdap.internal.pipeline.SynchronousPipeline.execute(SynchronousPipeline.java:55) ~[na:na]
 at co
.cask.cdap.internal.app.deploy.LocalApplicationManager.deploy(LocalApplicationManager.java:137) ~[na:na]
 at co
.cask.cdap.internal.app.services.ApplicationLifecycleService.deployApp(ApplicationLifecycleService.java:690) ~[na:na]
 at co
.cask.cdap.internal.app.services.ApplicationLifecycleService.deployApp(ApplicationLifecycleService.java:492) ~[na:na]
 at co
.cask.cdap.gateway.handlers.AppLifecycleHttpHandler$1.onFinish(AppLifecycleHttpHandler.java:389) ~[na:na]
 at co
.cask.cdap.common.http.AbstractBodyConsumer.finished(AbstractBodyConsumer.java:65) [na:na]
 at co
.cask.cdap.internal.AppFabricClient.createApplication(AppFabricClient.java:527) [na:na]
 at co
.cask.cdap.internal.AppFabricClient.deployApplication(AppFabricClient.java:511) [na:na]
 at co
.cask.cdap.test.UnitTestManager.deployApplication(UnitTestManager.java:201) [na:na]
 at co
.cask.cdap.test.TestBase.deployApplication(TestBase.java:646) [na:na]
 at com
.test.MyCustomPluginIT.testPlugin(MyCustomPlugin.java:119) [test-classes/:na]
 at sun
.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_181]
 at sun
.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_181]
 at sun
.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_181]
 at java
.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_181]
 at org
.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47) [junit-4.11.jar:na]
 at org
.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) [junit-4.11.jar:na]
 at org
.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44) [junit-4.11.jar:na]
 at org
.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17) [junit-4.11.jar:na]
 at org
.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26) [junit-4.11.jar:na]
 at org
.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27) [junit-4.11.jar:na]
 at org
.junit.runners.ParentRunner.runLeaf(ParentRunner.java:271) [junit-4.11.jar:na]
 at org
.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:70) [junit-4.11.jar:na]
 at org
.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50) [junit-4.11.jar:na]
 at org
.junit.runners.ParentRunner$3.run(ParentRunner.java:238) [junit-4.11.jar:na]
 at org
.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63) [junit-4.11.jar:na]
 at org
.junit.runners.ParentRunner.runChildren(ParentRunner.java:236) [junit-4.11.jar:na]
 at org
.junit.runners.ParentRunner.access$000(ParentRunner.java:53) [junit-4.11.jar:na]
 at org
.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229) [junit-4.11.jar:na]
 at org
.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26) [junit-4.11.jar:na]
 at org
.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27) [junit-4.11.jar:na]
 at org
.junit.rules.ExternalResource$1.evaluate(ExternalResource.java:48) [junit-4.11.jar:na]
 at org
.junit.rules.ExternalResource$1.evaluate(ExternalResource.java:48) [junit-4.11.jar:na]
 at org
.junit.rules.ExternalResource$1.evaluate(ExternalResource.java:48) [junit-4.11.jar:na]
 at org
.junit.rules.RunRules.evaluate(RunRules.java:20) [junit-4.11.jar:na]
 at org
.junit.runners.ParentRunner.run(ParentRunner.java:309) [junit-4.11.jar:na]
 at co
.cask.cdap.common.test.TestRunner.run(TestRunner.java:73) [cdap-common-4.3.4-tests.jar:na]
 at org
.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:365) [surefire-junit4-2.22.1.jar:2.22.1]
 at org
.apache.maven.surefire.junit4.JUnit4Provider.executeWithRerun(JUnit4Provider.java:273) [surefire-junit4-2.22.1.jar:2.22.1]
 at org
.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:238) [surefire-junit4-2.22.1.jar:2.22.1]
 at org
.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:159) [surefire-junit4-2.22.1.jar:2.22.1]
 at org
.apache.maven.surefire.booter.ForkedBooter.invokeProviderInSameClassLoader(ForkedBooter.java:384) [surefire-booter-2.22.1.jar:2.22.1]
 at org
.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:345) [surefire-booter-2.22.1.jar:2.22.1]
 at org
.apache.maven.surefire.booter.ForkedBooter.execute(ForkedBooter.java:126) [surefire-booter-2.22.1.jar:2.22.1]
 at org
.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:418) [surefire-booter-2.22.1.jar:2.22.1]
Caused by: java.lang.IllegalArgumentException: No plugin of type transform and name PresentationPlugin could be found for stage transform.
 at co
.cask.cdap.etl.spec.PipelineSpecGenerator.configurePlugin(PipelineSpecGenerator.java:332) ~[na:na]
 at co
.cask.cdap.etl.spec.PipelineSpecGenerator.configureStage(PipelineSpecGenerator.java:257) ~[na:na]
 at co
.cask.cdap.etl.spec.PipelineSpecGenerator.configureStages(PipelineSpecGenerator.java:147) ~[na:na]
 at co
.cask.cdap.etl.batch.BatchPipelineSpecGenerator.generateSpec(BatchPipelineSpecGenerator.java:56) ~[na:na]
 at co
.cask.cdap.etl.batch.BatchPipelineSpecGenerator.generateSpec(BatchPipelineSpecGenerator.java:34) ~[na:na]
 at co
.cask.cdap.datapipeline.DataPipelineApp.configure(DataPipelineApp.java:80) ~[na:na]
 at co
.cask.cdap.api.app.AbstractApplication.configure(AbstractApplication.java:65) ~[na:na]
 at co
.cask.cdap.internal.app.deploy.InMemoryConfigurator.getSpecJson(InMemoryConfigurator.java:160) ~[na:na]
 at co
.cask.cdap.internal.app.deploy.InMemoryConfigurator.createResponse(InMemoryConfigurator.java:126) ~[na:na]
 at co
.cask.cdap.internal.app.deploy.InMemoryConfigurator.config(InMemoryConfigurator.java:116) ~[na:na]
 at co
.cask.cdap.internal.app.deploy.pipeline.LocalArtifactLoaderStage.process(LocalArtifactLoaderStage.java:108) ~[na:na]
 
... 47 common frames omitted



Thanks,
Pavel



pom-snippet.xml

Albert Shau

unread,
Oct 29, 2018, 1:01:37 PM10/29/18
to cdap...@googlegroups.com
Hi Pavel,

I'm guessing it has to do with how the plugin jar gets created in the integration test (See https://issues.cask.co/browse/CDAP-3178). In order to work around this, you would have to explicitly tell CDAP what the plugin looks like, similar to what happens in https://github.com/caskdata/cdap/blob/develop/cdap-app-templates/cdap-etl/hydrator-test/src/main/java/co/cask/cdap/etl/mock/test/HydratorTestBase.java. Alternatively, you can just keep it as a unit test instead of using maven-failsafe-plugin.

Regards,
Albert

--
You received this message because you are subscribed to the Google Groups "CDAP User" group.
To unsubscribe from this group and stop receiving emails from it, send an email to cdap-user+...@googlegroups.com.
To post to this group, send email to cdap...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/cdap-user/7fd6e68f-fe75-42ea-b3de-362dc6794823%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Pavel Kocka

unread,
Oct 30, 2018, 3:41:52 AM10/30/18
to CDAP User
Hello Albert,
Thanks, I'll try experimenting with that a little bit more.
Reply all
Reply to author
Forward
0 new messages