mirror of
https://github.com/lnbits/lnbits-legend.git
synced 2025-01-19 05:33:47 +01:00
a1ea04acf8
* chore: add tests * chore: add reference to jmter job * chore: add jmeter job * chore: touch tests * chorE: disable other workflows * chore: do not set `LNBITS_ADMIN_UI: true` * chore: extra log file * chore: rollback * chore: testing stuff * feat: top-up wallet * chore: clean-up usr * chore: clean-up user query param * chore: remove hardcoded usr * chore: clean-up * chore: clean-up * chore: different improvements * chore: clean-up * chore: remove hardcoded values * refactor: extract `init-server` fragment * chore: move fragment * feat: use test frgment * chore: clean-up hardcoded values * chore: clean-up * fix: get lnurl working * chore: re-arange elements * chore: re-arange elements * fix: add `lnurlp, withdraw` extensions * chore: rename file * fix: login with user id * refactor: extract init account * fix: tips wallet * fix: assertion * refactor: use fragments; group loops * chore: re-enable the other CI jobs * fix: separate wallet for receive * feat: check receive wallet balance * feat: increase wait time
2596 lines
167 KiB
XML
2596 lines
167 KiB
XML
<?xml version="1.0" encoding="UTF-8"?>
|
|
<jmeterTestPlan version="1.2" properties="5.0" jmeter="5.5">
|
|
<hashTree>
|
|
<TestPlan guiclass="TestPlanGui" testclass="TestPlan" testname="Test Plan" enabled="true">
|
|
<boolProp name="TestPlan.functional_mode">false</boolProp>
|
|
<boolProp name="TestPlan.serialize_threadgroups">false</boolProp>
|
|
<elementProp name="TestPlan.user_defined_variables" elementType="Arguments" guiclass="ArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
|
|
<collectionProp name="Arguments.arguments"/>
|
|
</elementProp>
|
|
<stringProp name="TestPlan.comments"></stringProp>
|
|
<stringProp name="TestPlan.user_define_classpath"></stringProp>
|
|
</TestPlan>
|
|
<hashTree>
|
|
<Arguments guiclass="ArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
|
|
<collectionProp name="Arguments.arguments">
|
|
<elementProp name="host" elementType="Argument">
|
|
<stringProp name="Argument.name">host</stringProp>
|
|
<stringProp name="Argument.value">${__property(host,,127.0.0.1)}</stringProp>
|
|
<stringProp name="Argument.metadata">=</stringProp>
|
|
</elementProp>
|
|
<elementProp name="scheme" elementType="Argument">
|
|
<stringProp name="Argument.name">scheme</stringProp>
|
|
<stringProp name="Argument.value">${__property(scheme,,http)}</stringProp>
|
|
<stringProp name="Argument.metadata">=</stringProp>
|
|
</elementProp>
|
|
<elementProp name="port" elementType="Argument">
|
|
<stringProp name="Argument.name">port</stringProp>
|
|
<stringProp name="Argument.value">${__property(port,,5000)}</stringProp>
|
|
<stringProp name="Argument.metadata">=</stringProp>
|
|
</elementProp>
|
|
<elementProp name="paidChargeCount" elementType="Argument">
|
|
<stringProp name="Argument.name">paidChargeCount</stringProp>
|
|
<stringProp name="Argument.value">5</stringProp>
|
|
<stringProp name="Argument.metadata">=</stringProp>
|
|
</elementProp>
|
|
<elementProp name="userTipCount" elementType="Argument">
|
|
<stringProp name="Argument.name">userTipCount</stringProp>
|
|
<stringProp name="Argument.value">5</stringProp>
|
|
<stringProp name="Argument.metadata">=</stringProp>
|
|
</elementProp>
|
|
<elementProp name="thinkTime" elementType="Argument">
|
|
<stringProp name="Argument.name">thinkTime</stringProp>
|
|
<stringProp name="Argument.value">3000</stringProp>
|
|
<stringProp name="Argument.metadata">=</stringProp>
|
|
</elementProp>
|
|
<elementProp name="lnurlpCount" elementType="Argument">
|
|
<stringProp name="Argument.name">lnurlpCount</stringProp>
|
|
<stringProp name="Argument.value">5</stringProp>
|
|
<stringProp name="Argument.metadata">=</stringProp>
|
|
</elementProp>
|
|
<elementProp name="lnurlwCount" elementType="Argument">
|
|
<stringProp name="Argument.name">lnurlwCount</stringProp>
|
|
<stringProp name="Argument.value">5</stringProp>
|
|
<stringProp name="Argument.metadata">=</stringProp>
|
|
</elementProp>
|
|
<elementProp name="paymentCountPerLnurlp" elementType="Argument">
|
|
<stringProp name="Argument.name">paymentCountPerLnurlp</stringProp>
|
|
<stringProp name="Argument.value">2</stringProp>
|
|
<stringProp name="Argument.metadata">=</stringProp>
|
|
</elementProp>
|
|
<elementProp name="withdrawCountPerLnurlw" elementType="Argument">
|
|
<stringProp name="Argument.name">withdrawCountPerLnurlw</stringProp>
|
|
<stringProp name="Argument.value">2</stringProp>
|
|
<stringProp name="Argument.metadata">=</stringProp>
|
|
</elementProp>
|
|
</collectionProp>
|
|
</Arguments>
|
|
<hashTree/>
|
|
<ConfigTestElement guiclass="HttpDefaultsGui" testclass="ConfigTestElement" testname="HTTP Request Defaults" enabled="true">
|
|
<elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
|
|
<collectionProp name="Arguments.arguments"/>
|
|
</elementProp>
|
|
<stringProp name="HTTPSampler.domain">${host}</stringProp>
|
|
<stringProp name="HTTPSampler.port">${port}</stringProp>
|
|
<stringProp name="HTTPSampler.protocol">${scheme}</stringProp>
|
|
<stringProp name="HTTPSampler.contentEncoding"></stringProp>
|
|
<stringProp name="HTTPSampler.path"></stringProp>
|
|
<stringProp name="HTTPSampler.concurrentPool">6</stringProp>
|
|
<stringProp name="HTTPSampler.connect_timeout"></stringProp>
|
|
<stringProp name="HTTPSampler.response_timeout"></stringProp>
|
|
</ConfigTestElement>
|
|
<hashTree/>
|
|
<ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Thread Group" enabled="true">
|
|
<stringProp name="ThreadGroup.on_sample_error">stopthread</stringProp>
|
|
<elementProp name="ThreadGroup.main_controller" elementType="LoopController" guiclass="LoopControlPanel" testclass="LoopController" testname="Loop Controller" enabled="true">
|
|
<boolProp name="LoopController.continue_forever">false</boolProp>
|
|
<stringProp name="LoopController.loops">1</stringProp>
|
|
</elementProp>
|
|
<stringProp name="ThreadGroup.num_threads">1</stringProp>
|
|
<stringProp name="ThreadGroup.ramp_time">1</stringProp>
|
|
<longProp name="ThreadGroup.start_time">1370726934000</longProp>
|
|
<longProp name="ThreadGroup.end_time">1370726934000</longProp>
|
|
<boolProp name="ThreadGroup.scheduler">false</boolProp>
|
|
<stringProp name="ThreadGroup.duration"></stringProp>
|
|
<stringProp name="ThreadGroup.delay"></stringProp>
|
|
<boolProp name="ThreadGroup.same_user_on_next_iteration">false</boolProp>
|
|
</ThreadGroup>
|
|
<hashTree>
|
|
<CookieManager guiclass="CookiePanel" testclass="CookieManager" testname="HTTP Cookie Manager" enabled="true">
|
|
<collectionProp name="CookieManager.cookies"/>
|
|
<boolProp name="CookieManager.clearEachIteration">false</boolProp>
|
|
<boolProp name="CookieManager.controlledByThreadGroup">false</boolProp>
|
|
</CookieManager>
|
|
<hashTree/>
|
|
<TransactionController guiclass="TransactionControllerGui" testclass="TransactionController" testname="Init Server" enabled="true">
|
|
<boolProp name="TransactionController.includeTimers">false</boolProp>
|
|
<boolProp name="TransactionController.parent">true</boolProp>
|
|
</TransactionController>
|
|
<hashTree>
|
|
<IncludeController guiclass="IncludeControllerGui" testclass="IncludeController" testname="Include Init Server" enabled="true">
|
|
<stringProp name="IncludeController.includepath">fragments/init-server.jmx</stringProp>
|
|
</IncludeController>
|
|
<hashTree/>
|
|
</hashTree>
|
|
<TransactionController guiclass="TransactionControllerGui" testclass="TransactionController" testname="Init Account" enabled="true">
|
|
<boolProp name="TransactionController.includeTimers">false</boolProp>
|
|
<boolProp name="TransactionController.parent">true</boolProp>
|
|
</TransactionController>
|
|
<hashTree>
|
|
<IncludeController guiclass="IncludeControllerGui" testclass="IncludeController" testname="Init Account" enabled="true">
|
|
<stringProp name="IncludeController.includepath">fragments/init-account.jmx</stringProp>
|
|
</IncludeController>
|
|
<hashTree/>
|
|
</hashTree>
|
|
<TransactionController guiclass="TransactionControllerGui" testclass="TransactionController" testname="Enable LNURLp Extension" enabled="true">
|
|
<boolProp name="TransactionController.includeTimers">false</boolProp>
|
|
<boolProp name="TransactionController.parent">true</boolProp>
|
|
</TransactionController>
|
|
<hashTree>
|
|
<HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="[lnurlp] Enable "lnurlp"" enabled="true">
|
|
<elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true">
|
|
<collectionProp name="Arguments.arguments">
|
|
<elementProp name="enable" elementType="HTTPArgument">
|
|
<boolProp name="HTTPArgument.always_encode">false</boolProp>
|
|
<stringProp name="Argument.name">enable</stringProp>
|
|
<stringProp name="Argument.value">lnurlp</stringProp>
|
|
<stringProp name="Argument.metadata">=</stringProp>
|
|
<boolProp name="HTTPArgument.use_equals">true</boolProp>
|
|
</elementProp>
|
|
</collectionProp>
|
|
</elementProp>
|
|
<stringProp name="HTTPSampler.domain">${host}</stringProp>
|
|
<stringProp name="HTTPSampler.port">${port}</stringProp>
|
|
<stringProp name="HTTPSampler.protocol">${scheme}</stringProp>
|
|
<stringProp name="HTTPSampler.contentEncoding">utf-8</stringProp>
|
|
<stringProp name="HTTPSampler.path">/extensions</stringProp>
|
|
<stringProp name="HTTPSampler.method">GET</stringProp>
|
|
<boolProp name="HTTPSampler.follow_redirects">true</boolProp>
|
|
<boolProp name="HTTPSampler.auto_redirects">false</boolProp>
|
|
<boolProp name="HTTPSampler.use_keepalive">true</boolProp>
|
|
<boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
|
|
<stringProp name="HTTPSampler.embedded_url_re"></stringProp>
|
|
<stringProp name="HTTPSampler.connect_timeout"></stringProp>
|
|
<stringProp name="HTTPSampler.response_timeout"></stringProp>
|
|
</HTTPSamplerProxy>
|
|
<hashTree>
|
|
<HeaderManager guiclass="HeaderPanel" testclass="HeaderManager" testname="HTTP Header Manager" enabled="true">
|
|
<collectionProp name="HeaderManager.headers">
|
|
<elementProp name="Sec-Fetch-Mode" elementType="Header">
|
|
<stringProp name="Header.name">Sec-Fetch-Mode</stringProp>
|
|
<stringProp name="Header.value">same-origin</stringProp>
|
|
</elementProp>
|
|
<elementProp name="Sec-Fetch-Site" elementType="Header">
|
|
<stringProp name="Header.name">Sec-Fetch-Site</stringProp>
|
|
<stringProp name="Header.value">same-origin</stringProp>
|
|
</elementProp>
|
|
<elementProp name="Accept-Language" elementType="Header">
|
|
<stringProp name="Header.name">Accept-Language</stringProp>
|
|
<stringProp name="Header.value">en-US,en;q=0.${paidChargeCount}</stringProp>
|
|
</elementProp>
|
|
<elementProp name="Upgrade-Insecure-Requests" elementType="Header">
|
|
<stringProp name="Header.name">Upgrade-Insecure-Requests</stringProp>
|
|
<stringProp name="Header.value">1</stringProp>
|
|
</elementProp>
|
|
<elementProp name="Accept-Encoding" elementType="Header">
|
|
<stringProp name="Header.name">Accept-Encoding</stringProp>
|
|
<stringProp name="Header.value">gzip, deflate, br</stringProp>
|
|
</elementProp>
|
|
<elementProp name="User-Agent" elementType="Header">
|
|
<stringProp name="Header.name">User-Agent</stringProp>
|
|
<stringProp name="Header.value">Mozilla/${paidChargeCount}.0 (Macintosh; Intel Mac OS X 10.15; rv:106.0) Gecko/20100101 Firefox/106.0</stringProp>
|
|
</elementProp>
|
|
<elementProp name="Accept" elementType="Header">
|
|
<stringProp name="Header.name">Accept</stringProp>
|
|
<stringProp name="Header.value">text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8</stringProp>
|
|
</elementProp>
|
|
<elementProp name="Sec-Fetch-Dest" elementType="Header">
|
|
<stringProp name="Header.name">Sec-Fetch-Dest</stringProp>
|
|
<stringProp name="Header.value">empty</stringProp>
|
|
</elementProp>
|
|
</collectionProp>
|
|
</HeaderManager>
|
|
<hashTree/>
|
|
<ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Check Status Code 200" enabled="true">
|
|
<collectionProp name="Asserion.test_strings">
|
|
<stringProp name="49586">200</stringProp>
|
|
</collectionProp>
|
|
<stringProp name="Assertion.custom_message"></stringProp>
|
|
<stringProp name="Assertion.test_field">Assertion.response_code</stringProp>
|
|
<boolProp name="Assertion.assume_success">false</boolProp>
|
|
<intProp name="Assertion.test_type">8</intProp>
|
|
</ResponseAssertion>
|
|
<hashTree/>
|
|
<ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Check page contains `v-for'` text" enabled="true">
|
|
<collectionProp name="Asserion.test_strings">
|
|
<stringProp name="-505784460">v-for="extension in filteredExtensions"</stringProp>
|
|
</collectionProp>
|
|
<stringProp name="Assertion.custom_message"></stringProp>
|
|
<stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
|
|
<boolProp name="Assertion.assume_success">false</boolProp>
|
|
<intProp name="Assertion.test_type">2</intProp>
|
|
</ResponseAssertion>
|
|
<hashTree/>
|
|
</hashTree>
|
|
<HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="[lnurlp] Go to "lnurlp" page" enabled="true">
|
|
<elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true">
|
|
<collectionProp name="Arguments.arguments"/>
|
|
</elementProp>
|
|
<stringProp name="HTTPSampler.domain">${host}</stringProp>
|
|
<stringProp name="HTTPSampler.port">${port}</stringProp>
|
|
<stringProp name="HTTPSampler.protocol">${scheme}</stringProp>
|
|
<stringProp name="HTTPSampler.contentEncoding">UTF-8</stringProp>
|
|
<stringProp name="HTTPSampler.path">/lnurlp/</stringProp>
|
|
<stringProp name="HTTPSampler.method">GET</stringProp>
|
|
<boolProp name="HTTPSampler.follow_redirects">true</boolProp>
|
|
<boolProp name="HTTPSampler.auto_redirects">false</boolProp>
|
|
<boolProp name="HTTPSampler.use_keepalive">true</boolProp>
|
|
<boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
|
|
<stringProp name="HTTPSampler.embedded_url_re"></stringProp>
|
|
<stringProp name="HTTPSampler.connect_timeout"></stringProp>
|
|
<stringProp name="HTTPSampler.response_timeout"></stringProp>
|
|
</HTTPSamplerProxy>
|
|
<hashTree>
|
|
<HeaderManager guiclass="HeaderPanel" testclass="HeaderManager" testname="HTTP Header Manager" enabled="true">
|
|
<collectionProp name="HeaderManager.headers">
|
|
<elementProp name="Sec-Fetch-Mode" elementType="Header">
|
|
<stringProp name="Header.name">Sec-Fetch-Mode</stringProp>
|
|
<stringProp name="Header.value">same-origin</stringProp>
|
|
</elementProp>
|
|
<elementProp name="Referer" elementType="Header">
|
|
<stringProp name="Header.name">Referer</stringProp>
|
|
<stringProp name="Header.value">${scheme}://${host}:${port}/extensions?enable=lnurlp</stringProp>
|
|
</elementProp>
|
|
<elementProp name="Sec-Fetch-Site" elementType="Header">
|
|
<stringProp name="Header.name">Sec-Fetch-Site</stringProp>
|
|
<stringProp name="Header.value">same-origin</stringProp>
|
|
</elementProp>
|
|
<elementProp name="Accept-Language" elementType="Header">
|
|
<stringProp name="Header.name">Accept-Language</stringProp>
|
|
<stringProp name="Header.value">en-US,en;q=0.${paidChargeCount}</stringProp>
|
|
</elementProp>
|
|
<elementProp name="Upgrade-Insecure-Requests" elementType="Header">
|
|
<stringProp name="Header.name">Upgrade-Insecure-Requests</stringProp>
|
|
<stringProp name="Header.value">1</stringProp>
|
|
</elementProp>
|
|
<elementProp name="Accept-Encoding" elementType="Header">
|
|
<stringProp name="Header.name">Accept-Encoding</stringProp>
|
|
<stringProp name="Header.value">gzip, deflate, br</stringProp>
|
|
</elementProp>
|
|
<elementProp name="User-Agent" elementType="Header">
|
|
<stringProp name="Header.name">User-Agent</stringProp>
|
|
<stringProp name="Header.value">Mozilla/${paidChargeCount}.0 (Macintosh; Intel Mac OS X 10.15; rv:106.0) Gecko/20100101 Firefox/106.0</stringProp>
|
|
</elementProp>
|
|
<elementProp name="Accept" elementType="Header">
|
|
<stringProp name="Header.name">Accept</stringProp>
|
|
<stringProp name="Header.value">text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8</stringProp>
|
|
</elementProp>
|
|
<elementProp name="Sec-Fetch-Dest" elementType="Header">
|
|
<stringProp name="Header.name">Sec-Fetch-Dest</stringProp>
|
|
<stringProp name="Header.value">empty</stringProp>
|
|
</elementProp>
|
|
</collectionProp>
|
|
</HeaderManager>
|
|
<hashTree/>
|
|
<ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Check Status Code 200" enabled="true">
|
|
<collectionProp name="Asserion.test_strings">
|
|
<stringProp name="49586">200</stringProp>
|
|
</collectionProp>
|
|
<stringProp name="Assertion.custom_message"></stringProp>
|
|
<stringProp name="Assertion.test_field">Assertion.response_code</stringProp>
|
|
<boolProp name="Assertion.assume_success">false</boolProp>
|
|
<intProp name="Assertion.test_type">8</intProp>
|
|
</ResponseAssertion>
|
|
<hashTree/>
|
|
<ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Check page content" enabled="true">
|
|
<collectionProp name="Asserion.test_strings">
|
|
<stringProp name="2067560210">New pay link</stringProp>
|
|
<stringProp name="1232574677">curl -X POST http://127.0.0.1:5000/lnurlp/api/v1/links -d</stringProp>
|
|
</collectionProp>
|
|
<stringProp name="Assertion.custom_message"></stringProp>
|
|
<stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
|
|
<boolProp name="Assertion.assume_success">false</boolProp>
|
|
<intProp name="Assertion.test_type">2</intProp>
|
|
</ResponseAssertion>
|
|
<hashTree/>
|
|
</hashTree>
|
|
<HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="[lnurlp] Get pay links" enabled="true">
|
|
<elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true">
|
|
<collectionProp name="Arguments.arguments">
|
|
<elementProp name="all_wallets" elementType="HTTPArgument">
|
|
<boolProp name="HTTPArgument.always_encode">false</boolProp>
|
|
<stringProp name="Argument.name">all_wallets</stringProp>
|
|
<stringProp name="Argument.value">true</stringProp>
|
|
<stringProp name="Argument.metadata">=</stringProp>
|
|
<boolProp name="HTTPArgument.use_equals">true</boolProp>
|
|
</elementProp>
|
|
</collectionProp>
|
|
</elementProp>
|
|
<stringProp name="HTTPSampler.domain">${host}</stringProp>
|
|
<stringProp name="HTTPSampler.port">${port}</stringProp>
|
|
<stringProp name="HTTPSampler.protocol">${scheme}</stringProp>
|
|
<stringProp name="HTTPSampler.contentEncoding">UTF-8</stringProp>
|
|
<stringProp name="HTTPSampler.path">/lnurlp/api/v1/links</stringProp>
|
|
<stringProp name="HTTPSampler.method">GET</stringProp>
|
|
<boolProp name="HTTPSampler.follow_redirects">true</boolProp>
|
|
<boolProp name="HTTPSampler.auto_redirects">false</boolProp>
|
|
<boolProp name="HTTPSampler.use_keepalive">true</boolProp>
|
|
<boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
|
|
<stringProp name="HTTPSampler.embedded_url_re"></stringProp>
|
|
<stringProp name="HTTPSampler.connect_timeout"></stringProp>
|
|
<stringProp name="HTTPSampler.response_timeout"></stringProp>
|
|
</HTTPSamplerProxy>
|
|
<hashTree>
|
|
<HeaderManager guiclass="HeaderPanel" testclass="HeaderManager" testname="HTTP Header Manager" enabled="true">
|
|
<collectionProp name="HeaderManager.headers">
|
|
<elementProp name="Sec-Fetch-Mode" elementType="Header">
|
|
<stringProp name="Header.name">Sec-Fetch-Mode</stringProp>
|
|
<stringProp name="Header.value">cors</stringProp>
|
|
</elementProp>
|
|
<elementProp name="Sec-Fetch-Site" elementType="Header">
|
|
<stringProp name="Header.name">Sec-Fetch-Site</stringProp>
|
|
<stringProp name="Header.value">same-origin</stringProp>
|
|
</elementProp>
|
|
<elementProp name="Accept-Language" elementType="Header">
|
|
<stringProp name="Header.name">Accept-Language</stringProp>
|
|
<stringProp name="Header.value">en-US,en;q=0.${paidChargeCount}</stringProp>
|
|
</elementProp>
|
|
<elementProp name="X-Api-Key" elementType="Header">
|
|
<stringProp name="Header.name">X-Api-Key</stringProp>
|
|
<stringProp name="Header.value">${inkey}</stringProp>
|
|
</elementProp>
|
|
<elementProp name="Accept-Encoding" elementType="Header">
|
|
<stringProp name="Header.name">Accept-Encoding</stringProp>
|
|
<stringProp name="Header.value">gzip, deflate, br</stringProp>
|
|
</elementProp>
|
|
<elementProp name="User-Agent" elementType="Header">
|
|
<stringProp name="Header.name">User-Agent</stringProp>
|
|
<stringProp name="Header.value">Mozilla/${paidChargeCount}.0 (Macintosh; Intel Mac OS X 10.15; rv:106.0) Gecko/20100101 Firefox/106.0</stringProp>
|
|
</elementProp>
|
|
<elementProp name="Accept" elementType="Header">
|
|
<stringProp name="Header.name">Accept</stringProp>
|
|
<stringProp name="Header.value">application/json, text/plain, */*</stringProp>
|
|
</elementProp>
|
|
<elementProp name="Sec-Fetch-Dest" elementType="Header">
|
|
<stringProp name="Header.name">Sec-Fetch-Dest</stringProp>
|
|
<stringProp name="Header.value">empty</stringProp>
|
|
</elementProp>
|
|
</collectionProp>
|
|
</HeaderManager>
|
|
<hashTree/>
|
|
<ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Check Status Code 200" enabled="true">
|
|
<collectionProp name="Asserion.test_strings">
|
|
<stringProp name="49586">200</stringProp>
|
|
</collectionProp>
|
|
<stringProp name="Assertion.custom_message"></stringProp>
|
|
<stringProp name="Assertion.test_field">Assertion.response_code</stringProp>
|
|
<boolProp name="Assertion.assume_success">false</boolProp>
|
|
<intProp name="Assertion.test_type">8</intProp>
|
|
</ResponseAssertion>
|
|
<hashTree/>
|
|
<ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Check no pay link present" enabled="true">
|
|
<collectionProp name="Asserion.test_strings">
|
|
<stringProp name="2914">[]</stringProp>
|
|
</collectionProp>
|
|
<stringProp name="Assertion.custom_message"></stringProp>
|
|
<stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
|
|
<boolProp name="Assertion.assume_success">false</boolProp>
|
|
<intProp name="Assertion.test_type">8</intProp>
|
|
</ResponseAssertion>
|
|
<hashTree/>
|
|
</hashTree>
|
|
</hashTree>
|
|
<TransactionController guiclass="TransactionControllerGui" testclass="TransactionController" testname="Create ${lnurlpCount} Payment Links " enabled="true">
|
|
<boolProp name="TransactionController.includeTimers">false</boolProp>
|
|
<boolProp name="TransactionController.parent">true</boolProp>
|
|
</TransactionController>
|
|
<hashTree>
|
|
<LoopController guiclass="LoopControlPanel" testclass="LoopController" testname="Create Payment Links Loop" enabled="true">
|
|
<boolProp name="LoopController.continue_forever">true</boolProp>
|
|
<stringProp name="LoopController.loops">${lnurlpCount}</stringProp>
|
|
</LoopController>
|
|
<hashTree>
|
|
<CounterConfig guiclass="CounterConfigGui" testclass="CounterConfig" testname="LNURLP Counter" enabled="true">
|
|
<stringProp name="CounterConfig.start">1</stringProp>
|
|
<stringProp name="CounterConfig.end">${lnurlpCount}</stringProp>
|
|
<stringProp name="CounterConfig.incr">1</stringProp>
|
|
<stringProp name="CounterConfig.name">lnurlpCounter</stringProp>
|
|
<stringProp name="CounterConfig.format"></stringProp>
|
|
<boolProp name="CounterConfig.per_user">true</boolProp>
|
|
</CounterConfig>
|
|
<hashTree/>
|
|
<TransactionController guiclass="TransactionControllerGui" testclass="TransactionController" testname="Pay Links Payments ${lnurlpCounter}" enabled="true">
|
|
<boolProp name="TransactionController.includeTimers">false</boolProp>
|
|
<boolProp name="TransactionController.parent">true</boolProp>
|
|
</TransactionController>
|
|
<hashTree>
|
|
<HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="[lnurlp] Create pay link" enabled="true">
|
|
<boolProp name="HTTPSampler.postBodyRaw">true</boolProp>
|
|
<elementProp name="HTTPsampler.Arguments" elementType="Arguments">
|
|
<collectionProp name="Arguments.arguments">
|
|
<elementProp name="" elementType="HTTPArgument">
|
|
<boolProp name="HTTPArgument.always_encode">false</boolProp>
|
|
<stringProp name="Argument.value">{"description":"receive payments ${lnurlpCounter}","min":11,"comment_chars":128,"webhook_url":"http://localhost:8081","webhook_headers":"{\"h1\": \"1\"}","webhook_body":"{\"b2\": 2}","success_text":"All goood!","success_url":"https://lnbits.com","max":${lnurlpCounter}1}</stringProp>
|
|
<stringProp name="Argument.metadata">=</stringProp>
|
|
</elementProp>
|
|
</collectionProp>
|
|
</elementProp>
|
|
<stringProp name="HTTPSampler.domain">${host}</stringProp>
|
|
<stringProp name="HTTPSampler.port">${port}</stringProp>
|
|
<stringProp name="HTTPSampler.protocol">${scheme}</stringProp>
|
|
<stringProp name="HTTPSampler.contentEncoding">utf-8</stringProp>
|
|
<stringProp name="HTTPSampler.path">/lnurlp/api/v1/links</stringProp>
|
|
<stringProp name="HTTPSampler.method">POST</stringProp>
|
|
<boolProp name="HTTPSampler.follow_redirects">true</boolProp>
|
|
<boolProp name="HTTPSampler.auto_redirects">false</boolProp>
|
|
<boolProp name="HTTPSampler.use_keepalive">true</boolProp>
|
|
<boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
|
|
<stringProp name="HTTPSampler.embedded_url_re"></stringProp>
|
|
<stringProp name="HTTPSampler.connect_timeout"></stringProp>
|
|
<stringProp name="HTTPSampler.response_timeout"></stringProp>
|
|
</HTTPSamplerProxy>
|
|
<hashTree>
|
|
<HeaderManager guiclass="HeaderPanel" testclass="HeaderManager" testname="HTTP Header Manager" enabled="true">
|
|
<collectionProp name="HeaderManager.headers">
|
|
<elementProp name="Sec-Fetch-Mode" elementType="Header">
|
|
<stringProp name="Header.name">Sec-Fetch-Mode</stringProp>
|
|
<stringProp name="Header.value">cors</stringProp>
|
|
</elementProp>
|
|
<elementProp name="Sec-Fetch-Site" elementType="Header">
|
|
<stringProp name="Header.name">Sec-Fetch-Site</stringProp>
|
|
<stringProp name="Header.value">same-origin</stringProp>
|
|
</elementProp>
|
|
<elementProp name="Accept-Language" elementType="Header">
|
|
<stringProp name="Header.name">Accept-Language</stringProp>
|
|
<stringProp name="Header.value">en-US,en;q=0.${paidChargeCount}</stringProp>
|
|
</elementProp>
|
|
<elementProp name="Origin" elementType="Header">
|
|
<stringProp name="Header.name">Origin</stringProp>
|
|
<stringProp name="Header.value">${scheme}://${host}:${port}</stringProp>
|
|
</elementProp>
|
|
<elementProp name="Accept" elementType="Header">
|
|
<stringProp name="Header.name">Accept</stringProp>
|
|
<stringProp name="Header.value">application/json, text/plain, */*</stringProp>
|
|
</elementProp>
|
|
<elementProp name="X-Api-Key" elementType="Header">
|
|
<stringProp name="Header.name">X-Api-Key</stringProp>
|
|
<stringProp name="Header.value">${adminkey}</stringProp>
|
|
</elementProp>
|
|
<elementProp name="Content-Type" elementType="Header">
|
|
<stringProp name="Header.name">Content-Type</stringProp>
|
|
<stringProp name="Header.value">application/json;charset=utf-8</stringProp>
|
|
</elementProp>
|
|
<elementProp name="Accept-Encoding" elementType="Header">
|
|
<stringProp name="Header.name">Accept-Encoding</stringProp>
|
|
<stringProp name="Header.value">gzip, deflate, br</stringProp>
|
|
</elementProp>
|
|
<elementProp name="User-Agent" elementType="Header">
|
|
<stringProp name="Header.name">User-Agent</stringProp>
|
|
<stringProp name="Header.value">Mozilla/${paidChargeCount}.0 (Macintosh; Intel Mac OS X 10.15; rv:106.0) Gecko/20100101 Firefox/106.0</stringProp>
|
|
</elementProp>
|
|
<elementProp name="Sec-Fetch-Dest" elementType="Header">
|
|
<stringProp name="Header.name">Sec-Fetch-Dest</stringProp>
|
|
<stringProp name="Header.value">empty</stringProp>
|
|
</elementProp>
|
|
</collectionProp>
|
|
</HeaderManager>
|
|
<hashTree/>
|
|
<ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Check Status Code 201" enabled="true">
|
|
<collectionProp name="Asserion.test_strings">
|
|
<stringProp name="49587">201</stringProp>
|
|
</collectionProp>
|
|
<stringProp name="Assertion.custom_message"></stringProp>
|
|
<stringProp name="Assertion.test_field">Assertion.response_code</stringProp>
|
|
<boolProp name="Assertion.assume_success">false</boolProp>
|
|
<intProp name="Assertion.test_type">8</intProp>
|
|
</ResponseAssertion>
|
|
<hashTree/>
|
|
<JSR223Assertion guiclass="TestBeanGUI" testclass="JSR223Assertion" testname="Check created pay link" enabled="true">
|
|
<stringProp name="scriptLanguage">javascript</stringProp>
|
|
<stringProp name="parameters"></stringProp>
|
|
<stringProp name="filename"></stringProp>
|
|
<stringProp name="cacheKey">true</stringProp>
|
|
<stringProp name="script">var resp = JSON.parse(prev.getResponseDataAsString())
|
|
|
|
var walletId = vars.get("walletId")
|
|
var lnurlpCounter = +vars.get("lnurlpCounter")
|
|
|
|
if (!resp.id) {
|
|
AssertionResult.setFailureMessage("Pay Link not created");
|
|
AssertionResult.setFailure(true)
|
|
} else if (resp.wallet !== walletId){
|
|
AssertionResult.setFailureMessage("Pay Link description expected to be '"+walletId+"', but was: " + resp.wallet);
|
|
AssertionResult.setFailure(true)
|
|
} else if (resp.description !== "receive payments "+lnurlpCounter){
|
|
AssertionResult.setFailureMessage("Pay Link description expected to be 'receive payments "+lnurlpCounter+"', but was: " + resp.description);
|
|
AssertionResult.setFailure(true)
|
|
}</stringProp>
|
|
</JSR223Assertion>
|
|
<hashTree/>
|
|
<JSR223PostProcessor guiclass="TestBeanGUI" testclass="JSR223PostProcessor" testname="Extract pay link ID" enabled="true">
|
|
<stringProp name="scriptLanguage">javascript</stringProp>
|
|
<stringProp name="parameters"></stringProp>
|
|
<stringProp name="filename"></stringProp>
|
|
<stringProp name="cacheKey">true</stringProp>
|
|
<stringProp name="script">var resp = JSON.parse(prev.getResponseDataAsString())
|
|
|
|
vars.put("payLinkId", resp.id || 'no-pay-link-id');
|
|
vars.put("payLinkLnurl", resp.lnurl || 'no-pay-link-lnurl');</stringProp>
|
|
</JSR223PostProcessor>
|
|
<hashTree/>
|
|
</hashTree>
|
|
<HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="[lnurlp] Go to pay link page" enabled="true">
|
|
<elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true">
|
|
<collectionProp name="Arguments.arguments"/>
|
|
</elementProp>
|
|
<stringProp name="HTTPSampler.domain">${host}</stringProp>
|
|
<stringProp name="HTTPSampler.port">${port}</stringProp>
|
|
<stringProp name="HTTPSampler.protocol">${scheme}</stringProp>
|
|
<stringProp name="HTTPSampler.contentEncoding">UTF-8</stringProp>
|
|
<stringProp name="HTTPSampler.path">/lnurlp/link/${payLinkId}</stringProp>
|
|
<stringProp name="HTTPSampler.method">GET</stringProp>
|
|
<boolProp name="HTTPSampler.follow_redirects">true</boolProp>
|
|
<boolProp name="HTTPSampler.auto_redirects">false</boolProp>
|
|
<boolProp name="HTTPSampler.use_keepalive">true</boolProp>
|
|
<boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
|
|
<stringProp name="HTTPSampler.embedded_url_re"></stringProp>
|
|
<stringProp name="HTTPSampler.connect_timeout"></stringProp>
|
|
<stringProp name="HTTPSampler.response_timeout"></stringProp>
|
|
</HTTPSamplerProxy>
|
|
<hashTree>
|
|
<HeaderManager guiclass="HeaderPanel" testclass="HeaderManager" testname="HTTP Header Manager" enabled="true">
|
|
<collectionProp name="HeaderManager.headers">
|
|
<elementProp name="Sec-Fetch-Mode" elementType="Header">
|
|
<stringProp name="Header.name">Sec-Fetch-Mode</stringProp>
|
|
<stringProp name="Header.value">same-origin</stringProp>
|
|
</elementProp>
|
|
<elementProp name="Sec-Fetch-Site" elementType="Header">
|
|
<stringProp name="Header.name">Sec-Fetch-Site</stringProp>
|
|
<stringProp name="Header.value">same-origin</stringProp>
|
|
</elementProp>
|
|
<elementProp name="Accept-Language" elementType="Header">
|
|
<stringProp name="Header.name">Accept-Language</stringProp>
|
|
<stringProp name="Header.value">en-US,en;q=0.${paidChargeCount}</stringProp>
|
|
</elementProp>
|
|
<elementProp name="Upgrade-Insecure-Requests" elementType="Header">
|
|
<stringProp name="Header.name">Upgrade-Insecure-Requests</stringProp>
|
|
<stringProp name="Header.value">1</stringProp>
|
|
</elementProp>
|
|
<elementProp name="Accept-Encoding" elementType="Header">
|
|
<stringProp name="Header.name">Accept-Encoding</stringProp>
|
|
<stringProp name="Header.value">gzip, deflate, br</stringProp>
|
|
</elementProp>
|
|
<elementProp name="User-Agent" elementType="Header">
|
|
<stringProp name="Header.name">User-Agent</stringProp>
|
|
<stringProp name="Header.value">Mozilla/${paidChargeCount}.0 (Macintosh; Intel Mac OS X 10.15; rv:106.0) Gecko/20100101 Firefox/106.0</stringProp>
|
|
</elementProp>
|
|
<elementProp name="Accept" elementType="Header">
|
|
<stringProp name="Header.name">Accept</stringProp>
|
|
<stringProp name="Header.value">text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8</stringProp>
|
|
</elementProp>
|
|
<elementProp name="Sec-Fetch-Dest" elementType="Header">
|
|
<stringProp name="Header.name">Sec-Fetch-Dest</stringProp>
|
|
<stringProp name="Header.value">empty</stringProp>
|
|
</elementProp>
|
|
</collectionProp>
|
|
</HeaderManager>
|
|
<hashTree/>
|
|
<ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Check Status Code 200" enabled="true">
|
|
<collectionProp name="Asserion.test_strings">
|
|
<stringProp name="49586">200</stringProp>
|
|
</collectionProp>
|
|
<stringProp name="Assertion.custom_message"></stringProp>
|
|
<stringProp name="Assertion.test_field">Assertion.response_code</stringProp>
|
|
<boolProp name="Assertion.assume_success">false</boolProp>
|
|
<intProp name="Assertion.test_type">8</intProp>
|
|
</ResponseAssertion>
|
|
<hashTree/>
|
|
<ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Check page content" enabled="true">
|
|
<collectionProp name="Asserion.test_strings">
|
|
<stringProp name="-416732094">Copy LNURL</stringProp>
|
|
<stringProp name="1760971099">${payLinkLnurl}</stringProp>
|
|
</collectionProp>
|
|
<stringProp name="Assertion.custom_message"></stringProp>
|
|
<stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
|
|
<boolProp name="Assertion.assume_success">false</boolProp>
|
|
<intProp name="Assertion.test_type">2</intProp>
|
|
</ResponseAssertion>
|
|
<hashTree/>
|
|
</hashTree>
|
|
<HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="[lnurlp] Get pay link" enabled="true">
|
|
<elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true">
|
|
<collectionProp name="Arguments.arguments">
|
|
<elementProp name="all_wallets" elementType="HTTPArgument">
|
|
<boolProp name="HTTPArgument.always_encode">false</boolProp>
|
|
<stringProp name="Argument.name">all_wallets</stringProp>
|
|
<stringProp name="Argument.value">true</stringProp>
|
|
<stringProp name="Argument.metadata">=</stringProp>
|
|
<boolProp name="HTTPArgument.use_equals">true</boolProp>
|
|
</elementProp>
|
|
</collectionProp>
|
|
</elementProp>
|
|
<stringProp name="HTTPSampler.domain">${host}</stringProp>
|
|
<stringProp name="HTTPSampler.port">${port}</stringProp>
|
|
<stringProp name="HTTPSampler.protocol">${scheme}</stringProp>
|
|
<stringProp name="HTTPSampler.contentEncoding">UTF-8</stringProp>
|
|
<stringProp name="HTTPSampler.path">/lnurlp/api/v1/links/${payLinkId}</stringProp>
|
|
<stringProp name="HTTPSampler.method">GET</stringProp>
|
|
<boolProp name="HTTPSampler.follow_redirects">true</boolProp>
|
|
<boolProp name="HTTPSampler.auto_redirects">false</boolProp>
|
|
<boolProp name="HTTPSampler.use_keepalive">true</boolProp>
|
|
<boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
|
|
<stringProp name="HTTPSampler.embedded_url_re"></stringProp>
|
|
<stringProp name="HTTPSampler.connect_timeout"></stringProp>
|
|
<stringProp name="HTTPSampler.response_timeout"></stringProp>
|
|
</HTTPSamplerProxy>
|
|
<hashTree>
|
|
<HeaderManager guiclass="HeaderPanel" testclass="HeaderManager" testname="HTTP Header Manager" enabled="true">
|
|
<collectionProp name="HeaderManager.headers">
|
|
<elementProp name="Sec-Fetch-Mode" elementType="Header">
|
|
<stringProp name="Header.name">Sec-Fetch-Mode</stringProp>
|
|
<stringProp name="Header.value">cors</stringProp>
|
|
</elementProp>
|
|
<elementProp name="Sec-Fetch-Site" elementType="Header">
|
|
<stringProp name="Header.name">Sec-Fetch-Site</stringProp>
|
|
<stringProp name="Header.value">same-origin</stringProp>
|
|
</elementProp>
|
|
<elementProp name="Accept-Language" elementType="Header">
|
|
<stringProp name="Header.name">Accept-Language</stringProp>
|
|
<stringProp name="Header.value">en-US,en;q=0.${paidChargeCount}</stringProp>
|
|
</elementProp>
|
|
<elementProp name="X-Api-Key" elementType="Header">
|
|
<stringProp name="Header.name">X-Api-Key</stringProp>
|
|
<stringProp name="Header.value">${inkey}</stringProp>
|
|
</elementProp>
|
|
<elementProp name="Accept-Encoding" elementType="Header">
|
|
<stringProp name="Header.name">Accept-Encoding</stringProp>
|
|
<stringProp name="Header.value">gzip, deflate, br</stringProp>
|
|
</elementProp>
|
|
<elementProp name="User-Agent" elementType="Header">
|
|
<stringProp name="Header.name">User-Agent</stringProp>
|
|
<stringProp name="Header.value">Mozilla/${paidChargeCount}.0 (Macintosh; Intel Mac OS X 10.15; rv:106.0) Gecko/20100101 Firefox/106.0</stringProp>
|
|
</elementProp>
|
|
<elementProp name="Accept" elementType="Header">
|
|
<stringProp name="Header.name">Accept</stringProp>
|
|
<stringProp name="Header.value">application/json, text/plain, */*</stringProp>
|
|
</elementProp>
|
|
<elementProp name="Sec-Fetch-Dest" elementType="Header">
|
|
<stringProp name="Header.name">Sec-Fetch-Dest</stringProp>
|
|
<stringProp name="Header.value">empty</stringProp>
|
|
</elementProp>
|
|
</collectionProp>
|
|
</HeaderManager>
|
|
<hashTree/>
|
|
<ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Check Status Code 200" enabled="true">
|
|
<collectionProp name="Asserion.test_strings">
|
|
<stringProp name="49586">200</stringProp>
|
|
</collectionProp>
|
|
<stringProp name="Assertion.custom_message"></stringProp>
|
|
<stringProp name="Assertion.test_field">Assertion.response_code</stringProp>
|
|
<boolProp name="Assertion.assume_success">false</boolProp>
|
|
<intProp name="Assertion.test_type">8</intProp>
|
|
</ResponseAssertion>
|
|
<hashTree/>
|
|
<JSONPathAssertion guiclass="JSONPathAssertionGui" testclass="JSONPathAssertion" testname="Check lnurlp" enabled="true">
|
|
<stringProp name="JSON_PATH">lnurl</stringProp>
|
|
<stringProp name="EXPECTED_VALUE">${payLinkLnurl}</stringProp>
|
|
<boolProp name="JSONVALIDATION">true</boolProp>
|
|
<boolProp name="EXPECT_NULL">false</boolProp>
|
|
<boolProp name="INVERT">false</boolProp>
|
|
<boolProp name="ISREGEX">true</boolProp>
|
|
</JSONPathAssertion>
|
|
<hashTree/>
|
|
</hashTree>
|
|
<HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="[lnurlp] Decode LNURLp" enabled="true">
|
|
<elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true">
|
|
<collectionProp name="Arguments.arguments">
|
|
<elementProp name="all_wallets" elementType="HTTPArgument">
|
|
<boolProp name="HTTPArgument.always_encode">false</boolProp>
|
|
<stringProp name="Argument.name">all_wallets</stringProp>
|
|
<stringProp name="Argument.value">true</stringProp>
|
|
<stringProp name="Argument.metadata">=</stringProp>
|
|
<boolProp name="HTTPArgument.use_equals">true</boolProp>
|
|
</elementProp>
|
|
</collectionProp>
|
|
</elementProp>
|
|
<stringProp name="HTTPSampler.domain">${host}</stringProp>
|
|
<stringProp name="HTTPSampler.port">${port}</stringProp>
|
|
<stringProp name="HTTPSampler.protocol">${scheme}</stringProp>
|
|
<stringProp name="HTTPSampler.contentEncoding">UTF-8</stringProp>
|
|
<stringProp name="HTTPSampler.path">/api/v1/lnurlscan/${payLinkLnurl}</stringProp>
|
|
<stringProp name="HTTPSampler.method">GET</stringProp>
|
|
<boolProp name="HTTPSampler.follow_redirects">true</boolProp>
|
|
<boolProp name="HTTPSampler.auto_redirects">false</boolProp>
|
|
<boolProp name="HTTPSampler.use_keepalive">true</boolProp>
|
|
<boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
|
|
<stringProp name="HTTPSampler.embedded_url_re"></stringProp>
|
|
<stringProp name="HTTPSampler.connect_timeout"></stringProp>
|
|
<stringProp name="HTTPSampler.response_timeout"></stringProp>
|
|
</HTTPSamplerProxy>
|
|
<hashTree>
|
|
<HeaderManager guiclass="HeaderPanel" testclass="HeaderManager" testname="HTTP Header Manager" enabled="true">
|
|
<collectionProp name="HeaderManager.headers">
|
|
<elementProp name="Sec-Fetch-Mode" elementType="Header">
|
|
<stringProp name="Header.name">Sec-Fetch-Mode</stringProp>
|
|
<stringProp name="Header.value">cors</stringProp>
|
|
</elementProp>
|
|
<elementProp name="Sec-Fetch-Site" elementType="Header">
|
|
<stringProp name="Header.name">Sec-Fetch-Site</stringProp>
|
|
<stringProp name="Header.value">same-origin</stringProp>
|
|
</elementProp>
|
|
<elementProp name="Accept-Language" elementType="Header">
|
|
<stringProp name="Header.name">Accept-Language</stringProp>
|
|
<stringProp name="Header.value">en-US,en;q=0.${paidChargeCount}</stringProp>
|
|
</elementProp>
|
|
<elementProp name="X-Api-Key" elementType="Header">
|
|
<stringProp name="Header.name">X-Api-Key</stringProp>
|
|
<stringProp name="Header.value">${adminWalletKey}</stringProp>
|
|
</elementProp>
|
|
<elementProp name="Accept-Encoding" elementType="Header">
|
|
<stringProp name="Header.name">Accept-Encoding</stringProp>
|
|
<stringProp name="Header.value">gzip, deflate, br</stringProp>
|
|
</elementProp>
|
|
<elementProp name="User-Agent" elementType="Header">
|
|
<stringProp name="Header.name">User-Agent</stringProp>
|
|
<stringProp name="Header.value">Mozilla/${paidChargeCount}.0 (Macintosh; Intel Mac OS X 10.15; rv:106.0) Gecko/20100101 Firefox/106.0</stringProp>
|
|
</elementProp>
|
|
<elementProp name="Accept" elementType="Header">
|
|
<stringProp name="Header.name">Accept</stringProp>
|
|
<stringProp name="Header.value">application/json, text/plain, */*</stringProp>
|
|
</elementProp>
|
|
<elementProp name="Sec-Fetch-Dest" elementType="Header">
|
|
<stringProp name="Header.name">Sec-Fetch-Dest</stringProp>
|
|
<stringProp name="Header.value">empty</stringProp>
|
|
</elementProp>
|
|
</collectionProp>
|
|
</HeaderManager>
|
|
<hashTree/>
|
|
<ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Check Status Code 200" enabled="true">
|
|
<collectionProp name="Asserion.test_strings">
|
|
<stringProp name="49586">200</stringProp>
|
|
</collectionProp>
|
|
<stringProp name="Assertion.custom_message"></stringProp>
|
|
<stringProp name="Assertion.test_field">Assertion.response_code</stringProp>
|
|
<boolProp name="Assertion.assume_success">false</boolProp>
|
|
<intProp name="Assertion.test_type">8</intProp>
|
|
</ResponseAssertion>
|
|
<hashTree/>
|
|
<JSONPathAssertion guiclass="JSONPathAssertionGui" testclass="JSONPathAssertion" testname="Check lnurlp" enabled="true">
|
|
<stringProp name="JSON_PATH">domain</stringProp>
|
|
<stringProp name="EXPECTED_VALUE">${host}:${port}</stringProp>
|
|
<boolProp name="JSONVALIDATION">true</boolProp>
|
|
<boolProp name="EXPECT_NULL">false</boolProp>
|
|
<boolProp name="INVERT">false</boolProp>
|
|
<boolProp name="ISREGEX">true</boolProp>
|
|
</JSONPathAssertion>
|
|
<hashTree/>
|
|
<JSONPathAssertion guiclass="JSONPathAssertionGui" testclass="JSONPathAssertion" testname="Check tag" enabled="true">
|
|
<stringProp name="JSON_PATH">tag</stringProp>
|
|
<stringProp name="EXPECTED_VALUE">payRequest</stringProp>
|
|
<boolProp name="JSONVALIDATION">true</boolProp>
|
|
<boolProp name="EXPECT_NULL">false</boolProp>
|
|
<boolProp name="INVERT">false</boolProp>
|
|
<boolProp name="ISREGEX">true</boolProp>
|
|
</JSONPathAssertion>
|
|
<hashTree/>
|
|
<JSONPathAssertion guiclass="JSONPathAssertionGui" testclass="JSONPathAssertion" testname="Check commentAllowed" enabled="true">
|
|
<stringProp name="JSON_PATH">commentAllowed</stringProp>
|
|
<stringProp name="EXPECTED_VALUE">128</stringProp>
|
|
<boolProp name="JSONVALIDATION">true</boolProp>
|
|
<boolProp name="EXPECT_NULL">false</boolProp>
|
|
<boolProp name="INVERT">false</boolProp>
|
|
<boolProp name="ISREGEX">true</boolProp>
|
|
</JSONPathAssertion>
|
|
<hashTree/>
|
|
<JSONPathAssertion guiclass="JSONPathAssertionGui" testclass="JSONPathAssertion" testname="Check kind" enabled="true">
|
|
<stringProp name="JSON_PATH">kind</stringProp>
|
|
<stringProp name="EXPECTED_VALUE">pay</stringProp>
|
|
<boolProp name="JSONVALIDATION">true</boolProp>
|
|
<boolProp name="EXPECT_NULL">false</boolProp>
|
|
<boolProp name="INVERT">false</boolProp>
|
|
<boolProp name="ISREGEX">true</boolProp>
|
|
</JSONPathAssertion>
|
|
<hashTree/>
|
|
<JSONPathAssertion guiclass="JSONPathAssertionGui" testclass="JSONPathAssertion" testname="Check description" enabled="true">
|
|
<stringProp name="JSON_PATH">description</stringProp>
|
|
<stringProp name="EXPECTED_VALUE">receive payments ${lnurlpCounter}</stringProp>
|
|
<boolProp name="JSONVALIDATION">true</boolProp>
|
|
<boolProp name="EXPECT_NULL">false</boolProp>
|
|
<boolProp name="INVERT">false</boolProp>
|
|
<boolProp name="ISREGEX">true</boolProp>
|
|
</JSONPathAssertion>
|
|
<hashTree/>
|
|
<JSONPostProcessor guiclass="JSONPostProcessorGui" testclass="JSONPostProcessor" testname="Extract callback" enabled="true">
|
|
<stringProp name="JSONPostProcessor.referenceNames">payLinkCallback</stringProp>
|
|
<stringProp name="JSONPostProcessor.jsonPathExprs">callback</stringProp>
|
|
<stringProp name="JSONPostProcessor.match_numbers">0</stringProp>
|
|
<stringProp name="JSONPostProcessor.defaultValues">no-paylink-callback</stringProp>
|
|
</JSONPostProcessor>
|
|
<hashTree/>
|
|
<JSONPostProcessor guiclass="JSONPostProcessorGui" testclass="JSONPostProcessor" testname="Extract description hash" enabled="true">
|
|
<stringProp name="JSONPostProcessor.referenceNames">payLinkDescriptionHash</stringProp>
|
|
<stringProp name="JSONPostProcessor.jsonPathExprs">description_hash</stringProp>
|
|
<stringProp name="JSONPostProcessor.match_numbers">0</stringProp>
|
|
<stringProp name="JSONPostProcessor.defaultValues">no-paylink-description-hash</stringProp>
|
|
</JSONPostProcessor>
|
|
<hashTree/>
|
|
</hashTree>
|
|
<LoopController guiclass="LoopControlPanel" testclass="LoopController" testname="Make Payments Loop" enabled="true">
|
|
<boolProp name="LoopController.continue_forever">true</boolProp>
|
|
<stringProp name="LoopController.loops">${paymentCountPerLnurlp}</stringProp>
|
|
</LoopController>
|
|
<hashTree>
|
|
<CounterConfig guiclass="CounterConfigGui" testclass="CounterConfig" testname="LNURL pay counter" enabled="true">
|
|
<stringProp name="CounterConfig.start">1</stringProp>
|
|
<stringProp name="CounterConfig.end">${paymentCountPerLnurlp}</stringProp>
|
|
<stringProp name="CounterConfig.incr">1</stringProp>
|
|
<stringProp name="CounterConfig.name">lnurlpPaymentCounter</stringProp>
|
|
<stringProp name="CounterConfig.format"></stringProp>
|
|
<boolProp name="CounterConfig.per_user">true</boolProp>
|
|
</CounterConfig>
|
|
<hashTree/>
|
|
<TransactionController guiclass="TransactionControllerGui" testclass="TransactionController" testname="Make Payment ${lnurlpPaymentCounter}" enabled="true">
|
|
<boolProp name="TransactionController.includeTimers">false</boolProp>
|
|
<boolProp name="TransactionController.parent">true</boolProp>
|
|
</TransactionController>
|
|
<hashTree>
|
|
<HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="[lnurlp] Pay LNURLp" enabled="true">
|
|
<boolProp name="HTTPSampler.postBodyRaw">true</boolProp>
|
|
<elementProp name="HTTPsampler.Arguments" elementType="Arguments">
|
|
<collectionProp name="Arguments.arguments">
|
|
<elementProp name="" elementType="HTTPArgument">
|
|
<boolProp name="HTTPArgument.always_encode">false</boolProp>
|
|
<stringProp name="Argument.value">{"callback":"${scheme}://${host}:${port}/lnurlp/api/v1/lnurl/cb/${payLinkId}","description_hash":"${payLinkDescriptionHash}","amount":1${lnurlpCounter}000,"comment":"xxq ${lnurlpCounter}","description":"receive payments ${lnurlpCounter}"}</stringProp>
|
|
<stringProp name="Argument.metadata">=</stringProp>
|
|
</elementProp>
|
|
</collectionProp>
|
|
</elementProp>
|
|
<stringProp name="HTTPSampler.domain">${host}</stringProp>
|
|
<stringProp name="HTTPSampler.port">${port}</stringProp>
|
|
<stringProp name="HTTPSampler.protocol">${scheme}</stringProp>
|
|
<stringProp name="HTTPSampler.contentEncoding">utf-8</stringProp>
|
|
<stringProp name="HTTPSampler.path">/api/v1/payments/lnurl</stringProp>
|
|
<stringProp name="HTTPSampler.method">POST</stringProp>
|
|
<boolProp name="HTTPSampler.follow_redirects">true</boolProp>
|
|
<boolProp name="HTTPSampler.auto_redirects">false</boolProp>
|
|
<boolProp name="HTTPSampler.use_keepalive">true</boolProp>
|
|
<boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
|
|
<stringProp name="HTTPSampler.embedded_url_re"></stringProp>
|
|
<stringProp name="HTTPSampler.connect_timeout"></stringProp>
|
|
<stringProp name="HTTPSampler.response_timeout"></stringProp>
|
|
</HTTPSamplerProxy>
|
|
<hashTree>
|
|
<HeaderManager guiclass="HeaderPanel" testclass="HeaderManager" testname="HTTP Header Manager" enabled="true">
|
|
<collectionProp name="HeaderManager.headers">
|
|
<elementProp name="Sec-Fetch-Mode" elementType="Header">
|
|
<stringProp name="Header.name">Sec-Fetch-Mode</stringProp>
|
|
<stringProp name="Header.value">cors</stringProp>
|
|
</elementProp>
|
|
<elementProp name="Sec-Fetch-Site" elementType="Header">
|
|
<stringProp name="Header.name">Sec-Fetch-Site</stringProp>
|
|
<stringProp name="Header.value">same-origin</stringProp>
|
|
</elementProp>
|
|
<elementProp name="Accept-Language" elementType="Header">
|
|
<stringProp name="Header.name">Accept-Language</stringProp>
|
|
<stringProp name="Header.value">en-US,en;q=0.${lnurlpCount}</stringProp>
|
|
</elementProp>
|
|
<elementProp name="Origin" elementType="Header">
|
|
<stringProp name="Header.name">Origin</stringProp>
|
|
<stringProp name="Header.value">${scheme}://${host}:${port}</stringProp>
|
|
</elementProp>
|
|
<elementProp name="Accept" elementType="Header">
|
|
<stringProp name="Header.name">Accept</stringProp>
|
|
<stringProp name="Header.value">application/json, text/plain, */*</stringProp>
|
|
</elementProp>
|
|
<elementProp name="X-Api-Key" elementType="Header">
|
|
<stringProp name="Header.name">X-Api-Key</stringProp>
|
|
<stringProp name="Header.value">${adminWalletKey}</stringProp>
|
|
</elementProp>
|
|
<elementProp name="Content-Type" elementType="Header">
|
|
<stringProp name="Header.name">Content-Type</stringProp>
|
|
<stringProp name="Header.value">application/json;charset=utf-8</stringProp>
|
|
</elementProp>
|
|
<elementProp name="Accept-Encoding" elementType="Header">
|
|
<stringProp name="Header.name">Accept-Encoding</stringProp>
|
|
<stringProp name="Header.value">gzip, deflate, br</stringProp>
|
|
</elementProp>
|
|
<elementProp name="User-Agent" elementType="Header">
|
|
<stringProp name="Header.name">User-Agent</stringProp>
|
|
<stringProp name="Header.value">Mozilla/${lnurlpCount}.0 (Macintosh; Intel Mac OS X 10.15; rv:106.0) Gecko/20100101 Firefox/106.0</stringProp>
|
|
</elementProp>
|
|
<elementProp name="Sec-Fetch-Dest" elementType="Header">
|
|
<stringProp name="Header.name">Sec-Fetch-Dest</stringProp>
|
|
<stringProp name="Header.value">empty</stringProp>
|
|
</elementProp>
|
|
</collectionProp>
|
|
</HeaderManager>
|
|
<hashTree/>
|
|
<ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Check Status Code 200" enabled="true">
|
|
<collectionProp name="Asserion.test_strings">
|
|
<stringProp name="49586">200</stringProp>
|
|
</collectionProp>
|
|
<stringProp name="Assertion.custom_message"></stringProp>
|
|
<stringProp name="Assertion.test_field">Assertion.response_code</stringProp>
|
|
<boolProp name="Assertion.assume_success">false</boolProp>
|
|
<intProp name="Assertion.test_type">8</intProp>
|
|
</ResponseAssertion>
|
|
<hashTree/>
|
|
<JSONPathAssertion guiclass="JSONPathAssertionGui" testclass="JSONPathAssertion" testname="Check success action present" enabled="true">
|
|
<stringProp name="JSON_PATH">success_action</stringProp>
|
|
<stringProp name="EXPECTED_VALUE"></stringProp>
|
|
<boolProp name="JSONVALIDATION">false</boolProp>
|
|
<boolProp name="EXPECT_NULL">false</boolProp>
|
|
<boolProp name="INVERT">false</boolProp>
|
|
<boolProp name="ISREGEX">false</boolProp>
|
|
</JSONPathAssertion>
|
|
<hashTree/>
|
|
<JSONPostProcessor guiclass="JSONPostProcessorGui" testclass="JSONPostProcessor" testname="Extract payment hash" enabled="true">
|
|
<stringProp name="JSONPostProcessor.referenceNames">paymenHash</stringProp>
|
|
<stringProp name="JSONPostProcessor.jsonPathExprs">payment_hash</stringProp>
|
|
<stringProp name="JSONPostProcessor.match_numbers">0</stringProp>
|
|
<stringProp name="JSONPostProcessor.defaultValues">no-paymenthash</stringProp>
|
|
</JSONPostProcessor>
|
|
<hashTree/>
|
|
</hashTree>
|
|
<ConstantTimer guiclass="ConstantTimerGui" testclass="ConstantTimer" testname="Wait a bit" enabled="true">
|
|
<stringProp name="ConstantTimer.delay">3000</stringProp>
|
|
<stringProp name="TestPlan.comments">for the webhook to be called</stringProp>
|
|
</ConstantTimer>
|
|
<hashTree/>
|
|
<HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="[wallet] Get Payment" enabled="true">
|
|
<elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true">
|
|
<collectionProp name="Arguments.arguments"/>
|
|
</elementProp>
|
|
<stringProp name="HTTPSampler.domain">${host}</stringProp>
|
|
<stringProp name="HTTPSampler.port">${port}</stringProp>
|
|
<stringProp name="HTTPSampler.protocol">${scheme}</stringProp>
|
|
<stringProp name="HTTPSampler.contentEncoding">UTF-8</stringProp>
|
|
<stringProp name="HTTPSampler.path">/api/v1/payments/${paymenHash}</stringProp>
|
|
<stringProp name="HTTPSampler.method">GET</stringProp>
|
|
<boolProp name="HTTPSampler.follow_redirects">true</boolProp>
|
|
<boolProp name="HTTPSampler.auto_redirects">false</boolProp>
|
|
<boolProp name="HTTPSampler.use_keepalive">true</boolProp>
|
|
<boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
|
|
<stringProp name="HTTPSampler.embedded_url_re"></stringProp>
|
|
<stringProp name="HTTPSampler.connect_timeout"></stringProp>
|
|
<stringProp name="HTTPSampler.response_timeout"></stringProp>
|
|
</HTTPSamplerProxy>
|
|
<hashTree>
|
|
<HeaderManager guiclass="HeaderPanel" testclass="HeaderManager" testname="HTTP Header Manager" enabled="true">
|
|
<collectionProp name="HeaderManager.headers">
|
|
<elementProp name="X-Api-Key" elementType="Header">
|
|
<stringProp name="Header.name">X-Api-Key</stringProp>
|
|
<stringProp name="Header.value">${inkey}</stringProp>
|
|
</elementProp>
|
|
</collectionProp>
|
|
</HeaderManager>
|
|
<hashTree/>
|
|
<ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Check Status Code 200" enabled="true">
|
|
<collectionProp name="Asserion.test_strings">
|
|
<stringProp name="49586">200</stringProp>
|
|
</collectionProp>
|
|
<stringProp name="Assertion.custom_message"></stringProp>
|
|
<stringProp name="Assertion.test_field">Assertion.response_code</stringProp>
|
|
<boolProp name="Assertion.assume_success">false</boolProp>
|
|
<intProp name="Assertion.test_type">8</intProp>
|
|
</ResponseAssertion>
|
|
<hashTree/>
|
|
<JSONPathAssertion guiclass="JSONPathAssertionGui" testclass="JSONPathAssertion" testname="Check webhook success" enabled="true">
|
|
<stringProp name="JSON_PATH">$.details.extra.wh_success</stringProp>
|
|
<stringProp name="EXPECTED_VALUE">true</stringProp>
|
|
<boolProp name="JSONVALIDATION">true</boolProp>
|
|
<boolProp name="EXPECT_NULL">false</boolProp>
|
|
<boolProp name="INVERT">false</boolProp>
|
|
<boolProp name="ISREGEX">false</boolProp>
|
|
</JSONPathAssertion>
|
|
<hashTree/>
|
|
<JSONPathAssertion guiclass="JSONPathAssertionGui" testclass="JSONPathAssertion" testname="Check webhook message" enabled="true">
|
|
<stringProp name="JSON_PATH">$.details.extra.wh_message</stringProp>
|
|
<stringProp name="EXPECTED_VALUE">OK</stringProp>
|
|
<boolProp name="JSONVALIDATION">true</boolProp>
|
|
<boolProp name="EXPECT_NULL">false</boolProp>
|
|
<boolProp name="INVERT">false</boolProp>
|
|
<boolProp name="ISREGEX">false</boolProp>
|
|
</JSONPathAssertion>
|
|
<hashTree/>
|
|
<JSR223Assertion guiclass="TestBeanGUI" testclass="JSR223Assertion" testname="Check webhook response" enabled="true">
|
|
<stringProp name="scriptLanguage">javascript</stringProp>
|
|
<stringProp name="parameters"></stringProp>
|
|
<stringProp name="filename"></stringProp>
|
|
<stringProp name="cacheKey">true</stringProp>
|
|
<stringProp name="script">var resp = JSON.parse(prev.getResponseDataAsString())
|
|
var paymenHash = vars.get("paymenHash")
|
|
|
|
|
|
var whResp = resp.details.extra.wh_response
|
|
var separatorIndex = whResp.indexOf("\r\n\r\n")
|
|
if (separatorIndex == -1) {
|
|
AssertionResult.setFailureMessage("Webhook response has wrong format: " + whResp);
|
|
AssertionResult.setFailure(true)
|
|
} else {
|
|
var headers = whResp.substring(0, separatorIndex)
|
|
var bodyStr = whResp.substring(separatorIndex)
|
|
var body = JSON.parse(bodyStr)
|
|
if (body.payment_hash !== paymenHash) {
|
|
AssertionResult.setFailureMessage("Incorrect webhook payment hash: " + JSON.stringify(body));
|
|
AssertionResult.setFailure(true)
|
|
} else if (headers.indexOf("h1: 1") === -1) {
|
|
AssertionResult.setFailureMessage("Expected header missing: 'h1': '1'");
|
|
AssertionResult.setFailure(true)
|
|
} else if (!body.body || !body.body.b2 || body.body.b2 !== 2) {
|
|
AssertionResult.setFailureMessage("Expected body field missing: \"body\": {\"b2\": 2}, found: " + JSON.stringify(body.body));
|
|
AssertionResult.setFailure(true)
|
|
}
|
|
}
|
|
|
|
</stringProp>
|
|
</JSR223Assertion>
|
|
<hashTree/>
|
|
</hashTree>
|
|
<HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="[wallet] Check wallet balance" enabled="true">
|
|
<elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true">
|
|
<collectionProp name="Arguments.arguments"/>
|
|
</elementProp>
|
|
<stringProp name="HTTPSampler.domain">${host}</stringProp>
|
|
<stringProp name="HTTPSampler.port">${port}</stringProp>
|
|
<stringProp name="HTTPSampler.protocol">${scheme}</stringProp>
|
|
<stringProp name="HTTPSampler.contentEncoding">UTF-8</stringProp>
|
|
<stringProp name="HTTPSampler.path">/api/v1/wallet</stringProp>
|
|
<stringProp name="HTTPSampler.method">GET</stringProp>
|
|
<boolProp name="HTTPSampler.follow_redirects">true</boolProp>
|
|
<boolProp name="HTTPSampler.auto_redirects">false</boolProp>
|
|
<boolProp name="HTTPSampler.use_keepalive">true</boolProp>
|
|
<boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
|
|
<stringProp name="HTTPSampler.embedded_url_re"></stringProp>
|
|
<stringProp name="HTTPSampler.connect_timeout"></stringProp>
|
|
<stringProp name="HTTPSampler.response_timeout"></stringProp>
|
|
</HTTPSamplerProxy>
|
|
<hashTree>
|
|
<HeaderManager guiclass="HeaderPanel" testclass="HeaderManager" testname="HTTP Header Manager" enabled="true">
|
|
<collectionProp name="HeaderManager.headers">
|
|
<elementProp name="Referer" elementType="Header">
|
|
<stringProp name="Header.name">Referer</stringProp>
|
|
<stringProp name="Header.value">${scheme}://${host}:${port}/wallet?wal=${walletId}</stringProp>
|
|
</elementProp>
|
|
<elementProp name="Accept-Language" elementType="Header">
|
|
<stringProp name="Header.name">Accept-Language</stringProp>
|
|
<stringProp name="Header.value">en-US,en;q=0.5</stringProp>
|
|
</elementProp>
|
|
<elementProp name="X-Api-Key" elementType="Header">
|
|
<stringProp name="Header.name">X-Api-Key</stringProp>
|
|
<stringProp name="Header.value">${inkey}</stringProp>
|
|
</elementProp>
|
|
<elementProp name="Accept-Encoding" elementType="Header">
|
|
<stringProp name="Header.name">Accept-Encoding</stringProp>
|
|
<stringProp name="Header.value">gzip, deflate</stringProp>
|
|
</elementProp>
|
|
<elementProp name="User-Agent" elementType="Header">
|
|
<stringProp name="Header.name">User-Agent</stringProp>
|
|
<stringProp name="Header.value">Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:105.0) Gecko/20100101 Firefox/105.0</stringProp>
|
|
</elementProp>
|
|
<elementProp name="Accept" elementType="Header">
|
|
<stringProp name="Header.name">Accept</stringProp>
|
|
<stringProp name="Header.value">application/json, text/plain, */*</stringProp>
|
|
</elementProp>
|
|
</collectionProp>
|
|
</HeaderManager>
|
|
<hashTree/>
|
|
<ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Check Status Code 200" enabled="true">
|
|
<collectionProp name="Asserion.test_strings">
|
|
<stringProp name="49586">200</stringProp>
|
|
</collectionProp>
|
|
<stringProp name="Assertion.custom_message"></stringProp>
|
|
<stringProp name="Assertion.test_field">Assertion.response_code</stringProp>
|
|
<boolProp name="Assertion.assume_success">false</boolProp>
|
|
<intProp name="Assertion.test_type">8</intProp>
|
|
</ResponseAssertion>
|
|
<hashTree/>
|
|
<JSR223Assertion guiclass="TestBeanGUI" testclass="JSR223Assertion" testname="Check Balance" enabled="true">
|
|
<stringProp name="cacheKey">true</stringProp>
|
|
<stringProp name="filename"></stringProp>
|
|
<stringProp name="parameters"></stringProp>
|
|
<stringProp name="script">var resp = JSON.parse(prev.getResponseDataAsString())
|
|
|
|
var lnurlpCounter = +vars.get('lnurlpCounter')
|
|
|
|
|
|
var userBalance = +vars.get("userBalance")
|
|
userBalance += 10 + lnurlpCounter
|
|
|
|
// millisats
|
|
if (resp.balance !== userBalance * 1000) {
|
|
AssertionResult.setFailureMessage("Expected balance to be "+userBalance * 1000+", but got: "+ resp.balance);
|
|
AssertionResult.setFailure(true)
|
|
}
|
|
|
|
vars.put("userBalance", userBalance)</stringProp>
|
|
<stringProp name="scriptLanguage">javascript</stringProp>
|
|
</JSR223Assertion>
|
|
<hashTree/>
|
|
</hashTree>
|
|
</hashTree>
|
|
</hashTree>
|
|
</hashTree>
|
|
</hashTree>
|
|
</hashTree>
|
|
<TransactionController guiclass="TransactionControllerGui" testclass="TransactionController" testname="Enable LNURLw Extension" enabled="true">
|
|
<boolProp name="TransactionController.includeTimers">false</boolProp>
|
|
<boolProp name="TransactionController.parent">true</boolProp>
|
|
</TransactionController>
|
|
<hashTree>
|
|
<HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="[lnurlw] Enable "lnurlw"" enabled="true">
|
|
<elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true">
|
|
<collectionProp name="Arguments.arguments">
|
|
<elementProp name="enable" elementType="HTTPArgument">
|
|
<boolProp name="HTTPArgument.always_encode">false</boolProp>
|
|
<stringProp name="Argument.name">enable</stringProp>
|
|
<stringProp name="Argument.value">withdraw</stringProp>
|
|
<stringProp name="Argument.metadata">=</stringProp>
|
|
<boolProp name="HTTPArgument.use_equals">true</boolProp>
|
|
</elementProp>
|
|
</collectionProp>
|
|
</elementProp>
|
|
<stringProp name="HTTPSampler.domain">${host}</stringProp>
|
|
<stringProp name="HTTPSampler.port">${port}</stringProp>
|
|
<stringProp name="HTTPSampler.protocol">${scheme}</stringProp>
|
|
<stringProp name="HTTPSampler.contentEncoding">utf-8</stringProp>
|
|
<stringProp name="HTTPSampler.path">/extensions</stringProp>
|
|
<stringProp name="HTTPSampler.method">GET</stringProp>
|
|
<boolProp name="HTTPSampler.follow_redirects">true</boolProp>
|
|
<boolProp name="HTTPSampler.auto_redirects">false</boolProp>
|
|
<boolProp name="HTTPSampler.use_keepalive">true</boolProp>
|
|
<boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
|
|
<stringProp name="HTTPSampler.embedded_url_re"></stringProp>
|
|
<stringProp name="HTTPSampler.connect_timeout"></stringProp>
|
|
<stringProp name="HTTPSampler.response_timeout"></stringProp>
|
|
</HTTPSamplerProxy>
|
|
<hashTree>
|
|
<HeaderManager guiclass="HeaderPanel" testclass="HeaderManager" testname="HTTP Header Manager" enabled="true">
|
|
<collectionProp name="HeaderManager.headers">
|
|
<elementProp name="Sec-Fetch-Mode" elementType="Header">
|
|
<stringProp name="Header.name">Sec-Fetch-Mode</stringProp>
|
|
<stringProp name="Header.value">same-origin</stringProp>
|
|
</elementProp>
|
|
<elementProp name="Referer" elementType="Header">
|
|
<stringProp name="Header.name">Referer</stringProp>
|
|
<stringProp name="Header.value">${scheme}://${host}:${port}/extensions</stringProp>
|
|
</elementProp>
|
|
<elementProp name="Sec-Fetch-Site" elementType="Header">
|
|
<stringProp name="Header.name">Sec-Fetch-Site</stringProp>
|
|
<stringProp name="Header.value">same-origin</stringProp>
|
|
</elementProp>
|
|
<elementProp name="Accept-Language" elementType="Header">
|
|
<stringProp name="Header.name">Accept-Language</stringProp>
|
|
<stringProp name="Header.value">en-US,en;q=0.5</stringProp>
|
|
</elementProp>
|
|
<elementProp name="Upgrade-Insecure-Requests" elementType="Header">
|
|
<stringProp name="Header.name">Upgrade-Insecure-Requests</stringProp>
|
|
<stringProp name="Header.value">${lnurlpCount}</stringProp>
|
|
</elementProp>
|
|
<elementProp name="Accept-Encoding" elementType="Header">
|
|
<stringProp name="Header.name">Accept-Encoding</stringProp>
|
|
<stringProp name="Header.value">gzip, deflate, br</stringProp>
|
|
</elementProp>
|
|
<elementProp name="User-Agent" elementType="Header">
|
|
<stringProp name="Header.name">User-Agent</stringProp>
|
|
<stringProp name="Header.value">Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:106.0) Gecko/20100101 Firefox/106.0</stringProp>
|
|
</elementProp>
|
|
<elementProp name="Accept" elementType="Header">
|
|
<stringProp name="Header.name">Accept</stringProp>
|
|
<stringProp name="Header.value">text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8</stringProp>
|
|
</elementProp>
|
|
<elementProp name="Sec-Fetch-Dest" elementType="Header">
|
|
<stringProp name="Header.name">Sec-Fetch-Dest</stringProp>
|
|
<stringProp name="Header.value">empty</stringProp>
|
|
</elementProp>
|
|
</collectionProp>
|
|
</HeaderManager>
|
|
<hashTree/>
|
|
<ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Check Status Code 200" enabled="true">
|
|
<collectionProp name="Asserion.test_strings">
|
|
<stringProp name="49586">200</stringProp>
|
|
</collectionProp>
|
|
<stringProp name="Assertion.custom_message"></stringProp>
|
|
<stringProp name="Assertion.test_field">Assertion.response_code</stringProp>
|
|
<boolProp name="Assertion.assume_success">false</boolProp>
|
|
<intProp name="Assertion.test_type">8</intProp>
|
|
</ResponseAssertion>
|
|
<hashTree/>
|
|
<ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Check page contains `v-for'` text" enabled="true">
|
|
<collectionProp name="Asserion.test_strings">
|
|
<stringProp name="-505784460">v-for="extension in filteredExtensions"</stringProp>
|
|
</collectionProp>
|
|
<stringProp name="Assertion.custom_message"></stringProp>
|
|
<stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
|
|
<boolProp name="Assertion.assume_success">false</boolProp>
|
|
<intProp name="Assertion.test_type">2</intProp>
|
|
</ResponseAssertion>
|
|
<hashTree/>
|
|
</hashTree>
|
|
<HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="[lnurlw] Go to "lnurlw" page" enabled="true">
|
|
<elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true">
|
|
<collectionProp name="Arguments.arguments"/>
|
|
</elementProp>
|
|
<stringProp name="HTTPSampler.domain">${host}</stringProp>
|
|
<stringProp name="HTTPSampler.port">${port}</stringProp>
|
|
<stringProp name="HTTPSampler.protocol">${scheme}</stringProp>
|
|
<stringProp name="HTTPSampler.contentEncoding">UTF-8</stringProp>
|
|
<stringProp name="HTTPSampler.path">/withdraw/</stringProp>
|
|
<stringProp name="HTTPSampler.method">GET</stringProp>
|
|
<boolProp name="HTTPSampler.follow_redirects">true</boolProp>
|
|
<boolProp name="HTTPSampler.auto_redirects">false</boolProp>
|
|
<boolProp name="HTTPSampler.use_keepalive">true</boolProp>
|
|
<boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
|
|
<stringProp name="HTTPSampler.embedded_url_re"></stringProp>
|
|
<stringProp name="HTTPSampler.connect_timeout"></stringProp>
|
|
<stringProp name="HTTPSampler.response_timeout"></stringProp>
|
|
</HTTPSamplerProxy>
|
|
<hashTree>
|
|
<HeaderManager guiclass="HeaderPanel" testclass="HeaderManager" testname="HTTP Header Manager" enabled="true">
|
|
<collectionProp name="HeaderManager.headers">
|
|
<elementProp name="Sec-Fetch-Mode" elementType="Header">
|
|
<stringProp name="Header.name">Sec-Fetch-Mode</stringProp>
|
|
<stringProp name="Header.value">same-origin</stringProp>
|
|
</elementProp>
|
|
<elementProp name="Sec-Fetch-Site" elementType="Header">
|
|
<stringProp name="Header.name">Sec-Fetch-Site</stringProp>
|
|
<stringProp name="Header.value">same-origin</stringProp>
|
|
</elementProp>
|
|
<elementProp name="Accept-Language" elementType="Header">
|
|
<stringProp name="Header.name">Accept-Language</stringProp>
|
|
<stringProp name="Header.value">en-US,en;q=0.5</stringProp>
|
|
</elementProp>
|
|
<elementProp name="Upgrade-Insecure-Requests" elementType="Header">
|
|
<stringProp name="Header.name">Upgrade-Insecure-Requests</stringProp>
|
|
<stringProp name="Header.value">${lnurlpCount}</stringProp>
|
|
</elementProp>
|
|
<elementProp name="Accept-Encoding" elementType="Header">
|
|
<stringProp name="Header.name">Accept-Encoding</stringProp>
|
|
<stringProp name="Header.value">gzip, deflate, br</stringProp>
|
|
</elementProp>
|
|
<elementProp name="User-Agent" elementType="Header">
|
|
<stringProp name="Header.name">User-Agent</stringProp>
|
|
<stringProp name="Header.value">Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:106.0) Gecko/20100101 Firefox/106.0</stringProp>
|
|
</elementProp>
|
|
<elementProp name="Accept" elementType="Header">
|
|
<stringProp name="Header.name">Accept</stringProp>
|
|
<stringProp name="Header.value">text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8</stringProp>
|
|
</elementProp>
|
|
<elementProp name="Sec-Fetch-Dest" elementType="Header">
|
|
<stringProp name="Header.name">Sec-Fetch-Dest</stringProp>
|
|
<stringProp name="Header.value">empty</stringProp>
|
|
</elementProp>
|
|
</collectionProp>
|
|
</HeaderManager>
|
|
<hashTree/>
|
|
<ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Check Status Code 200" enabled="true">
|
|
<collectionProp name="Asserion.test_strings">
|
|
<stringProp name="49586">200</stringProp>
|
|
</collectionProp>
|
|
<stringProp name="Assertion.custom_message"></stringProp>
|
|
<stringProp name="Assertion.test_field">Assertion.response_code</stringProp>
|
|
<boolProp name="Assertion.assume_success">false</boolProp>
|
|
<intProp name="Assertion.test_type">8</intProp>
|
|
</ResponseAssertion>
|
|
<hashTree/>
|
|
<ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Check page conent" enabled="true">
|
|
<collectionProp name="Asserion.test_strings">
|
|
<stringProp name="851725123">Withdraw links</stringProp>
|
|
<stringProp name="1102950636">curl -X GET http://127.0.0.1:5000/withdraw/api/v1/links -H</stringProp>
|
|
</collectionProp>
|
|
<stringProp name="Assertion.custom_message"></stringProp>
|
|
<stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
|
|
<boolProp name="Assertion.assume_success">false</boolProp>
|
|
<intProp name="Assertion.test_type">2</intProp>
|
|
</ResponseAssertion>
|
|
<hashTree/>
|
|
</hashTree>
|
|
<HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="[lnurlw] Get withdraw links" enabled="true">
|
|
<elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true">
|
|
<collectionProp name="Arguments.arguments">
|
|
<elementProp name="all_wallets" elementType="HTTPArgument">
|
|
<boolProp name="HTTPArgument.always_encode">false</boolProp>
|
|
<stringProp name="Argument.name">all_wallets</stringProp>
|
|
<stringProp name="Argument.value">true</stringProp>
|
|
<stringProp name="Argument.metadata">=</stringProp>
|
|
<boolProp name="HTTPArgument.use_equals">true</boolProp>
|
|
</elementProp>
|
|
</collectionProp>
|
|
</elementProp>
|
|
<stringProp name="HTTPSampler.domain">${host}</stringProp>
|
|
<stringProp name="HTTPSampler.port">${port}</stringProp>
|
|
<stringProp name="HTTPSampler.protocol">${scheme}</stringProp>
|
|
<stringProp name="HTTPSampler.contentEncoding">UTF-8</stringProp>
|
|
<stringProp name="HTTPSampler.path">/withdraw/api/v1/links</stringProp>
|
|
<stringProp name="HTTPSampler.method">GET</stringProp>
|
|
<boolProp name="HTTPSampler.follow_redirects">true</boolProp>
|
|
<boolProp name="HTTPSampler.auto_redirects">false</boolProp>
|
|
<boolProp name="HTTPSampler.use_keepalive">true</boolProp>
|
|
<boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
|
|
<stringProp name="HTTPSampler.embedded_url_re"></stringProp>
|
|
<stringProp name="HTTPSampler.connect_timeout"></stringProp>
|
|
<stringProp name="HTTPSampler.response_timeout"></stringProp>
|
|
</HTTPSamplerProxy>
|
|
<hashTree>
|
|
<HeaderManager guiclass="HeaderPanel" testclass="HeaderManager" testname="HTTP Header Manager" enabled="true">
|
|
<collectionProp name="HeaderManager.headers">
|
|
<elementProp name="Sec-Fetch-Mode" elementType="Header">
|
|
<stringProp name="Header.name">Sec-Fetch-Mode</stringProp>
|
|
<stringProp name="Header.value">cors</stringProp>
|
|
</elementProp>
|
|
<elementProp name="Sec-Fetch-Site" elementType="Header">
|
|
<stringProp name="Header.name">Sec-Fetch-Site</stringProp>
|
|
<stringProp name="Header.value">same-origin</stringProp>
|
|
</elementProp>
|
|
<elementProp name="Accept-Language" elementType="Header">
|
|
<stringProp name="Header.name">Accept-Language</stringProp>
|
|
<stringProp name="Header.value">en-US,en;q=0.5</stringProp>
|
|
</elementProp>
|
|
<elementProp name="X-Api-Key" elementType="Header">
|
|
<stringProp name="Header.name">X-Api-Key</stringProp>
|
|
<stringProp name="Header.value">${inkey}</stringProp>
|
|
</elementProp>
|
|
<elementProp name="Accept-Encoding" elementType="Header">
|
|
<stringProp name="Header.name">Accept-Encoding</stringProp>
|
|
<stringProp name="Header.value">gzip, deflate, br</stringProp>
|
|
</elementProp>
|
|
<elementProp name="User-Agent" elementType="Header">
|
|
<stringProp name="Header.name">User-Agent</stringProp>
|
|
<stringProp name="Header.value">Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:106.0) Gecko/20100101 Firefox/106.0</stringProp>
|
|
</elementProp>
|
|
<elementProp name="Accept" elementType="Header">
|
|
<stringProp name="Header.name">Accept</stringProp>
|
|
<stringProp name="Header.value">application/json, text/plain, */*</stringProp>
|
|
</elementProp>
|
|
<elementProp name="Sec-Fetch-Dest" elementType="Header">
|
|
<stringProp name="Header.name">Sec-Fetch-Dest</stringProp>
|
|
<stringProp name="Header.value">empty</stringProp>
|
|
</elementProp>
|
|
</collectionProp>
|
|
</HeaderManager>
|
|
<hashTree/>
|
|
<ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Check Status Code 200" enabled="true">
|
|
<collectionProp name="Asserion.test_strings">
|
|
<stringProp name="49586">200</stringProp>
|
|
</collectionProp>
|
|
<stringProp name="Assertion.custom_message"></stringProp>
|
|
<stringProp name="Assertion.test_field">Assertion.response_code</stringProp>
|
|
<boolProp name="Assertion.assume_success">false</boolProp>
|
|
<intProp name="Assertion.test_type">8</intProp>
|
|
</ResponseAssertion>
|
|
<hashTree/>
|
|
<ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Check no withdraw link present" enabled="true">
|
|
<collectionProp name="Asserion.test_strings">
|
|
<stringProp name="2914">[]</stringProp>
|
|
</collectionProp>
|
|
<stringProp name="Assertion.custom_message"></stringProp>
|
|
<stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
|
|
<boolProp name="Assertion.assume_success">false</boolProp>
|
|
<intProp name="Assertion.test_type">8</intProp>
|
|
</ResponseAssertion>
|
|
<hashTree/>
|
|
</hashTree>
|
|
</hashTree>
|
|
<TransactionController guiclass="TransactionControllerGui" testclass="TransactionController" testname="Create ${lnurlwCount} Withdraw Links" enabled="true">
|
|
<boolProp name="TransactionController.includeTimers">false</boolProp>
|
|
<boolProp name="TransactionController.parent">true</boolProp>
|
|
</TransactionController>
|
|
<hashTree>
|
|
<HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="[lnurlw] Create receive wallet" enabled="true">
|
|
<boolProp name="HTTPSampler.postBodyRaw">true</boolProp>
|
|
<elementProp name="HTTPsampler.Arguments" elementType="Arguments">
|
|
<collectionProp name="Arguments.arguments">
|
|
<elementProp name="" elementType="HTTPArgument">
|
|
<boolProp name="HTTPArgument.always_encode">false</boolProp>
|
|
<stringProp name="Argument.value">{"name":"receive wallet"}</stringProp>
|
|
<stringProp name="Argument.metadata">=</stringProp>
|
|
</elementProp>
|
|
</collectionProp>
|
|
</elementProp>
|
|
<stringProp name="HTTPSampler.domain">${host}</stringProp>
|
|
<stringProp name="HTTPSampler.port">${port}</stringProp>
|
|
<stringProp name="HTTPSampler.protocol">${scheme}</stringProp>
|
|
<stringProp name="HTTPSampler.contentEncoding">utf-8</stringProp>
|
|
<stringProp name="HTTPSampler.path">/api/v1/wallet</stringProp>
|
|
<stringProp name="HTTPSampler.method">POST</stringProp>
|
|
<boolProp name="HTTPSampler.follow_redirects">true</boolProp>
|
|
<boolProp name="HTTPSampler.auto_redirects">false</boolProp>
|
|
<boolProp name="HTTPSampler.use_keepalive">true</boolProp>
|
|
<boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
|
|
<stringProp name="HTTPSampler.embedded_url_re"></stringProp>
|
|
<stringProp name="HTTPSampler.connect_timeout"></stringProp>
|
|
<stringProp name="HTTPSampler.response_timeout"></stringProp>
|
|
</HTTPSamplerProxy>
|
|
<hashTree>
|
|
<HeaderManager guiclass="HeaderPanel" testclass="HeaderManager" testname="HTTP Header Manager" enabled="true">
|
|
<collectionProp name="HeaderManager.headers">
|
|
<elementProp name="Sec-Fetch-Mode" elementType="Header">
|
|
<stringProp name="Header.name">Sec-Fetch-Mode</stringProp>
|
|
<stringProp name="Header.value">cors</stringProp>
|
|
</elementProp>
|
|
<elementProp name="Sec-Fetch-Site" elementType="Header">
|
|
<stringProp name="Header.name">Sec-Fetch-Site</stringProp>
|
|
<stringProp name="Header.value">same-origin</stringProp>
|
|
</elementProp>
|
|
<elementProp name="Accept-Language" elementType="Header">
|
|
<stringProp name="Header.name">Accept-Language</stringProp>
|
|
<stringProp name="Header.value">en-US,en;q=0.5</stringProp>
|
|
</elementProp>
|
|
<elementProp name="Accept" elementType="Header">
|
|
<stringProp name="Header.name">Accept</stringProp>
|
|
<stringProp name="Header.value">application/json, text/plain, */*</stringProp>
|
|
</elementProp>
|
|
<elementProp name="X-Api-Key" elementType="Header">
|
|
<stringProp name="Header.name">X-Api-Key</stringProp>
|
|
<stringProp name="Header.value">${adminkey}</stringProp>
|
|
</elementProp>
|
|
<elementProp name="Content-Type" elementType="Header">
|
|
<stringProp name="Header.name">Content-Type</stringProp>
|
|
<stringProp name="Header.value">application/json;charset=utf-8</stringProp>
|
|
</elementProp>
|
|
<elementProp name="Accept-Encoding" elementType="Header">
|
|
<stringProp name="Header.name">Accept-Encoding</stringProp>
|
|
<stringProp name="Header.value">gzip, deflate, br</stringProp>
|
|
</elementProp>
|
|
<elementProp name="User-Agent" elementType="Header">
|
|
<stringProp name="Header.name">User-Agent</stringProp>
|
|
<stringProp name="Header.value">Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:106.0) Gecko/20100101 Firefox/106.0</stringProp>
|
|
</elementProp>
|
|
<elementProp name="Sec-Fetch-Dest" elementType="Header">
|
|
<stringProp name="Header.name">Sec-Fetch-Dest</stringProp>
|
|
<stringProp name="Header.value">empty</stringProp>
|
|
</elementProp>
|
|
</collectionProp>
|
|
</HeaderManager>
|
|
<hashTree/>
|
|
<ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Check Status Code 200" enabled="true">
|
|
<collectionProp name="Asserion.test_strings">
|
|
<stringProp name="49586">200</stringProp>
|
|
</collectionProp>
|
|
<stringProp name="Assertion.custom_message"></stringProp>
|
|
<stringProp name="Assertion.test_field">Assertion.response_code</stringProp>
|
|
<boolProp name="Assertion.assume_success">false</boolProp>
|
|
<intProp name="Assertion.test_type">8</intProp>
|
|
</ResponseAssertion>
|
|
<hashTree/>
|
|
<JSONPathAssertion guiclass="JSONPathAssertionGui" testclass="JSONPathAssertion" testname="Check wallet name" enabled="true">
|
|
<stringProp name="JSON_PATH">name</stringProp>
|
|
<stringProp name="EXPECTED_VALUE">receive wallet</stringProp>
|
|
<boolProp name="JSONVALIDATION">true</boolProp>
|
|
<boolProp name="EXPECT_NULL">false</boolProp>
|
|
<boolProp name="INVERT">false</boolProp>
|
|
<boolProp name="ISREGEX">false</boolProp>
|
|
</JSONPathAssertion>
|
|
<hashTree/>
|
|
<JSONPostProcessor guiclass="JSONPostProcessorGui" testclass="JSONPostProcessor" testname="Extract receive inkey" enabled="true">
|
|
<stringProp name="JSONPostProcessor.referenceNames">receiveInkey</stringProp>
|
|
<stringProp name="JSONPostProcessor.jsonPathExprs">inkey</stringProp>
|
|
<stringProp name="JSONPostProcessor.match_numbers">0</stringProp>
|
|
<stringProp name="JSONPostProcessor.defaultValues">no-receive-inkey</stringProp>
|
|
</JSONPostProcessor>
|
|
<hashTree/>
|
|
</hashTree>
|
|
<LoopController guiclass="LoopControlPanel" testclass="LoopController" testname="Withdraw Link Payment" enabled="true">
|
|
<boolProp name="LoopController.continue_forever">true</boolProp>
|
|
<stringProp name="LoopController.loops">${lnurlwCount}</stringProp>
|
|
</LoopController>
|
|
<hashTree>
|
|
<CounterConfig guiclass="CounterConfigGui" testclass="CounterConfig" testname="LNURLw Counter" enabled="true">
|
|
<stringProp name="CounterConfig.start">1</stringProp>
|
|
<stringProp name="CounterConfig.end"></stringProp>
|
|
<stringProp name="CounterConfig.incr">1</stringProp>
|
|
<stringProp name="CounterConfig.name">lnurlwCounter</stringProp>
|
|
<stringProp name="CounterConfig.format"></stringProp>
|
|
<boolProp name="CounterConfig.per_user">false</boolProp>
|
|
</CounterConfig>
|
|
<hashTree/>
|
|
<TransactionController guiclass="TransactionControllerGui" testclass="TransactionController" testname="Withdraw Links ${lnurlwCounter}" enabled="true">
|
|
<boolProp name="TransactionController.includeTimers">false</boolProp>
|
|
<boolProp name="TransactionController.parent">true</boolProp>
|
|
</TransactionController>
|
|
<hashTree>
|
|
<HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="[lnurlw] Create withdraw link" enabled="true">
|
|
<boolProp name="HTTPSampler.postBodyRaw">true</boolProp>
|
|
<elementProp name="HTTPsampler.Arguments" elementType="Arguments">
|
|
<collectionProp name="Arguments.arguments">
|
|
<elementProp name="" elementType="HTTPArgument">
|
|
<boolProp name="HTTPArgument.always_encode">false</boolProp>
|
|
<stringProp name="Argument.value">{
|
|
"is_unique": false,
|
|
"use_custom": false,
|
|
"title": "withdraw ${lnurlwCounter}",
|
|
"min_withdrawable": 10,
|
|
"max_withdrawable":${lnurlwCounter}0,
|
|
"uses": 5,
|
|
"wait_time": 1,
|
|
"webhook_url": "http://localhost:8081",
|
|
"webhook_headers": "{\"h1\": \"1\"}",
|
|
"webhook_body": "{\"b2\": 2}",
|
|
"custom_url": null
|
|
}</stringProp>
|
|
<stringProp name="Argument.metadata">=</stringProp>
|
|
</elementProp>
|
|
</collectionProp>
|
|
</elementProp>
|
|
<stringProp name="HTTPSampler.domain">${host}</stringProp>
|
|
<stringProp name="HTTPSampler.port">${port}</stringProp>
|
|
<stringProp name="HTTPSampler.protocol">${scheme}</stringProp>
|
|
<stringProp name="HTTPSampler.contentEncoding">utf-8</stringProp>
|
|
<stringProp name="HTTPSampler.path">/withdraw/api/v1/links</stringProp>
|
|
<stringProp name="HTTPSampler.method">POST</stringProp>
|
|
<boolProp name="HTTPSampler.follow_redirects">true</boolProp>
|
|
<boolProp name="HTTPSampler.auto_redirects">false</boolProp>
|
|
<boolProp name="HTTPSampler.use_keepalive">true</boolProp>
|
|
<boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
|
|
<stringProp name="HTTPSampler.embedded_url_re"></stringProp>
|
|
<stringProp name="HTTPSampler.connect_timeout"></stringProp>
|
|
<stringProp name="HTTPSampler.response_timeout"></stringProp>
|
|
</HTTPSamplerProxy>
|
|
<hashTree>
|
|
<HeaderManager guiclass="HeaderPanel" testclass="HeaderManager" testname="HTTP Header Manager" enabled="true">
|
|
<collectionProp name="HeaderManager.headers">
|
|
<elementProp name="Sec-Fetch-Mode" elementType="Header">
|
|
<stringProp name="Header.name">Sec-Fetch-Mode</stringProp>
|
|
<stringProp name="Header.value">cors</stringProp>
|
|
</elementProp>
|
|
<elementProp name="Sec-Fetch-Site" elementType="Header">
|
|
<stringProp name="Header.name">Sec-Fetch-Site</stringProp>
|
|
<stringProp name="Header.value">same-origin</stringProp>
|
|
</elementProp>
|
|
<elementProp name="Accept-Language" elementType="Header">
|
|
<stringProp name="Header.name">Accept-Language</stringProp>
|
|
<stringProp name="Header.value">en-US,en;q=0.5</stringProp>
|
|
</elementProp>
|
|
<elementProp name="Accept" elementType="Header">
|
|
<stringProp name="Header.name">Accept</stringProp>
|
|
<stringProp name="Header.value">application/json, text/plain, */*</stringProp>
|
|
</elementProp>
|
|
<elementProp name="X-Api-Key" elementType="Header">
|
|
<stringProp name="Header.name">X-Api-Key</stringProp>
|
|
<stringProp name="Header.value">${adminkey}</stringProp>
|
|
</elementProp>
|
|
<elementProp name="Content-Type" elementType="Header">
|
|
<stringProp name="Header.name">Content-Type</stringProp>
|
|
<stringProp name="Header.value">application/json;charset=utf-8</stringProp>
|
|
</elementProp>
|
|
<elementProp name="Accept-Encoding" elementType="Header">
|
|
<stringProp name="Header.name">Accept-Encoding</stringProp>
|
|
<stringProp name="Header.value">gzip, deflate, br</stringProp>
|
|
</elementProp>
|
|
<elementProp name="User-Agent" elementType="Header">
|
|
<stringProp name="Header.name">User-Agent</stringProp>
|
|
<stringProp name="Header.value">Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:106.0) Gecko/20100101 Firefox/106.0</stringProp>
|
|
</elementProp>
|
|
<elementProp name="Sec-Fetch-Dest" elementType="Header">
|
|
<stringProp name="Header.name">Sec-Fetch-Dest</stringProp>
|
|
<stringProp name="Header.value">empty</stringProp>
|
|
</elementProp>
|
|
</collectionProp>
|
|
</HeaderManager>
|
|
<hashTree/>
|
|
<ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Check Status Code 201" enabled="true">
|
|
<collectionProp name="Asserion.test_strings">
|
|
<stringProp name="49587">201</stringProp>
|
|
</collectionProp>
|
|
<stringProp name="Assertion.custom_message"></stringProp>
|
|
<stringProp name="Assertion.test_field">Assertion.response_code</stringProp>
|
|
<boolProp name="Assertion.assume_success">false</boolProp>
|
|
<intProp name="Assertion.test_type">8</intProp>
|
|
</ResponseAssertion>
|
|
<hashTree/>
|
|
<JSR223Assertion guiclass="TestBeanGUI" testclass="JSR223Assertion" testname="Check created pay link" enabled="true">
|
|
<stringProp name="scriptLanguage">javascript</stringProp>
|
|
<stringProp name="parameters"></stringProp>
|
|
<stringProp name="filename"></stringProp>
|
|
<stringProp name="cacheKey">true</stringProp>
|
|
<stringProp name="script">var resp = JSON.parse(prev.getResponseDataAsString())
|
|
|
|
var walletId = vars.get("walletId")
|
|
var lnurlwCounter = +vars.get("lnurlwCounter")
|
|
|
|
if (!resp.id) {
|
|
AssertionResult.setFailureMessage("Withdraw Link not created");
|
|
AssertionResult.setFailure(true)
|
|
} else if (resp.wallet !== walletId) {
|
|
AssertionResult.setFailureMessage("Withdraw Link wallet expected to be '" + walletId + "', but was: " + resp.wallet);
|
|
AssertionResult.setFailure(true)
|
|
} else if (resp.title !== "withdraw " + lnurlwCounter) {
|
|
AssertionResult.setFailureMessage("Withdraw Link description expected to be 'withdraw " + lnurlwCounter + "', but was: " + resp.description);
|
|
AssertionResult.setFailure(true)
|
|
}</stringProp>
|
|
</JSR223Assertion>
|
|
<hashTree/>
|
|
<JSONPostProcessor guiclass="JSONPostProcessorGui" testclass="JSONPostProcessor" testname="Extract withdraw link id" enabled="true">
|
|
<stringProp name="JSONPostProcessor.referenceNames">withdrawLinkId</stringProp>
|
|
<stringProp name="JSONPostProcessor.jsonPathExprs">id</stringProp>
|
|
<stringProp name="JSONPostProcessor.match_numbers">0</stringProp>
|
|
<stringProp name="JSONPostProcessor.defaultValues">no-withdraw-link-id</stringProp>
|
|
</JSONPostProcessor>
|
|
<hashTree/>
|
|
<JSONPostProcessor guiclass="JSONPostProcessorGui" testclass="JSONPostProcessor" testname="Extract withdraw link lnurl" enabled="true">
|
|
<stringProp name="JSONPostProcessor.referenceNames">withdrawLinkLnurl</stringProp>
|
|
<stringProp name="JSONPostProcessor.jsonPathExprs">lnurl</stringProp>
|
|
<stringProp name="JSONPostProcessor.match_numbers">0</stringProp>
|
|
<stringProp name="JSONPostProcessor.defaultValues">no-withdraw-link-lnurl</stringProp>
|
|
</JSONPostProcessor>
|
|
<hashTree/>
|
|
</hashTree>
|
|
<HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="[lnurlw] Go to withdraw link page" enabled="true">
|
|
<elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true">
|
|
<collectionProp name="Arguments.arguments"/>
|
|
</elementProp>
|
|
<stringProp name="HTTPSampler.domain">${host}</stringProp>
|
|
<stringProp name="HTTPSampler.port">${port}</stringProp>
|
|
<stringProp name="HTTPSampler.protocol">${scheme}</stringProp>
|
|
<stringProp name="HTTPSampler.contentEncoding">UTF-8</stringProp>
|
|
<stringProp name="HTTPSampler.path">/withdraw/${withdrawLinkId}</stringProp>
|
|
<stringProp name="HTTPSampler.method">GET</stringProp>
|
|
<boolProp name="HTTPSampler.follow_redirects">true</boolProp>
|
|
<boolProp name="HTTPSampler.auto_redirects">false</boolProp>
|
|
<boolProp name="HTTPSampler.use_keepalive">true</boolProp>
|
|
<boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
|
|
<stringProp name="HTTPSampler.embedded_url_re"></stringProp>
|
|
<stringProp name="HTTPSampler.connect_timeout"></stringProp>
|
|
<stringProp name="HTTPSampler.response_timeout"></stringProp>
|
|
</HTTPSamplerProxy>
|
|
<hashTree>
|
|
<HeaderManager guiclass="HeaderPanel" testclass="HeaderManager" testname="HTTP Header Manager" enabled="true">
|
|
<collectionProp name="HeaderManager.headers">
|
|
<elementProp name="Sec-Fetch-Mode" elementType="Header">
|
|
<stringProp name="Header.name">Sec-Fetch-Mode</stringProp>
|
|
<stringProp name="Header.value">same-origin</stringProp>
|
|
</elementProp>
|
|
<elementProp name="Sec-Fetch-Site" elementType="Header">
|
|
<stringProp name="Header.name">Sec-Fetch-Site</stringProp>
|
|
<stringProp name="Header.value">same-origin</stringProp>
|
|
</elementProp>
|
|
<elementProp name="Accept-Language" elementType="Header">
|
|
<stringProp name="Header.name">Accept-Language</stringProp>
|
|
<stringProp name="Header.value">en-US,en;q=0.5</stringProp>
|
|
</elementProp>
|
|
<elementProp name="Accept-Encoding" elementType="Header">
|
|
<stringProp name="Header.name">Accept-Encoding</stringProp>
|
|
<stringProp name="Header.value">gzip, deflate, br</stringProp>
|
|
</elementProp>
|
|
<elementProp name="User-Agent" elementType="Header">
|
|
<stringProp name="Header.name">User-Agent</stringProp>
|
|
<stringProp name="Header.value">Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:106.0) Gecko/20100101 Firefox/106.0</stringProp>
|
|
</elementProp>
|
|
<elementProp name="Accept" elementType="Header">
|
|
<stringProp name="Header.name">Accept</stringProp>
|
|
<stringProp name="Header.value">text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8</stringProp>
|
|
</elementProp>
|
|
<elementProp name="Sec-Fetch-Dest" elementType="Header">
|
|
<stringProp name="Header.name">Sec-Fetch-Dest</stringProp>
|
|
<stringProp name="Header.value">empty</stringProp>
|
|
</elementProp>
|
|
</collectionProp>
|
|
</HeaderManager>
|
|
<hashTree/>
|
|
<ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Check Status Code 200" enabled="true">
|
|
<collectionProp name="Asserion.test_strings">
|
|
<stringProp name="49586">200</stringProp>
|
|
</collectionProp>
|
|
<stringProp name="Assertion.custom_message"></stringProp>
|
|
<stringProp name="Assertion.test_field">Assertion.response_code</stringProp>
|
|
<boolProp name="Assertion.assume_success">false</boolProp>
|
|
<intProp name="Assertion.test_type">8</intProp>
|
|
</ResponseAssertion>
|
|
<hashTree/>
|
|
<ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Check page content" enabled="true">
|
|
<collectionProp name="Asserion.test_strings">
|
|
<stringProp name="-416732094">Copy LNURL</stringProp>
|
|
<stringProp name="-1094591029">${withdrawLinkLnurl}</stringProp>
|
|
</collectionProp>
|
|
<stringProp name="Assertion.custom_message"></stringProp>
|
|
<stringProp name="Assertion.test_field">Assertion.response_data</stringProp>
|
|
<boolProp name="Assertion.assume_success">false</boolProp>
|
|
<intProp name="Assertion.test_type">2</intProp>
|
|
</ResponseAssertion>
|
|
<hashTree/>
|
|
</hashTree>
|
|
<HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="[lnurlw] Get withdraw link" enabled="true">
|
|
<elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true">
|
|
<collectionProp name="Arguments.arguments">
|
|
<elementProp name="all_wallets" elementType="HTTPArgument">
|
|
<boolProp name="HTTPArgument.always_encode">false</boolProp>
|
|
<stringProp name="Argument.name">all_wallets</stringProp>
|
|
<stringProp name="Argument.value">true</stringProp>
|
|
<stringProp name="Argument.metadata">=</stringProp>
|
|
<boolProp name="HTTPArgument.use_equals">true</boolProp>
|
|
</elementProp>
|
|
</collectionProp>
|
|
</elementProp>
|
|
<stringProp name="HTTPSampler.domain">${host}</stringProp>
|
|
<stringProp name="HTTPSampler.port">${port}</stringProp>
|
|
<stringProp name="HTTPSampler.protocol">${scheme}</stringProp>
|
|
<stringProp name="HTTPSampler.contentEncoding">UTF-8</stringProp>
|
|
<stringProp name="HTTPSampler.path">/withdraw/api/v1/links/${withdrawLinkId}</stringProp>
|
|
<stringProp name="HTTPSampler.method">GET</stringProp>
|
|
<boolProp name="HTTPSampler.follow_redirects">true</boolProp>
|
|
<boolProp name="HTTPSampler.auto_redirects">false</boolProp>
|
|
<boolProp name="HTTPSampler.use_keepalive">true</boolProp>
|
|
<boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
|
|
<stringProp name="HTTPSampler.embedded_url_re"></stringProp>
|
|
<stringProp name="HTTPSampler.connect_timeout"></stringProp>
|
|
<stringProp name="HTTPSampler.response_timeout"></stringProp>
|
|
</HTTPSamplerProxy>
|
|
<hashTree>
|
|
<HeaderManager guiclass="HeaderPanel" testclass="HeaderManager" testname="HTTP Header Manager" enabled="true">
|
|
<collectionProp name="HeaderManager.headers">
|
|
<elementProp name="Sec-Fetch-Mode" elementType="Header">
|
|
<stringProp name="Header.name">Sec-Fetch-Mode</stringProp>
|
|
<stringProp name="Header.value">cors</stringProp>
|
|
</elementProp>
|
|
<elementProp name="Sec-Fetch-Site" elementType="Header">
|
|
<stringProp name="Header.name">Sec-Fetch-Site</stringProp>
|
|
<stringProp name="Header.value">same-origin</stringProp>
|
|
</elementProp>
|
|
<elementProp name="Accept-Language" elementType="Header">
|
|
<stringProp name="Header.name">Accept-Language</stringProp>
|
|
<stringProp name="Header.value">en-US,en;q=0.${paidChargeCount}</stringProp>
|
|
</elementProp>
|
|
<elementProp name="X-Api-Key" elementType="Header">
|
|
<stringProp name="Header.name">X-Api-Key</stringProp>
|
|
<stringProp name="Header.value">${inkey}</stringProp>
|
|
</elementProp>
|
|
<elementProp name="Accept-Encoding" elementType="Header">
|
|
<stringProp name="Header.name">Accept-Encoding</stringProp>
|
|
<stringProp name="Header.value">gzip, deflate, br</stringProp>
|
|
</elementProp>
|
|
<elementProp name="User-Agent" elementType="Header">
|
|
<stringProp name="Header.name">User-Agent</stringProp>
|
|
<stringProp name="Header.value">Mozilla/${paidChargeCount}.0 (Macintosh; Intel Mac OS X 10.15; rv:106.0) Gecko/20100101 Firefox/106.0</stringProp>
|
|
</elementProp>
|
|
<elementProp name="Accept" elementType="Header">
|
|
<stringProp name="Header.name">Accept</stringProp>
|
|
<stringProp name="Header.value">application/json, text/plain, */*</stringProp>
|
|
</elementProp>
|
|
<elementProp name="Sec-Fetch-Dest" elementType="Header">
|
|
<stringProp name="Header.name">Sec-Fetch-Dest</stringProp>
|
|
<stringProp name="Header.value">empty</stringProp>
|
|
</elementProp>
|
|
</collectionProp>
|
|
</HeaderManager>
|
|
<hashTree/>
|
|
<ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Check Status Code 200" enabled="true">
|
|
<collectionProp name="Asserion.test_strings">
|
|
<stringProp name="49586">200</stringProp>
|
|
</collectionProp>
|
|
<stringProp name="Assertion.custom_message"></stringProp>
|
|
<stringProp name="Assertion.test_field">Assertion.response_code</stringProp>
|
|
<boolProp name="Assertion.assume_success">false</boolProp>
|
|
<intProp name="Assertion.test_type">8</intProp>
|
|
</ResponseAssertion>
|
|
<hashTree/>
|
|
<JSONPathAssertion guiclass="JSONPathAssertionGui" testclass="JSONPathAssertion" testname="Check lnurlw" enabled="true">
|
|
<stringProp name="JSON_PATH">lnurl</stringProp>
|
|
<stringProp name="EXPECTED_VALUE">${withdrawLinkLnurl}</stringProp>
|
|
<boolProp name="JSONVALIDATION">true</boolProp>
|
|
<boolProp name="EXPECT_NULL">false</boolProp>
|
|
<boolProp name="INVERT">false</boolProp>
|
|
<boolProp name="ISREGEX">true</boolProp>
|
|
</JSONPathAssertion>
|
|
<hashTree/>
|
|
</hashTree>
|
|
<HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="[lnurlw] Decode LNURLw" enabled="true">
|
|
<elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true">
|
|
<collectionProp name="Arguments.arguments">
|
|
<elementProp name="all_wallets" elementType="HTTPArgument">
|
|
<boolProp name="HTTPArgument.always_encode">false</boolProp>
|
|
<stringProp name="Argument.name">all_wallets</stringProp>
|
|
<stringProp name="Argument.value">true</stringProp>
|
|
<stringProp name="Argument.metadata">=</stringProp>
|
|
<boolProp name="HTTPArgument.use_equals">true</boolProp>
|
|
</elementProp>
|
|
</collectionProp>
|
|
</elementProp>
|
|
<stringProp name="HTTPSampler.domain">${host}</stringProp>
|
|
<stringProp name="HTTPSampler.port">${port}</stringProp>
|
|
<stringProp name="HTTPSampler.protocol">${scheme}</stringProp>
|
|
<stringProp name="HTTPSampler.contentEncoding">UTF-8</stringProp>
|
|
<stringProp name="HTTPSampler.path">/api/v1/lnurlscan/${withdrawLinkLnurl}</stringProp>
|
|
<stringProp name="HTTPSampler.method">GET</stringProp>
|
|
<boolProp name="HTTPSampler.follow_redirects">true</boolProp>
|
|
<boolProp name="HTTPSampler.auto_redirects">false</boolProp>
|
|
<boolProp name="HTTPSampler.use_keepalive">true</boolProp>
|
|
<boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
|
|
<stringProp name="HTTPSampler.embedded_url_re"></stringProp>
|
|
<stringProp name="HTTPSampler.connect_timeout"></stringProp>
|
|
<stringProp name="HTTPSampler.response_timeout"></stringProp>
|
|
</HTTPSamplerProxy>
|
|
<hashTree>
|
|
<HeaderManager guiclass="HeaderPanel" testclass="HeaderManager" testname="HTTP Header Manager" enabled="true">
|
|
<collectionProp name="HeaderManager.headers">
|
|
<elementProp name="Sec-Fetch-Mode" elementType="Header">
|
|
<stringProp name="Header.name">Sec-Fetch-Mode</stringProp>
|
|
<stringProp name="Header.value">cors</stringProp>
|
|
</elementProp>
|
|
<elementProp name="Sec-Fetch-Site" elementType="Header">
|
|
<stringProp name="Header.name">Sec-Fetch-Site</stringProp>
|
|
<stringProp name="Header.value">same-origin</stringProp>
|
|
</elementProp>
|
|
<elementProp name="Accept-Language" elementType="Header">
|
|
<stringProp name="Header.name">Accept-Language</stringProp>
|
|
<stringProp name="Header.value">en-US,en;q=0.${paidChargeCount}</stringProp>
|
|
</elementProp>
|
|
<elementProp name="X-Api-Key" elementType="Header">
|
|
<stringProp name="Header.name">X-Api-Key</stringProp>
|
|
<stringProp name="Header.value">${adminWalletKey}</stringProp>
|
|
</elementProp>
|
|
<elementProp name="Accept-Encoding" elementType="Header">
|
|
<stringProp name="Header.name">Accept-Encoding</stringProp>
|
|
<stringProp name="Header.value">gzip, deflate, br</stringProp>
|
|
</elementProp>
|
|
<elementProp name="User-Agent" elementType="Header">
|
|
<stringProp name="Header.name">User-Agent</stringProp>
|
|
<stringProp name="Header.value">Mozilla/${paidChargeCount}.0 (Macintosh; Intel Mac OS X 10.15; rv:106.0) Gecko/20100101 Firefox/106.0</stringProp>
|
|
</elementProp>
|
|
<elementProp name="Accept" elementType="Header">
|
|
<stringProp name="Header.name">Accept</stringProp>
|
|
<stringProp name="Header.value">application/json, text/plain, */*</stringProp>
|
|
</elementProp>
|
|
<elementProp name="Sec-Fetch-Dest" elementType="Header">
|
|
<stringProp name="Header.name">Sec-Fetch-Dest</stringProp>
|
|
<stringProp name="Header.value">empty</stringProp>
|
|
</elementProp>
|
|
</collectionProp>
|
|
</HeaderManager>
|
|
<hashTree/>
|
|
<ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Check Status Code 200" enabled="true">
|
|
<collectionProp name="Asserion.test_strings">
|
|
<stringProp name="49586">200</stringProp>
|
|
</collectionProp>
|
|
<stringProp name="Assertion.custom_message"></stringProp>
|
|
<stringProp name="Assertion.test_field">Assertion.response_code</stringProp>
|
|
<boolProp name="Assertion.assume_success">false</boolProp>
|
|
<intProp name="Assertion.test_type">8</intProp>
|
|
</ResponseAssertion>
|
|
<hashTree/>
|
|
<JSONPathAssertion guiclass="JSONPathAssertionGui" testclass="JSONPathAssertion" testname="Check lnurlw" enabled="true">
|
|
<stringProp name="JSON_PATH">domain</stringProp>
|
|
<stringProp name="EXPECTED_VALUE">${host}:${port}</stringProp>
|
|
<boolProp name="JSONVALIDATION">true</boolProp>
|
|
<boolProp name="EXPECT_NULL">false</boolProp>
|
|
<boolProp name="INVERT">false</boolProp>
|
|
<boolProp name="ISREGEX">true</boolProp>
|
|
</JSONPathAssertion>
|
|
<hashTree/>
|
|
<JSONPathAssertion guiclass="JSONPathAssertionGui" testclass="JSONPathAssertion" testname="Check tag" enabled="true">
|
|
<stringProp name="JSON_PATH">tag</stringProp>
|
|
<stringProp name="EXPECTED_VALUE">withdrawRequest</stringProp>
|
|
<boolProp name="JSONVALIDATION">true</boolProp>
|
|
<boolProp name="EXPECT_NULL">false</boolProp>
|
|
<boolProp name="INVERT">false</boolProp>
|
|
<boolProp name="ISREGEX">true</boolProp>
|
|
</JSONPathAssertion>
|
|
<hashTree/>
|
|
<JSONPathAssertion guiclass="JSONPathAssertionGui" testclass="JSONPathAssertion" testname="Check kind" enabled="true">
|
|
<stringProp name="JSON_PATH">kind</stringProp>
|
|
<stringProp name="EXPECTED_VALUE">withdraw</stringProp>
|
|
<boolProp name="JSONVALIDATION">true</boolProp>
|
|
<boolProp name="EXPECT_NULL">false</boolProp>
|
|
<boolProp name="INVERT">false</boolProp>
|
|
<boolProp name="ISREGEX">true</boolProp>
|
|
</JSONPathAssertion>
|
|
<hashTree/>
|
|
<JSONPathAssertion guiclass="JSONPathAssertionGui" testclass="JSONPathAssertion" testname="Check default description" enabled="true">
|
|
<stringProp name="JSON_PATH">defaultDescription</stringProp>
|
|
<stringProp name="EXPECTED_VALUE">withdraw ${lnurlwCounter}</stringProp>
|
|
<boolProp name="JSONVALIDATION">true</boolProp>
|
|
<boolProp name="EXPECT_NULL">false</boolProp>
|
|
<boolProp name="INVERT">false</boolProp>
|
|
<boolProp name="ISREGEX">true</boolProp>
|
|
</JSONPathAssertion>
|
|
<hashTree/>
|
|
<JSONPostProcessor guiclass="JSONPostProcessorGui" testclass="JSONPostProcessor" testname="Extract callback" enabled="true">
|
|
<stringProp name="JSONPostProcessor.referenceNames">withdrawLinkCallback</stringProp>
|
|
<stringProp name="JSONPostProcessor.jsonPathExprs">callback</stringProp>
|
|
<stringProp name="JSONPostProcessor.match_numbers">0</stringProp>
|
|
<stringProp name="JSONPostProcessor.defaultValues">no-withdrawlink-callback</stringProp>
|
|
</JSONPostProcessor>
|
|
<hashTree/>
|
|
</hashTree>
|
|
<LoopController guiclass="LoopControlPanel" testclass="LoopController" testname="Make Withdraws Loop" enabled="true">
|
|
<boolProp name="LoopController.continue_forever">true</boolProp>
|
|
<stringProp name="LoopController.loops">${withdrawCountPerLnurlw}</stringProp>
|
|
</LoopController>
|
|
<hashTree>
|
|
<CounterConfig guiclass="CounterConfigGui" testclass="CounterConfig" testname="LNURLw counter" enabled="true">
|
|
<stringProp name="CounterConfig.start">1</stringProp>
|
|
<stringProp name="CounterConfig.end">${withdrawCountPerLnurlw}</stringProp>
|
|
<stringProp name="CounterConfig.incr">1</stringProp>
|
|
<stringProp name="CounterConfig.name">lnurlwWithdrawCounter</stringProp>
|
|
<stringProp name="CounterConfig.format"></stringProp>
|
|
<boolProp name="CounterConfig.per_user">true</boolProp>
|
|
</CounterConfig>
|
|
<hashTree/>
|
|
<TransactionController guiclass="TransactionControllerGui" testclass="TransactionController" testname="Make Withdraw ${lnurlwWithdrawCounter}" enabled="true">
|
|
<boolProp name="TransactionController.includeTimers">false</boolProp>
|
|
<boolProp name="TransactionController.parent">true</boolProp>
|
|
</TransactionController>
|
|
<hashTree>
|
|
<HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="[lnurlw] Withdraw LNURLw" enabled="true">
|
|
<boolProp name="HTTPSampler.postBodyRaw">true</boolProp>
|
|
<elementProp name="HTTPsampler.Arguments" elementType="Arguments">
|
|
<collectionProp name="Arguments.arguments">
|
|
<elementProp name="" elementType="HTTPArgument">
|
|
<boolProp name="HTTPArgument.always_encode">false</boolProp>
|
|
<stringProp name="Argument.value">{"out":false,"amount":10,"memo":"withdraw ${lnurlwCounter}","unit":"sat","lnurl_callback":"${withdrawLinkCallback}"}</stringProp>
|
|
<stringProp name="Argument.metadata">=</stringProp>
|
|
</elementProp>
|
|
</collectionProp>
|
|
</elementProp>
|
|
<stringProp name="HTTPSampler.domain">${host}</stringProp>
|
|
<stringProp name="HTTPSampler.port">${port}</stringProp>
|
|
<stringProp name="HTTPSampler.protocol">${scheme}</stringProp>
|
|
<stringProp name="HTTPSampler.contentEncoding">utf-8</stringProp>
|
|
<stringProp name="HTTPSampler.path">/api/v1/payments</stringProp>
|
|
<stringProp name="HTTPSampler.method">POST</stringProp>
|
|
<boolProp name="HTTPSampler.follow_redirects">true</boolProp>
|
|
<boolProp name="HTTPSampler.auto_redirects">false</boolProp>
|
|
<boolProp name="HTTPSampler.use_keepalive">true</boolProp>
|
|
<boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
|
|
<stringProp name="HTTPSampler.embedded_url_re"></stringProp>
|
|
<stringProp name="HTTPSampler.connect_timeout"></stringProp>
|
|
<stringProp name="HTTPSampler.response_timeout"></stringProp>
|
|
</HTTPSamplerProxy>
|
|
<hashTree>
|
|
<HeaderManager guiclass="HeaderPanel" testclass="HeaderManager" testname="HTTP Header Manager" enabled="true">
|
|
<collectionProp name="HeaderManager.headers">
|
|
<elementProp name="Sec-Fetch-Mode" elementType="Header">
|
|
<stringProp name="Header.name">Sec-Fetch-Mode</stringProp>
|
|
<stringProp name="Header.value">cors</stringProp>
|
|
</elementProp>
|
|
<elementProp name="Sec-Fetch-Site" elementType="Header">
|
|
<stringProp name="Header.name">Sec-Fetch-Site</stringProp>
|
|
<stringProp name="Header.value">same-origin</stringProp>
|
|
</elementProp>
|
|
<elementProp name="Accept-Language" elementType="Header">
|
|
<stringProp name="Header.name">Accept-Language</stringProp>
|
|
<stringProp name="Header.value">en-US,en;q=0.${lnurlpCount}</stringProp>
|
|
</elementProp>
|
|
<elementProp name="Origin" elementType="Header">
|
|
<stringProp name="Header.name">Origin</stringProp>
|
|
<stringProp name="Header.value">${scheme}://${host}:${port}</stringProp>
|
|
</elementProp>
|
|
<elementProp name="Accept" elementType="Header">
|
|
<stringProp name="Header.name">Accept</stringProp>
|
|
<stringProp name="Header.value">application/json, text/plain, */*</stringProp>
|
|
</elementProp>
|
|
<elementProp name="X-Api-Key" elementType="Header">
|
|
<stringProp name="Header.name">X-Api-Key</stringProp>
|
|
<stringProp name="Header.value">${receiveInkey}</stringProp>
|
|
</elementProp>
|
|
<elementProp name="Content-Type" elementType="Header">
|
|
<stringProp name="Header.name">Content-Type</stringProp>
|
|
<stringProp name="Header.value">application/json;charset=utf-8</stringProp>
|
|
</elementProp>
|
|
<elementProp name="Accept-Encoding" elementType="Header">
|
|
<stringProp name="Header.name">Accept-Encoding</stringProp>
|
|
<stringProp name="Header.value">gzip, deflate, br</stringProp>
|
|
</elementProp>
|
|
<elementProp name="User-Agent" elementType="Header">
|
|
<stringProp name="Header.name">User-Agent</stringProp>
|
|
<stringProp name="Header.value">Mozilla/${lnurlpCount}.0 (Macintosh; Intel Mac OS X 10.15; rv:106.0) Gecko/20100101 Firefox/106.0</stringProp>
|
|
</elementProp>
|
|
<elementProp name="Sec-Fetch-Dest" elementType="Header">
|
|
<stringProp name="Header.name">Sec-Fetch-Dest</stringProp>
|
|
<stringProp name="Header.value">empty</stringProp>
|
|
</elementProp>
|
|
</collectionProp>
|
|
</HeaderManager>
|
|
<hashTree/>
|
|
<ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Check Status Code 201" enabled="true">
|
|
<collectionProp name="Asserion.test_strings">
|
|
<stringProp name="49587">201</stringProp>
|
|
</collectionProp>
|
|
<stringProp name="Assertion.custom_message"></stringProp>
|
|
<stringProp name="Assertion.test_field">Assertion.response_code</stringProp>
|
|
<boolProp name="Assertion.assume_success">false</boolProp>
|
|
<intProp name="Assertion.test_type">8</intProp>
|
|
</ResponseAssertion>
|
|
<hashTree/>
|
|
<JSONPathAssertion guiclass="JSONPathAssertionGui" testclass="JSONPathAssertion" testname="Check lnurl response" enabled="true">
|
|
<stringProp name="JSON_PATH">lnurl_response</stringProp>
|
|
<stringProp name="EXPECTED_VALUE">true</stringProp>
|
|
<boolProp name="JSONVALIDATION">true</boolProp>
|
|
<boolProp name="EXPECT_NULL">false</boolProp>
|
|
<boolProp name="INVERT">false</boolProp>
|
|
<boolProp name="ISREGEX">true</boolProp>
|
|
</JSONPathAssertion>
|
|
<hashTree/>
|
|
<JSONPostProcessor guiclass="JSONPostProcessorGui" testclass="JSONPostProcessor" testname="Extract payment hash" enabled="true">
|
|
<stringProp name="JSONPostProcessor.referenceNames">paymenHash</stringProp>
|
|
<stringProp name="JSONPostProcessor.jsonPathExprs">payment_hash</stringProp>
|
|
<stringProp name="JSONPostProcessor.match_numbers">0</stringProp>
|
|
<stringProp name="JSONPostProcessor.defaultValues">no-payment-hash</stringProp>
|
|
</JSONPostProcessor>
|
|
<hashTree/>
|
|
</hashTree>
|
|
<ConstantTimer guiclass="ConstantTimerGui" testclass="ConstantTimer" testname="Wait a bit" enabled="true">
|
|
<stringProp name="ConstantTimer.delay">3000</stringProp>
|
|
<stringProp name="TestPlan.comments">for the callback to be invoked</stringProp>
|
|
</ConstantTimer>
|
|
<hashTree/>
|
|
<HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="[wallet] Get Payment" enabled="true">
|
|
<elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true">
|
|
<collectionProp name="Arguments.arguments"/>
|
|
</elementProp>
|
|
<stringProp name="HTTPSampler.domain">${host}</stringProp>
|
|
<stringProp name="HTTPSampler.port">${port}</stringProp>
|
|
<stringProp name="HTTPSampler.protocol">${scheme}</stringProp>
|
|
<stringProp name="HTTPSampler.contentEncoding">UTF-8</stringProp>
|
|
<stringProp name="HTTPSampler.path">/api/v1/payments/${paymenHash}</stringProp>
|
|
<stringProp name="HTTPSampler.method">GET</stringProp>
|
|
<boolProp name="HTTPSampler.follow_redirects">true</boolProp>
|
|
<boolProp name="HTTPSampler.auto_redirects">false</boolProp>
|
|
<boolProp name="HTTPSampler.use_keepalive">true</boolProp>
|
|
<boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
|
|
<stringProp name="HTTPSampler.embedded_url_re"></stringProp>
|
|
<stringProp name="HTTPSampler.connect_timeout"></stringProp>
|
|
<stringProp name="HTTPSampler.response_timeout"></stringProp>
|
|
</HTTPSamplerProxy>
|
|
<hashTree>
|
|
<HeaderManager guiclass="HeaderPanel" testclass="HeaderManager" testname="HTTP Header Manager" enabled="true">
|
|
<collectionProp name="HeaderManager.headers">
|
|
<elementProp name="X-Api-Key" elementType="Header">
|
|
<stringProp name="Header.name">X-Api-Key</stringProp>
|
|
<stringProp name="Header.value">${inkey}</stringProp>
|
|
</elementProp>
|
|
</collectionProp>
|
|
</HeaderManager>
|
|
<hashTree/>
|
|
<ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Check Status Code 200" enabled="true">
|
|
<collectionProp name="Asserion.test_strings">
|
|
<stringProp name="49586">200</stringProp>
|
|
</collectionProp>
|
|
<stringProp name="Assertion.custom_message"></stringProp>
|
|
<stringProp name="Assertion.test_field">Assertion.response_code</stringProp>
|
|
<boolProp name="Assertion.assume_success">false</boolProp>
|
|
<intProp name="Assertion.test_type">8</intProp>
|
|
</ResponseAssertion>
|
|
<hashTree/>
|
|
<JSONPathAssertion guiclass="JSONPathAssertionGui" testclass="JSONPathAssertion" testname="Check webhook success" enabled="true">
|
|
<stringProp name="JSON_PATH">$.details.extra.wh_success</stringProp>
|
|
<stringProp name="EXPECTED_VALUE">true</stringProp>
|
|
<boolProp name="JSONVALIDATION">true</boolProp>
|
|
<boolProp name="EXPECT_NULL">false</boolProp>
|
|
<boolProp name="INVERT">false</boolProp>
|
|
<boolProp name="ISREGEX">false</boolProp>
|
|
</JSONPathAssertion>
|
|
<hashTree/>
|
|
<JSONPathAssertion guiclass="JSONPathAssertionGui" testclass="JSONPathAssertion" testname="Check webhook message" enabled="true">
|
|
<stringProp name="JSON_PATH">$.details.extra.wh_message</stringProp>
|
|
<stringProp name="EXPECTED_VALUE">OK</stringProp>
|
|
<boolProp name="JSONVALIDATION">true</boolProp>
|
|
<boolProp name="EXPECT_NULL">false</boolProp>
|
|
<boolProp name="INVERT">false</boolProp>
|
|
<boolProp name="ISREGEX">false</boolProp>
|
|
</JSONPathAssertion>
|
|
<hashTree/>
|
|
<JSR223Assertion guiclass="TestBeanGUI" testclass="JSR223Assertion" testname="Check webhook response" enabled="true">
|
|
<stringProp name="scriptLanguage">javascript</stringProp>
|
|
<stringProp name="parameters"></stringProp>
|
|
<stringProp name="filename"></stringProp>
|
|
<stringProp name="cacheKey">true</stringProp>
|
|
<stringProp name="script">var resp = JSON.parse(prev.getResponseDataAsString())
|
|
var paymenHash = vars.get("paymenHash")
|
|
|
|
|
|
var whResp = resp.details.extra.wh_response
|
|
var separatorIndex = whResp.indexOf("\r\n\r\n")
|
|
if (separatorIndex == -1) {
|
|
AssertionResult.setFailureMessage("Webhook response has wrong format: " + whResp);
|
|
AssertionResult.setFailure(true)
|
|
} else {
|
|
var headers = whResp.substring(0, separatorIndex)
|
|
var bodyStr = whResp.substring(separatorIndex)
|
|
var body = JSON.parse(bodyStr)
|
|
if (body.payment_hash !== paymenHash) {
|
|
AssertionResult.setFailureMessage("Incorrect webhook payment hash: " + JSON.stringify(body));
|
|
AssertionResult.setFailure(true)
|
|
} else if (headers.indexOf("h1: 1") === -1) {
|
|
AssertionResult.setFailureMessage("Expected header missing: 'h1': '1'");
|
|
AssertionResult.setFailure(true)
|
|
} else if (!body.body || !body.body.b2 || body.body.b2 !== 2) {
|
|
AssertionResult.setFailureMessage("Expected body field missing: \"body\": {\"b2\": 2}, found: " + JSON.stringify(body.body));
|
|
AssertionResult.setFailure(true)
|
|
}
|
|
}
|
|
|
|
</stringProp>
|
|
</JSR223Assertion>
|
|
<hashTree/>
|
|
</hashTree>
|
|
<HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="[wallet] Check wallet balance" enabled="true">
|
|
<elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true">
|
|
<collectionProp name="Arguments.arguments"/>
|
|
</elementProp>
|
|
<stringProp name="HTTPSampler.domain">${host}</stringProp>
|
|
<stringProp name="HTTPSampler.port">${port}</stringProp>
|
|
<stringProp name="HTTPSampler.protocol">${scheme}</stringProp>
|
|
<stringProp name="HTTPSampler.contentEncoding">UTF-8</stringProp>
|
|
<stringProp name="HTTPSampler.path">/api/v1/wallet</stringProp>
|
|
<stringProp name="HTTPSampler.method">GET</stringProp>
|
|
<boolProp name="HTTPSampler.follow_redirects">true</boolProp>
|
|
<boolProp name="HTTPSampler.auto_redirects">false</boolProp>
|
|
<boolProp name="HTTPSampler.use_keepalive">true</boolProp>
|
|
<boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
|
|
<stringProp name="HTTPSampler.embedded_url_re"></stringProp>
|
|
<stringProp name="HTTPSampler.connect_timeout"></stringProp>
|
|
<stringProp name="HTTPSampler.response_timeout"></stringProp>
|
|
</HTTPSamplerProxy>
|
|
<hashTree>
|
|
<HeaderManager guiclass="HeaderPanel" testclass="HeaderManager" testname="HTTP Header Manager" enabled="true">
|
|
<collectionProp name="HeaderManager.headers">
|
|
<elementProp name="Referer" elementType="Header">
|
|
<stringProp name="Header.name">Referer</stringProp>
|
|
<stringProp name="Header.value">${scheme}://${host}:${port}/wallet?wal=${walletId}</stringProp>
|
|
</elementProp>
|
|
<elementProp name="Accept-Language" elementType="Header">
|
|
<stringProp name="Header.name">Accept-Language</stringProp>
|
|
<stringProp name="Header.value">en-US,en;q=0.5</stringProp>
|
|
</elementProp>
|
|
<elementProp name="X-Api-Key" elementType="Header">
|
|
<stringProp name="Header.name">X-Api-Key</stringProp>
|
|
<stringProp name="Header.value">${inkey}</stringProp>
|
|
</elementProp>
|
|
<elementProp name="Accept-Encoding" elementType="Header">
|
|
<stringProp name="Header.name">Accept-Encoding</stringProp>
|
|
<stringProp name="Header.value">gzip, deflate</stringProp>
|
|
</elementProp>
|
|
<elementProp name="User-Agent" elementType="Header">
|
|
<stringProp name="Header.name">User-Agent</stringProp>
|
|
<stringProp name="Header.value">Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:105.0) Gecko/20100101 Firefox/105.0</stringProp>
|
|
</elementProp>
|
|
<elementProp name="Accept" elementType="Header">
|
|
<stringProp name="Header.name">Accept</stringProp>
|
|
<stringProp name="Header.value">application/json, text/plain, */*</stringProp>
|
|
</elementProp>
|
|
</collectionProp>
|
|
</HeaderManager>
|
|
<hashTree/>
|
|
<ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Check Status Code 200" enabled="true">
|
|
<collectionProp name="Asserion.test_strings">
|
|
<stringProp name="49586">200</stringProp>
|
|
</collectionProp>
|
|
<stringProp name="Assertion.custom_message"></stringProp>
|
|
<stringProp name="Assertion.test_field">Assertion.response_code</stringProp>
|
|
<boolProp name="Assertion.assume_success">false</boolProp>
|
|
<intProp name="Assertion.test_type">8</intProp>
|
|
</ResponseAssertion>
|
|
<hashTree/>
|
|
<JSR223Assertion guiclass="TestBeanGUI" testclass="JSR223Assertion" testname="Check Balance" enabled="true">
|
|
<stringProp name="cacheKey">true</stringProp>
|
|
<stringProp name="filename"></stringProp>
|
|
<stringProp name="parameters"></stringProp>
|
|
<stringProp name="script">var resp = JSON.parse(prev.getResponseDataAsString())
|
|
|
|
var userBalance = +vars.get("userBalance")
|
|
userBalance -= 10
|
|
|
|
// millisats
|
|
if (resp.balance !== userBalance * 1000) {
|
|
AssertionResult.setFailureMessage("Expected balance to be "+userBalance * 1000+", but got: "+ resp.balance);
|
|
AssertionResult.setFailure(true)
|
|
}
|
|
|
|
vars.put("userBalance", userBalance)</stringProp>
|
|
<stringProp name="scriptLanguage">javascript</stringProp>
|
|
</JSR223Assertion>
|
|
<hashTree/>
|
|
</hashTree>
|
|
</hashTree>
|
|
</hashTree>
|
|
</hashTree>
|
|
</hashTree>
|
|
<HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="[wallet] Check receive wallet balance" enabled="true">
|
|
<elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" enabled="true">
|
|
<collectionProp name="Arguments.arguments"/>
|
|
</elementProp>
|
|
<stringProp name="HTTPSampler.domain">${host}</stringProp>
|
|
<stringProp name="HTTPSampler.port">${port}</stringProp>
|
|
<stringProp name="HTTPSampler.protocol">${scheme}</stringProp>
|
|
<stringProp name="HTTPSampler.contentEncoding">UTF-8</stringProp>
|
|
<stringProp name="HTTPSampler.path">/api/v1/wallet</stringProp>
|
|
<stringProp name="HTTPSampler.method">GET</stringProp>
|
|
<boolProp name="HTTPSampler.follow_redirects">true</boolProp>
|
|
<boolProp name="HTTPSampler.auto_redirects">false</boolProp>
|
|
<boolProp name="HTTPSampler.use_keepalive">true</boolProp>
|
|
<boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
|
|
<stringProp name="HTTPSampler.embedded_url_re"></stringProp>
|
|
<stringProp name="HTTPSampler.connect_timeout"></stringProp>
|
|
<stringProp name="HTTPSampler.response_timeout"></stringProp>
|
|
</HTTPSamplerProxy>
|
|
<hashTree>
|
|
<HeaderManager guiclass="HeaderPanel" testclass="HeaderManager" testname="HTTP Header Manager" enabled="true">
|
|
<collectionProp name="HeaderManager.headers">
|
|
<elementProp name="Referer" elementType="Header">
|
|
<stringProp name="Header.name">Referer</stringProp>
|
|
<stringProp name="Header.value">${scheme}://${host}:${port}/wallet?wal=${walletId}</stringProp>
|
|
</elementProp>
|
|
<elementProp name="Accept-Language" elementType="Header">
|
|
<stringProp name="Header.name">Accept-Language</stringProp>
|
|
<stringProp name="Header.value">en-US,en;q=0.5</stringProp>
|
|
</elementProp>
|
|
<elementProp name="X-Api-Key" elementType="Header">
|
|
<stringProp name="Header.name">X-Api-Key</stringProp>
|
|
<stringProp name="Header.value">${receiveInkey}</stringProp>
|
|
</elementProp>
|
|
<elementProp name="Accept-Encoding" elementType="Header">
|
|
<stringProp name="Header.name">Accept-Encoding</stringProp>
|
|
<stringProp name="Header.value">gzip, deflate</stringProp>
|
|
</elementProp>
|
|
<elementProp name="User-Agent" elementType="Header">
|
|
<stringProp name="Header.name">User-Agent</stringProp>
|
|
<stringProp name="Header.value">Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:105.0) Gecko/20100101 Firefox/105.0</stringProp>
|
|
</elementProp>
|
|
<elementProp name="Accept" elementType="Header">
|
|
<stringProp name="Header.name">Accept</stringProp>
|
|
<stringProp name="Header.value">application/json, text/plain, */*</stringProp>
|
|
</elementProp>
|
|
</collectionProp>
|
|
</HeaderManager>
|
|
<hashTree/>
|
|
<ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="Check Status Code 200" enabled="true">
|
|
<collectionProp name="Asserion.test_strings">
|
|
<stringProp name="49586">200</stringProp>
|
|
</collectionProp>
|
|
<stringProp name="Assertion.custom_message"></stringProp>
|
|
<stringProp name="Assertion.test_field">Assertion.response_code</stringProp>
|
|
<boolProp name="Assertion.assume_success">false</boolProp>
|
|
<intProp name="Assertion.test_type">8</intProp>
|
|
</ResponseAssertion>
|
|
<hashTree/>
|
|
<JSR223Assertion guiclass="TestBeanGUI" testclass="JSR223Assertion" testname="Check Balance" enabled="true">
|
|
<stringProp name="cacheKey">true</stringProp>
|
|
<stringProp name="filename"></stringProp>
|
|
<stringProp name="parameters"></stringProp>
|
|
<stringProp name="script">var resp = JSON.parse(prev.getResponseDataAsString());
|
|
|
|
var withdrawAmount = 10;
|
|
var lnurlwCount = +vars.get("lnurlwCount");
|
|
var withdrawCountPerLnurlw = +vars.get("withdrawCountPerLnurlw");
|
|
|
|
var userBalance = withdrawAmount * lnurlwCount * withdrawCountPerLnurlw;
|
|
|
|
// millisats
|
|
if (resp.balance !== userBalance * 1000) {
|
|
AssertionResult.setFailureMessage(
|
|
"Expected balance to be " +
|
|
userBalance * 1000 +
|
|
", but got: " +
|
|
resp.balance
|
|
);
|
|
AssertionResult.setFailure(true);
|
|
}</stringProp>
|
|
<stringProp name="scriptLanguage">javascript</stringProp>
|
|
</JSR223Assertion>
|
|
<hashTree/>
|
|
</hashTree>
|
|
</hashTree>
|
|
<ResultCollector guiclass="StatVisualizer" testclass="ResultCollector" testname="Aggregate Report" enabled="true">
|
|
<boolProp name="ResultCollector.error_logging">false</boolProp>
|
|
<objProp>
|
|
<name>saveConfig</name>
|
|
<value class="SampleSaveConfiguration">
|
|
<time>true</time>
|
|
<latency>true</latency>
|
|
<timestamp>true</timestamp>
|
|
<success>true</success>
|
|
<label>true</label>
|
|
<code>true</code>
|
|
<message>true</message>
|
|
<threadName>true</threadName>
|
|
<dataType>true</dataType>
|
|
<encoding>false</encoding>
|
|
<assertions>true</assertions>
|
|
<subresults>true</subresults>
|
|
<responseData>false</responseData>
|
|
<samplerData>false</samplerData>
|
|
<xml>false</xml>
|
|
<fieldNames>true</fieldNames>
|
|
<responseHeaders>false</responseHeaders>
|
|
<requestHeaders>false</requestHeaders>
|
|
<responseDataOnError>false</responseDataOnError>
|
|
<saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
|
|
<assertionsResultsToSave>0</assertionsResultsToSave>
|
|
<bytes>true</bytes>
|
|
<sentBytes>true</sentBytes>
|
|
<url>true</url>
|
|
<threadCounts>true</threadCounts>
|
|
<idleTime>true</idleTime>
|
|
<connectTime>true</connectTime>
|
|
</value>
|
|
</objProp>
|
|
<stringProp name="filename"></stringProp>
|
|
</ResultCollector>
|
|
<hashTree/>
|
|
<ResultCollector guiclass="ViewResultsFullVisualizer" testclass="ResultCollector" testname="View Results Tree" enabled="true">
|
|
<boolProp name="ResultCollector.error_logging">false</boolProp>
|
|
<objProp>
|
|
<name>saveConfig</name>
|
|
<value class="SampleSaveConfiguration">
|
|
<time>true</time>
|
|
<latency>true</latency>
|
|
<timestamp>true</timestamp>
|
|
<success>true</success>
|
|
<label>true</label>
|
|
<code>true</code>
|
|
<message>true</message>
|
|
<threadName>true</threadName>
|
|
<dataType>true</dataType>
|
|
<encoding>false</encoding>
|
|
<assertions>true</assertions>
|
|
<subresults>true</subresults>
|
|
<responseData>false</responseData>
|
|
<samplerData>false</samplerData>
|
|
<xml>false</xml>
|
|
<fieldNames>true</fieldNames>
|
|
<responseHeaders>false</responseHeaders>
|
|
<requestHeaders>false</requestHeaders>
|
|
<responseDataOnError>false</responseDataOnError>
|
|
<saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
|
|
<assertionsResultsToSave>0</assertionsResultsToSave>
|
|
<bytes>true</bytes>
|
|
<sentBytes>true</sentBytes>
|
|
<url>true</url>
|
|
<threadCounts>true</threadCounts>
|
|
<idleTime>true</idleTime>
|
|
<connectTime>true</connectTime>
|
|
</value>
|
|
</objProp>
|
|
<stringProp name="filename"></stringProp>
|
|
</ResultCollector>
|
|
<hashTree/>
|
|
<ResultCollector guiclass="SummaryReport" testclass="ResultCollector" testname="Summary Report" enabled="true">
|
|
<boolProp name="ResultCollector.error_logging">false</boolProp>
|
|
<objProp>
|
|
<name>saveConfig</name>
|
|
<value class="SampleSaveConfiguration">
|
|
<time>true</time>
|
|
<latency>true</latency>
|
|
<timestamp>true</timestamp>
|
|
<success>true</success>
|
|
<label>true</label>
|
|
<code>true</code>
|
|
<message>true</message>
|
|
<threadName>true</threadName>
|
|
<dataType>true</dataType>
|
|
<encoding>false</encoding>
|
|
<assertions>true</assertions>
|
|
<subresults>true</subresults>
|
|
<responseData>false</responseData>
|
|
<samplerData>false</samplerData>
|
|
<xml>false</xml>
|
|
<fieldNames>true</fieldNames>
|
|
<responseHeaders>false</responseHeaders>
|
|
<requestHeaders>false</requestHeaders>
|
|
<responseDataOnError>false</responseDataOnError>
|
|
<saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
|
|
<assertionsResultsToSave>0</assertionsResultsToSave>
|
|
<bytes>true</bytes>
|
|
<sentBytes>true</sentBytes>
|
|
<url>true</url>
|
|
<threadCounts>true</threadCounts>
|
|
<idleTime>true</idleTime>
|
|
<connectTime>true</connectTime>
|
|
</value>
|
|
</objProp>
|
|
<stringProp name="filename"></stringProp>
|
|
</ResultCollector>
|
|
<hashTree/>
|
|
<ResultCollector guiclass="RespTimeGraphVisualizer" testclass="ResultCollector" testname="Response Time Graph" enabled="true">
|
|
<boolProp name="ResultCollector.error_logging">false</boolProp>
|
|
<objProp>
|
|
<name>saveConfig</name>
|
|
<value class="SampleSaveConfiguration">
|
|
<time>true</time>
|
|
<latency>true</latency>
|
|
<timestamp>true</timestamp>
|
|
<success>true</success>
|
|
<label>true</label>
|
|
<code>true</code>
|
|
<message>true</message>
|
|
<threadName>true</threadName>
|
|
<dataType>true</dataType>
|
|
<encoding>false</encoding>
|
|
<assertions>true</assertions>
|
|
<subresults>true</subresults>
|
|
<responseData>false</responseData>
|
|
<samplerData>false</samplerData>
|
|
<xml>false</xml>
|
|
<fieldNames>true</fieldNames>
|
|
<responseHeaders>false</responseHeaders>
|
|
<requestHeaders>false</requestHeaders>
|
|
<responseDataOnError>false</responseDataOnError>
|
|
<saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
|
|
<assertionsResultsToSave>0</assertionsResultsToSave>
|
|
<bytes>true</bytes>
|
|
<sentBytes>true</sentBytes>
|
|
<url>true</url>
|
|
<threadCounts>true</threadCounts>
|
|
<idleTime>true</idleTime>
|
|
<connectTime>true</connectTime>
|
|
</value>
|
|
</objProp>
|
|
<stringProp name="filename"></stringProp>
|
|
<stringProp name="RespTimeGraph.interval">100</stringProp>
|
|
<boolProp name="RespTimeGraph.seriesselection">true</boolProp>
|
|
<stringProp name="RespTimeGraph.seriesselectionmatchlabel">(wallet){1}</stringProp>
|
|
</ResultCollector>
|
|
<hashTree/>
|
|
<ResultCollector guiclass="StatGraphVisualizer" testclass="ResultCollector" testname="Aggregate Graph" enabled="true">
|
|
<boolProp name="ResultCollector.error_logging">false</boolProp>
|
|
<objProp>
|
|
<name>saveConfig</name>
|
|
<value class="SampleSaveConfiguration">
|
|
<time>true</time>
|
|
<latency>true</latency>
|
|
<timestamp>true</timestamp>
|
|
<success>true</success>
|
|
<label>true</label>
|
|
<code>true</code>
|
|
<message>true</message>
|
|
<threadName>true</threadName>
|
|
<dataType>true</dataType>
|
|
<encoding>false</encoding>
|
|
<assertions>true</assertions>
|
|
<subresults>true</subresults>
|
|
<responseData>false</responseData>
|
|
<samplerData>false</samplerData>
|
|
<xml>false</xml>
|
|
<fieldNames>true</fieldNames>
|
|
<responseHeaders>false</responseHeaders>
|
|
<requestHeaders>false</requestHeaders>
|
|
<responseDataOnError>false</responseDataOnError>
|
|
<saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
|
|
<assertionsResultsToSave>0</assertionsResultsToSave>
|
|
<bytes>true</bytes>
|
|
<sentBytes>true</sentBytes>
|
|
<url>true</url>
|
|
<threadCounts>true</threadCounts>
|
|
<idleTime>true</idleTime>
|
|
<connectTime>true</connectTime>
|
|
</value>
|
|
</objProp>
|
|
<stringProp name="filename"></stringProp>
|
|
</ResultCollector>
|
|
<hashTree/>
|
|
<ResultCollector guiclass="GraphVisualizer" testclass="ResultCollector" testname="Graph Results" enabled="true">
|
|
<boolProp name="ResultCollector.error_logging">false</boolProp>
|
|
<objProp>
|
|
<name>saveConfig</name>
|
|
<value class="SampleSaveConfiguration">
|
|
<time>true</time>
|
|
<latency>true</latency>
|
|
<timestamp>true</timestamp>
|
|
<success>true</success>
|
|
<label>true</label>
|
|
<code>true</code>
|
|
<message>true</message>
|
|
<threadName>true</threadName>
|
|
<dataType>true</dataType>
|
|
<encoding>false</encoding>
|
|
<assertions>true</assertions>
|
|
<subresults>true</subresults>
|
|
<responseData>false</responseData>
|
|
<samplerData>false</samplerData>
|
|
<xml>false</xml>
|
|
<fieldNames>true</fieldNames>
|
|
<responseHeaders>false</responseHeaders>
|
|
<requestHeaders>false</requestHeaders>
|
|
<responseDataOnError>false</responseDataOnError>
|
|
<saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
|
|
<assertionsResultsToSave>0</assertionsResultsToSave>
|
|
<bytes>true</bytes>
|
|
<sentBytes>true</sentBytes>
|
|
<url>true</url>
|
|
<threadCounts>true</threadCounts>
|
|
<idleTime>true</idleTime>
|
|
<connectTime>true</connectTime>
|
|
</value>
|
|
</objProp>
|
|
<stringProp name="filename"></stringProp>
|
|
</ResultCollector>
|
|
<hashTree/>
|
|
</hashTree>
|
|
<HttpMirrorControl guiclass="HttpMirrorControlGui" testclass="HttpMirrorControl" testname="[callback] HTTP Mirror Server" enabled="true">
|
|
<stringProp name="HttpMirrorControlGui.port">8081</stringProp>
|
|
<stringProp name="HttpMirrorControlGui.maxPoolSize">0</stringProp>
|
|
<stringProp name="HttpMirrorControlGui.maxQueueSize">25</stringProp>
|
|
</HttpMirrorControl>
|
|
<hashTree/>
|
|
<ProxyControl guiclass="ProxyControlGui" testclass="ProxyControl" testname="HTTP(S) Test Script Recorder" enabled="false">
|
|
<stringProp name="ProxyControlGui.port">8888</stringProp>
|
|
<collectionProp name="ProxyControlGui.exclude_list">
|
|
<stringProp name="805311387">windowsupdate\.microsoft\.com.*</stringProp>
|
|
<stringProp name="1179605444">(?i).*\.(bmp|css|js|gif|ico|jpe?g|png|swf|eot|otf|ttf|mp4|woff|woff2)</stringProp>
|
|
<stringProp name="110431874">.*msg\.yahoo\.com.*</stringProp>
|
|
<stringProp name="-88591710">www\.download\.windowsupdate\.com.*</stringProp>
|
|
<stringProp name="1323576868">toolbarqueries\.google\..*</stringProp>
|
|
<stringProp name="1739087931">http?://self-repair\.mozilla\.org.*</stringProp>
|
|
<stringProp name="1206954446">tiles.*\.mozilla\.com.*</stringProp>
|
|
<stringProp name="-1424663473">.*detectportal\.firefox\.com.*</stringProp>
|
|
<stringProp name="1779943373">us\.update\.toolbar\.yahoo\.com.*</stringProp>
|
|
<stringProp name="-190610036">.*\.google\.com.*/safebrowsing/.*</stringProp>
|
|
<stringProp name="-1899150273">api\.bing\.com.*</stringProp>
|
|
<stringProp name="-958112859">toolbar\.google\.com.*</stringProp>
|
|
<stringProp name="-192420923">.*yimg\.com.*</stringProp>
|
|
<stringProp name="-576820688">toolbar\.msn\.com.*</stringProp>
|
|
<stringProp name="305776760">(?i).*\.(bmp|css|js|gif|ico|jpe?g|png|swf|eot|otf|ttf|mp4|woff|woff2)[\?;].*</stringProp>
|
|
<stringProp name="-1435252351">toolbar\.avg\.com/.*</stringProp>
|
|
<stringProp name="2118375536">www\.google-analytics\.com.*</stringProp>
|
|
<stringProp name="-1279148329">pgq\.yahoo\.com.*</stringProp>
|
|
<stringProp name="1815174768">safebrowsing.*\.google\.com.*</stringProp>
|
|
<stringProp name="-1314416226">sqm\.microsoft\.com.*</stringProp>
|
|
<stringProp name="587935979">g\.msn.*</stringProp>
|
|
<stringProp name="1629558731">clients.*\.google.*</stringProp>
|
|
<stringProp name="11072252">.*toolbar\.yahoo\.com.*</stringProp>
|
|
<stringProp name="1726898318">geo\.yahoo\.com.*</stringProp>
|
|
</collectionProp>
|
|
<collectionProp name="ProxyControlGui.include_list"/>
|
|
<boolProp name="ProxyControlGui.capture_http_headers">true</boolProp>
|
|
<intProp name="ProxyControlGui.grouping_mode">4</intProp>
|
|
<boolProp name="ProxyControlGui.add_assertion">false</boolProp>
|
|
<stringProp name="ProxyControlGui.sampler_type_name"></stringProp>
|
|
<boolProp name="ProxyControlGui.sampler_redirect_automatically">false</boolProp>
|
|
<boolProp name="ProxyControlGui.sampler_follow_redirects">true</boolProp>
|
|
<boolProp name="ProxyControlGui.use_keepalive">true</boolProp>
|
|
<boolProp name="ProxyControlGui.sampler_download_images">false</boolProp>
|
|
<boolProp name="ProxyControlGui.regex_match">true</boolProp>
|
|
<stringProp name="ProxyControlGui.content_type_include"></stringProp>
|
|
<stringProp name="ProxyControlGui.content_type_exclude"></stringProp>
|
|
<boolProp name="ProxyControlGui.notify_child_sl_filtered">false</boolProp>
|
|
<stringProp name="ProxyControlGui.proxy_prefix_http_sampler_name"></stringProp>
|
|
<intProp name="ProxyControlGui.proxy_http_sampler_naming_mode">0</intProp>
|
|
<stringProp name="ProxyControlGui.proxy_pause_http_sampler"></stringProp>
|
|
<boolProp name="ProxyControlGui.detect_graphql_request">true</boolProp>
|
|
<stringProp name="ProxyControlGui.default_encoding">UTF-8</stringProp>
|
|
</ProxyControl>
|
|
<hashTree>
|
|
<ResultCollector guiclass="ViewResultsFullVisualizer" testclass="ResultCollector" testname="View Results Tree" enabled="true">
|
|
<boolProp name="ResultCollector.error_logging">false</boolProp>
|
|
<objProp>
|
|
<name>saveConfig</name>
|
|
<value class="SampleSaveConfiguration">
|
|
<time>true</time>
|
|
<latency>true</latency>
|
|
<timestamp>true</timestamp>
|
|
<success>true</success>
|
|
<label>true</label>
|
|
<code>true</code>
|
|
<message>true</message>
|
|
<threadName>true</threadName>
|
|
<dataType>true</dataType>
|
|
<encoding>true</encoding>
|
|
<assertions>true</assertions>
|
|
<subresults>true</subresults>
|
|
<responseData>true</responseData>
|
|
<samplerData>true</samplerData>
|
|
<xml>true</xml>
|
|
<fieldNames>false</fieldNames>
|
|
<responseHeaders>true</responseHeaders>
|
|
<requestHeaders>true</requestHeaders>
|
|
<responseDataOnError>true</responseDataOnError>
|
|
<saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage>
|
|
<assertionsResultsToSave>0</assertionsResultsToSave>
|
|
<bytes>true</bytes>
|
|
<url>true</url>
|
|
<fileName>true</fileName>
|
|
<hostname>true</hostname>
|
|
<threadCounts>true</threadCounts>
|
|
<sampleCount>true</sampleCount>
|
|
<idleTime>true</idleTime>
|
|
<connectTime>true</connectTime>
|
|
</value>
|
|
</objProp>
|
|
<stringProp name="filename">recording.xml</stringProp>
|
|
</ResultCollector>
|
|
<hashTree/>
|
|
</hashTree>
|
|
</hashTree>
|
|
</hashTree>
|
|
</jmeterTestPlan>
|