These are my ext program variables:
ext {
skipIntegrationTests = 'false'
skipUnitTests = 'false'
localEnv = 'false'
xmakeEnv = 'false'
encoding = 'UTF-8'
integrationEnvDir = 'integration-env'
zapVersion = '2.12.0'
itsVersion = '0.0.17'
spotlessPhase = 'none'
depxmlcontent = null
extfiles = null
zapPort = null
jettyPort = null
}
I have a gradle task called reservePorts as follows:
task reservePorts(dependsOn: generateFioriPythonApi) {
doLast {
def zapPort = reservePort('zapDynPort')
def jettyPort = reservePort('jettyDynPort')
project.ext.zapPort = zapPort.toString()
project.ext.jettyPort = jettyPort.toString()
println "Reserved ports for zapDynPort: ${project.ext.zapPort} and jettyDynPort: ${project.ext.jettyPort}"
}
}
Which gives the following output:
Task :reservePorts Reserved ports for zapDynPort: 54772 and jettyDynPort: 54773
I have a task in gradle for running the Integration Test as follows:
task integrationTest(type: Test, dependsOn: downloadFioridastItsWar) {
System.setProperty("zap.port", "${project.ext.zapPort}")
System.setProperty("jetty.port", "${project.ext.jettyPort}")
ignoreFailures = true
testClassesDirs = sourceSets.integrationTest.output.classesDirs
classpath = sourceSets.integrationTest.runtimeClasspath
testLogging {
events 'PASSED', 'FAILED', 'SKIPPED'
}
}
When I print the value of System.getProperty("zap.port") in gradle I get value for zap.port as 54772 which is correct which means that the value for zap.port is getting set is System Property correctly.
But when i run the Integration Test it gives the foloowing error:
Task :integrationTest
org.zaproxy.zap.extension.fioriscanner.api.BasicAPIUsageIntegrationTest > classMethod FAILED java.lang.NumberFormatException at BasicAPIUsageIntegrationTest.java:22
org.zaproxy.zap.extension.fioriscanner.dynamic.DynamicAppsIntegrationTest > classMethod FAILED java.lang.NumberFormatException at DynamicAppsIntegrationTest.java:53
Now the BasicAPIUsageIntegrationTest.java class where this fails looks like this:
public class BasicAPIUsageIntegrationTest {
private static final ZAPHelper ZAP_HELPER = new ZAPHelper();
private static ClientApi zapClientApi = null;
@BeforeClass
public static void setUp() throws Exception {
System.out.println("Before BasicAPIUsageIntegrationTest");
zapClientApi = ZAP_HELPER.startZAP(true); //this is the line which gives error
}
And the ZAPHelper.java class which is called above is the source of the error which actually calls the system.getProperty("zap.port") as follows:
public class ZAPHelper {
public ClientApi startZAP(boolean asDaemon) throws Exception {
if (zapProcess != null) {
stopZAPProcess();
}
zapProcess =
BOOTSTRAP_HELPER.startZAP(
new String[] {
// "-Xdebug",
// "-Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005"
},
new ZAPStartOptions(
asDaemon,
null,
Integer.valueOf(System.getProperty("zap.port")), //THIS IS THE LINE WHICH FAILS
homePath,
true));
How do i resolve this issue??
I have tried all the solutions mentioned in this post:
How to set system property using gradle?
and,
I think your problem is when you call
you are setting the properties in the process running the Gradle script, rather than in the test process.
Try replacing those lines with this, using the
systemPropertymethod fromTest: