Re: Invoker vs. Verifier?

2007-12-13 Thread John Casey


On Dec 12, 2007, at 9:47 PM, Dan Fabulich wrote:

I tweak the test to add a MAVEN_OPTS environment variable,  
including the -Xrunjdwp string.  (It would be easy to add some  
sugar to Verifier and/or Invoker to make this easier; I didn't want  
to go fooling around with the Verifier, so I just copied and pasted  
out of my notes when I needed this.)


Do you have an actual example of this that I can look at?

As for the rest, I'll be interested to see what you come up with. I  
definitely agree that this Tower of Babel approach to things that we  
have in place now isn't helpful. I'm still not completely convinced  
that it's effective to do all of this through the IDE (yet), but I'm  
definitely willing to see an example of how it can be improved, as  
long as this doesn't mean compromising readability or debug-ability  
of headless build logs, as in the case of a test failing on the CI  
server, but not on my localhost.




---
John Casey
Committer and PMC Member, Apache Maven
mail: jdcasey at commonjava dot org
blog: http://www.ejlife.net/blogs/john
rss: http://feeds.feedburner.com/ejlife/john




Re: Invoker vs. Verifier?

2007-12-13 Thread Dan Fabulich

John Casey wrote:



On Dec 12, 2007, at 9:47 PM, Dan Fabulich wrote:

I tweak the test to add a MAVEN_OPTS environment variable, including the 
-Xrunjdwp string.  (It would be easy to add some sugar to Verifier and/or 
Invoker to make this easier; I didn't want to go fooling around with the 
Verifier, so I just copied and pasted out of my notes when I needed this.)


Do you have an actual example of this that I can look at?


In Eclipse/IDEA you can launch the test and modify the test configuration 
to include different environment variables; it's all GUI and hard to 
provide an example.


However, you can also do it by modifying the code of the test like this:

Verifier verifier = new Verifier( testDir.getAbsolutePath() );
HashMap envVars = new HashMap();
envVars.put( MAVEN_OPTS, -Xdebug 
-Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8001 -Xnoagent -Djava.compiler=NONE 
);
verifier.executeGoal( test , envVars );
verifier.verifyErrorFreeLog();
verifier.resetStreams();

-Dan

-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Re: Invoker vs. Verifier?

2007-12-12 Thread olivier lamy
Hi,
IMHO, don't use maven-embedder.
Because for a plugin with a required maven version = 2.0.6, tests with
embedder will failed.
Look at the jar plugin all tests has been migrated to maven-invoker-plugin
due to this.

--
Olivier

2007/12/12, Johan Kindgren [EMAIL PROTECTED]:

 I created a few integration-tests for the jar-plugin using the Maven
 Embedder as described in
 http://maven.apache.org/developers/committer-testing-plugins.html
 under both maven-it-plugin and maven-plugin-test-plugin (I didn't use
 any testing plugins, just the install-plugin). Add the Embedder to
 your list of testing utilities.

 I think a lot of things could be improved in the testing strategies.
 The bugs that I fixed in the jar-plugin took me less than an hour to
 complete, but creating the testcases to me about three days before I
 finally found the above mentioned page.

 Maybe I've missunderstood something completely, but as far as I
 understand some tests are auctually testing the result from the
 previous build?

 /Johan

 2007/12/12, Brian E. Fox [EMAIL PROTECTED]:
  You forgot the maven-plugin-testing-harness ;-)
 
 
 
  -Original Message-
  From: Dan Fabulich [mailto:[EMAIL PROTECTED]
  Sent: Tuesday, December 11, 2007 9:07 PM
  To: Maven Developers List
  Subject: Re: Invoker vs. Verifier?
 
  John Casey wrote:
 
   What you're seeing as overlap is a mixture of concerns in the invoker
   plugin. The verifications beanshell really needs to be migrated out to
 
   some sort of proper integration-testing plugin (or, even better, a
   plugin that unites invoker and verifier under a common
   configuration...then extend the verifier with the invoker's beanshell
   functionality). Regardless, the invoker plugin can be used for any
  sort
   of scenario where you need to fork a new maven process. I've
  personally
   used it to proxy secondary builds in some sticky client use cases. You
 
   don't have to use the beanshell script to verify the build, it's just
  an
   [admittedly confusing] option.
 
  As I've remarked before, I find it weird that various Maven developers
  have gone and written _plugins_ to do Maven integration testing.
 
  Integration tests are just tests; we know how to write/run tests using
  real test frameworks like JUnit and TestNG.  Those frameworks are pretty
 
  cool; you can do stuff like rerun failures-only, graph results over
  time,
  write data-driven tests, etc.  You can even use them to write tests in
  scripting languages like Groovy, BeanShell, etc.  All that AND you get
  excellent IDE integration.
 
  More generally, while I certainly see the value of a
  maven-invoker-plugin,
  I don't expect that you'd want that to be the normal way people would
  write Maven integration tests.
 
  Right now there are four things: maven-verifier, maven-verifier-plugin
  (no
  relation!), maven-invoker, and maven-invoker-plugin.
 
  I think I'd like to advocate ripping out the bulk of maven-verifier and
  make it depend entirely on maven-invoker.  Since maven-verifier is so
  confusingly named, I think I'd want to take the good bits out and put
  them
  in maven-integration-test-helper (which is what maven-verifier really
  is,
  anyway).
 
  More controversially (?) I'd like to deprecate the idea of writing
  *tests*
  using the maven-invoker-plugin, instead preferring to write them in Java
 
  (or BeanShell, I'm easy!) running them using a real test framework.
  maven-invoker-plugin should still be used for spawning sub-builds in
  those
  delightful cases where that's necessary.
 
  Thoughts?
 
  -Dan
 
  -
  To unsubscribe, e-mail: [EMAIL PROTECTED]
  For additional commands, e-mail: [EMAIL PROTECTED]
 
 
  -
  To unsubscribe, e-mail: [EMAIL PROTECTED]
  For additional commands, e-mail: [EMAIL PROTECTED]
 
 


 --
 
 Johan Kindgren
 Acrend AB
 Phone: +46 (0) 733-58 36 60
 E-mail: [EMAIL PROTECTED]
 www.acrend.se

 -
 To unsubscribe, e-mail: [EMAIL PROTECTED]
 For additional commands, e-mail: [EMAIL PROTECTED]




Re: Invoker vs. Verifier?

2007-12-12 Thread Mauro Talevi

Dan Fabulich wrote:

John Casey wrote:

What you're seeing as overlap is a mixture of concerns in the invoker 
plugin. The verifications beanshell really needs to be migrated out to 
some sort of proper integration-testing plugin (or, even better, a 
plugin that unites invoker and verifier under a common 
configuration...then extend the verifier with the invoker's beanshell 
functionality). Regardless, the invoker plugin can be used for any 
sort of scenario where you need to fork a new maven process. I've 
personally used it to proxy secondary builds in some sticky client use 
cases. You don't have to use the beanshell script to verify the build, 
it's just an [admittedly confusing] option.


As I've remarked before, I find it weird that various Maven developers 
have gone and written _plugins_ to do Maven integration testing.


Integration tests are just tests; we know how to write/run tests using 
real test frameworks like JUnit and TestNG.  Those frameworks are pretty 
cool; you can do stuff like rerun failures-only, graph results over 
time, write data-driven tests, etc.  You can even use them to write 
tests in scripting languages like Groovy, BeanShell, etc.  All that AND 
you get excellent IDE integration.


More generally, while I certainly see the value of a 
maven-invoker-plugin, I don't expect that you'd want that to be the 
normal way people would write Maven integration tests.


Right now there are four things: maven-verifier, maven-verifier-plugin 
(no relation!), maven-invoker, and maven-invoker-plugin.


I think I'd like to advocate ripping out the bulk of maven-verifier and 
make it depend entirely on maven-invoker.  Since maven-verifier is so 
confusingly named, I think I'd want to take the good bits out and put 
them in maven-integration-test-helper (which is what maven-verifier 
really is, anyway).


More controversially (?) I'd like to deprecate the idea of writing 
*tests* using the maven-invoker-plugin, instead preferring to write them 
in Java (or BeanShell, I'm easy!) running them using a real test 
framework. maven-invoker-plugin should still be used for spawning 
sub-builds in those delightful cases where that's necessary.


Thoughts?


Dan,

I agree with you - integration tests would benefit from having a more 
unified approach, just like unit tests are run by surefire.   It should 
support different languages, Java and scripting, and different runners.


I would still have a different plugin for ITs than for unit tests, as 
they typically are run with different usecases, and I fear that surefire 
would get overloaded.


Cheers


-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Re: Invoker vs. Verifier?

2007-12-12 Thread John Casey
First things first. maven-invoker and maven-invoker-plugin are not  
separate things. The maven-invoker-plugin uses maven-invoker, but  
maven-invoker is meant to be a reusable library, not just a plugin.  
Aside from this, there is actually a good reason for running  
integration tests using maven and maven plugins. Many users can  
submit stripped-down project builds that exhibit a certain error;  
fewer would be able (or willing) to submit the same failure in the  
form of a junit test. A failing build should be able to be  
incorporated directly into the test suite, and if it makes sense,  
later be split into lower-level junit tests to check the behavior of  
a certain component. JUnit is best suited to unit tests, as its name  
suggests. For integration testing, where you actually need to  
integrate the container (Maven, I mean) with a suite of plugins, IMO  
it makes much more sense to provide the flexibility of executing  
maven as a separate process (or embedded, this option simply hasn't  
been developed for the invoker plugin yet...mainly because the 2.0.x  
embedder sucks). This makes it trivial to test command-line options,  
different versions of maven, or any number of configurations that are  
somewhat external to Maven's core apis, without having to develop and  
constantly verify the validity of testing harnesses. The maven- 
verifier (not the verifier plugin, I know it's confusing) gets away  
from this, in that it requires a project directory in src/test/ 
resources AND a JUnit test case to orchestrate the test. IMO, this  
makes it extremely difficult to run a single core integration test  
from the command line, so you can capture logs for offline  
examination, for instance.


Again, the idea behind test builds driven by the invoker is to  
provide a test suite with a low barrier to entry, and with all the  
potential for configuration present in the main user's experience  
with Maven. It's not a panacea, but neither is writing JUnit tests  
that orchestrate and verify test-build resources in a separate  
directory structure, which can really only be run properly from the  
JUnit api.


Another thing to keep in mind is that you have two different  
integration-testing profiles to deal with, and they are distinct:


1. testing the core features built into maven
2. testing the functionality of a single plugin in different situations

I'm not at all sure that it makes sense to try and merge these two  
scenarios behind a single api...what would it give you? I do think  
the verifier used in core-integration-tests should be merged with  
some other, more general verification mechanism. However, it's also  
critical to allow a project's POM to remain unmodified for the  
purposes of orchestrating or verifying the build. Modifying the POM  
introduces the potential to taint the test results, and can limit  
flexibility in terms of verification. For instance, if you need to  
simply scan the console output for a particular message, it becomes  
much more difficult to do this if you try to do it while the build is  
still running.


Just to be clear, I don't think writing invoker-plugin-driven test  
builds is a good substitute for writing unit tests. Unit tests will  
cover the code far more completely in most cases, and as you pointed  
out, can be graphed and rendered into all sorts of shiny reports much  
more readily.


Also, I'd like to know how you would suggest writing integration  
tests using junit without the invoker functionality (the real meat of  
the invoker plugin) and without access to the maven 2.1 embedder  
(it's not available in any real way in 2.0.x).


I guess what I'm wondering is how these tests will really look, once  
you've taken out the verifier and eliminated the use of the invoker  
(for the most part, at least)? You say JUnit or even Beanshell, but  
those are just technologies; how will you use them?


-john

On Dec 11, 2007, at 10:06 PM, Dan Fabulich wrote:


John Casey wrote:

What you're seeing as overlap is a mixture of concerns in the  
invoker plugin. The verifications beanshell really needs to be  
migrated out to some sort of proper integration-testing plugin  
(or, even better, a plugin that unites invoker and verifier under  
a common configuration...then extend the verifier with the  
invoker's beanshell functionality). Regardless, the invoker plugin  
can be used for any sort of scenario where you need to fork a new  
maven process. I've personally used it to proxy secondary builds  
in some sticky client use cases. You don't have to use the  
beanshell script to verify the build, it's just an [admittedly  
confusing] option.


As I've remarked before, I find it weird that various Maven  
developers have gone and written _plugins_ to do Maven integration  
testing.


Integration tests are just tests; we know how to write/run tests  
using real test frameworks like JUnit and TestNG.  Those frameworks  
are pretty cool; you can do stuff like 

Re: Invoker vs. Verifier?

2007-12-12 Thread Dan Fabulich

John Casey wrote:

First things first. maven-invoker and maven-invoker-plugin are not 
separate things. The maven-invoker-plugin uses maven-invoker, but 
maven-invoker is meant to be a reusable library, not just a plugin.


I find this remark quite confusing... if one is a library, and one is a 
plugin, and they have two separate POMs, one for the library JAR 
(maven-invoker) and one for the plugin (maven-invoker-plugin) doesn't 
that make them two things that share code?


Actually, I think our disagreement is mostly a misunderstanding, and I 
think it mostly turns on this point of whether maven-invoker and 
maven-invoker plugin are two things.


In particular, I said that we should not use maven-invoker-plugin for 
integration testing.  But I didn't mean that we shouldn't use 
maven-invoker!


e.g. when you said:
Also, I'd like to know how you would suggest writing integration tests 
using junit without the invoker functionality (the real meat of the 
invoker plugin) and without access to the maven 2.1 embedder (it's not 
available in any real way in 2.0.x).


I never meant to suggest that we'd write integration tests without the 
invoker.  I meant that maven-verifier should *use* maven-invoker (the 
library) and should continue to execute a separate instance of Maven.


We're in total agreement that integration testing should happen by running 
real Maven projects and executing a real Maven to make that happen, for 
all the reasons you laid out.


[I also argued that we should rename maven-verifier, because its name is 
confusing.]


With that said, I think there is still a point of actual disagreement 
lurking here which I'd like to flush out... namely whether it's best to 
write your tests in Java/JUnit/TestNG or whether you'd want to 
have/use/write a test-runner plugin (beyond Surefire that just runs 
JUnit/TestNG) to handle these tests.


More generally, I think plugin integration test writers should write their 
tests in the maven-verifier style (using a maven invocation library [e.g. 
maven-invoker] under a JUnit test), and not using maven-invoker-plugin.


I think that because both tests of Maven Core and integration tests of a 
plugin call for doing the same thing: invoking Maven and asserting on the 
results.



JUnit is best suited to unit tests, as its name suggests.


True, though JUnit is acceptable for integration tests too, (especially 
JUnit 4) and TestNG is great for both.  The two of them together beat the 
pants off of almost everything else in Java land.


The maven-verifier (not the verifier plugin, I know it's confusing) gets 
away from this, in that it requires a project directory in 
src/test/resources AND a JUnit test case to orchestrate the test. IMO, 
this makes it extremely difficult to run a single core integration test 
from the command line, so you can capture logs for offline examination, 
for instance.


With that, I definitely disagree.  Can you say more about what's difficult 
about running a single test?


Certainly it's trivial to run a single JUnit test from the command line 
using Surefire: mvn test -Dtest=FooTest does the job nicely; I use that 
all the time.  And it's REALLY easy to run a single test from 
Eclipse/IDEA.


Maybe you meant that you think maven-verifier tests are harder to WRITE 
than writing goals.txt + beanshell tests?  (I disagree with that, too, but 
it's worth clarifying what we're talking about.)


Again, the idea behind test builds driven by the invoker is to provide a 
test suite with a low barrier to entry, and with all the potential for 
configuration present in the main user's experience with Maven. It's not 
a panacea, but neither is writing JUnit tests that orchestrate and 
verify test-build resources in a separate directory structure, which can 
really only be run properly from the JUnit api.


You call it the JUnit API like it's this big hassle to run JUnit 
tests... but it's really easy to run JUnit tests, both from the command 
line and from an IDE; certainly 99% of our users know how to do it, and I 
hope most of them do it frequently! :-)


Furthermore, you seem to imply here that you can't just cd into 
src/test/resources and run the projects there by hand directly... but of 
course you can do that when you want/need to.  I often do that when I'm 
first setting up an integration test, before I've written the JUnit 
assertions for that test.  Occasionally I do that when a test fails just 
so I can make sure I can reproduce manually what the test is doing 
automatically.


However, it's also critical to allow a project's POM to remain 
unmodified for the purposes of orchestrating or verifying the build. 
Modifying the POM introduces the potential to taint the test results, 
and can limit flexibility in terms of verification. For instance, if you 
need to simply scan the console output for a particular message, it 
becomes much more difficult to do this if you try to do it while the 
build is still running.


I don't understand 

Re: Invoker vs. Verifier?

2007-12-12 Thread John Casey


On Dec 12, 2007, at 4:18 PM, Dan Fabulich wrote:


John Casey wrote:

First things first. maven-invoker and maven-invoker-plugin are not  
separate things. The maven-invoker-plugin uses maven-invoker, but  
maven-invoker is meant to be a reusable library, not just a plugin.


I find this remark quite confusing... if one is a library, and one  
is a plugin, and they have two separate POMs, one for the library  
JAR (maven-invoker) and one for the plugin (maven-invoker- 
plugin) doesn't that make them two things that share code?


Actually, I think our disagreement is mostly a misunderstanding,  
and I think it mostly turns on this point of whether maven-invoker  
and maven-invoker plugin are two things.


In particular, I said that we should not use maven-invoker-plugin  
for integration testing.  But I didn't mean that we shouldn't use  
maven-invoker!


To me, shared code implies some sort of mutual dependency on  
something, whether that's cyclical or dependent on the same third  
library. Sorry for the confusion. Having said that, I definitely  
disagree with the approach you outline below. See my comments inline.




The maven-verifier (not the verifier plugin, I know it's  
confusing) gets away from this, in that it requires a project  
directory in src/test/resources AND a JUnit test case to  
orchestrate the test. IMO, this makes it extremely difficult to  
run a single core integration test from the command line, so you  
can capture logs for offline examination, for instance.


With that, I definitely disagree.  Can you say more about what's  
difficult about running a single test?


Certainly it's trivial to run a single JUnit test from the command  
line using Surefire: mvn test -Dtest=FooTest does the job nicely;  
I use that all the time.  And it's REALLY easy to run a single test  
from Eclipse/IDEA.


Maybe you meant that you think maven-verifier tests are harder to  
WRITE than writing goals.txt + beanshell tests?  (I disagree with  
that, too, but it's worth clarifying what we're talking about.)


Not at all; I mean running the test. In order to run one of these  
tests (which are orchestrated by something akin to the maven-verifier  
from a JUnit or other java-driven test case), you must run JUnit or  
whatever, so you can be sure you have the same options enabled,  
environment present, and assertions tested as take place in the test- 
case code. For instance, simply cd into src/test/resources/it0105 in  
core-integration-tests, and see if you can figure out what it tests,  
and how. You can't, not without looking at the JUnit code that drives  
it, to determine what the criteria for success is, and which flags  
and goals/lifecycle phases to invoke. If I needed to re-run this test  
to actually diagnose a failure (which is the whole point here), I  
have to dig around in source code that's completely outside the  
it0105 directory, then come back and replicate that maven command,  
with the addition of the -X flag and a pipe to the tee command so I  
can analyze the output outside of the build.


This is much harder than it needs to be, and the same is true for  
plugin integration tests.




Again, the idea behind test builds driven by the invoker is to  
provide a test suite with a low barrier to entry, and with all the  
potential for configuration present in the main user's experience  
with Maven. It's not a panacea, but neither is writing JUnit tests  
that orchestrate and verify test-build resources in a separate  
directory structure, which can really only be run properly from  
the JUnit api.


You call it the JUnit API like it's this big hassle to run JUnit  
tests... but it's really easy to run JUnit tests, both from the  
command line and from an IDE; certainly 99% of our users know how  
to do it, and I hope most of them do it frequently! :-)


Furthermore, you seem to imply here that you can't just cd into src/ 
test/resources and run the projects there by hand directly... but  
of course you can do that when you want/need to.  I often do that  
when I'm first setting up an integration test, before I've written  
the JUnit assertions for that test.  Occasionally I do that when a  
test fails just so I can make sure I can reproduce manually what  
the test is doing automatically.


Again, it's not just about running the tests, but being able to  
actually debug a failing test effectively. Tests work best when  
they're easy to understand and work with, and when a maven core- 
integration-test fails, you can definitely see how this setup falls  
down. Running and re-running the same test without change from the  
IDE isn't useful for debugging, and running the invoker from this  
kind of code with the remote debugging enabled is virtually  
impossible...incidentally, if you've figured out how to do it, I'd be  
interested in learning.





However, it's also critical to allow a project's POM to remain  
unmodified for the purposes of orchestrating or verifying the  

Re: Invoker vs. Verifier?

2007-12-12 Thread Dan Fabulich

John Casey wrote:

Not at all; I mean running the test. In order to run one of these tests 
(which are orchestrated by something akin to the maven-verifier from a JUnit 
or other java-driven test case), you must run JUnit or whatever, so you can 
be sure you have the same options enabled, environment present, and 
assertions tested as take place in the test-case code.


I stand by my claim that running JUnit is very easy.

For instance, simply cd into src/test/resources/it0105 in 
core-integration-tests, and see if you can figure out what it tests, and 
how. You can't, not without looking at the JUnit code that drives it, to 
determine what the criteria for success is, and which flags and 
goals/lifecycle phases to invoke.


I have two remarks about this.  1) Don't do it that way, and 2) We can 
compromise on the directory structure.


1) Don't do it that way: I think this is a very weird way to approach the 
tests that only seems natural because people are used to doing it that 
way.  I'll try to explain what I mean with a hypothetical story.


Suppose you were testing some XML serializer/deserializer, and you had a 
bunch of JUnit tests checked into src/test/java and a bunch of XML files 
checked into src/test/resources.


If you're going to go browsing around to see what kinds of tests are 
available, where are you going to go first?  I'd argue that the most 
natural thing to do is to go look at the tests themselves in 
src/test/java.  The XML files aren't tests... they're just test RESOURCES.


Looking at the tests is a good idea for another reason also: the tests can 
(must) have some reference in their code to the resources they're using, 
telling you (and the JVM!) where to find the resources.  The resources, on 
the other hand, don't have to (and typically won't) have a reference to 
the tests that will run them.


Similarly, Maven projects aren't tests.  They may be test resources. 
It's weird to go browsing around the test resources trying to figure out 
what tests might run them.  Instead, you should be looking at the tests 
themselves.  Indeed, looking at the tests it's very easy to see what 
resources they're using.


Even in the maven-invoker-plugin case, you shouldn't go digging around in 
the project-under-test *first*.  First you should look at the 
commands/assertions in the POM; see what it's doing.  THEN go look at the 
project-under-test.  It's the same thing: look at the test first, not the 
resource.


2) We can compromise the directory structure: Despite those remarks, sure, 
it would be nicer if you could have your JUnit/TestNG integration test in 
the same directory as its own test resources.


That's true of all JUnit/TestNG tests by the way, not just Maven 
integration tests.  The Maven standard is to keep test resources in 
src/test/resources, separate from the tests in src/test/java.  But it 
doesn't have to be that way... lots of people put their resources in the 
same directory as the classes that use them.


You could, if you wished, just put them all together into one directory, 
claiming that this directory is both the testSourceDirectory AND the 
testResource directory. (I think you'd want some exclusion/inclusion rules 
to keep everything straight, but that's not so bad.)


With that said, I think that one should resist the temptation to do this 
in all but the simplest cases.  What about integration tests that test 
multiple projects?  You can't put the same test in multiple directories. 
Or what about projects that are used by multiple integration tests?  The 
relationship of tests to resources can be many-to-many.


I claim that the clearest thing is to follow the Maven standard, even if 
it's sub-optimal in this case: keep your resources in one directory and 
have your tests refer to them.


Ultimately, this part of the argument is about which directory structure 
is clearest.  As we know, arguments about clarity of directory structure 
can be highly controversial, but are never conclusive and don't amount to 
very much.  Nobody wins arguments about directory structure; everyone's 
a loser.


If you buy my argument that it's good to write tests in a real test 
framework in a normal language, that writing tests in a POM is not ideal, 
then I'm pretty sure we can deal with any remaining concerns about 
directory structure.  I'm easy! :-)


Again, it's not just about running the tests, but being able to actually 
debug a failing test effectively. Tests work best when they're easy to 
understand and work with, and when a maven core-integration-test fails, 
you can definitely see how this setup falls down. Running and re-running 
the same test without change from the IDE isn't useful for debugging, 
and running the invoker from this kind of code with the remote debugging 
enabled is virtually impossible...incidentally, if you've figured out 
how to do it, I'd be interested in learning.


I wrote a lot of new integration tests in the maven-verifier style for 
Surefire, 

Re: Invoker vs. Verifier?

2007-12-11 Thread John Casey
What you're seeing as overlap is a mixture of concerns in the invoker  
plugin. The verifications beanshell really needs to be migrated out  
to some sort of proper integration-testing plugin (or, even better, a  
plugin that unites invoker and verifier under a common  
configuration...then extend the verifier with the invoker's beanshell  
functionality). Regardless, the invoker plugin can be used for any  
sort of scenario where you need to fork a new maven process. I've  
personally used it to proxy secondary builds in some sticky client  
use cases. You don't have to use the beanshell script to verify the  
build, it's just an [admittedly confusing] option.


-john

On Dec 11, 2007, at 6:28 PM, Dan Fabulich wrote:



Forgive me if I'm picking at a sore spot, but can someone help me  
understand the difference/overlap between maven-invoker and maven- 
verifier?


As I understand it, they both do roughly the same thing, except one  
of them is a Maven plugin where you write your test in a goals.txt  
file + beanshell, and the other is meant to be run programmatically  
from a JUnit test.  Is that essentially correct?


(Whereas maven-verifier-plugin is another beast entirely, simply  
checking for the presence/absence of certian files.)


Am I right in thinking that, despite their substantial overlap,  
maven-verifier and maven-invoker share no code?


-Dan


-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



---
John Casey
Committer and PMC Member, Apache Maven
mail: jdcasey at commonjava dot org
blog: http://www.ejlife.net/blogs/john
rss: http://feeds.feedburner.com/ejlife/john




Re: Invoker vs. Verifier?

2007-12-11 Thread Dan Fabulich

John Casey wrote:

What you're seeing as overlap is a mixture of concerns in the invoker 
plugin. The verifications beanshell really needs to be migrated out to 
some sort of proper integration-testing plugin (or, even better, a 
plugin that unites invoker and verifier under a common 
configuration...then extend the verifier with the invoker's beanshell 
functionality). Regardless, the invoker plugin can be used for any sort 
of scenario where you need to fork a new maven process. I've personally 
used it to proxy secondary builds in some sticky client use cases. You 
don't have to use the beanshell script to verify the build, it's just an 
[admittedly confusing] option.


As I've remarked before, I find it weird that various Maven developers 
have gone and written _plugins_ to do Maven integration testing.


Integration tests are just tests; we know how to write/run tests using 
real test frameworks like JUnit and TestNG.  Those frameworks are pretty 
cool; you can do stuff like rerun failures-only, graph results over time, 
write data-driven tests, etc.  You can even use them to write tests in 
scripting languages like Groovy, BeanShell, etc.  All that AND you get 
excellent IDE integration.


More generally, while I certainly see the value of a maven-invoker-plugin, 
I don't expect that you'd want that to be the normal way people would 
write Maven integration tests.


Right now there are four things: maven-verifier, maven-verifier-plugin (no 
relation!), maven-invoker, and maven-invoker-plugin.


I think I'd like to advocate ripping out the bulk of maven-verifier and 
make it depend entirely on maven-invoker.  Since maven-verifier is so 
confusingly named, I think I'd want to take the good bits out and put them 
in maven-integration-test-helper (which is what maven-verifier really is, 
anyway).


More controversially (?) I'd like to deprecate the idea of writing *tests* 
using the maven-invoker-plugin, instead preferring to write them in Java 
(or BeanShell, I'm easy!) running them using a real test framework. 
maven-invoker-plugin should still be used for spawning sub-builds in those 
delightful cases where that's necessary.


Thoughts?

-Dan

-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



RE: Invoker vs. Verifier?

2007-12-11 Thread Brian E. Fox
You forgot the maven-plugin-testing-harness ;-)



-Original Message-
From: Dan Fabulich [mailto:[EMAIL PROTECTED] 
Sent: Tuesday, December 11, 2007 9:07 PM
To: Maven Developers List
Subject: Re: Invoker vs. Verifier?

John Casey wrote:

 What you're seeing as overlap is a mixture of concerns in the invoker 
 plugin. The verifications beanshell really needs to be migrated out to

 some sort of proper integration-testing plugin (or, even better, a 
 plugin that unites invoker and verifier under a common 
 configuration...then extend the verifier with the invoker's beanshell 
 functionality). Regardless, the invoker plugin can be used for any
sort 
 of scenario where you need to fork a new maven process. I've
personally 
 used it to proxy secondary builds in some sticky client use cases. You

 don't have to use the beanshell script to verify the build, it's just
an 
 [admittedly confusing] option.

As I've remarked before, I find it weird that various Maven developers 
have gone and written _plugins_ to do Maven integration testing.

Integration tests are just tests; we know how to write/run tests using 
real test frameworks like JUnit and TestNG.  Those frameworks are pretty

cool; you can do stuff like rerun failures-only, graph results over
time, 
write data-driven tests, etc.  You can even use them to write tests in 
scripting languages like Groovy, BeanShell, etc.  All that AND you get 
excellent IDE integration.

More generally, while I certainly see the value of a
maven-invoker-plugin, 
I don't expect that you'd want that to be the normal way people would 
write Maven integration tests.

Right now there are four things: maven-verifier, maven-verifier-plugin
(no 
relation!), maven-invoker, and maven-invoker-plugin.

I think I'd like to advocate ripping out the bulk of maven-verifier and 
make it depend entirely on maven-invoker.  Since maven-verifier is so 
confusingly named, I think I'd want to take the good bits out and put
them 
in maven-integration-test-helper (which is what maven-verifier really
is, 
anyway).

More controversially (?) I'd like to deprecate the idea of writing
*tests* 
using the maven-invoker-plugin, instead preferring to write them in Java

(or BeanShell, I'm easy!) running them using a real test framework. 
maven-invoker-plugin should still be used for spawning sub-builds in
those 
delightful cases where that's necessary.

Thoughts?

-Dan

-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]


-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Re: Invoker vs. Verifier?

2007-12-11 Thread Johan Kindgren
I created a few integration-tests for the jar-plugin using the Maven
Embedder as described in
http://maven.apache.org/developers/committer-testing-plugins.html
under both maven-it-plugin and maven-plugin-test-plugin (I didn't use
any testing plugins, just the install-plugin). Add the Embedder to
your list of testing utilities.

I think a lot of things could be improved in the testing strategies.
The bugs that I fixed in the jar-plugin took me less than an hour to
complete, but creating the testcases to me about three days before I
finally found the above mentioned page.

Maybe I've missunderstood something completely, but as far as I
understand some tests are auctually testing the result from the
previous build?

/Johan

2007/12/12, Brian E. Fox [EMAIL PROTECTED]:
 You forgot the maven-plugin-testing-harness ;-)



 -Original Message-
 From: Dan Fabulich [mailto:[EMAIL PROTECTED]
 Sent: Tuesday, December 11, 2007 9:07 PM
 To: Maven Developers List
 Subject: Re: Invoker vs. Verifier?

 John Casey wrote:

  What you're seeing as overlap is a mixture of concerns in the invoker
  plugin. The verifications beanshell really needs to be migrated out to

  some sort of proper integration-testing plugin (or, even better, a
  plugin that unites invoker and verifier under a common
  configuration...then extend the verifier with the invoker's beanshell
  functionality). Regardless, the invoker plugin can be used for any
 sort
  of scenario where you need to fork a new maven process. I've
 personally
  used it to proxy secondary builds in some sticky client use cases. You

  don't have to use the beanshell script to verify the build, it's just
 an
  [admittedly confusing] option.

 As I've remarked before, I find it weird that various Maven developers
 have gone and written _plugins_ to do Maven integration testing.

 Integration tests are just tests; we know how to write/run tests using
 real test frameworks like JUnit and TestNG.  Those frameworks are pretty

 cool; you can do stuff like rerun failures-only, graph results over
 time,
 write data-driven tests, etc.  You can even use them to write tests in
 scripting languages like Groovy, BeanShell, etc.  All that AND you get
 excellent IDE integration.

 More generally, while I certainly see the value of a
 maven-invoker-plugin,
 I don't expect that you'd want that to be the normal way people would
 write Maven integration tests.

 Right now there are four things: maven-verifier, maven-verifier-plugin
 (no
 relation!), maven-invoker, and maven-invoker-plugin.

 I think I'd like to advocate ripping out the bulk of maven-verifier and
 make it depend entirely on maven-invoker.  Since maven-verifier is so
 confusingly named, I think I'd want to take the good bits out and put
 them
 in maven-integration-test-helper (which is what maven-verifier really
 is,
 anyway).

 More controversially (?) I'd like to deprecate the idea of writing
 *tests*
 using the maven-invoker-plugin, instead preferring to write them in Java

 (or BeanShell, I'm easy!) running them using a real test framework.
 maven-invoker-plugin should still be used for spawning sub-builds in
 those
 delightful cases where that's necessary.

 Thoughts?

 -Dan

 -
 To unsubscribe, e-mail: [EMAIL PROTECTED]
 For additional commands, e-mail: [EMAIL PROTECTED]


 -
 To unsubscribe, e-mail: [EMAIL PROTECTED]
 For additional commands, e-mail: [EMAIL PROTECTED]




-- 

Johan Kindgren
Acrend AB
Phone: +46 (0) 733-58 36 60
E-mail: [EMAIL PROTECTED]
www.acrend.se

-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]