diff --git a/tools/jmeter/build.gradle b/tools/jmeter/build.gradle index b9426d0b4b..f92ea2e2df 100644 --- a/tools/jmeter/build.gradle +++ b/tools/jmeter/build.gradle @@ -107,6 +107,8 @@ run { args+= Eval.me(jmeterHosts) } + args += [ "-XserverRmiMappings", sourceSets.main.resources.getSrcDirs().first().getPath() + "/../data/server-rmi.config"] + args+= [ "-XjmeterProperties", sourceSets.main.resources.getSrcDirs().first().getPath()+"/jmeter.properties", "--", "-d", sourceSets.main.resources.getSrcDirs().first().getPath() ] @@ -140,7 +142,6 @@ task buildJMeterJAR(type: FatCapsule) { from(processResources) { include "log4j2.xml" include "*.properties" - include "server-rmi.config" include "bin/*.properties" } diff --git a/tools/jmeter/src/main/resources/Bridge IssueAndPay.jmx b/tools/jmeter/src/main/data/Bridge IssueAndPay.jmx similarity index 100% rename from tools/jmeter/src/main/resources/Bridge IssueAndPay.jmx rename to tools/jmeter/src/main/data/Bridge IssueAndPay.jmx diff --git a/tools/jmeter/src/main/resources/Example Flow Request.jmx b/tools/jmeter/src/main/data/Example Flow Request.jmx similarity index 100% rename from tools/jmeter/src/main/resources/Example Flow Request.jmx rename to tools/jmeter/src/main/data/Example Flow Request.jmx diff --git a/tools/jmeter/src/main/resources/IssueAndPay Request.jmx b/tools/jmeter/src/main/data/IssueAndPay Request.jmx similarity index 100% rename from tools/jmeter/src/main/resources/IssueAndPay Request.jmx rename to tools/jmeter/src/main/data/IssueAndPay Request.jmx diff --git a/tools/jmeter/src/main/resources/LocalBatchNotarise Request.jmx b/tools/jmeter/src/main/data/LocalBatchNotarise Request.jmx similarity index 100% rename from tools/jmeter/src/main/resources/LocalBatchNotarise Request.jmx rename to tools/jmeter/src/main/data/LocalBatchNotarise Request.jmx diff --git a/tools/jmeter/src/main/resources/LocalIssueAndPay Request.jmx b/tools/jmeter/src/main/data/LocalIssueAndPay Request.jmx similarity index 100% rename from tools/jmeter/src/main/resources/LocalIssueAndPay Request.jmx rename to tools/jmeter/src/main/data/LocalIssueAndPay Request.jmx diff --git a/tools/jmeter/src/main/data/Sample Testplans/Example Flow Request.jmx b/tools/jmeter/src/main/data/Sample Testplans/Example Flow Request.jmx new file mode 100644 index 0000000000..ad90aa2a6d --- /dev/null +++ b/tools/jmeter/src/main/data/Sample Testplans/Example Flow Request.jmx @@ -0,0 +1,195 @@ + + + + + A very simple test plan that connects to a node via RPC and self issues + cash + + false + false + + + + + + + + continue + + false + 1000 + + 3 + + 1509455820000 + 1509455820000 + false + + + The thread group controls how often the requests are run. Expand it on the + left hand side to see the sampler configuration. + + + + + This is configured to invoke the CashIssueSampler - the RPC details and + the notary name for the test set-up need to be entered for it to work. + + + + + label + ${__samplerName} + = + + + host + Hostname of RPC target here + = + + + port + RPC port here + = + + + username + RPC user name here + = + + + password + RPC password Here + = + + + notaryName + X500 name of the notary here + = + + + + com.r3.corda.jmeter.CashIssueSampler + + + + + false + + saveConfig + + + true + true + true + + true + true + true + true + false + true + true + false + false + false + true + false + false + false + true + 0 + true + true + true + true + true + + + + + + + false + + saveConfig + + + true + true + true + + true + true + true + true + false + true + true + false + false + false + true + false + false + false + true + 0 + true + true + true + true + true + + + + + + + false + + saveConfig + + + true + true + true + + true + true + true + true + false + true + true + false + false + false + true + false + false + false + true + 0 + true + true + true + true + true + + + + + + + + true + + + + diff --git a/tools/jmeter/src/main/data/Sample Testplans/NightlyBenchmarkSample.jmx b/tools/jmeter/src/main/data/Sample Testplans/NightlyBenchmarkSample.jmx new file mode 100644 index 0000000000..6b13ee26e6 --- /dev/null +++ b/tools/jmeter/src/main/data/Sample Testplans/NightlyBenchmarkSample.jmx @@ -0,0 +1,2404 @@ + + + + + This is a sample what is run for Corda performance testing at R3 + + false + true + + + + + + + + + + host + Hostname of RPC target here + = + Hostname of the target node that JMeter should connect to via + RPC (the node under test) + + + + port + 10003 + = + Configured RPC port of the target node + + + username + RPC user name here + = + User name as configured in the RPC credentials of the target + node + + + + password + RPC password here + = + Password as configured in the RPC credentials of the target + node + + + + notaryName + X500 name of the notary here + = + The Corda X500 name of the notary to be used for these tests. + + + + otherPartyName + X500 name of reveiving node here + = + The Corda X500 name of the node receiving funds in the payment + tests + + + + duration + 300 + = + Runtime of the test in seconds - in our performance set-up, + each test step runs for 5 minutes. + + + + pause + 30 + = + Time to pause between two runs to let the system flush out in + seconds. + + + + remoteAgentCount + 5 + = + Number of remote JMeter agent connecting to the target node. + This is used for correct labelling of tests. + + + + firewallHost + Hostname of RPC target for firewall tests here + = + Hostname of the target node for tests using Corda + Float/Firewall + + + + This plans uses variables to avoid repeating configuration values - + enter the details of your test network set-up here, all the rest of the plan should just work. + + + + + continue + + false + -1 + + 200 + + 1509455820000 + 1509455820000 + true + ${duration} + ${pause} + Run empty flows to baseline RPC/serialisation overhead + + + + + + + label + + ${__samplerName}-${__groovy(ctx.getThreadGroup().getNumThreads() * vars.get("remoteAgentCount").toInteger())} + + = + + + host + ${host} + = + + + port + ${port} + = + + + username + ${username} + = + + + password + ${password} + = + + + + com.r3.corda.jmeter.EmptyFlowSampler + + + + + continue + + false + -1 + + 1 + + 1509455820000 + 1509455820000 + true + ${duration} + ${pause} + + + + + + + label + + ${__samplerName}-${__groovy(ctx.getThreadGroup().getNumThreads() * vars.get("remoteAgentCount").toInteger())} + + = + + + host + ${host} + = + + + port + ${port} + = + + + username + ${username} + = + + + password + ${password} + = + + + notaryName + ${notaryName} + = + + + + com.r3.corda.jmeter.CashIssueSampler + + + + + continue + + false + -1 + + 5 + + 1509455820000 + 1509455820000 + true + ${duration} + ${pause} + + + + + + + label + + ${__samplerName}-${__groovy(ctx.getThreadGroup().getNumThreads() * vars.get("remoteAgentCount").toInteger())} + + = + + + host + ${host} + = + + + port + ${port} + = + + + username + ${username} + = + + + password + ${password} + = + + + notaryName + ${notaryName} + = + + + + com.r3.corda.jmeter.CashIssueSampler + + + + + continue + + false + -1 + + 10 + + 1509455820000 + 1509455820000 + true + ${duration} + ${pause} + + + + + + + label + + ${__samplerName}-${__groovy(ctx.getThreadGroup().getNumThreads() * vars.get("remoteAgentCount").toInteger())} + + = + + + host + ${host} + = + + + port + ${port} + = + + + username + ${username} + = + + + password + ${password} + = + + + notaryName + ${notaryName} + = + + + + com.r3.corda.jmeter.CashIssueSampler + + + + + continue + + false + -1 + + 20 + + 1509455820000 + 1509455820000 + true + ${duration} + ${pause} + + + + + + + label + + ${__samplerName}-${__groovy(ctx.getThreadGroup().getNumThreads() * vars.get("remoteAgentCount").toInteger())} + + = + + + host + ${host} + = + + + port + ${port} + = + + + username + ${username} + = + + + password + ${password} + = + + + notaryName + ${notaryName} + = + + + + com.r3.corda.jmeter.CashIssueSampler + + + + + continue + + false + -1 + + 40 + + 1509455820000 + 1509455820000 + true + ${duration} + ${pause} + + + + + + + label + + ${__samplerName}-${__groovy(ctx.getThreadGroup().getNumThreads() * vars.get("remoteAgentCount").toInteger())} + + = + + + host + ${host} + = + + + port + ${port} + = + + + username + ${username} + = + + + password + ${password} + = + + + notaryName + ${notaryName} + = + + + + com.r3.corda.jmeter.CashIssueSampler + + + + + continue + + false + -1 + + 60 + + 1509455820000 + 1509455820000 + true + ${duration} + ${pause} + + + + + + + label + + ${__samplerName}-${__groovy(ctx.getThreadGroup().getNumThreads() * vars.get("remoteAgentCount").toInteger())} + + = + + + host + ${host} + = + + + port + ${port} + = + + + username + ${username} + = + + + password + ${password} + = + + + notaryName + ${notaryName} + = + + + + com.r3.corda.jmeter.CashIssueSampler + + + + + continue + + false + -1 + + 80 + + 1509455820000 + 1509455820000 + true + ${duration} + ${pause} + + + + + + + label + + ${__samplerName}-${__groovy(ctx.getThreadGroup().getNumThreads() * vars.get("remoteAgentCount").toInteger())} + + = + + + host + ${host} + = + + + port + ${port} + = + + + username + ${username} + = + + + password + ${password} + = + + + notaryName + ${notaryName} + = + + + + com.r3.corda.jmeter.CashIssueSampler + + + + + continue + + false + -1 + + 100 + + 1509455820000 + 1509455820000 + true + ${duration} + ${pause} + + + + + + + label + + ${__samplerName}-${__groovy(ctx.getThreadGroup().getNumThreads() * vars.get("remoteAgentCount").toInteger())} + + = + + + host + ${host} + = + + + port + ${port} + = + + + username + ${username} + = + + + password + ${password} + = + + + notaryName + ${notaryName} + = + + + + com.r3.corda.jmeter.CashIssueSampler + + + + + continue + + false + -1 + + 200 + + 1509455820000 + 1509455820000 + true + ${duration} + ${pause} + + + + + + + label + + ${__samplerName}-${__groovy(ctx.getThreadGroup().getNumThreads() * vars.get("remoteAgentCount").toInteger())} + + = + + + host + ${host} + = + + + port + ${port} + = + + + username + ${username} + = + + + password + ${password} + = + + + notaryName + ${notaryName} + = + + + + com.r3.corda.jmeter.CashIssueSampler + + + + + continue + + false + -1 + + 1 + + 1509455820000 + 1509455820000 + true + ${duration} + ${pause} + + + + + + + label + + ${__samplerName}-${__groovy(ctx.getThreadGroup().getNumThreads() * vars.get("remoteAgentCount").toInteger())} + + = + + + host + ${host} + = + + + port + ${port} + = + + + username + ${username} + = + + + password + ${password} + = + + + notaryName + ${notaryName} + = + + + otherPartyName + ${otherPartyName} + = + + + numberOfStatesPerTx + 1 + = + + + numberOfChangeStatesPerTx + 1 + = + + + anonymousIdentities + false + = + + + + com.r3.corda.jmeter.CashPaySampler + + + + + continue + + false + -1 + + 2 + + 1509455820000 + 1509455820000 + true + ${duration} + ${pause} + + + + + + + label + + ${__samplerName}-${__groovy(ctx.getThreadGroup().getNumThreads() * vars.get("remoteAgentCount").toInteger())} + + = + + + host + ${host} + = + + + port + ${port} + = + + + username + ${username} + = + + + password + ${password} + = + + + notaryName + ${notaryName} + = + + + otherPartyName + ${otherPartyName} + = + + + numberOfStatesPerTx + 1 + = + + + numberOfChangeStatesPerTx + 1 + = + + + anonymousIdentities + false + = + + + + com.r3.corda.jmeter.CashPaySampler + + + + + continue + + false + -1 + + 5 + + 1509455820000 + 1509455820000 + true + ${duration} + ${pause} + + + + + + + label + + ${__samplerName}-${__groovy(ctx.getThreadGroup().getNumThreads() * vars.get("remoteAgentCount").toInteger())} + + = + + + host + ${host} + = + + + port + ${port} + = + + + username + ${username} + = + + + password + ${password} + = + + + notaryName + ${notaryName} + = + + + otherPartyName + ${otherPartyName} + = + + + numberOfStatesPerTx + 1 + = + + + numberOfChangeStatesPerTx + 1 + = + + + anonymousIdentities + false + = + + + + com.r3.corda.jmeter.CashPaySampler + + + + + continue + + false + -1 + + 10 + + 1509455820000 + 1509455820000 + true + ${duration} + ${pause} + + + + + + + label + + ${__samplerName}-${__groovy(ctx.getThreadGroup().getNumThreads() * vars.get("remoteAgentCount").toInteger())} + + = + + + host + ${host} + = + + + port + ${port} + = + + + username + ${username} + = + + + password + ${password} + = + + + notaryName + ${notaryName} + = + + + otherPartyName + ${otherPartyName} + = + + + numberOfStatesPerTx + 1 + = + + + numberOfChangeStatesPerTx + 1 + = + + + anonymousIdentities + false + = + + + + com.r3.corda.jmeter.CashPaySampler + + + + + continue + + false + -1 + + 20 + + 1509455820000 + 1509455820000 + true + ${duration} + ${pause} + + + + + + + label + + ${__samplerName}-${__groovy(ctx.getThreadGroup().getNumThreads() * vars.get("remoteAgentCount").toInteger())} + + = + + + host + ${host} + = + + + port + ${port} + = + + + username + ${username} + = + + + password + ${password} + = + + + notaryName + ${notaryName} + = + + + otherPartyName + ${otherPartyName} + = + + + numberOfStatesPerTx + 1 + = + + + numberOfChangeStatesPerTx + 1 + = + + + anonymousIdentities + false + = + + + + com.r3.corda.jmeter.CashPaySampler + + + + + continue + + false + -1 + + 30 + + 1509455820000 + 1509455820000 + true + ${duration} + ${pause} + + + + + + + label + + ${__samplerName}-${__groovy(ctx.getThreadGroup().getNumThreads() * vars.get("remoteAgentCount").toInteger())} + + = + + + host + ${host} + = + + + port + ${port} + = + + + username + ${username} + = + + + password + ${password} + = + + + notaryName + ${notaryName} + = + + + otherPartyName + ${otherPartyName} + = + + + numberOfStatesPerTx + 1 + = + + + numberOfChangeStatesPerTx + 1 + = + + + anonymousIdentities + false + = + + + + com.r3.corda.jmeter.CashPaySampler + + + + + continue + + false + -1 + + 40 + + 1509455820000 + 1509455820000 + true + ${duration} + ${pause} + + + + + + + label + + ${__samplerName}-${__groovy(ctx.getThreadGroup().getNumThreads() * vars.get("remoteAgentCount").toInteger())} + + = + + + host + ${host} + = + + + port + ${port} + = + + + username + ${username} + = + + + password + ${password} + = + + + notaryName + ${notaryName} + = + + + otherPartyName + ${otherPartyName} + = + + + numberOfStatesPerTx + 1 + = + + + numberOfChangeStatesPerTx + 1 + = + + + anonymousIdentities + false + = + + + + com.r3.corda.jmeter.CashPaySampler + + + + + continue + + false + -1 + + 1 + + 1509455820000 + 1509455820000 + true + ${duration} + ${pause} + + + + + + + label + + ${__samplerName}-${__groovy(ctx.getThreadGroup().getNumThreads() * vars.get("remoteAgentCount").toInteger())} + + = + + + host + ${firewallHost} + = + + + port + ${port} + = + + + username + ${username} + = + + + password + ${password} + = + + + notaryName + ${notaryName} + = + + + otherPartyName + ${otherPartyName} + = + + + numberOfStatesPerTx + 1 + = + + + numberOfChangeStatesPerTx + 1 + = + + + anonymousIdentities + false + = + + + + com.r3.corda.jmeter.CashPaySampler + + + + + continue + + false + -1 + + 5 + + 1509455820000 + 1509455820000 + true + ${duration} + ${pause} + + + + + + + label + + ${__samplerName}-${__groovy(ctx.getThreadGroup().getNumThreads() * vars.get("remoteAgentCount").toInteger())} + + = + + + host + ${firewallHost} + = + + + port + ${port} + = + + + username + ${username} + = + + + password + ${password} + = + + + notaryName + ${notaryName} + = + + + otherPartyName + ${otherPartyName} + = + + + numberOfStatesPerTx + 1 + = + + + numberOfChangeStatesPerTx + 1 + = + + + anonymousIdentities + false + = + + + + com.r3.corda.jmeter.CashPaySampler + + + + + continue + + false + -1 + + 10 + + 1509455820000 + 1509455820000 + true + ${duration} + ${pause} + + + + + + + label + + ${__samplerName}-${__groovy(ctx.getThreadGroup().getNumThreads() * vars.get("remoteAgentCount").toInteger())} + + = + + + host + ${firewallHost} + = + + + port + ${port} + = + + + username + ${username} + = + + + password + ${password} + = + + + notaryName + ${notaryName} + = + + + otherPartyName + ${otherPartyName} + = + + + numberOfStatesPerTx + 1 + = + + + numberOfChangeStatesPerTx + 1 + = + + + anonymousIdentities + false + = + + + + com.r3.corda.jmeter.CashPaySampler + + + + + continue + + false + -1 + + 20 + + 1509455820000 + 1509455820000 + true + ${duration} + ${pause} + + + + + + + label + + ${__samplerName}-${__groovy(ctx.getThreadGroup().getNumThreads() * vars.get("remoteAgentCount").toInteger())} + + = + + + host + ${firewallHost} + = + + + port + ${port} + = + + + username + ${username} + = + + + password + ${password} + = + + + notaryName + ${notaryName} + = + + + otherPartyName + ${otherPartyName} + = + + + numberOfStatesPerTx + 1 + = + + + numberOfChangeStatesPerTx + 1 + = + + + anonymousIdentities + false + = + + + + com.r3.corda.jmeter.CashPaySampler + + + + + continue + + false + -1 + + 30 + + 1509455820000 + 1509455820000 + true + ${duration} + ${pause} + + + + + + + label + + ${__samplerName}-${__groovy(ctx.getThreadGroup().getNumThreads() * vars.get("remoteAgentCount").toInteger())} + + = + + + host + ${firewallHost} + = + + + port + ${port} + = + + + username + ${username} + = + + + password + ${password} + = + + + notaryName + ${notaryName} + = + + + otherPartyName + ${otherPartyName} + = + + + numberOfStatesPerTx + 1 + = + + + numberOfChangeStatesPerTx + 1 + = + + + anonymousIdentities + false + = + + + + com.r3.corda.jmeter.CashPaySampler + + + + + continue + + false + -1 + + 40 + + 1509455820000 + 1509455820000 + true + ${duration} + ${pause} + + + + + + + label + + ${__samplerName}-${__groovy(ctx.getThreadGroup().getNumThreads() * vars.get("remoteAgentCount").toInteger())} + + = + + + host + ${firewallHost} + = + + + port + ${port} + = + + + username + ${username} + = + + + password + ${password} + = + + + notaryName + ${notaryName} + = + + + otherPartyName + ${otherPartyName} + = + + + numberOfStatesPerTx + 1 + = + + + numberOfChangeStatesPerTx + 1 + = + + + anonymousIdentities + false + = + + + + com.r3.corda.jmeter.CashPaySampler + + + + + continue + + false + -1 + + 40 + + 1509455820000 + 1509455820000 + true + ${duration} + ${pause} + + + + + + + label + + ${__samplerName}-${__groovy(ctx.getThreadGroup().getNumThreads() * vars.get("remoteAgentCount").toInteger())} + + = + + + host + ${host} + = + + + port + ${port} + = + + + username + ${username} + = + + + password + ${password} + = + + + notaryName + ${notaryName} + = + + + otherPartyName + ${otherPartyName} + = + + + numberOfStatesPerTx + 5 + = + + + numberOfChangeStatesPerTx + 1 + = + + + anonymousIdentities + false + = + + + + com.r3.corda.jmeter.CashPaySampler + + + + + continue + + false + -1 + + 40 + + 1509455820000 + 1509455820000 + true + ${duration} + ${pause} + + + + + + + label + + ${__samplerName}-${__groovy(ctx.getThreadGroup().getNumThreads() * vars.get("remoteAgentCount").toInteger())} + + = + + + host + ${host} + = + + + port + ${port} + = + + + username + ${username} + = + + + password + ${password} + = + + + notaryName + ${notaryName} + = + + + otherPartyName + ${otherPartyName} + = + + + numberOfStatesPerTx + 20 + = + + + numberOfChangeStatesPerTx + 1 + = + + + anonymousIdentities + false + = + + + + com.r3.corda.jmeter.CashPaySampler + + + + + continue + + false + -1 + + 40 + + 1509455820000 + 1509455820000 + true + ${duration} + ${pause} + + + + + + + label + + ${__samplerName}-${__groovy(ctx.getThreadGroup().getNumThreads() * vars.get("remoteAgentCount").toInteger())} + + = + + + host + ${host} + = + + + port + ${port} + = + + + username + ${username} + = + + + password + ${password} + = + + + notaryName + ${notaryName} + = + + + otherPartyName + ${otherPartyName} + = + + + numberOfStatesPerTx + 40 + = + + + numberOfChangeStatesPerTx + 1 + = + + + anonymousIdentities + false + = + + + + com.r3.corda.jmeter.CashPaySampler + + + + + continue + + false + -1 + + 40 + + 1509455820000 + 1509455820000 + true + ${duration} + ${pause} + + + + + + + label + + ${__samplerName}-${__groovy(ctx.getThreadGroup().getNumThreads() * vars.get("remoteAgentCount").toInteger())} + + = + + + host + ${host} + = + + + port + ${port} + = + + + username + ${username} + = + + + password + ${password} + = + + + notaryName + ${notaryName} + = + + + otherPartyName + ${otherPartyName} + = + + + numberOfStatesPerTx + 80 + = + + + numberOfChangeStatesPerTx + 1 + = + + + anonymousIdentities + false + = + + + + com.r3.corda.jmeter.CashPaySampler + + + + + continue + + false + -1 + + 40 + + 1509455820000 + 1509455820000 + true + ${duration} + ${pause} + + + + + + + label + + ${__samplerName}-${__groovy(ctx.getThreadGroup().getNumThreads() * vars.get("remoteAgentCount").toInteger())} + + = + + + host + ${host} + = + + + port + ${port} + = + + + username + ${username} + = + + + password + ${password} + = + + + notaryName + ${notaryName} + = + + + otherPartyName + ${otherPartyName} + = + + + numberOfStatesPerTx + 160 + = + + + numberOfChangeStatesPerTx + 1 + = + + + anonymousIdentities + false + = + + + + com.r3.corda.jmeter.CashPaySampler + + + + + continue + + false + -1 + + 40 + + 1509455820000 + 1509455820000 + true + ${duration} + ${pause} + + + + + + + label + + ${__samplerName}-${__groovy(ctx.getThreadGroup().getNumThreads() * vars.get("remoteAgentCount").toInteger())} + + = + + + host + ${host} + = + + + port + ${port} + = + + + username + ${username} + = + + + password + ${password} + = + + + notaryName + ${notaryName} + = + + + otherPartyName + ${otherPartyName} + = + + + numberOfStatesPerTx + 320 + = + + + numberOfChangeStatesPerTx + 1 + = + + + anonymousIdentities + false + = + + + + com.r3.corda.jmeter.CashPaySampler + + + + + continue + + false + -1 + + 40 + + 1509455820000 + 1509455820000 + true + ${duration} + ${pause} + + + + + + + label + + ${__samplerName}-${__groovy(ctx.getThreadGroup().getNumThreads() * vars.get("remoteAgentCount").toInteger())} + + = + + + host + ${host} + = + + + port + ${port} + = + + + username + ${username} + = + + + password + ${password} + = + + + notaryName + ${notaryName} + = + + + otherPartyName + ${otherPartyName} + = + + + numberOfStatesPerTx + 640 + = + + + numberOfChangeStatesPerTx + 1 + = + + + anonymousIdentities + false + = + + + + com.r3.corda.jmeter.CashPaySampler + + + + + false + + saveConfig + + + true + true + true + + true + true + true + true + false + true + true + false + false + false + true + false + false + false + true + 0 + true + true + true + true + true + + + + + + + false + + saveConfig + + + true + true + true + + true + true + true + true + false + true + true + false + false + false + true + false + false + false + true + 0 + true + true + true + true + true + + + + + + + false + + saveConfig + + + true + true + true + + true + true + true + true + false + true + true + false + false + false + true + false + false + false + true + 0 + true + true + true + true + true + + + + + + + + true + + + + diff --git a/tools/jmeter/src/main/resources/Testplans/CashIssuance_40k.jmx b/tools/jmeter/src/main/data/Testplans/CashIssuance_40k.jmx similarity index 100% rename from tools/jmeter/src/main/resources/Testplans/CashIssuance_40k.jmx rename to tools/jmeter/src/main/data/Testplans/CashIssuance_40k.jmx diff --git a/tools/jmeter/src/main/resources/Testplans/NightlyBenchmark.jmx b/tools/jmeter/src/main/data/Testplans/NightlyBenchmark.jmx similarity index 100% rename from tools/jmeter/src/main/resources/Testplans/NightlyBenchmark.jmx rename to tools/jmeter/src/main/data/Testplans/NightlyBenchmark.jmx diff --git a/tools/jmeter/src/main/resources/Testplans/SQL.jmx b/tools/jmeter/src/main/data/Testplans/SQL.jmx similarity index 100% rename from tools/jmeter/src/main/resources/Testplans/SQL.jmx rename to tools/jmeter/src/main/data/Testplans/SQL.jmx diff --git a/tools/jmeter/src/main/resources/Testplans/SQL_parmeterized.jmx b/tools/jmeter/src/main/data/Testplans/SQL_parmeterized.jmx similarity index 100% rename from tools/jmeter/src/main/resources/Testplans/SQL_parmeterized.jmx rename to tools/jmeter/src/main/data/Testplans/SQL_parmeterized.jmx diff --git a/tools/jmeter/src/main/resources/server-rmi.config b/tools/jmeter/src/main/data/server-rmi.config similarity index 100% rename from tools/jmeter/src/main/resources/server-rmi.config rename to tools/jmeter/src/main/data/server-rmi.config diff --git a/tools/jmeter/src/main/kotlin/com/r3/corda/jmeter/Launcher.kt b/tools/jmeter/src/main/kotlin/com/r3/corda/jmeter/Launcher.kt index 07146aa69c..712bd002c8 100644 --- a/tools/jmeter/src/main/kotlin/com/r3/corda/jmeter/Launcher.kt +++ b/tools/jmeter/src/main/kotlin/com/r3/corda/jmeter/Launcher.kt @@ -94,12 +94,14 @@ class Launcher { } else { File(cmdLine.jMeterProperties).toPath() } - val serverRmiMappingFile = if (cmdLine.serverRmiMappings.isBlank()) { - (jMeterHome / "server-rmi.config").toString() + val serverRmiMappings = if (!cmdLine.serverRmiMappings.isBlank()) { + readHostAndPortMap(cmdLine.serverRmiMappings) } else { - cmdLine.serverRmiMappings + if (!cmdLine.sshHosts.isEmpty()) { + throw LauncherException("Enabling ssh tunneling requires providing rmi mappings via -XserverRmiMappings") + } + emptyMap() } - val serverRmiMappings = readHostAndPortMap(serverRmiMappingFile) // we want to add the jMeter properties file here - it must not be part of the user specified jMeter // arguments @@ -118,9 +120,12 @@ class Launcher { if (port != null) { val rmiPropsFile = (jMeterHome / "server-rmi.properties").toFile() rmiPropsFile.writeText("server.rmi.localport=$port") - jMeterArgs.addAll(listOf("-q", rmiPropsFile.toString())) + logger.info("Starting jmeter server using mapped server.rmi.localport=$port") + } else { + logger.info("No rmi server mapping found, using default server.rmi.localport - assuming no ssh tunnelling in effect") } + } return JMeterArgsPlus(jMeterArgs, jMeterPropertiesFile, serverRmiMappings) } diff --git a/tools/jmeter/src/test/kotlin/com/r3/corda/jmeter/TestLauncherHelpers.kt b/tools/jmeter/src/test/kotlin/com/r3/corda/jmeter/TestLauncherHelpers.kt index 6f46a0d6ab..64be604ad6 100644 --- a/tools/jmeter/src/test/kotlin/com/r3/corda/jmeter/TestLauncherHelpers.kt +++ b/tools/jmeter/src/test/kotlin/com/r3/corda/jmeter/TestLauncherHelpers.kt @@ -118,11 +118,12 @@ class TestLauncherHelpers { SystemPropertySetter("jmeter.home", temporaryFolder.root.toString()).use { val defaultJmeterPropertiesFile = createFileInTmpFolder("jmeter.properties") createFileInTmpFolder("custom.properties") - createFileInTmpFolder("server-rmi.config", "${InetAddress.getLocalHost().hostName}:10101") createFileInTmpFolder("nomatch-rmi.config", "notmatching:10101") val cmdLine = LauncherCommandLine() cmdLine.jMeterArguments.addAll(listOf("-s")) + cmdLine.serverRmiMappings = createFileInTmpFolder("server-rmi.config", "${InetAddress.getLocalHost().hostName}:10101") + val result = Launcher.prepareJMeterArguments(cmdLine) assertEquals(defaultJmeterPropertiesFile, result.jmeterPropertiesFile.toString()) @@ -158,6 +159,23 @@ class TestLauncherHelpers { } } + @Test + fun testJMeterArgPreparationServerMissingRmiMapping() { + SystemPropertySetter("jmeter.home", temporaryFolder.root.toString()).use { + createFileInTmpFolder("jmeter.properties") + val customJmeterPropertiesFile = createFileInTmpFolder("custom.properties") + createFileInTmpFolder("server-rmi.config", "${InetAddress.getLocalHost().hostName}:10101") + createFileInTmpFolder("nomatch-rmi.config", "notmatching:10101") + + val cmdLine = LauncherCommandLine() + cmdLine.jMeterArguments.addAll(listOf("-s")) + cmdLine.sshHosts = mutableListOf("node1.mydomain.com") + cmdLine.jMeterProperties = customJmeterPropertiesFile + + testForException("Enabling ssh tunneling requires providing rmi mappings via -XserverRmiMappings") { Launcher.prepareJMeterArguments(cmdLine) } + } + } + @Test fun testJMeterArgPreparationClient() { SystemPropertySetter("jmeter.home", temporaryFolder.root.toString()).use { @@ -170,7 +188,6 @@ class TestLauncherHelpers { val result = Launcher.prepareJMeterArguments(cmdLine) assertEquals(defaultJmeterPropertiesFile, result.jmeterPropertiesFile.toString()) - assertEquals(mapOf(InetAddress.getLocalHost().hostName to 10101), result.serverRmiMappings) val expectedServerPropsFile = temporaryFolder.root.toPath() / "server-rmi.properties" assertEquals(listOf("-p", defaultJmeterPropertiesFile), result.jmeterArgs) val serverPropsFile = expectedServerPropsFile.toFile()