I’m working on a patch for Maven Release. Now Brett asked me to write an integration test, to prove I’m actually fixing something.
The project uses Maven Verifier, which runs a pom and then lets you test whether it did the right thing or not by checking the build log.
Check, if a file has a string in it
I copied this java-code (verify.bsh) from a similar integration test. It reads the build.log and checks if it contains some string.
import java.io.*; import java.util.*; import java.util.regex.*; try { File buildLog = new File( basedir, "build.log" ); System.out.println( "Checking logs.." ); StringBuffer data = new StringBuffer( 1024 ); BufferedReader reader = new BufferedReader( new FileReader( buildLog ) ); char[] buf = new char[1024]; int numRead = 0; while ( ( numRead = reader.read( buf ) ) != -1 ) { String readData = String.valueOf( buf, 0, numRead ); data.append( readData ); buf = new char[1024]; } reader.close(); String contents = data.toString(); String expected = "Executing goals 'clean verify' with arguments '-P profile-in-parent,it-repo'"; if( contents.indexOf( expected ) != -1 ) { return true; } } catch( Throwable t ) { t.printStackTrace(); return false; } System.out.println( "FAILED!" ); return false;
I now replaced this with following groovy code (verify.groovy):
expected = "[INFO] Executing goals 'clean verify' with arguments '-P it-repo,profile-in-parent'" println "Expects \"$expected\" in build.log" println "Checking logs..." found = new File(basedir, "build.log" ) .text .contains(expected) println found ? "GOOD!" : "FAILED!" return found
Happy coding!
