false false host ${__property(host,,127.0.0.1)} = scheme ${__property(scheme,,http)} = port ${__property(port,,5000)} = paidChargeCount 5 = userTipCount 5 = thinkTime 3000 = lnurlpCount 5 = lnurlwCount 5 = paymentCountPerLnurlp 2 = withdrawCountPerLnurlw 2 = ${host} ${port} ${scheme} 6 stopthread false 1 1 1 1370726934000 1370726934000 false false false false false true fragments/init-server.jmx false true fragments/init-account.jmx false true false enable lnurlp = true ${host} ${port} ${scheme} utf-8 /extensions GET true false true false Sec-Fetch-Mode same-origin Sec-Fetch-Site same-origin Accept-Language en-US,en;q=0.${paidChargeCount} Upgrade-Insecure-Requests 1 Accept-Encoding gzip, deflate, br User-Agent Mozilla/${paidChargeCount}.0 (Macintosh; Intel Mac OS X 10.15; rv:106.0) Gecko/20100101 Firefox/106.0 Accept text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8 Sec-Fetch-Dest empty 200 Assertion.response_code false 8 v-for="extension in filteredExtensions" Assertion.response_data false 2 ${host} ${port} ${scheme} UTF-8 /lnurlp/ GET true false true false Sec-Fetch-Mode same-origin Referer ${scheme}://${host}:${port}/extensions?enable=lnurlp Sec-Fetch-Site same-origin Accept-Language en-US,en;q=0.${paidChargeCount} Upgrade-Insecure-Requests 1 Accept-Encoding gzip, deflate, br User-Agent Mozilla/${paidChargeCount}.0 (Macintosh; Intel Mac OS X 10.15; rv:106.0) Gecko/20100101 Firefox/106.0 Accept text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8 Sec-Fetch-Dest empty 200 Assertion.response_code false 8 New pay link curl -X POST http://127.0.0.1:5000/lnurlp/api/v1/links -d Assertion.response_data false 2 false all_wallets true = true ${host} ${port} ${scheme} UTF-8 /lnurlp/api/v1/links GET true false true false Sec-Fetch-Mode cors Sec-Fetch-Site same-origin Accept-Language en-US,en;q=0.${paidChargeCount} X-Api-Key ${inkey} Accept-Encoding gzip, deflate, br User-Agent Mozilla/${paidChargeCount}.0 (Macintosh; Intel Mac OS X 10.15; rv:106.0) Gecko/20100101 Firefox/106.0 Accept application/json, text/plain, */* Sec-Fetch-Dest empty 200 Assertion.response_code false 8 [] Assertion.response_data false 8 false true true ${lnurlpCount} 1 ${lnurlpCount} 1 lnurlpCounter true false true true false {"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} = ${host} ${port} ${scheme} utf-8 /lnurlp/api/v1/links POST true false true false Sec-Fetch-Mode cors Sec-Fetch-Site same-origin Accept-Language en-US,en;q=0.${paidChargeCount} Origin ${scheme}://${host}:${port} Accept application/json, text/plain, */* X-Api-Key ${adminkey} Content-Type application/json;charset=utf-8 Accept-Encoding gzip, deflate, br User-Agent Mozilla/${paidChargeCount}.0 (Macintosh; Intel Mac OS X 10.15; rv:106.0) Gecko/20100101 Firefox/106.0 Sec-Fetch-Dest empty 201 Assertion.response_code false 8 javascript true 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) } javascript true var resp = JSON.parse(prev.getResponseDataAsString()) vars.put("payLinkId", resp.id || 'no-pay-link-id'); vars.put("payLinkLnurl", resp.lnurl || 'no-pay-link-lnurl'); ${host} ${port} ${scheme} UTF-8 /lnurlp/link/${payLinkId} GET true false true false Sec-Fetch-Mode same-origin Sec-Fetch-Site same-origin Accept-Language en-US,en;q=0.${paidChargeCount} Upgrade-Insecure-Requests 1 Accept-Encoding gzip, deflate, br User-Agent Mozilla/${paidChargeCount}.0 (Macintosh; Intel Mac OS X 10.15; rv:106.0) Gecko/20100101 Firefox/106.0 Accept text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8 Sec-Fetch-Dest empty 200 Assertion.response_code false 8 Copy LNURL ${payLinkLnurl} Assertion.response_data false 2 false all_wallets true = true ${host} ${port} ${scheme} UTF-8 /lnurlp/api/v1/links/${payLinkId} GET true false true false Sec-Fetch-Mode cors Sec-Fetch-Site same-origin Accept-Language en-US,en;q=0.${paidChargeCount} X-Api-Key ${inkey} Accept-Encoding gzip, deflate, br User-Agent Mozilla/${paidChargeCount}.0 (Macintosh; Intel Mac OS X 10.15; rv:106.0) Gecko/20100101 Firefox/106.0 Accept application/json, text/plain, */* Sec-Fetch-Dest empty 200 Assertion.response_code false 8 lnurl ${payLinkLnurl} true false false true false all_wallets true = true ${host} ${port} ${scheme} UTF-8 /api/v1/lnurlscan/${payLinkLnurl} GET true false true false Sec-Fetch-Mode cors Sec-Fetch-Site same-origin Accept-Language en-US,en;q=0.${paidChargeCount} X-Api-Key ${adminWalletKey} Accept-Encoding gzip, deflate, br User-Agent Mozilla/${paidChargeCount}.0 (Macintosh; Intel Mac OS X 10.15; rv:106.0) Gecko/20100101 Firefox/106.0 Accept application/json, text/plain, */* Sec-Fetch-Dest empty 200 Assertion.response_code false 8 domain ${host}:${port} true false false true tag payRequest true false false true commentAllowed 128 true false false true kind pay true false false true description receive payments ${lnurlpCounter} true false false true payLinkCallback callback 0 no-paylink-callback payLinkDescriptionHash description_hash 0 no-paylink-description-hash true ${paymentCountPerLnurlp} 1 ${paymentCountPerLnurlp} 1 lnurlpPaymentCounter true false true true false {"callback":"${scheme}://${host}:${port}/lnurlp/api/v1/lnurl/cb/${payLinkId}","description_hash":"${payLinkDescriptionHash}","amount":1${lnurlpCounter}000,"comment":"xxq ${lnurlpCounter}","description":"receive payments ${lnurlpCounter}"} = ${host} ${port} ${scheme} utf-8 /api/v1/payments/lnurl POST true false true false Sec-Fetch-Mode cors Sec-Fetch-Site same-origin Accept-Language en-US,en;q=0.${lnurlpCount} Origin ${scheme}://${host}:${port} Accept application/json, text/plain, */* X-Api-Key ${adminWalletKey} Content-Type application/json;charset=utf-8 Accept-Encoding gzip, deflate, br User-Agent Mozilla/${lnurlpCount}.0 (Macintosh; Intel Mac OS X 10.15; rv:106.0) Gecko/20100101 Firefox/106.0 Sec-Fetch-Dest empty 200 Assertion.response_code false 8 success_action false false false false paymenHash payment_hash 0 no-paymenthash 3000 for the webhook to be called ${host} ${port} ${scheme} UTF-8 /api/v1/payments/${paymenHash} GET true false true false X-Api-Key ${inkey} 200 Assertion.response_code false 8 $.details.extra.wh_success true true false false false $.details.extra.wh_message OK true false false false javascript true 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) } } ${host} ${port} ${scheme} UTF-8 /api/v1/wallet GET true false true false Referer ${scheme}://${host}:${port}/wallet?wal=${walletId} Accept-Language en-US,en;q=0.5 X-Api-Key ${inkey} Accept-Encoding gzip, deflate User-Agent Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:105.0) Gecko/20100101 Firefox/105.0 Accept application/json, text/plain, */* 200 Assertion.response_code false 8 true 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) javascript false true false enable withdraw = true ${host} ${port} ${scheme} utf-8 /extensions GET true false true false Sec-Fetch-Mode same-origin Referer ${scheme}://${host}:${port}/extensions Sec-Fetch-Site same-origin Accept-Language en-US,en;q=0.5 Upgrade-Insecure-Requests ${lnurlpCount} Accept-Encoding gzip, deflate, br User-Agent Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:106.0) Gecko/20100101 Firefox/106.0 Accept text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8 Sec-Fetch-Dest empty 200 Assertion.response_code false 8 v-for="extension in filteredExtensions" Assertion.response_data false 2 ${host} ${port} ${scheme} UTF-8 /withdraw/ GET true false true false Sec-Fetch-Mode same-origin Sec-Fetch-Site same-origin Accept-Language en-US,en;q=0.5 Upgrade-Insecure-Requests ${lnurlpCount} Accept-Encoding gzip, deflate, br User-Agent Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:106.0) Gecko/20100101 Firefox/106.0 Accept text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8 Sec-Fetch-Dest empty 200 Assertion.response_code false 8 Withdraw links curl -X GET http://127.0.0.1:5000/withdraw/api/v1/links -H Assertion.response_data false 2 false all_wallets true = true ${host} ${port} ${scheme} UTF-8 /withdraw/api/v1/links GET true false true false Sec-Fetch-Mode cors Sec-Fetch-Site same-origin Accept-Language en-US,en;q=0.5 X-Api-Key ${inkey} Accept-Encoding gzip, deflate, br User-Agent Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:106.0) Gecko/20100101 Firefox/106.0 Accept application/json, text/plain, */* Sec-Fetch-Dest empty 200 Assertion.response_code false 8 [] Assertion.response_data false 8 false true true false {"name":"receive wallet"} = ${host} ${port} ${scheme} utf-8 /api/v1/wallet POST true false true false Sec-Fetch-Mode cors Sec-Fetch-Site same-origin Accept-Language en-US,en;q=0.5 Accept application/json, text/plain, */* X-Api-Key ${adminkey} Content-Type application/json;charset=utf-8 Accept-Encoding gzip, deflate, br User-Agent Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:106.0) Gecko/20100101 Firefox/106.0 Sec-Fetch-Dest empty 200 Assertion.response_code false 8 name receive wallet true false false false receiveInkey inkey 0 no-receive-inkey true ${lnurlwCount} 1 1 lnurlwCounter false false true true false { "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 } = ${host} ${port} ${scheme} utf-8 /withdraw/api/v1/links POST true false true false Sec-Fetch-Mode cors Sec-Fetch-Site same-origin Accept-Language en-US,en;q=0.5 Accept application/json, text/plain, */* X-Api-Key ${adminkey} Content-Type application/json;charset=utf-8 Accept-Encoding gzip, deflate, br User-Agent Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:106.0) Gecko/20100101 Firefox/106.0 Sec-Fetch-Dest empty 201 Assertion.response_code false 8 javascript true 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) } withdrawLinkId id 0 no-withdraw-link-id withdrawLinkLnurl lnurl 0 no-withdraw-link-lnurl ${host} ${port} ${scheme} UTF-8 /withdraw/${withdrawLinkId} GET true false true false Sec-Fetch-Mode same-origin Sec-Fetch-Site same-origin Accept-Language en-US,en;q=0.5 Accept-Encoding gzip, deflate, br User-Agent Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:106.0) Gecko/20100101 Firefox/106.0 Accept text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8 Sec-Fetch-Dest empty 200 Assertion.response_code false 8 Copy LNURL ${withdrawLinkLnurl} Assertion.response_data false 2 false all_wallets true = true ${host} ${port} ${scheme} UTF-8 /withdraw/api/v1/links/${withdrawLinkId} GET true false true false Sec-Fetch-Mode cors Sec-Fetch-Site same-origin Accept-Language en-US,en;q=0.${paidChargeCount} X-Api-Key ${inkey} Accept-Encoding gzip, deflate, br User-Agent Mozilla/${paidChargeCount}.0 (Macintosh; Intel Mac OS X 10.15; rv:106.0) Gecko/20100101 Firefox/106.0 Accept application/json, text/plain, */* Sec-Fetch-Dest empty 200 Assertion.response_code false 8 lnurl ${withdrawLinkLnurl} true false false true false all_wallets true = true ${host} ${port} ${scheme} UTF-8 /api/v1/lnurlscan/${withdrawLinkLnurl} GET true false true false Sec-Fetch-Mode cors Sec-Fetch-Site same-origin Accept-Language en-US,en;q=0.${paidChargeCount} X-Api-Key ${adminWalletKey} Accept-Encoding gzip, deflate, br User-Agent Mozilla/${paidChargeCount}.0 (Macintosh; Intel Mac OS X 10.15; rv:106.0) Gecko/20100101 Firefox/106.0 Accept application/json, text/plain, */* Sec-Fetch-Dest empty 200 Assertion.response_code false 8 domain ${host}:${port} true false false true tag withdrawRequest true false false true kind withdraw true false false true defaultDescription withdraw ${lnurlwCounter} true false false true withdrawLinkCallback callback 0 no-withdrawlink-callback true ${withdrawCountPerLnurlw} 1 ${withdrawCountPerLnurlw} 1 lnurlwWithdrawCounter true false true true false {"out":false,"amount":10,"memo":"withdraw ${lnurlwCounter}","unit":"sat","lnurl_callback":"${withdrawLinkCallback}"} = ${host} ${port} ${scheme} utf-8 /api/v1/payments POST true false true false Sec-Fetch-Mode cors Sec-Fetch-Site same-origin Accept-Language en-US,en;q=0.${lnurlpCount} Origin ${scheme}://${host}:${port} Accept application/json, text/plain, */* X-Api-Key ${receiveInkey} Content-Type application/json;charset=utf-8 Accept-Encoding gzip, deflate, br User-Agent Mozilla/${lnurlpCount}.0 (Macintosh; Intel Mac OS X 10.15; rv:106.0) Gecko/20100101 Firefox/106.0 Sec-Fetch-Dest empty 201 Assertion.response_code false 8 lnurl_response true true false false true paymenHash payment_hash 0 no-payment-hash 3000 for the callback to be invoked ${host} ${port} ${scheme} UTF-8 /api/v1/payments/${paymenHash} GET true false true false X-Api-Key ${inkey} 200 Assertion.response_code false 8 $.details.extra.wh_success true true false false false $.details.extra.wh_message OK true false false false javascript true 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) } } ${host} ${port} ${scheme} UTF-8 /api/v1/wallet GET true false true false Referer ${scheme}://${host}:${port}/wallet?wal=${walletId} Accept-Language en-US,en;q=0.5 X-Api-Key ${inkey} Accept-Encoding gzip, deflate User-Agent Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:105.0) Gecko/20100101 Firefox/105.0 Accept application/json, text/plain, */* 200 Assertion.response_code false 8 true 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) javascript ${host} ${port} ${scheme} UTF-8 /api/v1/wallet GET true false true false Referer ${scheme}://${host}:${port}/wallet?wal=${walletId} Accept-Language en-US,en;q=0.5 X-Api-Key ${receiveInkey} Accept-Encoding gzip, deflate User-Agent Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:105.0) Gecko/20100101 Firefox/105.0 Accept application/json, text/plain, */* 200 Assertion.response_code false 8 true 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); } javascript false saveConfig true true true true true true true false true true false false false true false false false true 0 true true true true true true false saveConfig true true true true true true true false true true false false false true false false false true 0 true true true true true true false saveConfig true true true true true true true false true true false false false true false false false true 0 true true true true true true false saveConfig true true true true true true true false true true false false false true false false false true 0 true true true true true true 100 true (wallet){1} false saveConfig true true true true true true true false true true false false false true false false false true 0 true true true true true true false saveConfig true true true true true true true false true true false false false true false false false true 0 true true true true true true 8081 0 25 8888 windowsupdate\.microsoft\.com.* (?i).*\.(bmp|css|js|gif|ico|jpe?g|png|swf|eot|otf|ttf|mp4|woff|woff2) .*msg\.yahoo\.com.* www\.download\.windowsupdate\.com.* toolbarqueries\.google\..* http?://self-repair\.mozilla\.org.* tiles.*\.mozilla\.com.* .*detectportal\.firefox\.com.* us\.update\.toolbar\.yahoo\.com.* .*\.google\.com.*/safebrowsing/.* api\.bing\.com.* toolbar\.google\.com.* .*yimg\.com.* toolbar\.msn\.com.* (?i).*\.(bmp|css|js|gif|ico|jpe?g|png|swf|eot|otf|ttf|mp4|woff|woff2)[\?;].* toolbar\.avg\.com/.* www\.google-analytics\.com.* pgq\.yahoo\.com.* safebrowsing.*\.google\.com.* sqm\.microsoft\.com.* g\.msn.* clients.*\.google.* .*toolbar\.yahoo\.com.* geo\.yahoo\.com.* true 4 false false true true false true false 0 true UTF-8 false saveConfig true true true true true true true true true true true true true false true true true true 0 true true true true true true true true recording.xml