From 567b46e50ee66f3cdfb62293a99f38d7ee4f0cdd Mon Sep 17 00:00:00 2001 From: Akhil Date: Thu, 9 May 2024 16:12:48 +0530 Subject: [PATCH 1/4] Scenario based Resident Services Scripts for 8 different scenario's Signed-off-by: Akhil --- .../scripts/Resident_Test_script.jmx | 3988 +++-------------- .../resident_access_id_token.txt | 2 + .../support-files/template_type.txt | 3 - .../support-files/vid_list_resident.txt | 2 + 4 files changed, 623 insertions(+), 3372 deletions(-) create mode 100644 resident-services/support-files/resident_access_id_token.txt create mode 100644 resident-services/support-files/vid_list_resident.txt diff --git a/resident-services/scripts/Resident_Test_script.jmx b/resident-services/scripts/Resident_Test_script.jmx index 651079cf..8bc437f1 100644 --- a/resident-services/scripts/Resident_Test_script.jmx +++ b/resident-services/scripts/Resident_Test_script.jmx @@ -21,7 +21,7 @@ serverIP - api.cellbox.mosip.net + api.qa-platform1.mosip.net = @@ -41,12 +41,12 @@ serverIPInternal - api-internal.cellbox.mosip.net + api-internal.qa-platform1.mosip.net = residentOidcClientId - G27lCI-trl4_pwXWBTb4WyCi0cCUZdnA5yVh3EGMBCg + VT92FbIgdeHiuy7N8ETReyRWV92J8cXszCz9VcDvKCo = @@ -56,7 +56,7 @@ regProcSecretKey - abc123 + 51GSCoEjmXIBfNuB = @@ -71,7 +71,7 @@ idRepoSecretKey - abc123 + CcCyCoMWEVDKM10I = @@ -99,9 +99,9 @@ 1 = - - serverIPesignet - esignet.cellbox.mosip.net + + serverIPEsignet + esignet.qa-platform1.mosip.net = @@ -111,7 +111,7 @@ loginUriEncoded - aHR0cHM6Ly9yZXNpZGVudC5jZWxsYm94Lm1vc2lwLm5ldC8jL3VpbnNlcnZpY2VzL2Rhc2hib2FyZA== + aHR0cHM6Ly9yZXNpZGVudC5xYS1wbGF0Zm9ybTEubW9zaXAubmV0LyMvdWluc2VydmljZXMvdmlld2hpc3Rvcnk = @@ -121,7 +121,7 @@ otpChannelTypeLoopCount - 2 + 1 = @@ -139,34 +139,14 @@ 150000 = + + eventId + 2942066069503167 + = + - - continue - - false - 1 - - 1 - 1 - false - - - true - - - - new File("vid_list_resident.txt").delete(); - -new File("resident_access_id_token.txt").delete(); - - - - false - - - continue @@ -317,7 +297,7 @@ new File("resident_access_id_token.txt").delete(); - ./Center-MachineIDValues.csv + D:/Jmeter Scripts/Resident Services/Center-MachineIDValues.csv machineID,centerID true @@ -329,7 +309,7 @@ new File("resident_access_id_token.txt").delete(); - ./biometrics_mb.txt + D:/Jmeter Scripts/Resident Services/biometrics_mb.txt biometrics false @@ -341,7 +321,7 @@ new File("resident_access_id_token.txt").delete(); - ./addIdentityRequestDetails.csv + D:/Jmeter Scripts/Resident Services/addIdentityRequestDetails.csv firstName,dateOfBirth,gender true @@ -352,6 +332,20 @@ new File("resident_access_id_token.txt").delete(); shareMode.all + + + + false + import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.TimeZone;//Set the format for the date-time +SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.sss"); +dateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));// Get the current time in UTC +Calendar cal = Calendar.getInstance(); +String utcTime = dateFormat.format(cal.getTime()); +vars.put("utcTime", utcTime); + + @@ -500,7 +494,7 @@ new File("resident_access_id_token.txt").delete(); "fullName": [{ "language": "eng", - "value": "FR" + "value": "${firstName}" }], "gender": [{ @@ -564,7 +558,7 @@ new File("resident_access_id_token.txt").delete(); - "requesttime": "2019-01-28T13:07:13.152Z", + "requesttime": "${utcTime}Z", "version": "v1.0" } = @@ -609,6 +603,23 @@ new File("resident_access_id_token.txt").delete(); 16 + + + 200 + + + Assertion.response_code + false + 2 + + + + false + + + ${__StringToFile(uinListIda.txt,${uin}\n,true,)} + + true @@ -623,7 +634,7 @@ new File("resident_access_id_token.txt").delete(); "UIN":"${uin}", "vidType": "Perpetual" }, - "requesttime": "2020-06-04T08:59:37.471Z", + "requesttime": "${utcTime}Z", "version": "v1" } = @@ -782,7 +793,7 @@ vars.put("utcTime", utcTime); - ${serverIPesignet} + ${serverIPEsignet} ${serverPortNo} ${protocol} @@ -872,7 +883,7 @@ vars.put("utcTime", utcTime); - ${serverIPesignet} + ${serverIPEsignet} ${serverPortNo} ${protocol} @@ -1004,7 +1015,7 @@ function encodeBase64Url(value) { - ${serverIPesignet} + ${serverIPEsignet} ${serverPortNo} ${protocol} @@ -1085,7 +1096,7 @@ function encodeBase64Url(value) { - ${serverIPesignet} + ${serverIPEsignet} ${serverPortNo} ${protocol} @@ -1147,15 +1158,22 @@ function encodeBase64Url(value) { false - code + authCode "code":"(.*?)" $1$ code not found 1 + + + + false + ${__StringToFile(login_redirect_code.txt,${authCode}\n,true,)} + + - + @@ -1167,7 +1185,7 @@ function encodeBase64Url(value) { false - ${code} + ${authCode} = true code @@ -1251,7 +1269,7 @@ function encodeBase64Url(value) { - + continue false @@ -1277,7 +1295,7 @@ function encodeBase64Url(value) { idToken,accessToken - + @@ -1285,7 +1303,7 @@ function encodeBase64Url(value) { ${serverPortNo} ${protocol} - /resident/v1/authorize/admin/validateToken + /resident/v1/service-history/${languageCode} GET true false @@ -1311,7 +1329,7 @@ function encodeBase64Url(value) { - "errors":null + "errors":[] Assertion.response_data @@ -1330,97 +1348,33 @@ function encodeBase64Url(value) { - - - continue - - false - 1 - - 1 - 1 - false - - - true - - - - , - - ./vid_list_resident.txt - true - false - true - shareMode.all - false - individualIdLoginRedirect - - - - - - false - import java.text.SimpleDateFormat; -import java.util.Calendar; -import java.util.TimeZone;//Set the format for the date-time -SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.sss"); -dateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));// Get the current time in UTC -Calendar cal = Calendar.getInstance(); -String utcTime = dateFormat.format(cal.getTime()); -vars.put("utcTime", utcTime); - - - + true false { - "requestTime": "${utcTime}Z", "request": { - "clientId": "${residentOidcClientId}", - "scope": "${scope}", - "responseType": "code", - "redirectUri": "${protocol}://${serverIPInternal}/resident/v1/login-redirect/${loginUriEncoded}", - "display": "popup", - "prompt": "login", - "acrValues": "${acrValues}", - "claims": { - "userinfo": { - "name": { - "essential": true - }, - "phone_number": { - "essential": true - }, - "email": { - "essential": true - }, - "picture": { - "essential": true - }, - "individual_id": { - "essential": true - } - }, - "id_token": {} - }, - "nonce": "973eieljzng", - "state": "${state}", - "claimsLocales": "en" - } + "eventId": "2942066069503167", + "name": "FR", + "emailId": "Resident_AddIdentity_Esignet_Integ_Vid_smoke_Pos@mosip.net", + "message": "Share", + "phoneNo": "9876543210" + }, + "requesttime": "2024-05-01T20:28:44.760Z", + "id": "mosip.resident.grievance.ticket.request", + "version": "1.0" } = - ${serverIPesignet} + ${serverIPInternal} ${serverPortNo} ${protocol} - /v1/esignet/authorization/oauth-details + /resident/v1/grievance/ticket POST true false @@ -1437,13 +1391,9 @@ vars.put("utcTime", utcTime); Content-Type application/json - - X-XSRF-TOKEN - ${loadCsrfToken} - - + Cookie - XSRF-TOKEN=${loadCsrfToken} + Authorization=${accessToken};id_token=${idToken} @@ -1468,49 +1418,16 @@ vars.put("utcTime", utcTime); 2 - - false - tidLoginRedirect - "transactionId":"(.*?)" - $1$ - transactionID not found - 1 - - - - false - captcha - "captcha.sitekey":"(.*?)" - $1$ - Captcha not found - 1 - - - - true - - - - false - { - "requestTime": "${utcTime}Z", - "request": { - "transactionId": "${tidLoginRedirect}", - "individualId": "${individualIdLoginRedirect}", - "otpChannels": ["PHONE","EMAIL"], - "captchaToken" : "${captcha}" - } -} - = - - + + + - ${serverIPesignet} + ${serverIPInternal} ${serverPortNo} ${protocol} - /v1/esignet/authorization/send-otp + /resident/v1/callback/authTransaction POST true false @@ -1527,28 +1444,69 @@ vars.put("utcTime", utcTime); Content-Type application/json - - X-XSRF-TOKEN - ${loadCsrfToken} - - + Cookie - XSRF-TOKEN=${loadCsrfToken} + Authorization=${accessToken};id_token=${idToken} + + + + + + PDF + + + Assertion.response_data + false + 16 + + + + + 200 + + + Assertion.response_code + false + 2 + + + + + + + + ${serverIPInternal} + ${serverPortNo} + ${protocol} + + /resident/v1/unpinned/${eventId} + POST + true + false + true + false + + + + + + + - oauth-details-hash - ${hashValue} + Content-Type + application/json - - oauth-details-key - ${tidLoginRedirect} + + Cookie + Authorization=${accessToken};id_token=${idToken} - "errors":[] + errors":[] Assertion.response_data @@ -1566,83 +1524,16 @@ vars.put("utcTime", utcTime); 2 - - javascript - - - true - // Import the required Java classes -var Base64 = Java.type('java.util.Base64'); -var StandardCharsets = Java.type('java.nio.charset.StandardCharsets'); - -// Retrieve the previous response value -var jsonResponse = prev.getResponseDataAsString(); - -// Print the previous response value -log.info("Previous Response: " + jsonResponse); - -// Parse the JSON response -var jsonObject = JSON.parse(jsonResponse); -var responseObjectString = JSON.stringify(jsonObject.response); - -// Convert JSON to base64 URL-encoded SHA-256 hash -var sha256Hash = hashSHA256(responseObjectString); -var base64UrlEncodedHash = encodeBase64Url(sha256Hash); - -//Print the sha256 value -log.info("sha256Hash Value: " + sha256Hash); - -// Print the final hash value -log.info("Final Hash Value: " + base64UrlEncodedHash); - -// Set the new variable value in JMeter -vars.put("hashValue", base64UrlEncodedHash); - -// Function to compute the SHA-256 hash -function hashSHA256(value) { - var messageDigest = Java.type('java.security.MessageDigest').getInstance('SHA-256'); - var bytes = (value).getBytes(StandardCharsets.UTF_8); - var digest = messageDigest.digest(bytes); - return digest; -} - -// Function to base64 URL-encode the hash value -function encodeBase64Url(value) { - var base64 = Base64.getUrlEncoder().withoutPadding().encodeToString(value); - return base64; -} - - - - true - - - - false - { - "requestTime": "${utcTime}Z", - "request": { - "transactionId": "${tidLoginRedirect}", - "individualId": "${individualIdLoginRedirect}", - "challengeList": [ - { - "authFactorType": "OTP", - "challenge": "111111", - "format": "alpha-numeric" - } - ] - } -} - = - - + + + - ${serverIPesignet} + ${serverIPInternal} ${serverPortNo} ${protocol} - /v1/esignet/authorization/authenticate + /resident/v1/pinned/${eventId} POST true false @@ -1659,28 +1550,16 @@ function encodeBase64Url(value) { Content-Type application/json - - X-XSRF-TOKEN - ${loadCsrfToken} - - + Cookie - XSRF-TOKEN=${loadCsrfToken} - - - oauth-details-hash - ${hashValue} - - - oauth-details-key - ${tidLoginRedirect} + Authorization=${accessToken};id_token=${idToken} - "errors":[] + errors":[] Assertion.response_data @@ -1699,32 +1578,24 @@ function encodeBase64Url(value) { - - true - + + - + false - { - "requestTime": "${utcTime}Z", - "request": { - "transactionId": "${tidLoginRedirect}", - "permittedAuthorizeScopes": [${permittedAuthorizeScopes}], - "acceptedClaims": [ - ${acceptedClaims} - ] - } -} + ${languageCode} = + true + languageCode - ${serverIPesignet} + ${serverIPInternal} ${serverPortNo} ${protocol} - /v1/esignet/authorization/auth-code - POST + /resident/v1/download/service-history + GET true false true @@ -1740,28 +1611,16 @@ function encodeBase64Url(value) { Content-Type application/json - - X-XSRF-TOKEN - ${loadCsrfToken} - - + Cookie - XSRF-TOKEN=${loadCsrfToken} - - - oauth-details-hash - ${hashValue} - - - oauth-details-key - ${tidLoginRedirect} + Authorization=${accessToken};id_token=${idToken} - "errors":[] + PDF Assertion.response_data @@ -1779,25 +1638,9 @@ function encodeBase64Url(value) { 2 - - false - authCode - "code":"(.*?)" - $1$ - authCode not found - 1 - - - - - - false - ${__StringToFile(login_redirect_code.txt,${authCode}\n,true,)} - - - + continue false @@ -1811,34 +1654,59 @@ function encodeBase64Url(value) { true - + , - ./login_redirect_code.txt + ./resident_access_id_token.txt true false true shareMode.all false - authCodeLogin + idToken,accessToken - - + + 1100000000 + 9999999999 + 1 + tranIdGv + + false + + + + + + false + import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.TimeZone;//Set the format for the date-time +SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.sss"); +dateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));// Get the current time in UTC +Calendar cal = Calendar.getInstance(); +String utcTime = dateFormat.format(cal.getTime()); +vars.put("utcTime", utcTime); + + + + true + - - false - ${state} - = - true - state - - + false - ${authCodeLogin} + +{ + "id": "mosip.resident.vid.generate", + "version": "1.0", + "requesttime": "${utcTime}Z", + "request": { + "transactionID": "${tranIdGv}", + "vidType": "Temporary", + "channels": ["PHONE","EMAIL"] + } +} = - true - code @@ -1846,8 +1714,8 @@ function encodeBase64Url(value) { ${serverPortNo} ${protocol} - /resident/v1/login-redirect/${loginUriEncoded} - GET + /resident/v1/generate-vid + POST true false true @@ -1863,16 +1731,16 @@ function encodeBase64Url(value) { Content-Type application/json - + Cookie - state=${state} + Authorization=${accessToken};id_token=${idToken} - <title>ResidentUi</title> + "errors":[] Assertion.response_data @@ -1890,44 +1758,41 @@ function encodeBase64Url(value) { 2 + + false + vid + "vid":"(.*?)" + $1$ + Vid not found + 1 + + - - - continue - - false - 1 - - 1 - 1 - false - - - true - - - - , - - ./resident_access_id_token.txt - true - false - true - shareMode.all - false - idToken,accessToken - - - - - + + true + + + + false + { + "id": "mosip.resident.vid.revoke", + "version": "1.0", + "requesttime": "${utcTime}Z", + "request": { + "transactionID": "${tranIdRevokeVid}", + "vidStatus": "REVOKED" + } +} + = + + ${serverIPInternal} ${serverPortNo} ${protocol} - resident/v1/vid/policy - GET + resident/v1/revoke-vid/${vid} + PATCH true false true @@ -1952,7 +1817,7 @@ function encodeBase64Url(value) { - "vidPolicies" + "errors":[] Assertion.response_data @@ -1971,83 +1836,16 @@ function encodeBase64Url(value) { - - - continue - - false - 1 - - 1 - 1 - false - - - true - - - - , - - ./resident_access_id_token.txt - true - false - true - shareMode.all - false - idToken,accessToken - - - - 1100000000 - 9999999999 - 1 - tranIdGv - - false - - - - - - false - import java.text.SimpleDateFormat; -import java.util.Calendar; -import java.util.TimeZone;//Set the format for the date-time -SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.sss"); -dateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));// Get the current time in UTC -Calendar cal = Calendar.getInstance(); -String utcTime = dateFormat.format(cal.getTime()); -vars.put("utcTime", utcTime); - - - - true - - - - false - -{ - "id": "mosip.resident.vid.generate", - "version": "1.0", - "requesttime": "${utcTime}Z", - "request": { - "transactionID": "${tranIdGv}", - "vidType": "Temporary", - "channels": ["PHONE","EMAIL"] - } -} - = - - + + + ${serverIPInternal} ${serverPortNo} ${protocol} - /resident/v1/generate-vid - POST + /resident/v1/vids + GET true false true @@ -2090,35 +1888,17 @@ vars.put("utcTime", utcTime); 2 + + false + vid1 + "vid":"(.*?)" + $1$ + Vid not found + 1 + + - - - continue - - false - 1 - - 1 - 1 - false - - - true - - - - , - - ./resident_access_id_token.txt - true - false - true - shareMode.all - false - idToken,accessToken - - - + @@ -2126,7 +1906,7 @@ vars.put("utcTime", utcTime); ${serverPortNo} ${protocol} - /resident/v1/vids + resident/v1/vid/policy GET true false @@ -2152,7 +1932,7 @@ vars.put("utcTime", utcTime); - "errors":[] + "vidPolicies" Assertion.response_data @@ -2171,34 +1951,7 @@ vars.put("utcTime", utcTime); - - - continue - - false - 1 - - 1 - 1 - false - - - true - - - - , - - ./resident_access_id_token.txt - true - false - true - shareMode.all - false - idToken,accessToken - - - + @@ -2206,7 +1959,7 @@ vars.put("utcTime", utcTime); ${serverPortNo} ${protocol} - /resident/v1/service-history/${languageCode} + resident/v1/request-card/vid/${vid1} GET true false @@ -2252,7 +2005,7 @@ vars.put("utcTime", utcTime); - + continue false @@ -2278,15 +2031,6 @@ vars.put("utcTime", utcTime); idToken,accessToken - - 1200000000 - 9999999999 - 1 - tranIdGenVid - - false - - @@ -2301,21 +2045,37 @@ String utcTime = dateFormat.format(cal.getTime()); vars.put("utcTime", utcTime); - + true false - -{ - "id": "mosip.resident.vid.generate", + { + "id": "mosip.resident.auth.lock.unlock", "version": "1.0", "requesttime": "${utcTime}Z", "request": { - "transactionID": "${tranIdGenVid}", - "vidType": "Temporary", - "channels": ["PHONE","EMAIL"] + "authTypes": [ + { + "authType": "demo", + "authSubType": null, + "locked": false, + "unlockForSeconds": 120 + }, + { + "authType": "bio", + "authSubType": "FACE", + "locked": true, + "unlockForSeconds": null + }, + { + "authType": "otp", + "authSubType": "email", + "locked": false, + "unlockForSeconds": null + } + ] } } = @@ -2326,7 +2086,7 @@ vars.put("utcTime", utcTime); ${serverPortNo} ${protocol} - /resident/v1/generate-vid + resident/v1/auth-lock-unlock POST true false @@ -2352,7 +2112,7 @@ vars.put("utcTime", utcTime); - "errors":[] + "errors":null Assertion.response_data @@ -2370,98 +2130,17 @@ vars.put("utcTime", utcTime); 2 - - false - vidGen - "vid":"(.*?)" - $1$ - genVid not found - 1 - - - - - - false - ${__StringToFile(resident_revoke_vid.txt,${idToken}\,${accessToken}\,${vidGen}\n,true,)} - - - - - continue - - false - 1 - - 1 - 1 - false - - - true - - - - , - - ./resident_revoke_vid.txt - true - false - true - shareMode.all - false - idToken,accessToken,vidRevoke - - - - 1400000000 - 9999999999 - 1 - tranIdRevokeVid - - false - - - - - - false - import java.text.SimpleDateFormat; -import java.util.Calendar; -import java.util.TimeZone;//Set the format for the date-time -SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.sss"); -dateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));// Get the current time in UTC -Calendar cal = Calendar.getInstance(); -String utcTime = dateFormat.format(cal.getTime()); -vars.put("utcTime", utcTime); - - - - true - - - - false - { - "id": "mosip.resident.vid.revoke", - "version": "1.0", - "requesttime": "${utcTime}Z", - "request": { - "transactionID": "${tranIdRevokeVid}", - "vidStatus": "REVOKED" - } -} - = - - + + + ${serverIPInternal} ${serverPortNo} ${protocol} - resident/v1/revoke-vid/${vidRevoke} - PATCH + resident/v1/auth-lock-status + GET true false true @@ -2505,90 +2184,16 @@ vars.put("utcTime", utcTime); - - - continue - - false - 1 - - 1 - 1 - false - - - true - - - - , - - ./resident_access_id_token.txt - true - false - true - shareMode.all - false - idToken,accessToken - - - - - - false - import java.text.SimpleDateFormat; -import java.util.Calendar; -import java.util.TimeZone;//Set the format for the date-time -SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.sss"); -dateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));// Get the current time in UTC -Calendar cal = Calendar.getInstance(); -String utcTime = dateFormat.format(cal.getTime()); -vars.put("utcTime", utcTime); - - - - true - - - - false - { - "id": "mosip.resident.auth.lock.unlock", - "version": "1.0", - "requesttime": "${utcTime}Z", - "request": { - "authTypes": [ - { - "authType": "demo", - "authSubType": null, - "locked": false, - "unlockForSeconds": 120 - }, - { - "authType": "bio", - "authSubType": "FACE", - "locked": true, - "unlockForSeconds": null - }, - { - "authType": "otp", - "authSubType": "email", - "locked": false, - "unlockForSeconds": null - } - ] - } -} - = - - + + + ${serverIPInternal} ${serverPortNo} ${protocol} - resident/v1/auth-lock-unlock - POST + resident/v1/callback/authTypeCallback + GET true false true @@ -2613,7 +2218,7 @@ vars.put("utcTime", utcTime); - "errors":null + "errors":[] Assertion.response_data @@ -2633,7 +2238,7 @@ vars.put("utcTime", utcTime); - + continue false @@ -2659,15 +2264,23 @@ vars.put("utcTime", utcTime); idToken,accessToken - + - + + + false + ${languageCode} + = + true + langCode + + ${serverIPInternal} ${serverPortNo} ${protocol} - resident/v1/auth-lock-status + resident/v1/events/${eventId} GET true false @@ -2712,34 +2325,7 @@ vars.put("utcTime", utcTime); - - - continue - - false - 1 - - 1 - 1 - false - - - true - - - - , - - ./resident_access_id_token.txt - true - false - true - shareMode.all - false - idToken,accessToken,individualIdRequestCard - - - + @@ -2747,7 +2333,7 @@ vars.put("utcTime", utcTime); ${serverPortNo} ${protocol} - resident/v1/request-card/vid/${individualIdRequestCard} + resident/v1/ack/download/pdf/event/${eventId}/language/${languageCode} GET true false @@ -2773,12 +2359,12 @@ vars.put("utcTime", utcTime); - "errors":[] + PDF Assertion.response_data false - 16 + 2 @@ -2793,7 +2379,7 @@ vars.put("utcTime", utcTime); - + continue false @@ -2808,26 +2394,64 @@ vars.put("utcTime", utcTime); + ./resident_access_id_token.txt + + idToken,accessToken + true , + false + true + false + shareMode.all + + + + D:/Jmeter Scripts/Resident Services/schema_type.txt - ./resident_access_id_token.txt + schemaTypeUI true + , false true + false shareMode.all + + + + D:/Jmeter Scripts/Resident Services/template_type.txt + + templateTypeCode + true + , + false + true false - idToken,accessToken + shareMode.all - + + + + false + import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.TimeZone;//Set the format for the date-time +SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.sss"); +dateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));// Get the current time in UTC +Calendar cal = Calendar.getInstance(); +String utcTime = dateFormat.format(cal.getTime()); +vars.put("utcTime", utcTime); + + + - + false - ${languageCode} + Print_Partner = true - languageCode + partnerType @@ -2835,7 +2459,7 @@ vars.put("utcTime", utcTime); ${serverPortNo} ${protocol} - /resident/v1/download/service-history + /resident/v1/auth-proxy/partners GET true false @@ -2861,12 +2485,12 @@ vars.put("utcTime", utcTime); - PDF + "errors":null} Assertion.response_data false - 16 + 2 @@ -2880,46 +2504,7 @@ vars.put("utcTime", utcTime); - - - continue - - false - 1 - - 1 - 1 - false - - - true - - - - , - - ./resident_access_id_token.txt - true - false - true - shareMode.all - false - idToken,accessToken - - - - , - - ./schema_type.txt - true - false - true - shareMode.all - false - schemaType - - - + @@ -2927,7 +2512,7 @@ vars.put("utcTime", utcTime); ${serverPortNo} ${protocol} - /resident/v1/identity/info/type/${schemaType} + /resident/v1/ack/download/pdf/event/${eventId}/language/${languageCode} GET true false @@ -2953,7 +2538,7 @@ vars.put("utcTime", utcTime); - "errors":null + PDF Assertion.response_data @@ -2972,34 +2557,7 @@ vars.put("utcTime", utcTime); - - - continue - - false - 1 - - 1 - 1 - false - - - true - - - - ./resident_access_id_token.txt - - idToken,accessToken - true - , - false - true - false - shareMode.all - - - + @@ -3007,7 +2565,7 @@ vars.put("utcTime", utcTime); ${serverPortNo} ${protocol} - /resident/v1/auth-proxy/config/identity-mapping + /resident/v1/auth-proxy/masterdata/templates/${languageCode}/${templateTypeCode} GET true false @@ -3033,7 +2591,7 @@ vars.put("utcTime", utcTime); - "identity" + "errors":null} Assertion.response_data @@ -3052,149 +2610,28 @@ vars.put("utcTime", utcTime); - - - continue - - false - 1 - - 1 - 1 - false - - - true - - - - ./resident_access_id_token.txt - - idToken,accessToken - true - , - false - true - false - shareMode.all - - - - - - - false - 0 - = - true - schemaVersion - - - - ${serverIPInternal} - ${serverPortNo} - ${protocol} - - /resident/v1/proxy/masterdata/idschema/latest - GET - true - false - true - false - - - - - - - - - Content-Type - application/json - - - Cookie - Authorization=${accessToken};id_token=${idToken} - - - - - - - "errors":null} - - - Assertion.response_data - false - 2 - - - - - 200 - - - Assertion.response_code - false - 2 - - - - - - continue - - false - 1 - - 1 - 1 - false - - - true - - - - ./resident_access_id_token.txt - - idToken,accessToken - true - , - false - true - false - shareMode.all - - - - - - false - import java.text.SimpleDateFormat; -import java.util.Calendar; -import java.util.TimeZone;//Set the format for the date-time -SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.sss"); -dateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));// Get the current time in UTC -Calendar cal = Calendar.getInstance(); -String utcTime = dateFormat.format(cal.getTime()); -vars.put("utcTime", utcTime); - - - + true false { - "id": "mosip.resident.download.personalized.card", - "version": "1.0", - "requesttime": "${utcTime}Z", + "id": "mosip.resident.share.credential", "request": { - "attributes" : ["email", "dateOfBirth", "fullName"], - "html": "PGh0bWw+PGhlYWQ+PC9oZWFkPjxib2R5Pjx0YWJsZT48dHI+PHRkIHN0eWxlPSdmb250LXdlaWdodDo2MDA7IGZvbnQtZmFtaWx5OlJvYm90bzsnPk5hbWU6PC90ZD48dGQgc3R5bGU9J2ZvbnQtd2VpZ2h0OjUwMDsgZm9udC1mYW1pbHk6Um9ib3RvOyc+RlI8L3RkPjwvdHI+PHRyPjx0ZCBzdHlsZT0nZm9udC13ZWlnaHQ6NjAwOyBmb250LWZhbWlseTpSb2JvdG87Jz5ET0I6PC90ZD48dGQgc3R5bGU9J2ZvbnQtd2VpZ2h0OjUwMDsgZm9udC1mYW1pbHk6Um9ib3RvOyc+MDcvTWF5LzE5OTU8L3RkPjwvdHI+PHRyPjx0ZCBzdHlsZT0nZm9udC13ZWlnaHQ6NjAwOyBmb250LWZhbWlseTpSb2JvdG87Jz5FbWFpbCBJRDo8L3RkPjx0ZCBzdHlsZT0nZm9udC13ZWlnaHQ6NTAwOyBmb250LWZhbWlseTpSb2JvdG87Jz5hYmNAZ21haWwyMjMxNjAxODQzNTUuY29tPC90ZD48L3RyPjwvdGFibGU+PC9ib2R5PjwvaHRtbD4=" - } + "partnerId": "mpartner-default-mimotokeybinding", + "sharableAttributes": [ + { + "attributeName": "dateOfBirth", + "format": "YYYY", + "masked": true + } + ], + "purpose": "string", + "consent": "Accepted" + }, + "requesttime": "${utcTime}Z", + "version": "1.0" } = @@ -3204,7 +2641,7 @@ vars.put("utcTime", utcTime); ${serverPortNo} ${protocol} - /resident/v1/download/personalized-card + /resident/v1/share-credential POST true false @@ -3214,94 +2651,6 @@ vars.put("utcTime", utcTime); - - - - - Content-Type - application/json - - - Cookie - Authorization=${accessToken};id_token=${idToken} - - - - - - - PDF - - - Assertion.response_data - false - 2 - - - - - 200 - - - Assertion.response_code - false - 2 - - - - - - continue - - false - 1 - - 1 - 1 - false - - - true - - - - ./resident_access_id_token.txt - - idToken,accessToken - true - , - false - true - false - shareMode.all - - - - - - - false - Print_Partner - = - true - partnerType - - - - ${serverIPInternal} - ${serverPortNo} - ${protocol} - - /resident/v1/auth-proxy/partners - GET - true - false - true - false - - - - @@ -3332,1948 +2681,73 @@ vars.put("utcTime", utcTime); Assertion.response_code - false - 2 - - - - - - continue - - false - 1 - - 1 - 1 - false - - - true - - - - ./resident_access_id_token.txt - - idToken,accessToken - true - , - false - true - false - shareMode.all - - - - ./schema_type.txt - - schemaTypeUI - true - , - false - true - false - shareMode.all - - - - - - - ${serverIPInternal} - ${serverPortNo} - ${protocol} - - /resident/v1/auth-proxy/config/ui-schema/${schemaTypeUI} - GET - true - false - true - false - - - - - - - - - Content-Type - application/json - - - Cookie - Authorization=${accessToken};id_token=${idToken} - - - - - - - "identity" - - - Assertion.response_data - false - 2 - - - - - 200 - - - Assertion.response_code - false - 2 - - - - - - continue - - false - 1 - - 1 - 1 - false - - - true - - - - ./resident_access_id_token.txt - - idToken,accessToken - true - , - false - true - false - shareMode.all - - - - ./template_type.txt - - templateTypeCode - true - , - false - true - false - shareMode.all - - - - - - - ${serverIPInternal} - ${serverPortNo} - ${protocol} - - /resident/v1/auth-proxy/masterdata/templates/${languageCode}/${templateTypeCode} - GET - true - false - true - false - - - - - - - - - Content-Type - application/json - - - Cookie - Authorization=${accessToken};id_token=${idToken} - - - - - - - "errors":null} - - - Assertion.response_data - false - 2 - - - - - 200 - - - Assertion.response_code - false - 2 - - - - - - continue - - false - 1 - - 1 - 1 - false - - - true - - - - ./resident_access_id_token.txt - - idToken,accessToken - true - , - false - true - false - shareMode.all - - - - - - false - import java.text.SimpleDateFormat; -import java.util.Calendar; -import java.util.TimeZone;//Set the format for the date-time -SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.sss"); -dateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));// Get the current time in UTC -Calendar cal = Calendar.getInstance(); -String utcTime = dateFormat.format(cal.getTime()); -vars.put("utcTime", utcTime); - - - - true - - - - false - { - "id": "mosip.resident.share.credential", - "request": { - "partnerId": "mpartner-default-print", - "sharableAttributes": [ - { - "attributeName": "Gender", - "value": "Male", - "isMasked": false - } - ], - "purpose": "string", - "consent": "Accepted" - }, - "requesttime": "${utcTime}Z", - "version": "1.0" -} - = - - - - ${serverIPInternal} - ${serverPortNo} - ${protocol} - - /resident/v1/share-credential - POST - true - false - true - false - - - - - - - - - Content-Type - application/json - - - Cookie - Authorization=${accessToken};id_token=${idToken} - - - - - - - "errors":null} - - - Assertion.response_data - false - 2 - - - - - 200 - - - Assertion.response_code - false - 2 - - - - - - continue - - false - 1 - - 1 - 1 - false - - - true - - - - - - - false - ${state} - = - true - state - - - - ${serverIPInternal} - ${serverPortNo} - ${protocol} - - /resident/v1/login/${loginUriEncoded} - GET - false - false - true - false - - - - - - - - - Content-Type - application/json - - - - - - - 302 - - - Assertion.response_code - false - 2 - all - - - - - - continue - - false - 1 - - 1 - 1 - false - - - true - - - - ./resident_access_id_token.txt - - idToken,accessToken - true - , - false - true - false - shareMode.all - - - - - - - ${serverIPInternal} - ${serverPortNo} - ${protocol} - - /resident/v1/unread/notification-count - GET - true - false - true - false - - - - - - - - - Content-Type - application/json - - - Cookie - Authorization=${accessToken};id_token=${idToken} - - - - - - - "errors":null} - - - Assertion.response_data - false - 2 - - - - - 200 - - - Assertion.response_code - false - 2 - - - - - - continue - - false - 1 - - 1 - 1 - false - - - true - - - - ./resident_access_id_token.txt - - idToken,accessToken - true - , - false - true - false - shareMode.all - - - - - - - ${serverIPInternal} - ${serverPortNo} - ${protocol} - - /resident/v1/bell/notification-click - GET - true - false - true - false - - - - - - - - - Content-Type - application/json - - - Cookie - Authorization=${accessToken};id_token=${idToken} - - - - - - - "errors":null} - - - Assertion.response_data - false - 2 - - - - - 200 - - - Assertion.response_code - false - 2 - - - - - - continue - - false - 1 - - 1 - 1 - false - - - true - - - - ./resident_access_id_token.txt - - idToken,accessToken - true - , - false - true - false - shareMode.all - - - - - - - ${serverIPInternal} - ${serverPortNo} - ${protocol} - - /resident/v1/bell/updatedttime - PUT - true - false - true - false - - - - - - - - - Content-Type - application/json - - - Cookie - Authorization=${accessToken};id_token=${idToken} - - - - - - - 200 - - - Assertion.response_code - false - 2 - - - - - - continue - - false - 1 - - 1 - 1 - false - - - true - - - - 1300000000 - 9999999999 - 1 - tidRequestOtp - - false - - - - , - - ./vid_list_resident.txt - true - false - true - shareMode.all - false - individualIdOtp - - - - - - false - import java.text.SimpleDateFormat; -import java.util.Calendar; -import java.util.TimeZone;//Set the format for the date-time -SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.sss"); -dateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));// Get the current time in UTC -Calendar cal = Calendar.getInstance(); -String utcTime = dateFormat.format(cal.getTime()); -vars.put("utcTime", utcTime); - - - - true - - - - false - { - "id": "mosip.identity.otp.internal", - "individualId": "${individualIdOtp}", - "metadata": {}, - "otpChannel": [ - "EMAIL", "PHONE" - ], - "requestTime": "${utcTime}Z", - "transactionID": "${tidRequestOtp}", - "version": "1.0" -} - = - - - - ${serverIPInternal} - ${serverPortNo} - ${protocol} - - /resident/v1/req/otp - POST - true - false - true - false - - - - - - - - - Content-Type - application/json - - - - - - - "errors":null - - - Assertion.response_data - false - 16 - - - - - 200 - - - Assertion.response_code - false - 2 - - - - - - false - ${__StringToFile(transaction_id_validate_otp.txt,${tidRequestOtp}\,${individualIdOtp}\n,true,)} - - - - - - continue - - false - 1 - - 1 - 1 - false - - - true - - - - , - - ./transaction_id_validate_otp.txt - true - false - true - shareMode.all - false - tidValidateOtp,individualIdValidateOtp - - - - - - false - import java.text.SimpleDateFormat; -import java.util.Calendar; -import java.util.TimeZone;//Set the format for the date-time -SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.sss"); -dateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));// Get the current time in UTC -Calendar cal = Calendar.getInstance(); -String utcTime = dateFormat.format(cal.getTime()); -vars.put("utcTime", utcTime); - - - - true - - - - false - { - "id": "mosip.identity.auth.internal", - "version": "1.0", - "requesttime": "${utcTime}Z", - "request": { - "transactionId": "${tidValidateOtp}", - "individualId": "${individualIdValidateOtp}", - "otp": "111111" - } -} - = - - - - ${serverIPInternal} - ${serverPortNo} - ${protocol} - - /resident/v1/validate-otp - POST - true - false - true - false - - - - - - - - - Content-Type - application/json - - - - - - - "errors":null - - - Assertion.response_data - false - 16 - - - - - 200 - - - Assertion.response_code - false - 2 - - - - - - continue - - false - 1 - - 1 - 1 - false - - - true - - - - , - - ./resident_access_id_token.txt - true - false - true - shareMode.all - false - idToken,accessToken - - - - - - - false - ${languageCode} - = - true - langcode - - - - ${serverIPInternal} - ${serverPortNo} - ${protocol} - - /resident/v1/download/supporting-documents - GET - true - false - true - false - - - - - - - - - Content-Type - application/json - - - Cookie - Authorization=${accessToken};id_token=${idToken} - - - - - - - PDF - - - Assertion.response_data - false - 2 - - - - - 200 - - - Assertion.response_code - false - 2 - - - - - - continue - - false - 1 - - 1 - 1 - false - - - true - - - - , - - ./resident_access_id_token.txt - true - false - true - shareMode.all - false - idToken,accessToken - - - - ./coordinates.csv - - longitude,latitude,proximityDistance - true - , - false - true - false - shareMode.all - - - - - - - false - ${languageCode} - = - true - langcode - - - false - ${longitude} - = - true - longitude - - - false - ${latitude} - = - true - latitude - - - false - ${proximityDistance} - = - true - proximitydistance - - - - ${serverIPInternal} - ${serverPortNo} - ${protocol} - - /resident/v1/download/nearestRegistrationcenters - GET - true - false - true - false - - - - - - - - - Content-Type - application/json - - - Cookie - Authorization=${accessToken};id_token=${idToken} - - - - - - - PDF - - - Assertion.response_data - false - 2 - - - - - 200 - - - Assertion.response_code - false - 2 - - - - - - continue - - false - 1 - - 1 - 1 - false - - - true - - - - , - - ./resident_access_id_token.txt - true - false - true - shareMode.all - false - idToken,accessToken - - - - , - - ./hierarchy_level.csv - true - false - true - shareMode.all - false - hierarchyLevel,name - - - - - - - false - ${languageCode} - = - true - langcode - - - false - ${hierarchyLevel} - = - true - hierarchylevel - - - false - ${name} - = - true - name - - - - ${serverIPInternal} - ${serverPortNo} - ${protocol} - - /resident/v1/download/registration-centers-list - GET - true - false - true - false - - - - - - - - - Content-Type - application/json - - - Cookie - Authorization=${accessToken};id_token=${idToken} - - - - - - - PDF - - - Assertion.response_data - false - 2 - - - - - 200 - - - Assertion.response_code - false - 2 - - - - - - continue - - false - 1 - - 1 - 1 - false - - - true - - - - , - - ./resident_access_id_token.txt - true - false - true - shareMode.all - false - idToken,accessToken - - - - - - false - import java.text.SimpleDateFormat; -import java.util.Calendar; -import java.util.TimeZone;//Set the format for the date-time -SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.sss"); -dateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));// Get the current time in UTC -Calendar cal = Calendar.getInstance(); -String utcTime = dateFormat.format(cal.getTime()); -vars.put("utcTime", utcTime); - - - - true - - - - false - { - "id": "mosip.resident.auth.lock.unlock", - "version": "1.0", - "requesttime": "${utcTime}Z", - "request": { - "authTypes": [ - { - "authType": "demo", - "authSubType": null, - "locked": false, - "unlockForSeconds": 120 - }, - { - "authType": "bio", - "authSubType": "FACE", - "locked": true, - "unlockForSeconds": null - }, - { - "authType": "otp", - "authSubType": "email", - "locked": false, - "unlockForSeconds": null - } - ] - } -} - = - - - - ${serverIPInternal} - ${serverPortNo} - ${protocol} - - resident/v1/auth-lock-unlock - POST - true - false - true - false - - - - - - - - - Content-Type - application/json - - - Cookie - Authorization=${accessToken};id_token=${idToken} - - - - - - - "errors":null - - - Assertion.response_data - false - 16 - - - - - 200 - - - Assertion.response_code - false - 2 - - - - true - eventId - eventid:\s(.*?)\s - $1$ - eventId not found - 1 - - - - - - false - ${__StringToFile(eventid_service_request.txt,${idToken}\,${accessToken}\,${eventId}\n,true,)} - - - - - - continue - - false - 1 - - 1 - 1 - false - - - true - - - - , - - ./eventid_service_request.txt - true - false - true - shareMode.all - false - idToken,accessToken,eventId - - - - - - - false - ${languageCode} - = - true - langCode - - - - ${serverIPInternal} - ${serverPortNo} - ${protocol} - - resident/v1/events/${eventId} - GET - true - false - true - false - - - - - - - - - Content-Type - application/json - - - Cookie - Authorization=${accessToken};id_token=${idToken} - - - - - - - "errors":[] - - - Assertion.response_data - false - 16 - - - - - 200 - - - Assertion.response_code - false - 2 - - - - - - continue - - false - 1 - - 1 - 1 - false - - - true - - - - , - - ./resident_access_id_token.txt - true - false - true - shareMode.all - false - idToken,accessToken - - - - - - false - import java.text.SimpleDateFormat; -import java.util.Calendar; -import java.util.TimeZone;//Set the format for the date-time -SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.sss"); -dateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));// Get the current time in UTC -Calendar cal = Calendar.getInstance(); -String utcTime = dateFormat.format(cal.getTime()); -vars.put("utcTime", utcTime); - - - - true - - - - false - { - "id": "mosip.resident.auth.lock.unlock", - "version": "1.0", - "requesttime": "${utcTime}Z", - "request": { - "authTypes": [ - { - "authType": "demo", - "authSubType": null, - "locked": false, - "unlockForSeconds": 120 - }, - { - "authType": "bio", - "authSubType": "FACE", - "locked": true, - "unlockForSeconds": null - }, - { - "authType": "otp", - "authSubType": "email", - "locked": false, - "unlockForSeconds": null - } - ] - } -} - = - - - - ${serverIPInternal} - ${serverPortNo} - ${protocol} - - resident/v1/auth-lock-unlock - POST - true - false - true - false - - - - - - - - - Content-Type - application/json - - - Cookie - Authorization=${accessToken};id_token=${idToken} - - - - - - - "errors":null - - - Assertion.response_data - false - 16 - - - - - 200 - - - Assertion.response_code - false - 2 - - - - true - eventId - eventid:\s(.*?)\s - $1$ - eventId not found - 1 - - - - - - false - ${__StringToFile(eventid_download_service_request.txt,${idToken}\,${accessToken}\,${eventId}\n,true,)} - - - - - - continue - - false - 1 - - 1 - 1 - false - - - true - - - - , - - ./eventid_download_service_request.txt - true - false - true - shareMode.all - false - idToken,accessToken,eventId - - - - - - - ${serverIPInternal} - ${serverPortNo} - ${protocol} - - resident/v1/ack/download/pdf/event/${eventId}/language/${languageCode} - GET - true - false - true - false - - - - - - - - - Content-Type - application/json - - - Cookie - Authorization=${accessToken};id_token=${idToken} - - - - - - - PDF - - - Assertion.response_data - false - 2 - - - - - 200 - - - Assertion.response_code - false - 2 - - - - - - continue - - false - 1 - - 1 - 1 - false - - - true - - - - ./resident_access_id_token.txt - - idToken,accessToken - true - , - false - true - false - shareMode.all - - - - - - - ${serverIPInternal} - ${serverPortNo} - ${protocol} - - /resident/v1/notifications/${languageCode} - GET - true - false - true - false - - - - - - - - - Content-Type - application/json - - - Cookie - Authorization=${accessToken};id_token=${idToken} - - - - - - - "errors":null} - - - Assertion.response_data - false - 2 - - - - - 200 - - - Assertion.response_code - false - 2 - - - - - - continue - - false - 1 - - 1 - 1 - false - - - true - - - - 1400000000 - 9999999999 - 1 - tidRequestOtp - - false - - - - , - - ./vid_list_resident.txt - true - false - true - shareMode.all - false - individualIdOtp - - - - - - false - import java.text.SimpleDateFormat; -import java.util.Calendar; -import java.util.TimeZone;//Set the format for the date-time -SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.sss"); -dateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));// Get the current time in UTC -Calendar cal = Calendar.getInstance(); -String utcTime = dateFormat.format(cal.getTime()); -vars.put("utcTime", utcTime); - - - - true - ${otpChannelTypeLoopCount} - - - - , - - ./otp_channel_type_list_resident.txt - true - false - true - shareMode.all - false - otpChannel - - - - true - - - - false - { - "id": "mosip.identity.otp.internal", - "individualId": "${individualIdOtp}", - "metadata": {}, - "otpChannel": [ - "${otpChannel}" - ], - "requestTime": "${utcTime}Z", - "transactionID": "${tidRequestOtp}", - "version": "1.0" -} - = - - - - ${serverIPInternal} - ${serverPortNo} - ${protocol} - - /resident/v1/req/otp - POST - true - false - true - false - - - - - - - - - Content-Type - application/json - - - - - - - "errors":null - - - Assertion.response_data - false - 16 - - - - - 200 - - - Assertion.response_code - false - 2 - - - - - true - - - - false - { - "id": "mosip.identity.auth.internal", - "version": "1.0", - "requesttime": "${utcTime}Z", - "request": { - "transactionId": "${tidRequestOtp}", - "individualId": "${individualIdOtp}", - "otp": "111111" - } -} - = - - - - ${serverIPInternal} - ${serverPortNo} - ${protocol} - - /resident/v1/validate-otp - POST - true - false - true - false - - - - - - - - - Content-Type - application/json - - - - - - - "errors":null - - - Assertion.response_data - false - 16 - - - - - 200 - - - Assertion.response_code - false - 2 - - - - - - false - ${__StringToFile(channel_verification_list.txt,${individualIdOtp}\,${otpChannel}\n,true,)} - - - - - - - continue - - false - 1 - - 1 - 1 - false - - - true - - - - , - - ./channel_verification_list.txt - true - false - true - shareMode.all - false - individualIdVerification,channelVerification - - - + false + 2 + + + + - - - false - ${channelVerification} - = - true - channel + + + ${serverIPInternal} + ${serverPortNo} + ${protocol} + + /resident/v1/proxy/config/ui-properties + GET + true + false + true + false + + + + + + + + + Content-Type + application/json - - false - ${individualIdVerification} - = - true - individualId + + Cookie + Authorization=${accessToken};id_token=${idToken} + + + + + "errors":null + + + Assertion.response_data + false + 2 + + + + + 200 + + + Assertion.response_code + false + 2 + + + + + + ${serverIPInternal} ${serverPortNo} ${protocol} - /resident/v1/channel/verification-status/ + /resident/v1/auth-proxy/config/identity-mapping GET true false @@ -5290,12 +2764,16 @@ vars.put("utcTime", utcTime); Content-Type application/json + + Cookie + Authorization=${accessToken};id_token=${idToken} + - "errors":null + identity Assertion.response_data @@ -5314,34 +2792,7 @@ vars.put("utcTime", utcTime); - - - continue - - false - 1 - - 1 - 1 - false - - - true - - - - ./resident_access_id_token.txt - - idToken,accessToken - true - , - false - true - false - shareMode.all - - - + @@ -5349,7 +2800,7 @@ vars.put("utcTime", utcTime); ${serverPortNo} ${protocol} - /resident/v1/profile + /resident/v1/auth-proxy/config/ui-schema/${schemaTypeUI} GET true false @@ -5375,7 +2826,7 @@ vars.put("utcTime", utcTime); - "errors":null} + "identity" Assertion.response_data @@ -5395,7 +2846,7 @@ vars.put("utcTime", utcTime); - + continue false @@ -5410,18 +2861,18 @@ vars.put("utcTime", utcTime); - , - ./resident_access_id_token.txt + + idToken,accessToken true + , false true - shareMode.all false - idToken,accessToken,individualIdDownloadCard + shareMode.all - + @@ -5429,7 +2880,7 @@ vars.put("utcTime", utcTime); ${serverPortNo} ${protocol} - resident/v1/request-card/vid/${individualIdDownloadCard} + /resident/v1/notifications/${languageCode} GET true false @@ -5455,12 +2906,12 @@ vars.put("utcTime", utcTime); - "errors":[] + "errors":null} Assertion.response_data false - 16 + 2 @@ -5473,51 +2924,8 @@ vars.put("utcTime", utcTime); 2 - - true - eventId - eventid:\s(.*?)\s - $1$ - eventId not found - 1 - - - - - - false - ${__StringToFile(event_id_download_card.txt,${idToken}\,${accessToken}\,${eventId}\n,true,)} - - - - - continue - - false - 1 - - 1 - 1 - true - - ${downloadCardDelay} - true - - - - , - - ./event_id_download_card.txt - true - false - true - shareMode.all - false - idToken,accessToken,eventIdDownloadCard - - - + @@ -5525,7 +2933,7 @@ vars.put("utcTime", utcTime); ${serverPortNo} ${protocol} - /resident/v1/download-card/event/${eventIdDownloadCard} + /resident/v1/unread/notification-count GET true false @@ -5551,7 +2959,7 @@ vars.put("utcTime", utcTime); - PDF + "errors":null} Assertion.response_data @@ -5570,34 +2978,7 @@ vars.put("utcTime", utcTime); - - - continue - - false - 1 - - 1 - 1 - false - - - true - - - - ./coordinates.csv - - longitude,latitude,proximityDistance - true - , - false - true - false - shareMode.all - - - + @@ -5605,7 +2986,7 @@ vars.put("utcTime", utcTime); ${serverPortNo} ${protocol} - /resident/v1/proxy/masterdata/getcoordinatespecificregistrationcenters/${languageCode}/${longitude}/${latitude}/${proximityDistance} + /resident/v1/bell/notification-click GET true false @@ -5622,6 +3003,10 @@ vars.put("utcTime", utcTime); Content-Type application/json + + Cookie + Authorization=${accessToken};id_token=${idToken} + @@ -5632,7 +3017,7 @@ vars.put("utcTime", utcTime); Assertion.response_data false - 16 + 2 @@ -5646,102 +3031,51 @@ vars.put("utcTime", utcTime); - - - continue - - false - 1 - - 1 - 1 - false - - - true - - - - ./location_code.txt - - locationCode - true - , - false - true - false - shareMode.all - - - - true - ${languageCodeLoopCount} - - - - ./language_code.csv - - languageCode - true - , - false - true - false - shareMode.all - - - - - - - ${serverIPInternal} - ${serverPortNo} - ${protocol} - - /resident/v1/proxy/masterdata/locations/info/${locationCode}/${languageCode} - GET - true - false - true - false - - - - - - - - - Content-Type - application/json - - - - - - - "errors":null} - - - Assertion.response_data - false - 16 - - - - - 200 - - - Assertion.response_code - false - 2 - - - + + + + + ${serverIPInternal} + ${serverPortNo} + ${protocol} + + /resident/v1/bell/updatedttime + PUT + true + false + true + false + + + + + + + + + Content-Type + application/json + + + Cookie + Authorization=${accessToken};id_token=${idToken} + + + + + + + 200 + + + Assertion.response_code + false + 2 + + - + continue false @@ -5755,10 +3089,10 @@ vars.put("utcTime", utcTime); true - - ./hierarchy_level.csv + + ./resident_access_id_token.txt - hierarchyLevel,name,languageCode + idToken,accessToken true , false @@ -5767,23 +3101,15 @@ vars.put("utcTime", utcTime); shareMode.all - + - - - false - ${name} - = - true - name - - + ${serverIPInternal} ${serverPortNo} ${protocol} - /resident/v1/proxy/masterdata/registrationcenters/${languageCode}/${hierarchyLevel}/names + /resident/v1/profile GET true false @@ -5800,6 +3126,10 @@ vars.put("utcTime", utcTime); Content-Type application/json + + Cookie + Authorization=${accessToken};id_token=${idToken} + @@ -5810,7 +3140,7 @@ vars.put("utcTime", utcTime); Assertion.response_data false - 16 + 2 @@ -5824,34 +3154,7 @@ vars.put("utcTime", utcTime); - - - continue - - false - 1 - - 1 - 1 - false - - - true - - - - ./language_code.csv - - languageCode - true - , - false - true - false - shareMode.all - - - + @@ -5859,7 +3162,7 @@ vars.put("utcTime", utcTime); ${serverPortNo} ${protocol} - /resident/v1/proxy/masterdata/validdocuments/${languageCode} + /resident/v1/actuator/env GET true false @@ -5876,17 +3179,21 @@ vars.put("utcTime", utcTime); Content-Type application/json + + Cookie + Authorization=${accessToken};id_token=${idToken} + - "errors":null} + "activeProfiles" Assertion.response_data false - 16 + 2 @@ -5901,7 +3208,7 @@ vars.put("utcTime", utcTime); - + continue false @@ -5915,28 +3222,66 @@ vars.put("utcTime", utcTime); true - - ./hierarchy_level.csv + + , - hierarchyLevel,name,languageCode + ./resident_access_id_token.txt true - , false true - false shareMode.all + false + idToken,accessToken - - - + + + + false + import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.TimeZone;//Set the format for the date-time +SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.sss"); +dateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));// Get the current time in UTC +Calendar cal = Calendar.getInstance(); +String utcTime = dateFormat.format(cal.getTime()); +vars.put("utcTime", utcTime); + + + + true + + + + false + { + "auditEventId": "RES-SER-191", + "auditEventName": "get vids", + "auditEventType": "SYSTEM", + "actionTimeStamp": "${utcTime}Z", + "hostName": "resident-6f6fb6c845-6frw4", + "hostIp": "10.42.2.150", + "applicationId": "10011", + "applicationName": "Resident portal", + "sessionUserId": "resident-111995", + "sessionUserName": "resident-111995", + "id": "NO_ID", + "idType": "NO_ID_TYPE", + "createdBy": "resident-111995", + "moduleName": "Residence service", + "moduleId": "RES-SER", + "description": "get vids" +} + = + + ${serverIPInternal} ${serverPortNo} ${protocol} - /resident/v1/proxy/masterdata/registrationcenters/page/${languageCode}/${hierarchyLevel}/${name} - GET + /resident/v1/auth-proxy/audit/log + POST true false true @@ -5952,12 +3297,16 @@ vars.put("utcTime", utcTime); Content-Type application/json + + Cookie + Authorization=${accessToken};id_token=${idToken} + - "errors":null} + "errors":null Assertion.response_data @@ -5976,136 +3325,31 @@ vars.put("utcTime", utcTime); - - - continue - - false - 1 - - 1 - 1 - false - - - true - - - - ./location_code_immediate_children.txt - - locationCodeImmediate - true - , - false - true - false - shareMode.all - - - - true - ${languageCodeLoopCount} - - - - ./language_code.csv - - languageCode - true - , - false - true - false - shareMode.all - - - - - - - ${serverIPInternal} - ${serverPortNo} - ${protocol} - - /resident/v1/proxy/masterdata/locations/immediatechildren/${locationCodeImmediate}/${languageCode} - GET - true - false - true - false - - - - - - - - - Content-Type - application/json - - - - - - - "errors":null} - - - Assertion.response_data - false - 16 - - - - - 200 - - - Assertion.response_code - false - 2 - - - - - - - continue - - false - 1 - - 1 - 1 - false - - - true - - - - ./applicant_type_id.csv - - applicantTypeId - true - , - false - true - false - shareMode.all - - - - + + true + - + false - ${languageCode} + { + "auditEventId": "RES-SER-191", + "auditEventName": "get vids", + "auditEventType": "SYSTEM", + "actionTimeStamp": "${utcTime}Z", + "hostName": "resident-6f6fb6c845-6frw4", + "hostIp": "10.42.2.150", + "applicationId": "10011", + "applicationName": "Resident portal", + "sessionUserId": "resident-111995", + "sessionUserName": "resident-111995", + "id": "NO_ID", + "idType": "NO_ID_TYPE", + "createdBy": "resident-111995", + "moduleName": "Residence service", + "moduleId": "RES-SER", + "description": "get vids" +} = - true - languages @@ -6113,8 +3357,8 @@ vars.put("utcTime", utcTime); ${serverPortNo} ${protocol} - /resident/v1/proxy/masterdata/applicanttype/${applicantTypeId}/languages - GET + /resident/v1/proxy/audit/log + POST true false true @@ -6130,12 +3374,16 @@ vars.put("utcTime", utcTime); Content-Type application/json + + Cookie + Authorization=${accessToken};id_token=${idToken} + - "errors":null} + "errors":null Assertion.response_data @@ -6156,7 +3404,7 @@ vars.put("utcTime", utcTime); - true + false saveConfig @@ -6168,23 +3416,25 @@ vars.put("utcTime", utcTime); true true true - false + true false true - false + true false false false true false false - true + false true 0 true - true + true + true true - true + true + true diff --git a/resident-services/support-files/resident_access_id_token.txt b/resident-services/support-files/resident_access_id_token.txt new file mode 100644 index 00000000..a517dd3b --- /dev/null +++ b/resident-services/support-files/resident_access_id_token.txt @@ -0,0 +1,2 @@ +${id_token},${access_token},${tokenIndividualId} +eyJraWQiOiJIb0tLSFRZc1FUNEpTMWs2MXlpZXlEVmJBcG5qMVFEamVpak91ZDMzRkU4IiwiYWxnIjoiUlMyNTYifQ.eyJhdF9oYXNoIjpudWxsLCJzdWIiOiIzNTcyNTM5MjQzNjUxNzE5MjE2NDk4NTcyMTMxODE0NzU0NTciLCJhdWQiOiJWVDkyRmJJZ2RlSGl1eTdOOEVUUmV5UldWOTJKOGNYc3pDejlWY0R2S0NvIiwiYWNyIjoibW9zaXA6aWRwOmFjcjpnZW5lcmF0ZWQtY29kZSIsImF1dGhfdGltZSI6MTcxNDk5NDI3MSwiaXNzIjoiaHR0cHM6XC9cL2VzaWduZXQucWEtcGxhdGZvcm0xLm1vc2lwLm5ldFwvdjFcL2VzaWduZXQiLCJleHAiOjE3MTQ5OTc4NzQsImlhdCI6MTcxNDk5NDI3NCwibm9uY2UiOiI5NzNlaWVsanpuZyJ9.TP0RWB8FFV_p_xsHLd7yBKKdkEYXWvp7E9Fx67my91KgOxFtwIgYGp4L3IMVxqx21FbbbvVcbulgKH81yKh_cqWInHAT4fa998uHw9FBMimsQ3RJXWYpCikWgtvccOBkE9SJmVXFVvRdgt0dQiFEWkBpBwOyD-5Qd2Vd4I-OaL6MMlPnUcimfL1dqRsQ-H5eAgiruZik21WQIsef5XSzrGams9OtYh8OUEPMYtMD4lKZkBb9vm2GDlhF9KormemnQE5rn-lZHzJ1qRPvWWQUME6AWoHasxbIDbIhU740Y2hlg8tcMP6Lv1xz2AbUwKtFDjtSZEnxspFUauXE4yd3lA,eyJraWQiOiJIb0tLSFRZc1FUNEpTMWs2MXlpZXlEVmJBcG5qMVFEamVpak91ZDMzRkU4IiwiYWxnIjoiUlMyNTYifQ.eyJzdWIiOiIzNTcyNTM5MjQzNjUxNzE5MjE2NDk4NTcyMTMxODE0NzU0NTciLCJhdWQiOiJWVDkyRmJJZ2RlSGl1eTdOOEVUUmV5UldWOTJKOGNYc3pDejlWY0R2S0NvIiwic2NvcGUiOiJNYW5hZ2UtSWRlbnRpdHktRGF0YSBNYW5hZ2UtVklEIE1hbmFnZS1BdXRoZW50aWNhdGlvbiBNYW5hZ2UtU2VydmljZS1SZXF1ZXN0cyBNYW5hZ2UtQ3JlZGVudGlhbHMiLCJpc3MiOiJodHRwczpcL1wvZXNpZ25ldC5xYS1wbGF0Zm9ybTEubW9zaXAubmV0XC92MVwvZXNpZ25ldCIsImV4cCI6MTcxNDk5Nzg3MywiaWF0IjoxNzE0OTk0MjczLCJjbGllbnRfaWQiOiJWVDkyRmJJZ2RlSGl1eTdOOEVUUmV5UldWOTJKOGNYc3pDejlWY0R2S0NvIn0.d5ZSzf-JTkGpmqEmDFCoohvgHr2o3HOxc8Y46d8a4lp17gAV1Yw6VV7pQuXaQdgKcZi_m-QWMdHyw__ihfYeBhCMMQCKp7vc3vN42F9rS109YhLQgkneqt4L3RZ7c5oG8f3na0WEMUeSAi6c8h9S414TI9YqkN-VrXugknbkw4q_NUBKL9imb9b43kb6pWJQDr-FU673Q7PlWrVd0WhgD0OOYMjYfp2BnLj08W8gppD8nzOPgzq5ZnIOusJqvDKJjeCpr72k2anrlNB_G5N29Aw3wWSb_0zGV0LDyqwUxCxYWAC-wdvdIUisFcJHL4t_ywZElJqTy7M_LOGn1GShfw,5849382146035781 diff --git a/resident-services/support-files/template_type.txt b/resident-services/support-files/template_type.txt index 6e996eaf..e56e7a83 100644 --- a/resident-services/support-files/template_type.txt +++ b/resident-services/support-files/template_type.txt @@ -1,6 +1,3 @@ ${TemplateType} -mosip.full.name.template.property -mosip.date.of.birth.template.property -mosip.phone.template.property mosip.email.template.property mosip.address.template.property \ No newline at end of file diff --git a/resident-services/support-files/vid_list_resident.txt b/resident-services/support-files/vid_list_resident.txt new file mode 100644 index 00000000..4024ab34 --- /dev/null +++ b/resident-services/support-files/vid_list_resident.txt @@ -0,0 +1,2 @@ +${vid} +5849382146035781 From 85db63ba94046dbe171a27d4631a64ae635d0c88 Mon Sep 17 00:00:00 2001 From: Akhil Date: Thu, 6 Jun 2024 16:40:16 +0530 Subject: [PATCH 2/4] Scenario based Resident Services Scripts Signed-off-by: Akhil --- resident-services/README.md | 211 +- .../scripts/Resident_Test_script.jmx | 7604 +++++++++++++---- .../Get_my_UIN_22_May_2024_14.35.06.pdf | Bin 0 -> 78708 bytes .../channel_verification_list.txt | 32 + .../resident_access_id_token.txt | 2 - .../support-files/vid_list_resident.txt | 2 - 6 files changed, 5905 insertions(+), 1946 deletions(-) create mode 100644 resident-services/support-files/Get_my_UIN_22_May_2024_14.35.06.pdf create mode 100644 resident-services/support-files/channel_verification_list.txt delete mode 100644 resident-services/support-files/resident_access_id_token.txt delete mode 100644 resident-services/support-files/vid_list_resident.txt diff --git a/resident-services/README.md b/resident-services/README.md index 9e1129a8..94b0f2cb 100644 --- a/resident-services/README.md +++ b/resident-services/README.md @@ -1,50 +1,22 @@ ### Contains -* This folder contains performance test script of Resident Service Endpoints. - 1. Authorize​ Admin​ Validate Token - 2. Login​ Redirect URI - 3. VID Policy - 4. Generate VID - 5. Get VIDs of the Resident - 6. Service History - 7. Service History Download - 8. Auth Lock Unlock - 9. Auth Lock Status - 10. Request Card VID - 11. Revoke VID - 12. Identity Info Schema Type - 13. Identity Mapping - 14. Masterdata Idschema - 15. Download Personalized Card - 16. Auth Proxy Partner Type - 17. UI Schema - 18. Masterdata Getting Templates - 19. Share Credential - 20. Login - 21. Registration Center List Nearest Location - 22. Registration Center List Location Hierarchy - 23. Download Supporting Docs - 24. Menu Bar Bell Update Time - 25. Menu Bar Unread Notification Count - 26. Menu Bar Bell Notification Click - 27. Validate OTP - 28. Track Service Request - 29. Download Service Request - 30. Menu Bar Notifications Language Code - 31. Profile - 32. Channel Verification Status - 33. Download Card Event - 34. Masterdata Get Coordinates - 35. Masterdata Location Info - 36. Masterdata Registration Centers - 37. Masterdata Valid Documents - 38. Masterdata Registration Centers Page - 39. Masterdata Location Immediate Children - 40. Masterdata Applicant Type - +* This folder contains scenario-based performance test scripts for Resident Services. + +*List of Scenarios: + * UIN services Login + * View My History + * Manage My VID + * Secure My ID + * Track My Requests + * Get Personalized Card + * Share My Data + * Update My Data + * Get Information + * Get My UIN + * Verify Phone/Email ID + * Menu Bar + * Audit + * Logout - - - * Open source Tools used, 1. [Apache JMeter](https://jmeter.apache.org/) @@ -75,134 +47,89 @@ * id-authentication default properties: Update the value for the below properties. otp.request.flooding.max-count - 100000 +* Create Resident Services EventId (Setup) : This thread contains service history endpoint api to capture the event id's required for the test. ### Data prerequisite * List of VID's as per environment which is valid and will be prepared from the above mentioned create identities setup. +* List of Event id's as per environment which is valid and will be prepared from the above mentioned create resident services event id setup. ### Execution points for Resident Service endpoints -* The id and access token generated from the Login​ Redirect URI api will be stored in a file and will be used in the headers of below mentioned api's : - - * Authorize​ Admin​ Validate Token - * Login​ Redirect URI - * VID Policy - * Generate VID - * Get VIDs of the Resident - * Service History - * Service History Download - * Auth Lock Unlock - * Auth Lock Status - * Request Card VID - * Revoke VID - * Identity Info Schema Type - * Identity Mapping - * Masterdata Idschema - * Download Personalized Card - * Auth Proxy Partner Type - * UI Schema - * Masterdata Getting Templates - * Share Credential - * Menu Bar Bell Update Time - * Menu Bar Unread Notification Count - * Menu Bar Bell Notification Click - * Download Supporting Docs - * Registration Center List Nearest Location - * Registration Center List Location Hierarchy - * Track Service Request - * Download Service Request - * Menu Bar Notifications Language Code - * Profile - * Download Card Event - - - -* Authorize​ Admin​ Validate Token (Execution) - The id and access token generated above in the setup will be used in the headers of this api and can be re-used until they are not expired. - -* Login​ Redirect URI (Preparation) - This thread contains set of 4 esignet api's Oauth details, Send OTP, Authentication, Authorization Code. The code generated will be stored in a file and can't be used for multiple runs as code can only be used once. -* Login​ Redirect URI (Execution) - In this api will use the code generated from the above esignet api. The total preparation samples must be equal or higher in number. We cannot re-use the preparation as the generated code can only be used once. - -* VID Policy - This API is to get the VID policy. The id and access token can be re-used until they are not expired. - -* Generate VID - This API generates the VID for the given VID type. The id and access token will be used in the headers of this api and can be re-used until they are not expired. - -* Get VIDs of the Resident - This API will retrieve the list of active VIDs of the VID of the logged in session. The id and access token can be re-used until they are not expired. - -* Service History - This API is to get the service history of one or more service types. The id and access token can be re-used until they are not expired. - -* Service History Download - This API is to download the View History Tables as a PDF. The id and access token can be re-used until they are not expired. - -* Auth Lock Unlock - Resident service to store the Auth type lock/unlock status with status_comment containing summary of what is locked /unlocked. The id and access token can be re-used until they are not expired. - -* Auth Lock Status - This API returns the lock/unlock status of Auth Types for a given VID. The id and access token can be re-used until they are not expired. The id and access token can be re-used until they are not expired. - -* Request Card VID - This API is to request the PDF card generation for a specific VID of the logged in user. This will give back a event ID for tracking purpose and to use it to download the VID card from the notifications. The id and access token can be re-used until they are not expired. - -* Revoke VID (Preparation) - This thread contains Generate VID api from which we will get a VID which needs to be revoked. -* Revoke VID (Execution) - The generated VID can only be used once to be revoked so the samples created in the preparation must be equal or higher in number. - -* Identity Info Schema Type (Execution) - This API is to get the list of ID Attributes of the logged-in user to pre-populate in the UI. A variable is used as "schemaType" to pass the Type of schema in this API from a file named as schema_type. The id and access token will be used here and can be used multiple times until its valid and not expired. - -* Identity Mapping (Execution) - This API is to get the identity mapping Json. The id and access token will be passed in the headers and can be used multiple times until valid and not expired. - -* Masterdata Idschema (Execution) - This API is used to return the Id-schema. The id and access token will be used here and can be used multiple times until its valid and not expired. - -* Download Personalized Card (Execution) - This API is to download the personalized PDF card. The id and access token will be used here and can be used multiple times until its valid and not expired. - -* Auth Proxy Partner Type (Execution) - This API is to get the list of partner types from PMS. The id and access token will be used here and can be used multiple times until its valid and not expired. - -* UI Schema (Execution) - API to return the UI Spec (UI Schema) for the given schemaType which is one of share-credential/update-demographics/personalized-card. A variable is used as "schemaTypeUI" to pass the Type of schema in this API from the same file used above named as schema_type. The id and access token will be used here and can be used multiple times until its valid and not expired. +* The id and access token generated from the Login​ Redirect URI api will be stored in a file and will be used in the headers the api and can be re-used until they are not expired. +* Test duration is already defined as a variable and needs to be changed as per the test run duration requirement in the user defined variable section. +* The script is designed to run for 100 users, load being distributed accordingly for each thread group based on the weightage given for each scenario. -* Masterdata Getting Templates (Execution) - This API is to return terms and conditions and will be invoked by UI for the specific language. This is a Proxy API of master data service for getting templates for template type code and language code. Template type code will be passed in this API from a file named as template_type and the variable used is "templateTypeCode". The id and access token will be used here and can be used multiple times until its valid and not expired. -* Share Credential (Execution) - This API is to share the user specified attributes to selected partner in the selected formats along with a purpose. The id and access token will be used here and can be used multiple times until its valid and not expired. +### Exact steps of execution -* Login (Execution) - Using this API, the resident portal will redirect to the Esignet URL where the validation is performed and login happens. + Step 1: Toggle only Create Identities in MOSIP Authentication System (Setup) thread group in the script and create the required no of identities. + Step 2: Toggle only Resident Id Access Token Creation (Setup) thread group in the script and create access token and id token. + Step 3: Toggle only Create Resident EventId (Setup) thread group in the script and create the event id's. + Step 4: Toggle all the Execution based scenario thread groups and Un-toggle the first 3 setup based thread groups, make sure test duration is defined in the user defined variable section. + Step 5: Run/Excute the test. + Step 6: Monitor the metrics during the test run using reports from jmeter, kibana, grafana and Jprofiler. + +### Designing the workload model for performance test execution -* Menu Bar Unread Notification Count (Execution) - API to return the number of unread service notification list. The id and access token will be used here and can be used multiple times until its valid and not expired. +* Calculation of number of users depending on Transactions per second (TPS) provided by client -* Menu Bar Bell Notification Click (Execution) - This API is to get the latest date time whenever user clicked on the bell notification icon. The id and access token will be used here and can be used multiple times until its valid and not expired. +* Applying little's law + * Users = TPS * (SLA of transaction + think time + pacing) + * TPS --> Transaction per second. -* Menu Bar Bell Update Time (Execution) - This API is to update latest date-time when user clicked on the bell notification. The id and access token will be used here and can be used multiple times until its valid and not expired. +* For the realistic approach we can keep (Think time + Pacing) = 1 second for API testing + * Calculating number of users for 10 TPS + * Users= 10 X (SLA of transaction + 1) + = 10 X (1 + 1) + = 20 + +### Usage of Constant Throughput timer to control Hits/sec from JMeter -* Validate OTP (Preparartion) - This thread contains Request OTP API to generate OTP which will be used in the execution part. -* Validate OTP (Execution) - This API will be used to validate OTP when the resident is trying to verify his phone number or email Id. The generated OTP from the preparation can only be used once, so the samples created in the preparation must be equal or higher in number. +* In order to control hits/ minute in JMeter, it is better to use Timer called Constant Throughput Timer. -* Download Supporting Docs (Execution) - This API is to convert the List of supporting documents request as a downloadable PDF. The id and access token will be used here and can be used multiple times until its valid and not expired. +* If we are performing load test with 10TPS as hits / sec in one thread group. Then we need to provide value hits / minute as in Constant Throughput Timer + * Value = 10 X 60 + = 600 -* Registration Center List Nearest Location (Execution) - This API will download a PDF of nearest Registration Centers. The Longitude, Latitude and Proximity distance will be passed in this API from a file named as coordinates and the variables used are "longitude", "latitude" and "proximityDistance" respectivily. The id and access token will be used here and can be used multiple times until its valid and not expired. +* Dropdown option in Constant Throughput Timer + * Calculate Throughput based on as = All active threads in current thread group + * If we are performing load test with 10TPS as hits / sec in one thread group. Then we need to provide value hits / minute as in Constant Throughput Timer + Value = 10 X 60 + = 600 + + * Calculate Throughput based on as = this thread + * If we are performing scalability testing we need to calculate throughput for 10 TPS as + Value = (10 * 60 )/(Number of users) -* Registration Center List Location Hierarchy (Execution) - This API will download a PDF of Registration Centers list. The Hierarchy level will be passed in this API along with its name from a file named as hirarchy_level and the variables used are "hierarchyLevel" and "name". The id and access token will be used here and can be used multiple times until its valid and not expired. Hierarchy level are followed as 0:Country, 1:Region, 2:Province, 3:City, 4:Zone, 5:Postal Code. -* Track Service Request (Preparation) - This thread contains Auth Lock Unlock API which will generate Event ID in the response and will be used in the execution part. The Event ID will be stored in a file named as eventid_service_request.txt and can be used for multiple runs. +### Description of the scenarios -* Track Service Request (Execution) - This API is to get the details of status for a given Event ID and including its status. The Event ID generated in the preparation will passed from the file with the variable name as "eventId". The id and access token will be used here and can be used multiple times until its valid and not expired. +* View My History: This feature enables the Resident to view the history of transactions associated with their UIN. -* Download Service Request (Execution) - This API is to convert the acknowledgement of any service request Event ID as a downloadable PDF. The Event ID stored in the file eventid_service_request.txt can be used here to download the PDF. The id and access token will be used here and can be used multiple times until its valid and not expired. +* Manage My VID: Residents can create, delete, and download VID cards based on requirements. -* Menu Bar Notifications Language Code (Execution) - This API is to get notifictions to the asyncrhonous service requests in a paginated way. The id and access token will be used here and can be used multiple times until its valid and not expired. +* Secure My ID: Residents can lock or unlock their authentication modalities such as fingerprint authentication, iris authentication, email OTP authentication, SMS OTP authentication, thumbprint authentication, and face authentication. -* Profile (Execution) - This API is to get User details for the current session. The id and access token will be used here and can be used multiple times until its valid and not expired. +* Track My Requests: This feature enables the Residents to enter an Event ID associated with the logged-in user’s UIN to track the status of the event. -* Channel Verification Status (Preparation) - This thread contains two APIs i.e Request OTP and Validate OTP which are added in a loop controller because we are running both the APIs for otp channel type as "EMAIL" and "PHONE". So will save the individual id and type of channel in a file named as channel_verification_list.txt. Loop count for the loop controller is defined with the variable name "otpChannelTypeLoopCount" which is currenlty set to 2. If required, we can add the channel type to the file and as per the count of otp channel type we can modify the variable defined in the script. +* Get Personalized Card: The residents can download a personalized card which essentially means that they can choose the attributes that they would want to be added to their cards. -* Channel Verification Status (Execution) - This API is to check if OTP is verified for a channel type for an individual VID. The individual id and channel type will be passed in this API from a file named as channel_verification_list.txt and the variable used are "individualIdVerification" and "channelVerification". +* Share My Data: This feature enables Residents to choose the data that they want to share with a MOSIP-registered partner. -* Download Card Event (Preparation) - In this thread we are using Request Card VID API from which will get an Event id which is stored in a file named as event_id_download_card.txt. The id and access token will be used here and can be used multiple times until its valid and not expired. In this thread we have also added a constant timer with the variable as delay which is defined in user defined variables. The value for delay is 30 sec. +* Update My Data: This feature enables the Resident to update their identity data, address, email ID, phone number, and notification language preference. -* Download Card Event (Execution) - This API is to download the UIN card. An Event id is passed from the file generated in the preparation part. The same Event id can't be used for multiple times so the samples created in preparation must be higher in number. The id and access token will be used here and can be used multiple times until its valid and not expired. In this thread also we are using the same delay which is defined in user defined variables. +* Logout: Once the Resident is done with the activities that he wanted to perform, he can end the active session by logging out from the portal. -* Masterdata Get Coordinates (Execution) - This API is to get the longitude, latitude and proximity distance. A file named coordinates is been used to pass the data. +* Get Information: Residents can get a list of Registration Centers near them or Registration Centers based on the location hierarchy also residents can get the list of all the supporting documents as Proof of Identity, Proof of Address, Proof of Relationship, etc. -* Masterdata Location Info (Execution) - This API is to get the information about location. We don't have any preparation for this thread. We are passing the location code from a text file regarding which will get the information. +* Get My UIN: Using this feature, the Resident can download their password-protected UIN card if the UIN card is ready or they can view the status of their Application ID (AID) if the UIN card is still under progress. -* Masterdata Registration Centers (Execution) - This API is to get details about a registration center. A file named hierarchy_level is used to pass the hierarchy level and name in the API. +* Verify email ID and/ or phone number: Using this feature, the Resident can verify if the email ID/ Phone number given during registration is correct or not. This will be done by verifying the OTP sent over the registered email ID/ Phone number. -* Masterdata Valid Documents (Execution) - This API is to get the list of supporting documents for a particular document type. +* Notifications: Residents will be getting bell-icon notifications for the asynchronous events if they have an active session i.e. they have logged into the Resident Portal. -* Masterdata Registration Centers Page (Execution) - This API is to get the details about a registration center. The same file which is used above named hierarchy_level is used to pass the hierarchy level and name in the API. +* Profile details of the logged-in user (name, photo, and last login details): The Resident will be able to view the name, and photo of the logged-in user. They will also be able to see the last login details of the Resident. -* Masterdata Location Immediate Children (Execution) - This API is to get the immediate children for a location. -* Masterdata Applicant Type (Execution) - This API is to get the details of the uploaded document based on applicant Id. A file named applicant_id is used to pass the applicant id in the API. diff --git a/resident-services/scripts/Resident_Test_script.jmx b/resident-services/scripts/Resident_Test_script.jmx index 8bc437f1..275f5fc3 100644 --- a/resident-services/scripts/Resident_Test_script.jmx +++ b/resident-services/scripts/Resident_Test_script.jmx @@ -5,7 +5,7 @@ false true - true + false @@ -14,6 +14,11 @@ + + testDuration + 10 + = + protocol https @@ -21,7 +26,7 @@ serverIP - api.qa-platform1.mosip.net + api.cellbox1.mosip.net = @@ -41,7 +46,7 @@ serverIPInternal - api-internal.qa-platform1.mosip.net + api-internal.cellbox1.mosip.net = @@ -56,7 +61,7 @@ regProcSecretKey - 51GSCoEjmXIBfNuB + IMEXRmebs2ZnRtHs = @@ -71,7 +76,7 @@ idRepoSecretKey - CcCyCoMWEVDKM10I + MztmjErLZDCaifRy = @@ -99,9 +104,9 @@ 1 = - - serverIPEsignet - esignet.qa-platform1.mosip.net + + serverIPesignet + esignet.cellbox1.mosip.net = @@ -111,7 +116,7 @@ loginUriEncoded - aHR0cHM6Ly9yZXNpZGVudC5xYS1wbGF0Zm9ybTEubW9zaXAubmV0LyMvdWluc2VydmljZXMvdmlld2hpc3Rvcnk + aHR0cHM6Ly9yZXNpZGVudC5kZXYtc3RhZ2luZy5tb3NpcC5uZXQvIy91aW5zZXJ2aWNlcy9kYXNoYm9hcmQ= = @@ -129,19 +134,29 @@ RpCMVnY6vrv5qkjy = - - languageCodeLoopCount - 3 + + auditEventId + RES-audit-eventID + = + + + auditEventName + auditDdemo = - - downloadCardDelay - 150000 + + auditEventType + auditDemoType = - - eventId - 2942066069503167 + + languageCode1 + spa + = + + + referenceid + 1234567890 = @@ -297,7 +312,7 @@ - D:/Jmeter Scripts/Resident Services/Center-MachineIDValues.csv + D:/Jmeter Scripts/Resident Services/support-files/Center-MachineIDValues.csv machineID,centerID true @@ -309,7 +324,7 @@ - D:/Jmeter Scripts/Resident Services/biometrics_mb.txt + D:/Jmeter Scripts/Resident Services/support-files/biometrics_mb.txt biometrics false @@ -321,7 +336,7 @@ - D:/Jmeter Scripts/Resident Services/addIdentityRequestDetails.csv + D:/Jmeter Scripts/Resident Services/support-files/addIdentityRequestDetails.csv firstName,dateOfBirth,gender true @@ -397,6 +412,13 @@ vars.put("utcTime", utcTime); 1 + + false + + + ${__StringToFile(D:\Jmeter Scripts\Resident Services\runtime-files\rid_list_resident.txt,${rid}\n,true,)} + + @@ -617,7 +639,7 @@ vars.put("utcTime", utcTime); false - ${__StringToFile(uinListIda.txt,${uin}\n,true,)} + ${__StringToFile(D:\Jmeter Scripts\Resident Services\runtime-files\uinListIda.txt,${uin}\n,true,)} @@ -702,7 +724,7 @@ vars.put("utcTime", utcTime); false - ${__StringToFile(vid_list_resident.txt,${vid}\n,true,)} + ${__StringToFile(D:\Jmeter Scripts\Resident Services\runtime-files\vid_list_resident.txt,${vid}\n,true,)} @@ -725,7 +747,7 @@ vars.put("utcTime", utcTime); , - ./vid_list_resident.txt + D:/Jmeter Scripts/Resident Services/runtime-files/vid_list_resident.txt true false true @@ -748,7 +770,7 @@ String utcTime = dateFormat.format(cal.getTime()); vars.put("utcTime", utcTime); - + true @@ -793,7 +815,7 @@ vars.put("utcTime", utcTime); - ${serverIPEsignet} + ${serverIPesignet} ${serverPortNo} ${protocol} @@ -864,7 +886,7 @@ vars.put("utcTime", utcTime); - + true @@ -883,7 +905,7 @@ vars.put("utcTime", utcTime); - ${serverIPEsignet} + ${serverIPesignet} ${serverPortNo} ${protocol} @@ -991,7 +1013,7 @@ function encodeBase64Url(value) { - + true @@ -1015,7 +1037,7 @@ function encodeBase64Url(value) { - ${serverIPEsignet} + ${serverIPesignet} ${serverPortNo} ${protocol} @@ -1076,7 +1098,7 @@ function encodeBase64Url(value) { - + true @@ -1096,7 +1118,7 @@ function encodeBase64Url(value) { - ${serverIPEsignet} + ${serverIPesignet} ${serverPortNo} ${protocol} @@ -1169,11 +1191,11 @@ function encodeBase64Url(value) { false - ${__StringToFile(login_redirect_code.txt,${authCode}\n,true,)} + ${__StringToFile(D:\Jmeter Scripts\Resident Services\runtime-files\login_redirect_code.txt,${authCode}\n,true,)} - + @@ -1264,12 +1286,12 @@ function encodeBase64Url(value) { false - ${__StringToFile(resident_access_id_token.txt,${id_token}\,${access_token}\,${tokenIndividualId}\n,true,)} + ${__StringToFile(D:\Jmeter Scripts\Resident Services\runtime-files\resident_access_id_token.txt,${id_token}\,${access_token}\,${tokenIndividualId}\n,true,)} - + continue false @@ -1286,7 +1308,7 @@ function encodeBase64Url(value) { , - ./resident_access_id_token.txt + D:/Jmeter Scripts/Resident Services/Resident_runtime_file/resident_access_id_token.txt true false true @@ -1295,7 +1317,21 @@ function encodeBase64Url(value) { idToken,accessToken - + + + + false + import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.TimeZone;//Set the format for the date-time +SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.sss"); +dateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));// Get the current time in UTC +Calendar cal = Calendar.getInstance(); +String utcTime = dateFormat.format(cal.getTime()); +vars.put("utcTime", utcTime); + + + @@ -1347,300 +1383,789 @@ function encodeBase64Url(value) { 2 - - - true - - - - false - { - "request": { - "eventId": "2942066069503167", - "name": "FR", - "emailId": "Resident_AddIdentity_Esignet_Integ_Vid_smoke_Pos@mosip.net", - "message": "Share", - "phoneNo": "9876543210" - }, - "requesttime": "2024-05-01T20:28:44.760Z", - "id": "mosip.resident.grievance.ticket.request", - "version": "1.0" -} - = - - - - ${serverIPInternal} - ${serverPortNo} - ${protocol} - - /resident/v1/grievance/ticket - POST - true - false - true - false - - - - - - - - - Content-Type - application/json - - - Cookie - Authorization=${accessToken};id_token=${idToken} - - - - - - - "errors":[] - - - Assertion.response_data - false - 16 - + + false + eventId + "eventId":"(.*?)", + $1$ + eventId not found + 1 + all + - - - 200 - - - Assertion.response_code - false - 2 - + + + + false + ${__StringToFile(D:\Jmeter Scripts\Resident Services\runtime-files\eventid_idToken_accessToken.txt,${id_token}\,${access_token}\,${eventId}\n,true,)} + - - - - - ${serverIPInternal} - ${serverPortNo} - ${protocol} - - /resident/v1/callback/authTransaction - POST - true - false - true - false - - - - + + + continue + + false + 1 + + 1 + 1 + false + ${testDuration} + + true + + + + , + + D:/Jmeter Scripts/Resident Services/runtime-files/eventid_idToken_accessToken.txt + true + false + true + shareMode.all + false + idToken,accessToken + + + + , + + D:/Jmeter Scripts/Resident Services/runtime-files/login_redirect_code.txt + true + false + true + shareMode.all + false + authCode + + + + , + + D:/Jmeter Scripts/Resident Services/runtime-files/vid_list_resident.txt + true + false + true + shareMode.all + false + tokenIndividualId + + + + + + false + import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.TimeZone;//Set the format for the date-time +SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.sss"); +dateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));// Get the current time in UTC +Calendar cal = Calendar.getInstance(); +String utcTime = dateFormat.format(cal.getTime()); +vars.put("utcTime", utcTime); + + + + true + + + S01 T01 Login​ Redirect URI Controller + 100 + true + + + S01 T02 UIN Login Controller + 100 + true + + + - - - - Content-Type - application/json + + + + true + + + + false + { + "requestTime": "${utcTime}Z", + "request": { + "clientId": "${residentOidcClientId}", + "scope": "${scope}", + "responseType": "code", + "redirectUri": "${protocol}://${serverIPInternal}/resident/v1/login-redirect/${loginUriEncoded}", + "display": "popup", + "prompt": "login", + "acrValues": "${acrValues}", + "claims": { + "userinfo": { + "name": { + "essential": true + }, + "phone_number": { + "essential": true + }, + "email": { + "essential": true + }, + "picture": { + "essential": true + }, + "individual_id": { + "essential": true + } + }, + "id_token": {} + }, + "nonce": "973eieljzng", + "state": "${state}", + "claimsLocales": "en" + } +} + = + + - - Cookie - Authorization=${accessToken};id_token=${idToken} + ${serverIPesignet} + ${serverPortNo} + ${protocol} + + /v1/esignet/authorization/oauth-details + POST + true + false + true + false + + + + + + + + + Content-Type + application/json + + + X-XSRF-TOKEN + ${loadCsrfToken} + + + Cookie + XSRF-TOKEN=${loadCsrfToken} + + + + + + + "errors":[] + + + Assertion.response_data + false + 16 + + + + + 200 + + + Assertion.response_code + false + 2 + + + + false + tidTokenPrep + "transactionId":"(.*?)" + $1$ + transactionID not found + 1 + + + + false + captcha + "captcha.sitekey":"(.*?)" + $1$ + Captcha not found + 1 + + + + + true + + + + false + { + "requestTime": "${utcTime}Z", + "request": { + "transactionId": "${tidTokenPrep}", + "individualId": "${tokenIndividualId}", + "otpChannels": ["PHONE","EMAIL"], + "captchaToken" : "${captcha}" + } +} + = + + - - - - - - PDF - - - Assertion.response_data - false - 16 - - - - - 200 - - - Assertion.response_code - false - 2 - - - - - - - - ${serverIPInternal} - ${serverPortNo} - ${protocol} - - /resident/v1/unpinned/${eventId} - POST - true - false - true - false - - - - - - - - - Content-Type - application/json - - - Cookie - Authorization=${accessToken};id_token=${idToken} + ${serverIPesignet} + ${serverPortNo} + ${protocol} + + /v1/esignet/authorization/send-otp + POST + true + false + true + false + + + + + + + + + Content-Type + application/json + + + X-XSRF-TOKEN + ${loadCsrfToken} + + + Cookie + XSRF-TOKEN=${loadCsrfToken} + + + oauth-details-hash + ${hashValue} + + + oauth-details-key + ${tidTokenPrep} + + + + + + + "errors":[] + + + Assertion.response_data + false + 16 + + + + + 200 + + + Assertion.response_code + false + 2 + + + + javascript + + + true + // Import the required Java classes +var Base64 = Java.type('java.util.Base64'); +var StandardCharsets = Java.type('java.nio.charset.StandardCharsets'); + +// Retrieve the previous response value +var jsonResponse = prev.getResponseDataAsString(); + +// Print the previous response value +log.info("Previous Response: " + jsonResponse); + +// Parse the JSON response +var jsonObject = JSON.parse(jsonResponse); +var responseObjectString = JSON.stringify(jsonObject.response); + +// Convert JSON to base64 URL-encoded SHA-256 hash +var sha256Hash = hashSHA256(responseObjectString); +var base64UrlEncodedHash = encodeBase64Url(sha256Hash); + +//Print the sha256 value +log.info("sha256Hash Value: " + sha256Hash); + +// Print the final hash value +log.info("Final Hash Value: " + base64UrlEncodedHash); + +// Set the new variable value in JMeter +vars.put("hashValue", base64UrlEncodedHash); + +// Function to compute the SHA-256 hash +function hashSHA256(value) { + var messageDigest = Java.type('java.security.MessageDigest').getInstance('SHA-256'); + var bytes = (value).getBytes(StandardCharsets.UTF_8); + var digest = messageDigest.digest(bytes); + return digest; +} + +// Function to base64 URL-encode the hash value +function encodeBase64Url(value) { + var base64 = Base64.getUrlEncoder().withoutPadding().encodeToString(value); + return base64; +} + + + + + true + + + + false + { + "requestTime": "${utcTime}Z", + "request": { + "transactionId": "${tidTokenPrep}", + "individualId": "${tokenIndividualId}", + "challengeList": [ + { + "authFactorType": "OTP", + "challenge": "111111", + "format": "alpha-numeric" + } + ] + } +} + = + + - - - - - - errors":[] - - - Assertion.response_data - false - 16 - - - - - 200 - - - Assertion.response_code - false - 2 - - - - - - - - ${serverIPInternal} - ${serverPortNo} - ${protocol} - - /resident/v1/pinned/${eventId} - POST - true - false - true - false - - - - - - - - - Content-Type - application/json + ${serverIPesignet} + ${serverPortNo} + ${protocol} + + /v1/esignet/authorization/authenticate + POST + true + false + true + false + + + + + + + + + Content-Type + application/json + + + X-XSRF-TOKEN + ${loadCsrfToken} + + + Cookie + XSRF-TOKEN=${loadCsrfToken} + + + oauth-details-hash + ${hashValue} + + + oauth-details-key + ${tidTokenPrep} + + + + + + + "errors":[] + + + Assertion.response_data + false + 16 + + + + + 200 + + + Assertion.response_code + false + 2 + + + + + true + + + + false + { + "requestTime": "${utcTime}Z", + "request": { + "transactionId": "${tidTokenPrep}", + "permittedAuthorizeScopes": [${permittedAuthorizeScopes}], + "acceptedClaims": [ + ${acceptedClaims} + ] + } +} + = + + - - Cookie - Authorization=${accessToken};id_token=${idToken} + ${serverIPesignet} + ${serverPortNo} + ${protocol} + + /v1/esignet/authorization/auth-code + POST + true + false + true + false + + + + + + + + + Content-Type + application/json + + + X-XSRF-TOKEN + ${loadCsrfToken} + + + Cookie + XSRF-TOKEN=${loadCsrfToken} + + + oauth-details-hash + ${hashValue} + + + oauth-details-key + ${tidTokenPrep} + + + + + + + "errors":[] + + + Assertion.response_data + false + 16 + + + + + 200 + + + Assertion.response_code + false + 2 + + + + false + authCode + "code":"(.*?)" + $1$ + code not found + 1 + + + + + + false + ${__StringToFile(login_redirect_code.txt,${authCode}\n,true,)} + + + + + + + + false + ${state} + = + true + state + + + false + ${authCode} + = + true + code + + - - - - - - errors":[] - - - Assertion.response_data - false - 16 - - - - - 200 - - - Assertion.response_code - false - 2 - - - - - - - - false - ${languageCode} - = - true - languageCode + ${serverIP} + ${serverPortNo} + ${protocol} + + /resident/v1/login-redirect/${loginUriEncoded} + GET + true + false + true + false + + + + + + + + + Content-Type + application/json + + + Cookie + state=${state} + + + + + + + <title>ResidentUi</title> + + + Assertion.response_data + false + 2 + + + + + 200 + + + Assertion.response_code + false + 2 + + + + + + + + + - - - ${serverIPInternal} - ${serverPortNo} - ${protocol} - - /resident/v1/download/service-history - GET - true - false - true - false - - - - - - - - - Content-Type - application/json + ${serverIPInternal} + ${serverPortNo} + ${protocol} + + /resident/v1/authorize/admin/validateToken + GET + true + false + true + false + + + + + + + + + Content-Type + application/json + + + Cookie + Authorization=${accessToken};id_token=${idToken} + + + + + + + "errors":null + + + Assertion.response_data + false + 16 + + + + + 200 + + + Assertion.response_code + false + 2 + + + + + + + + false + ${state} + = + true + state + + + false + ${authCode} + = + true + code + + - - Cookie - Authorization=${accessToken};id_token=${idToken} + ${serverIP} + ${serverPortNo} + ${protocol} + + /resident/v1/login/v2/${loginUriEncoded} + GET + true + false + true + false + + + + + + + + + Content-Type + application/json + + + Cookie + state=${state} + + + + + + + You need to enable JavaScript to run this app + + + Assertion.response_data + false + 16 + + + + + 200 + + + Assertion.response_code + false + 2 + + + + + + + + false + ${state} + = + true + state + + - - - - - - PDF - - - Assertion.response_data - false - 16 - - - - - 200 - - - Assertion.response_code - false - 2 - - + ${serverIP} + ${serverPortNo} + ${protocol} + + /resident/v1/login/${loginUriEncoded} + GET + true + false + true + false + + + + + + + + + Content-Type + application/json + + + Cookie + state=${state} + + + + + + + You need to enable JavaScript to run this app + + + Assertion.response_data + false + 16 + + + + + 200 + + + Assertion.response_code + false + 2 + + + + - + continue false @@ -1649,28 +2174,37 @@ function encodeBase64Url(value) { 1 1 false - + ${testDuration} true - + , - ./resident_access_id_token.txt + D:/Jmeter Scripts/Resident Services/runtime-files/eventid_idToken_accessToken.txt true false true shareMode.all false - idToken,accessToken + idToken,accessToken,eventId - - 1100000000 + + 10 + 1000000 + 1 + emailid + + false + + + + 9900112233 9999999999 1 - tranIdGv + phone false @@ -1689,323 +2223,331 @@ String utcTime = dateFormat.format(cal.getTime()); vars.put("utcTime", utcTime); - - true - - - - false - -{ - "id": "mosip.resident.vid.generate", - "version": "1.0", - "requesttime": "${utcTime}Z", - "request": { - "transactionID": "${tranIdGv}", - "vidType": "Temporary", - "channels": ["PHONE","EMAIL"] - } -} - = - - - - ${serverIPInternal} - ${serverPortNo} - ${protocol} - - /resident/v1/generate-vid - POST - true - false - true - false - - - - + + true + + + Service History Endpoint + 20 + true + + + Grievance Ticket Endpoint + 20 + true + + + Unpinned Endpoint + 100 + true + + + Pinned Endpoint + 100 + true + + + Download Service History Endpoint + 100 + true + + + - - - - Content-Type - application/json - - - Cookie - Authorization=${accessToken};id_token=${idToken} - - - - - - - "errors":[] - - - Assertion.response_data - false - 16 - - - - - 200 - - - Assertion.response_code - false - 2 - - - - false - vid - "vid":"(.*?)" - $1$ - Vid not found - 1 - - - - - true - - - - false - { - "id": "mosip.resident.vid.revoke", - "version": "1.0", - "requesttime": "${utcTime}Z", + + + + + ${serverIPInternal} + ${serverPortNo} + ${protocol} + + /resident/v1/service-history/${languageCode} + GET + true + false + true + false + + + + + + + + + Content-Type + application/json + + + Cookie + Authorization=${accessToken};id_token=${idToken} + + + + + + + "errors":[] + + + Assertion.response_data + false + 16 + + + + + 200 + + + Assertion.response_code + false + 2 + + + + + true + + + + false + { "request": { - "transactionID": "${tranIdRevokeVid}", - "vidStatus": "REVOKED" - } + "eventId": "${eventId}", + "name": "FR", + "emailId": "resident.test${emailid}@mosip.net", + "message": "Share", + "phoneNo": "${phone}" + }, + "requesttime": "${utcTime}Z", + "id": "mosip.resident.grievance.ticket.request", + "version": "1.0" } - = - - - - ${serverIPInternal} - ${serverPortNo} - ${protocol} - - resident/v1/revoke-vid/${vid} - PATCH - true - false - true - false - - - - - - - - - Content-Type - application/json - - - Cookie - Authorization=${accessToken};id_token=${idToken} - - - - - - - "errors":[] - - - Assertion.response_data - false - 16 - - - - - 200 - - - Assertion.response_code - false - 2 - - - - - - - - ${serverIPInternal} - ${serverPortNo} - ${protocol} - - /resident/v1/vids - GET - true - false - true - false - - - - - - - - - Content-Type - application/json - - - Cookie - Authorization=${accessToken};id_token=${idToken} - - - - - - - "errors":[] - - - Assertion.response_data - false - 16 - - - - - 200 - - - Assertion.response_code - false - 2 - - - - false - vid1 - "vid":"(.*?)" - $1$ - Vid not found - 1 - - - - - - - - ${serverIPInternal} - ${serverPortNo} - ${protocol} - - resident/v1/vid/policy - GET - true - false - true - false - - - - - - - - - Content-Type - application/json - - - Cookie - Authorization=${accessToken};id_token=${idToken} - - - - - - - "vidPolicies" - - - Assertion.response_data - false - 16 - - - - - 200 - - - Assertion.response_code - false - 2 - - - - - - - - ${serverIPInternal} - ${serverPortNo} - ${protocol} - - resident/v1/request-card/vid/${vid1} - GET - true - false - true - false - - - - - - - - - Content-Type - application/json - - - Cookie - Authorization=${accessToken};id_token=${idToken} - - - - - - - "errors":[] - - - Assertion.response_data - false - 16 - - - - - 200 - - - Assertion.response_code - false - 2 - - + = + + + + ${serverIPInternal} + ${serverPortNo} + ${protocol} + + /resident/v1/grievance/ticket + POST + true + false + true + false + + + + + + + + + Content-Type + application/json + + + Cookie + Authorization=${accessToken};id_token=${idToken} + + + + + + + "errors":[] + + + Assertion.response_data + false + 16 + + + + + 200 + + + Assertion.response_code + false + 2 + + + + + + + + ${serverIPInternal} + ${serverPortNo} + ${protocol} + + /resident/v1/unpinned/${eventId} + POST + true + false + true + false + + + + + + + + + Content-Type + application/json + + + Cookie + Authorization=${accessToken};id_token=${idToken} + + + + + + + errors":[] + + + Assertion.response_data + false + 16 + + + + + 200 + + + Assertion.response_code + false + 2 + + + + + + + + ${serverIPInternal} + ${serverPortNo} + ${protocol} + + /resident/v1/pinned/${eventId} + POST + true + false + true + false + + + + + + + + + Content-Type + application/json + + + Cookie + Authorization=${accessToken};id_token=${idToken} + + + + + + + errors":[] + + + Assertion.response_data + false + 16 + + + + + 200 + + + Assertion.response_code + false + 2 + + + + + + + + false + ${languageCode} + = + true + languageCode + + + + ${serverIPInternal} + ${serverPortNo} + ${protocol} + + /resident/v1/download/service-history + GET + true + false + true + false + + + + + + + + + Content-Type + application/json + + + Cookie + Authorization=${accessToken};id_token=${idToken} + + + + + + + PDF + + + Assertion.response_data + false + 16 + + + + + 200 + + + Assertion.response_code + false + 2 + + + - + continue false @@ -2014,7 +2556,7 @@ vars.put("utcTime", utcTime); 1 1 false - + ${testDuration} true @@ -2022,7 +2564,7 @@ vars.put("utcTime", utcTime); , - ./resident_access_id_token.txt + D:/Jmeter Scripts/Resident Services/runtime-files/eventid_idToken_accessToken.txt true false true @@ -2031,6 +2573,15 @@ vars.put("utcTime", utcTime); idToken,accessToken + + 1100000000 + 9999999999 + 1 + tranIdGv + + false + + @@ -2045,13 +2596,479 @@ String utcTime = dateFormat.format(cal.getTime()); vars.put("utcTime", utcTime); - - true - - - - false - { + + true + + + S03 T01 Generate / Revoke VID Controller + 100 + true + + + S03 T01 Get / Download VID Controller + 100 + true + + + + + + + + true + + + + false + +{ + "id": "mosip.resident.vid.generate", + "version": "1.0", + "requesttime": "${utcTime}Z", + "request": { + "transactionID": "${tranIdGv}", + "vidType": "Temporary", + "channels": ["PHONE","EMAIL"] + } +} + = + + + + ${serverIPInternal} + ${serverPortNo} + ${protocol} + + /resident/v1/generate-vid + POST + true + false + true + false + + + + + + + + + Content-Type + application/json + + + Cookie + Authorization=${accessToken};id_token=${idToken} + + + + + + + "errors":[] + + + Assertion.response_data + false + 16 + + + + + 200 + + + Assertion.response_code + false + 2 + + + + false + vid + "vid":"(.*?)" + $1$ + Vid not found + 1 + + + + + true + + + + false + { + "id": "mosip.resident.vid.revoke", + "version": "1.0", + "requesttime": "${utcTime}Z", + "request": { + "transactionID": "${tranIdRevokeVid}", + "vidStatus": "REVOKED" + } +} + = + + + + ${serverIPInternal} + ${serverPortNo} + ${protocol} + + resident/v1/revoke-vid/${vid} + PATCH + true + false + true + false + + + + + + + + + Content-Type + application/json + + + Cookie + Authorization=${accessToken};id_token=${idToken} + + + + + + + "errors":[] + + + Assertion.response_data + false + 16 + + + + + 200 + + + Assertion.response_code + false + 2 + + + + + + + + + + + ${serverIPInternal} + ${serverPortNo} + ${protocol} + + /resident/v1/vids + GET + true + false + true + false + + + + + + + + + Content-Type + application/json + + + Cookie + Authorization=${accessToken};id_token=${idToken} + + + + + + + "errors":[] + + + Assertion.response_data + false + 16 + + + + + 200 + + + Assertion.response_code + false + 2 + + + + false + vid1 + "vid":"(.*?)" + $1$ + Vid not found + 1 + + + + + + + + ${serverIPInternal} + ${serverPortNo} + ${protocol} + + resident/v1/vid/policy + GET + true + false + true + false + + + + + + + + + Content-Type + application/json + + + Cookie + Authorization=${accessToken};id_token=${idToken} + + + + + + + "vidPolicies" + + + Assertion.response_data + false + 16 + + + + + 200 + + + Assertion.response_code + false + 2 + + + + + + + + ${serverIPInternal} + ${serverPortNo} + ${protocol} + + resident/v1/request-card/vid/${vid1} + GET + true + false + true + false + + + + + + + + + Content-Type + application/json + + + Cookie + Authorization=${accessToken};id_token=${idToken} + + + + + + + "errors":[] + + + Assertion.response_data + false + 16 + + + + + 200 + + + Assertion.response_code + false + 2 + + + + true + eventIdToken + eventid:\s(.*?)\s + $1$ + eventId not found + 0 + all + + + + 3000 + + + + + + + + ${serverIPInternal} + ${serverPortNo} + ${protocol} + + /resident/v1/download-card/event/${eventIdToken} + GET + true + false + true + false + + + + + + + 10000 + + + + + + Content-Type + application/json + + + Cookie + Authorization=${accessToken};id_token=${idToken} + + + + + + + PDF + + + Assertion.response_data + false + 2 + + + + + 200 + + + Assertion.response_code + false + 2 + + + + + + + + continue + + false + 1 + + 1 + 1 + false + ${duration} + + true + + + + , + + D:/Jmeter Scripts/Resident Services/runtime-files/eventid_idToken_accessToken.txt + true + false + true + shareMode.all + false + idToken,accessToken + + + + + + false + import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.TimeZone;//Set the format for the date-time +SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.sss"); +dateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));// Get the current time in UTC +Calendar cal = Calendar.getInstance(); +String utcTime = dateFormat.format(cal.getTime()); +vars.put("utcTime", utcTime); + + + + true + + + Auth Lock Unlock Endpoint + 100 + true + + + Auth Lock Status Endpoint + 100 + true + + + + + + true + + + + false + { "id": "mosip.resident.auth.lock.unlock", "version": "1.0", "requesttime": "${utcTime}Z", @@ -2078,167 +3095,1087 @@ vars.put("utcTime", utcTime); ] } } - = - - - - ${serverIPInternal} - ${serverPortNo} - ${protocol} - - resident/v1/auth-lock-unlock - POST - true - false - true - false - - - - - - - - - Content-Type - application/json - - - Cookie - Authorization=${accessToken};id_token=${idToken} - - - - - - - "errors":null - - - Assertion.response_data - false - 16 - - - - - 200 - - - Assertion.response_code - false - 2 - - + = + + + + ${serverIPInternal} + ${serverPortNo} + ${protocol} + + resident/v1/auth-lock-unlock + POST + true + false + true + false + + + + + + + + + Content-Type + application/json + + + Cookie + Authorization=${accessToken};id_token=${idToken} + + + + + + + "errors":null + + + Assertion.response_data + false + 16 + + + + + 200 + + + Assertion.response_code + false + 2 + + + + + + + + ${serverIPInternal} + ${serverPortNo} + ${protocol} + + resident/v1/auth-lock-status + GET + true + false + true + false + + + + + + + + + Content-Type + application/json + + + Cookie + Authorization=${accessToken};id_token=${idToken} + + + + + + + "errors":[] + + + Assertion.response_data + false + 16 + + + + + 200 + + + Assertion.response_code + false + 2 + + + - - - - - ${serverIPInternal} - ${serverPortNo} - ${protocol} - - resident/v1/auth-lock-status - GET - true - false - true - false - - - - - - - - - Content-Type - application/json - - - Cookie - Authorization=${accessToken};id_token=${idToken} - - - - - - - "errors":[] - - - Assertion.response_data - false - 16 - - - - - 200 - - - Assertion.response_code - false - 2 - - + + + continue + + false + 1 + + 1 + 1 + false + ${testDuration} + + true + + + + , + + D:/Jmeter Scripts/Resident Services/runtime-files/eventid_idToken_accessToken.txt + true + false + true + shareMode.all + false + idToken,accessToken,eventId + + + + true + + + Track Service Request Endpoint + 100 + true + + + Download Service Request Endpoint + 100 + true + + + + + + + + + false + ${languageCode} + = + true + langCode + + + + ${serverIPInternal} + ${serverPortNo} + ${protocol} + + resident/v1/events/${eventId} + GET + true + false + true + false + + + + + + + + + Content-Type + application/json + + + Cookie + Authorization=${accessToken};id_token=${idToken} + + + + + + + "errors":[] + + + Assertion.response_data + false + 16 + + + + + 200 + + + Assertion.response_code + false + 2 + + + + + + + + ${serverIPInternal} + ${serverPortNo} + ${protocol} + + resident/v1/ack/download/pdf/event/${eventId}/language/${languageCode} + GET + true + false + true + false + + + + + + + + + Content-Type + application/json + + + Cookie + Authorization=${accessToken};id_token=${idToken} + + + + + + + PDF + + + Assertion.response_data + false + 2 + + + + + 200 + + + Assertion.response_code + false + 2 + + + - - - - - ${serverIPInternal} - ${serverPortNo} - ${protocol} - - resident/v1/callback/authTypeCallback - GET - true - false - true - false - - - - + + + continue + + false + 1 + + 1 + 1 + false + ${testDuration} + + true + + + + , + + D:/Jmeter Scripts/Resident Services/runtime-files/eventid_idToken_accessToken.txt + true + false + true + shareMode.all + false + idToken,accessToken + + + + , + + D:/Jmeter Scripts/Resident Services/support-files/schema_type.txt + true + false + true + shareMode.all + false + schemaType + + + + + + false + import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.TimeZone;//Set the format for the date-time +SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.sss"); +dateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));// Get the current time in UTC +Calendar cal = Calendar.getInstance(); +String utcTime = dateFormat.format(cal.getTime()); +vars.put("utcTime", utcTime); + + + - - - - Content-Type - application/json - - - Cookie - Authorization=${accessToken};id_token=${idToken} - - - - - - - "errors":[] - - - Assertion.response_data - false - 16 - - - - - 200 - - - Assertion.response_code - false - 2 - - + + + + + ${serverIPInternal} + ${serverPortNo} + ${protocol} + + /resident/v1/identity/info/type/${schemaType} + GET + true + false + true + false + + + + + + + + + Content-Type + application/json + + + Cookie + Authorization=${accessToken};id_token=${idToken} + + + + + + + "errors":null + + + Assertion.response_data + false + 2 + + + + + 200 + + + Assertion.response_code + false + 2 + + + + + + + + ${serverIPInternal} + ${serverPortNo} + ${protocol} + + /resident/v1/auth-proxy/config/identity-mapping + GET + true + false + true + false + + + + + + + + + Content-Type + application/json + + + Cookie + Authorization=${accessToken};id_token=${idToken} + + + + + + + "identity": + + + Assertion.response_data + false + 2 + + + + + 200 + + + Assertion.response_code + false + 2 + + + + + + + + false + 0 + = + true + schemaVersion + + + + ${serverIPInternal} + ${serverPortNo} + ${protocol} + + /resident/v1/proxy/masterdata/idschema/latest + GET + true + false + true + false + + + + + + + + + Content-Type + application/json + + + Cookie + Authorization=${accessToken};id_token=${idToken} + + + + + + + "errors":null} + + + Assertion.response_data + false + 2 + + + + + 200 + + + Assertion.response_code + false + 2 + + + + + + + + ${serverIPInternal} + ${serverPortNo} + ${protocol} + + /resident/v1/auth-proxy/config/ui-schema/update-demographics + GET + true + false + true + false + + + + + + + + + Content-Type + application/json + + + Cookie + Authorization=${accessToken};id_token=${idToken} + + + + + + + "identity" + + + Assertion.response_data + false + 2 + + + + + 200 + + + Assertion.response_code + false + 2 + + + + + true + + + + false + { + "id": "mosip.resident.download.personalized.card", + "version": "1.0", + "requesttime": "${utcTime}Z", + "request": { + "attributes" : ["email", "dateOfBirth", "fullName"], + "html": "PGh0bWw+PGhlYWQ+PC9oZWFkPjxib2R5Pjx0YWJsZT48dHI+PHRkIHN0eWxlPSdmb250LXdlaWdodDo2MDA7IGZvbnQtZmFtaWx5OlJvYm90bzsnPk5hbWU6PC90ZD48dGQgc3R5bGU9J2ZvbnQtd2VpZ2h0OjUwMDsgZm9udC1mYW1pbHk6Um9ib3RvOyc+RlI8L3RkPjwvdHI+PHRyPjx0ZCBzdHlsZT0nZm9udC13ZWlnaHQ6NjAwOyBmb250LWZhbWlseTpSb2JvdG87Jz5ET0I6PC90ZD48dGQgc3R5bGU9J2ZvbnQtd2VpZ2h0OjUwMDsgZm9udC1mYW1pbHk6Um9ib3RvOyc+MDcvTWF5LzE5OTU8L3RkPjwvdHI+PHRyPjx0ZCBzdHlsZT0nZm9udC13ZWlnaHQ6NjAwOyBmb250LWZhbWlseTpSb2JvdG87Jz5FbWFpbCBJRDo8L3RkPjx0ZCBzdHlsZT0nZm9udC13ZWlnaHQ6NTAwOyBmb250LWZhbWlseTpSb2JvdG87Jz5hYmNAZ21haWwyMjMxNjAxODQzNTUuY29tPC90ZD48L3RyPjwvdGFibGU+PC9ib2R5PjwvaHRtbD4=" + } +} + = + + + + ${serverIPInternal} + ${serverPortNo} + ${protocol} + + /resident/v1/download/personalized-card + POST + true + false + true + false + + + + + + + + + Content-Type + application/json + + + Cookie + Authorization=${accessToken};id_token=${idToken} + + + + + + + PDF + + + Assertion.response_data + false + 2 + + + + + 200 + + + Assertion.response_code + false + 2 + + + + + + + continue + + false + 1 + + 1 + 1 + false + ${testDuration} + + true + + + + D:/Jmeter Scripts/Resident Services/support-files/schema_type.txt + + schemaTypeUI + true + , + false + true + false + shareMode.all + + + + , + + D:/Jmeter Scripts/Resident Services/runtime-files/eventid_idToken_accessToken.txt + true + false + true + shareMode.all + false + idToken,accessToken,eventId + + + + D:/Jmeter Scripts/Resident Services/support-files/template_type.txt + + templateTypeCode + true + , + false + true + false + shareMode.all + + + + + + false + import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.TimeZone;//Set the format for the date-time +SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.sss"); +dateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));// Get the current time in UTC +Calendar cal = Calendar.getInstance(); +String utcTime = dateFormat.format(cal.getTime()); +vars.put("utcTime", utcTime); + + + + + + + + + false + Print_Partner + = + true + partnerType + + + + ${serverIPInternal} + ${serverPortNo} + ${protocol} + + /resident/v1/auth-proxy/partners + GET + true + false + true + false + + + + + + + + + Content-Type + application/json + + + Cookie + Authorization=${accessToken};id_token=${idToken} + + + + + + + "errors":null} + + + Assertion.response_data + false + 2 + + + + + 200 + + + Assertion.response_code + false + 2 + + + + + + + + ${serverIPInternal} + ${serverPortNo} + ${protocol} + + /resident/v1/ack/download/pdf/event/${eventId}/language/${languageCode} + GET + true + false + true + false + + + + + + + + + Content-Type + application/json + + + Cookie + Authorization=${accessToken};id_token=${idToken} + + + + + + + PDF + + + Assertion.response_data + false + 2 + + + + + 200 + + + Assertion.response_code + false + 2 + + + + + + + + ${serverIPInternal} + ${serverPortNo} + ${protocol} + + /resident/v1/auth-proxy/masterdata/templates/${languageCode}/${templateTypeCode} + GET + true + false + true + false + + + + + + + + + Content-Type + application/json + + + Cookie + Authorization=${accessToken};id_token=${idToken} + + + + + + + "errors":null} + + + Assertion.response_data + false + 2 + + + + + 200 + + + Assertion.response_code + false + 2 + + + + + true + + + + false + { + "id": "mosip.resident.share.credential", + "request": { + "partnerId": "mpartner-default-mimotokeybinding", + "sharableAttributes": [ + { + "attributeName": "dateOfBirth", + "format": "YYYY", + "masked": true + } + ], + "purpose": "string", + "consent": "Accepted" + }, + "requesttime": "${utcTime}Z", + "version": "1.0" +} + = + + + + ${serverIPInternal} + ${serverPortNo} + ${protocol} + + /resident/v1/share-credential + POST + true + false + true + false + + + + + + + + + Content-Type + application/json + + + Cookie + Authorization=${accessToken};id_token=${idToken} + + + + + + + "errors":null} + + + Assertion.response_data + false + 2 + + + + + 200 + + + Assertion.response_code + false + 2 + + + + + + + + ${serverIPInternal} + ${serverPortNo} + ${protocol} + + /resident/v1/proxy/config/ui-properties + GET + true + false + true + false + + + + + + + + + Content-Type + application/json + + + Cookie + Authorization=${accessToken};id_token=${idToken} + + + + + + + "errors":null + + + Assertion.response_data + false + 2 + + + + + 200 + + + Assertion.response_code + false + 2 + + + + + + + + ${serverIPInternal} + ${serverPortNo} + ${protocol} + + /resident/v1/auth-proxy/config/identity-mapping + GET + true + false + true + false + + + + + + + + + Content-Type + application/json + + + Cookie + Authorization=${accessToken};id_token=${idToken} + + + + + + + identity + + + Assertion.response_data + false + 2 + + + + + 200 + + + Assertion.response_code + false + 2 + + + + + + + + ${serverIPInternal} + ${serverPortNo} + ${protocol} + + /resident/v1/auth-proxy/config/ui-schema/${schemaTypeUI} + GET + true + false + true + false + + + + + + + + + Content-Type + application/json + + + Cookie + Authorization=${accessToken};id_token=${idToken} + + + + + + + identity + + + Assertion.response_data + false + 2 + + + + + 200 + + + Assertion.response_code + false + 2 + + + - + continue false @@ -2247,156 +4184,57 @@ vars.put("utcTime", utcTime); 1 1 false - + ${testDuration} true + D:/Jmeter Scripts/Resident Services/runtime-files/eventid_idToken_accessToken.txt + + idToken,accessToken,eventId + true + , + false + true + false + shareMode.all + + + , - ./resident_access_id_token.txt + D:/Jmeter Scripts/Resident Services/support-files/schema_type.txt true false true shareMode.all false - idToken,accessToken + schemaType - - - - - false - ${languageCode} - = - true - langCode - - - - ${serverIPInternal} - ${serverPortNo} - ${protocol} - - resident/v1/events/${eventId} - GET - true - false - true - false - - - - - - - - - Content-Type - application/json - - - Cookie - Authorization=${accessToken};id_token=${idToken} - - - - - - - "errors":[] - - - Assertion.response_data - false - 16 - - - - - 200 - - - Assertion.response_code - false - 2 - - - - - - - - ${serverIPInternal} - ${serverPortNo} - ${protocol} - - resident/v1/ack/download/pdf/event/${eventId}/language/${languageCode} - GET - true - false - true - false - - - - - - - - - Content-Type - application/json - - - Cookie - Authorization=${accessToken};id_token=${idToken} - - - - - - - PDF - - - Assertion.response_data - false - 2 - - - - - 200 - - - Assertion.response_code - false - 2 - - - - - - continue - - false - 1 - - 1 - 1 - false - - - true - - - - ./resident_access_id_token.txt + + 1400000000 + 9999999999 + 1 + tidRequestOtp + + false + + + + 10 + 10000000 + 1 + emailid + + false + + + + D:/Jmeter Scripts/Resident Services/support-files/coordinates.csv - idToken,accessToken + longitude,latitude,proximityDistance true , false @@ -2405,10 +4243,58 @@ vars.put("utcTime", utcTime); shareMode.all - - D:/Jmeter Scripts/Resident Services/schema_type.txt + + D:/Jmeter Scripts/Resident Services/support-files/location_code.txt - schemaTypeUI + locationCode + true + , + false + true + false + shareMode.all + + + + D:/Jmeter Scripts/Resident Services/support-files/language_code.csv + + languageCode + true + , + false + true + false + shareMode.all + + + + D:/Jmeter Scripts/Resident Services/support-files/hierarchy_level.csv + + hierarchyLevel,name,languageCode + true + , + false + true + false + shareMode.all + + + + D:/Jmeter Scripts/Resident Services/support-files/location_code_immediate_children.txt + + locationCodeImmediate + true + , + false + true + false + shareMode.all + + + + D:/Jmeter Scripts/Resident Services/support-files/applicant_type_id.csv + + applicantTypeId true , false @@ -2417,16 +4303,28 @@ vars.put("utcTime", utcTime); shareMode.all - - D:/Jmeter Scripts/Resident Services/template_type.txt + + , + + D:/Jmeter Scripts/Resident Services/support-files/otp_channel_type_list_resident.txt + true + false + true + shareMode.all + false + otpChannel + + + + , - templateTypeCode + D:/Jmeter Scripts/Resident Services/runtime-files/uinListIda.txt true - , false true - false shareMode.all + false + UIN @@ -2443,410 +4341,2195 @@ String utcTime = dateFormat.format(cal.getTime()); vars.put("utcTime", utcTime); - - - - - false - Print_Partner - = - true - partnerType - - - - ${serverIPInternal} - ${serverPortNo} - ${protocol} - - /resident/v1/auth-proxy/partners - GET - true - false - true - false - - - - - - - - - Content-Type - application/json - - - Cookie - Authorization=${accessToken};id_token=${idToken} - - - - - - - "errors":null} - - - Assertion.response_data - false - 2 - - - - - 200 - - - Assertion.response_code - false - 2 - - - - - - - - ${serverIPInternal} - ${serverPortNo} - ${protocol} - - /resident/v1/ack/download/pdf/event/${eventId}/language/${languageCode} - GET - true - false - true - false - - - - - - - - - Content-Type - application/json - - - Cookie - Authorization=${accessToken};id_token=${idToken} - - - - - - - PDF - - - Assertion.response_data - false - 2 - - - - - 200 - - - Assertion.response_code - false - 2 - - - - - - - - ${serverIPInternal} - ${serverPortNo} - ${protocol} - - /resident/v1/auth-proxy/masterdata/templates/${languageCode}/${templateTypeCode} - GET - true - false - true - false - - - - - - - - - Content-Type - application/json - - - Cookie - Authorization=${accessToken};id_token=${idToken} - - - - - - - "errors":null} - - - Assertion.response_data - false - 2 - - - - - 200 - - - Assertion.response_code - false - 2 - - - - - true - - - - false - { - "id": "mosip.resident.share.credential", - "request": { - "partnerId": "mpartner-default-mimotokeybinding", - "sharableAttributes": [ - { - "attributeName": "dateOfBirth", - "format": "YYYY", - "masked": true - } - ], - "purpose": "string", - "consent": "Accepted" - }, - "requesttime": "${utcTime}Z", - "version": "1.0" -} - = - - - - ${serverIPInternal} - ${serverPortNo} - ${protocol} - - /resident/v1/share-credential - POST - true - false - true - false - - - - - - - - - Content-Type - application/json - - - Cookie - Authorization=${accessToken};id_token=${idToken} - - - - - - - "errors":null} - - - Assertion.response_data - false - 2 - - - - - 200 - - - Assertion.response_code - false - 2 - - - - - - - - ${serverIPInternal} - ${serverPortNo} - ${protocol} - - /resident/v1/proxy/config/ui-properties - GET - true - false - true - false - - - - + + true + + + S07 T01 Update Data Controller + 100 + true + + + S07 T02 Documents Controller + 100 + true + + + S07 T03 Update UIN Controller + 100 + true + + + S07 T04 Contact Details Controller + 100 + true + + + S07 T05 Transliteration Controller + 100 + true + + + - - - - Content-Type - application/json + + + + + - - Cookie - Authorization=${accessToken};id_token=${idToken} + ${serverIPInternal} + ${serverPortNo} + ${protocol} + + /resident/v1/identity/info/type/${schemaType} + GET + true + false + true + false + + + + + + + + + Content-Type + application/json + + + Cookie + Authorization=${accessToken};id_token=${idToken} + + + + + + + "errors":null + + + Assertion.response_data + false + 2 + + + + + 200 + + + Assertion.response_code + false + 2 + + + + + + - - - - - - "errors":null - - - Assertion.response_data - false - 2 - - - - - 200 - - - Assertion.response_code - false - 2 - - - - - - - - ${serverIPInternal} - ${serverPortNo} - ${protocol} - - /resident/v1/auth-proxy/config/identity-mapping - GET - true - false - true - false - - - - - - - - - Content-Type - application/json + ${serverIPInternal} + ${serverPortNo} + ${protocol} + + /resident/v1/proxy/config/ui-properties + GET + true + false + true + false + + + + + + + + + Content-Type + application/json + + + Cookie + Authorization=${accessToken};id_token=${idToken} + + + + + + + "errors":null + + + Assertion.response_data + false + 2 + + + + + 200 + + + Assertion.response_code + false + 2 + + + + + + - - Cookie - Authorization=${accessToken};id_token=${idToken} + ${serverIPInternal} + ${serverPortNo} + ${protocol} + + /resident/v1/proxy/masterdata/documenttypes/POR/${languageCode} + GET + true + false + true + false + + + + + + + + + Content-Type + application/json + + + Cookie + Authorization=${accessToken};id_token=${idToken} + + + + + + + "errors":null} + + + Assertion.response_data + false + 2 + + + + + 200 + + + Assertion.response_code + false + 2 + + + + + + - - - - - - identity - - - Assertion.response_data - false - 2 - - - - - 200 - - - Assertion.response_code - false - 2 - - + ${serverIPInternal} + ${serverPortNo} + ${protocol} + + /resident/v1/auth-proxy/masterdata/dynamicfields/preferredLang/eng?withValue=true + GET + true + false + true + false + + + + + + + + + Content-Type + application/json + + + Cookie + Authorization=${accessToken};id_token=${idToken} + + + + + + + "errors":null} + + + Assertion.response_data + false + 2 + + + + + 200 + + + Assertion.response_code + false + 2 + + + + + + + + ${serverIPInternal} + ${serverPortNo} + ${protocol} + + /resident/v1/proxy/masterdata/dynamicfields/all/gender + GET + true + false + true + false + + + + + + + + + Content-Type + application/json + + + Cookie + Authorization=${accessToken};id_token=${idToken} + + + + + + + "errors":null} + + + Assertion.response_data + false + 2 + + + + + 200 + + + Assertion.response_code + false + 2 + + + + + + + + ${serverIPInternal} + ${serverPortNo} + ${protocol} + + /resident/v1/proxy/masterdata/locations/immediatechildren/${locationCode}/${languageCode} + GET + true + false + true + false + + + + + + + + + Content-Type + application/json + + + Cookie + Authorization=${accessToken};id_token=${idToken} + + + + + + + "errors":null} + + + Assertion.response_data + false + 2 + + + + + 200 + + + Assertion.response_code + false + 2 + + + + + + + + + + + D:\Jmeter Scripts\Resident Services\support-files\Get_my_UIN_22_May_2024_14.35.06.pdf + file + / + + + + + + + ${serverIPInternal} + ${serverPortNo} + ${protocol} + + resident/v1/documents/${tidRequestOtp}?docCatCode=poi&docTypCode=doc006&langCode=${languageCode}&referenceId=${referenceid} + POST + true + false + true + false + + + + + + + + + Cookie + Authorization=${accessToken};id_token=${idToken} + + + + + + + "docId" + + + Assertion.response_data + false + 2 + + + + + 200 + + + Assertion.response_code + false + 2 + + + + false + docId + "docId":"(.*?)" + $1$ + docId not found + 1 + + + + + + + + ${serverIPInternal} + ${serverPortNo} + ${protocol} + + /resident/v1/document/${docId}?transactionId=${tidRequestOtp} + GET + true + false + true + false + + + + + + + + + Content-Type + application/json + + + Cookie + Authorization=${accessToken};id_token=${idToken} + + + + + + + "document": + + + Assertion.response_data + false + 2 + + + + + 200 + + + Assertion.response_code + false + 2 + + + + + + + + ${serverIPInternal} + ${serverPortNo} + ${protocol} + + /resident/v1/document/${docId}?transactionId=${tidRequestOtp} + GET + true + false + true + false + + + + + + + + + Content-Type + application/json + + + Cookie + Authorization=${accessToken};id_token=${idToken} + + + + + + + "document": + + + Assertion.response_data + false + 2 + + + + + 200 + + + Assertion.response_code + false + 2 + + + + + + + + ${serverIPInternal} + ${serverPortNo} + ${protocol} + + /resident/v1/documents/${docId}?transactionId=${tidRequestOtp} + DELETE + true + false + true + false + + + + + + + + + Content-Type + application/json + + + Cookie + Authorization=${accessToken};id_token=${idToken} + + + + + + + "status":"SUCCESS" + + + Assertion.response_data + false + 2 + + + + + 200 + + + Assertion.response_code + false + 2 + + + + + + + + true + + + + false + { + "filter_attribute_list": "fullName" +} + = + + + + ${serverIPInternal} + ${serverPortNo} + ${protocol} + + /resident/v1/identity/update-count + GET + true + false + true + false + + + + + + + + + Content-Type + application/json + + + Cookie + Authorization=${accessToken};id_token=${idToken} + + + + + + + "errors" + + + Assertion.response_data + false + 2 + + + + + 200 + + + Assertion.response_code + false + 2 + + + + + true + + + + false + {"id":"mosip.resident.updateuin", +"version":"1.0", +"requesttime":"${utcTime}Z", +"request":{"transactionID":null, +"consent":"Accepted", +"identity":{"preferredLang":"${languageCode}"}}} + = + + + + ${serverIPInternal} + ${serverPortNo} + ${protocol} + + /resident/v1/update-uin + PATCH + true + false + true + false + + + + + + + + + Content-Type + application/json + + + Cookie + Authorization=${accessToken};id_token=${idToken} + + + + + + + resident.updateuin" + + + Assertion.response_data + false + 2 + + + + + 200 + + + Assertion.response_code + false + 2 + + + + + + + + ${serverIPInternal} + ${serverPortNo} + ${protocol} + + /resident/v1/identity/get-pending-drafts/${languageCode} + GET + true + false + true + false + + + + + + + + + Content-Type + application/json + + + Cookie + Authorization=${accessToken};id_token=${idToken} + + + + + + + "errors":[] + + + Assertion.response_data + false + 16 + + + + + 200 + + + Assertion.response_code + false + 2 + + + + false + eid + "eid":"(.*?)" + $1$ + eventId not found + 1 + all + + + + 5000 + + + + + + + + ${serverIPInternal} + ${serverPortNo} + ${protocol} + + /resident/v1/identity/discardPendingDraft/${eid} + POST + true + false + true + false + + + + + + + 10000 + + + + + + Content-Type + application/json + + + Cookie + Authorization=${accessToken};id_token=${idToken} + + + + + + + "errors":[] + + + Assertion.response_data + false + 16 + + + + + 200 + + + Assertion.response_code + false + 2 + + + + + + + + true + + + + false + { + "id": "mosip.resident.contact.details.send.otp.id", + "version": "1.0", + "requesttime": "${utcTime}Z", + "request": { + "userId": "residentautomation${emailid}@mosip.net", + "transactionId": "${tidRequestOtp}" + } +} + = + + + + ${serverIPInternal} + ${serverPortNo} + ${protocol} + + /resident/v1/contact-details/send-otp + POST + true + false + true + false + + + + + + + + + Content-Type + application/json + + + Cookie + Authorization=${accessToken};id_token=${idToken} + + + + + + + "errors":null + + + Assertion.response_data + false + 2 + + + + + 200 + + + Assertion.response_code + false + 2 + + + + 3000 + + + + + true + + + + false + { + "request": { + "otp": "111111", + "userId": "residentautomation${emailid}@mosip.net", + "transactionId": "${tidRequestOtp}" + }, + "requesttime": "${utcTime}Z", + "id": "mosip.resident.contact.details.update.id", + "version": "1.0" +} + = + + + + ${serverIPInternal} + ${serverPortNo} + ${protocol} + + /resident/v1/contact-details/update-data + POST + true + false + true + false + + + + + + + + + Content-Type + application/json + + + Cookie + Authorization=${accessToken};id_token=${idToken} + + + + + + + "errors":null + + + Assertion.response_data + false + 2 + + + + + 200 + + + Assertion.response_code + false + 2 + + + + 3000 + + + + + + + + true + + + + false + { + "id": "mosip.resident.transliteration.transliterate", + "version": "1.0", + "requesttime": "${utcTime}Z", + "request": { + "from_field_value": "Home india", + "from_field_lang": "${languageCode}", + "to_field_lang": "${languageCode1}" + } +} + = + + + + ${serverIPInternal} + ${serverPortNo} + ${protocol} + + /resident/v1/transliteration/transliterate + POST + true + false + true + false + + + + + + + + + Content-Type + application/json + + + Cookie + Authorization=${accessToken};id_token=${idToken} + + + + + + + "errors":null} + + + Assertion.response_data + false + 2 + + + + + 200 + + + Assertion.response_code + false + 2 + + + + - - - - - ${serverIPInternal} - ${serverPortNo} - ${protocol} - - /resident/v1/auth-proxy/config/ui-schema/${schemaTypeUI} - GET - true - false - true - false - - - - + + + continue + + false + 1 + + 1 + 1 + false + ${testDuration} + + true + + + + 1400000000 + 9999999999 + 1 + tidRequestOtp + + false + + + + , + + D:/Jmeter Scripts/Resident Services/runtime-files/eventid_idToken_accessToken.txt + true + false + true + shareMode.all + false + idToken,accessToken + + + + D:/Jmeter Scripts/Resident Services/support-files/coordinates.csv + + longitude,latitude,proximityDistance + true + , + false + true + false + shareMode.all + + + + D:/Jmeter Scripts/Resident Services/support-files/location_code.txt + + locationCode + true + , + false + true + false + shareMode.all + + + + D:/Jmeter Scripts/Resident Services/support-files/language_code.csv + + languageCode + true + , + false + true + false + shareMode.all + + + + D:/Jmeter Scripts/Resident Services/support-files/hierarchy_level.csv + + hierarchyLevel,name,languageCode + true + , + false + true + false + shareMode.all + + + + D:/Jmeter Scripts/Resident Services/support-files/location_code_immediate_children.txt + + locationCodeImmediate + true + , + false + true + false + shareMode.all + + + + D:/Jmeter Scripts/Resident Services/support-files/applicant_type_id.csv + + applicantTypeId + true + , + false + true + false + shareMode.all + + + + , + + D:/Jmeter Scripts/Resident Services/runtime-files/vid_list_resident.txt + true + false + true + shareMode.all + false + individualIdOtp + + + + , + + D:/Jmeter Scripts/Resident Services/support-files/otp_channel_type_list_resident.txt + true + false + true + shareMode.all + false + otpChannel + + + + + + false + import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.TimeZone;//Set the format for the date-time +SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.sss"); +dateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));// Get the current time in UTC +Calendar cal = Calendar.getInstance(); +String utcTime = dateFormat.format(cal.getTime()); +vars.put("utcTime", utcTime); + + + + true + + + S08 T01 Registration Center Controller + 100 + true + + + S08 T02 Supporting Documents Controller + 100 + true + + + - - - - Content-Type - application/json + + + + + + + ${serverIPInternal} + ${serverPortNo} + ${protocol} + + /resident/v1/proxy/masterdata/getcoordinatespecificregistrationcenters/${languageCode}/${longitude}/${latitude}/${proximityDistance} + GET + true + false + true + false + + + + + + + + + Content-Type + application/json + + + + + + + "errors":null} + + + Assertion.response_data + false + 16 + + + + + 200 + + + Assertion.response_code + false + 2 + + + + + true + + + + false + { + "langCode": "${languageCode}" +} + = + + + + ${serverIPInternal} + ${serverPortNo} + ${protocol} + + /resident/v1/proxy/masterdata/locationHierarchyLevels + GET + true + false + true + false + + + + + + + + + Content-Type + application/json + + + + + + + "errors":null} + + + Assertion.response_data + false + 16 + + + + + 200 + + + Assertion.response_code + false + 2 + + + + + + + + ${serverIPInternal} + ${serverPortNo} + ${protocol} + + /resident/v1/proxy/masterdata/locations/info/${locationCode}/${languageCode} + GET + true + false + true + false + + + + + + + + + Content-Type + application/json + + + + + + + "errors":null} + + + Assertion.response_data + false + 16 + + + + + 200 + + + Assertion.response_code + false + 2 + + + + + + + + false + ${name} + = + true + name + + + + ${serverIPInternal} + ${serverPortNo} + ${protocol} + + /resident/v1/proxy/masterdata/registrationcenters/${languageCode}/${hierarchyLevel}/names + GET + true + false + true + false + + + + + + + + + Content-Type + application/json + + + + + + + "errors":null} + + + Assertion.response_data + false + 16 + + + + + 200 + + + Assertion.response_code + false + 2 + + + + + + - - Cookie - Authorization=${accessToken};id_token=${idToken} + ${serverIPInternal} + ${serverPortNo} + ${protocol} + + /resident/v1/proxy/masterdata/validdocuments/${languageCode} + GET + true + false + true + false + + + + + + + + + Content-Type + application/json + + + + + + + "errors":null} + + + Assertion.response_data + false + 16 + + + + + 200 + + + Assertion.response_code + false + 2 + + + + + true + + + + false + { + "langcode": "${languageCode}", + "hierarchylevel": "${hierarchyLevel}", + "name": "${name}", + "pageNumber": "0", + "pageSize": "1", + "sortBy": "createdDateTime", + "orderBy": "desc" +} + = + + - - - - - - "identity" - - - Assertion.response_data - false - 2 - - - - - 200 - - - Assertion.response_code - false - 2 - - + ${serverIPInternal} + ${serverPortNo} + ${protocol} + + /resident/v1/proxy/masterdata/registrationcenters/page/${languageCode}/${hierarchyLevel}/${name} + GET + true + false + true + false + + + + + + + + + Content-Type + application/json + + + + + + + "errors":null} + + + Assertion.response_data + false + 16 + + + + + 200 + + + Assertion.response_code + false + 2 + + + + + + + + ${serverIPInternal} + ${serverPortNo} + ${protocol} + + /resident/v1/proxy/masterdata/locations/immediatechildren/${locationCodeImmediate}/${languageCode} + GET + true + false + true + false + + + + + + + + + Content-Type + application/json + + + + + + + "errors":null} + + + Assertion.response_data + false + 16 + + + + + 200 + + + Assertion.response_code + false + 2 + + + + + + + + ${serverIPInternal} + ${serverPortNo} + ${protocol} + + /resident/v1/proxy/masterdata/workingdays/${locationCode}/${languageCode} + GET + true + false + true + false + + + + + + + + + Content-Type + application/json + + + + + + + "errors":null} + + + Assertion.response_data + false + 16 + + + + + 200 + + + Assertion.response_code + false + 2 + + + + + + + + false + ${languageCode} + = + true + languages + + + + ${serverIPInternal} + ${serverPortNo} + ${protocol} + + /resident/v1/proxy/masterdata/applicanttype/${applicantTypeId}/languages + GET + true + false + true + false + + + + + + + + + Content-Type + application/json + + + + + + + "errors":null} + + + Assertion.response_data + false + 16 + + + + + 200 + + + Assertion.response_code + false + 2 + + + + + + + + false + ${languageCode} + = + true + langcode + + + false + ${longitude} + = + true + longitude + + + false + ${latitude} + = + true + latitude + + + false + ${proximityDistance} + = + true + proximitydistance + + + + ${serverIPInternal} + ${serverPortNo} + ${protocol} + + /resident/v1/download/nearestRegistrationcenters + GET + true + false + true + false + + + + + + + + + Content-Type + application/json + + + Cookie + Authorization=${accessToken};id_token=${idToken} + + + + + + + PDF + + + Assertion.response_data + false + 2 + + + + + 200 + + + Assertion.response_code + false + 2 + + + + + + + + false + ${languageCode} + = + true + langcode + + + false + ${hierarchyLevel} + = + true + hierarchylevel + + + false + ${name} + = + true + name + + + + ${serverIPInternal} + ${serverPortNo} + ${protocol} + + /resident/v1/download/registration-centers-list + GET + true + false + true + false + + + + + + + + + Content-Type + application/json + + + Cookie + Authorization=${accessToken};id_token=${idToken} + + + + + + + PDF + + + Assertion.response_data + false + 2 + + + + + 200 + + + Assertion.response_code + false + 2 + + + + + + + + + + + false + ${languageCode} + = + true + langcode + + + + ${serverIPInternal} + ${serverPortNo} + ${protocol} + + /resident/v1/download/supporting-documents + GET + true + false + true + false + + + + + + + + + Content-Type + application/json + + + Cookie + Authorization=${accessToken};id_token=${idToken} + + + + + + + PDF + + + Assertion.response_data + false + 2 + + + + + 200 + + + Assertion.response_code + false + 2 + + + + + + + + continue + + false + 1 + + 1 + 1 + false + ${testDuration} + + true + + + + , + + D:/Jmeter Scripts/Resident Services/runtime-files/eventid_idToken_accessToken.txt + true + false + true + shareMode.all + false + idToken,accessToken + + + + , + + D:/Jmeter Scripts/Resident Services/runtime-files/vid_list_resident.txt + true + false + true + shareMode.all + false + individualIdOtp + + + + 1400000000 + 9999999999 + 1 + tidRequestOtp + + false + + + + + + false + import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.TimeZone;//Set the format for the date-time +SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.sss"); +dateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));// Get the current time in UTC +Calendar cal = Calendar.getInstance(); +String utcTime = dateFormat.format(cal.getTime()); +vars.put("utcTime", utcTime); + + + + + + true + + + + false + { + "id": "mosip.identity.otp.internal", + "version": "1.0", + "transactionId": "${tidRequestOtp}", + "requestTime": "${utcTime}Z", + "individualId": "${individualIdOtp}", + "otpChannel": [ + "EMAIL", + "PHONE" + ], + "metadata": {}, + "aid": "${ridId}" +} + = + + + + ${serverIPInternal} + ${serverPortNo} + ${protocol} + + /resident/v1/individualId/otp + POST + true + false + true + false + + + + + + + + + Content-Type + application/json + + + Cookie + Authorization=${accessToken};id_token=${idToken} + + + + + + + "errors":null + + + Assertion.response_data + false + 2 + + + + + 200 + + + Assertion.response_code + false + 2 + + + + + + + + ${serverIPInternal} + ${serverPortNo} + ${protocol} + + /resident/v1/aid-stage/${individualIdOtp} + GET + true + false + true + false + + + + + + + + + Content-Type + application/json + + + Cookie + Authorization=${accessToken};id_token=${idToken} + + + + + + + "errors": + + + Assertion.response_data + false + 2 + + + + + 200 + + + Assertion.response_code + false + 2 + + + + + true + + + + false + { + "id": "mosip.resident.download.uin.card", + "version": "1.0", + "requesttime": "${utcTime}Z", + "request": { + "transactionId": "${tidRequestOtp}", + "individualId": "${individualIdOtp}", + "otp": "111111" + } +} + = + + + + ${serverIPInternal} + ${serverPortNo} + ${protocol} + + /resident/v1/download-card + POST + true + false + true + false + + + + + + + 10000 + + + + + + Content-Type + application/json + + + Cookie + Authorization=${accessToken};id_token=${idToken} + + + + + + + PDF + + + Assertion.response_data + false + 2 + + + + + 200 + + + Assertion.response_code + false + 2 + + + - + continue false @@ -2855,227 +6538,206 @@ vars.put("utcTime", utcTime); 1 1 false - + ${testDuration} true - ./resident_access_id_token.txt + , - idToken,accessToken + D:/Jmeter Scripts/Resident Services/runtime-files/eventid_idToken_accessToken.txt true + false + true + shareMode.all + false + idToken,accessToken + + + , + + D:/Jmeter Scripts/Resident Services/runtime-files/vid_list_resident.txt + true false true + shareMode.all false + tokenIndividualId + + + + , + + D:/Jmeter Scripts/Resident Services/support-files/channel_verification_list.txt + true + false + true shareMode.all + false + individualIdVerification,channelVerification - - - - - ${serverIPInternal} - ${serverPortNo} - ${protocol} - - /resident/v1/notifications/${languageCode} - GET - true - false - true - false - - - - - - - - - Content-Type - application/json - - - Cookie - Authorization=${accessToken};id_token=${idToken} - - - - - - - "errors":null} - - - Assertion.response_data - false - 2 - - - - - 200 - - - Assertion.response_code - false - 2 - - - - - - - - ${serverIPInternal} - ${serverPortNo} - ${protocol} - - /resident/v1/unread/notification-count - GET - true - false - true - false - - - - - - - - - Content-Type - application/json - - - Cookie - Authorization=${accessToken};id_token=${idToken} - - - - - - - "errors":null} - - - Assertion.response_data - false - 2 - - - - - 200 - - - Assertion.response_code - false - 2 - - - - - - - - ${serverIPInternal} - ${serverPortNo} - ${protocol} - - /resident/v1/bell/notification-click - GET - true - false - true - false - - - - - - - - - Content-Type - application/json - - - Cookie - Authorization=${accessToken};id_token=${idToken} - - - - - - - "errors":null} - - - Assertion.response_data - false - 2 - - - - - 200 - - - Assertion.response_code - false - 2 - - - - - - - - ${serverIPInternal} - ${serverPortNo} - ${protocol} - - /resident/v1/bell/updatedttime - PUT - true - false - true - false - - - - + + 1400000000 + 9999999999 + 1 + tidRequestOtp + + false + + + + + + false + import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.TimeZone;//Set the format for the date-time +SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.sss"); +dateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));// Get the current time in UTC +Calendar cal = Calendar.getInstance(); +String utcTime = dateFormat.format(cal.getTime()); +vars.put("utcTime", utcTime); + + + - - - - Content-Type - application/json - - - Cookie - Authorization=${accessToken};id_token=${idToken} - - - - - - - 200 - - - Assertion.response_code - false - 2 - - + + true + + + + false + { + "id": "mosip.identity.otp.internal", + "individualId": "${tokenIndividualId}", + "individualIdType": "VID", + "metadata": {}, + "otpChannel": [ + "${channelVerification}" + ], + "requestTime": "${utcTime}Z", + "transactionID": "${tidRequestOtp}", + "version": "1.0" +} + = + + + + ${serverIPInternal} + ${serverPortNo} + ${protocol} + + /resident/v1/req/otp + POST + true + false + true + false + + + + + + + + + Content-Type + application/json + + + + + + + "errors":null + + + Assertion.response_data + false + 16 + + + + + 200 + + + Assertion.response_code + false + 2 + + + + + + + + false + ${channelVerification} + = + true + channel + + + false + ${tokenIndividualId} + = + true + individualId + + + + ${serverIPInternal} + ${serverPortNo} + ${protocol} + + /resident/v1/channel/verification-status/ + GET + true + false + true + false + + + + + + + + + Content-Type + application/json + + + + + + + "errors":null + + + Assertion.response_data + false + 2 + + + + + 200 + + + Assertion.response_code + false + 2 + + + - + continue false @@ -3084,13 +6746,13 @@ vars.put("utcTime", utcTime); 1 1 false - + ${testDuration} true - ./resident_access_id_token.txt + D:/Jmeter Scripts/Resident Services/runtime-files/eventid_idToken_accessToken.txt idToken,accessToken true @@ -3101,114 +6763,237 @@ vars.put("utcTime", utcTime); shareMode.all - - - - - ${serverIPInternal} - ${serverPortNo} - ${protocol} - - /resident/v1/profile - GET - true - false - true - false - - - - - - - - - Content-Type - application/json - - - Cookie - Authorization=${accessToken};id_token=${idToken} - - - - - - - "errors":null} - - - Assertion.response_data - false - 2 - - - - - 200 - - - Assertion.response_code - false - 2 - - - - - - - - ${serverIPInternal} - ${serverPortNo} - ${protocol} - - /resident/v1/actuator/env - GET - true - false - true - false - - - - + + true + + + Unread Notification Count Endpoint + 100 + true + + + Bell Update Time Endpoint + 100 + true + + + Bell Notification Click Endpoint + 100 + true + + + Notifications Language Code Endpoint + 100 + true + + + - - - - Content-Type - application/json - - - Cookie - Authorization=${accessToken};id_token=${idToken} - - - - - - - "activeProfiles" - - - Assertion.response_data - false - 2 - - - - - 200 - - - Assertion.response_code - false - 2 - - + + + + + ${serverIPInternal} + ${serverPortNo} + ${protocol} + + /resident/v1/unread/notification-count + GET + true + false + true + false + + + + + + + + + Content-Type + application/json + + + Cookie + Authorization=${accessToken};id_token=${idToken} + + + + + + + "errors":null} + + + Assertion.response_data + false + 2 + + + + + 200 + + + Assertion.response_code + false + 2 + + + + + + + + ${serverIPInternal} + ${serverPortNo} + ${protocol} + + /resident/v1/bell/updatedttime + PUT + true + false + true + false + + + + + + + + + Content-Type + application/json + + + Cookie + Authorization=${accessToken};id_token=${idToken} + + + + + + + 200 + + + Assertion.response_code + false + 2 + + + + + + + + ${serverIPInternal} + ${serverPortNo} + ${protocol} + + /resident/v1/bell/notification-click + GET + true + false + true + false + + + + + + + + + Content-Type + application/json + + + Cookie + Authorization=${accessToken};id_token=${idToken} + + + + + + + "errors":null} + + + Assertion.response_data + false + 2 + + + + + 200 + + + Assertion.response_code + false + 2 + + + + + + + + ${serverIPInternal} + ${serverPortNo} + ${protocol} + + /resident/v1/notifications/${languageCode} + GET + true + false + true + false + + + + + + + + + Content-Type + application/json + + + Cookie + Authorization=${accessToken};id_token=${idToken} + + + + + + + "errors":null} + + + Assertion.response_data + false + 2 + + + + + 200 + + + Assertion.response_code + false + 2 + + + - + continue false @@ -3217,7 +7002,7 @@ vars.put("utcTime", utcTime); 1 1 false - + ${testDuration} true @@ -3225,7 +7010,7 @@ vars.put("utcTime", utcTime); , - ./resident_access_id_token.txt + D:/Jmeter Scripts/Resident Services/runtime-files/eventid_idToken_accessToken.txt true false true @@ -3248,159 +7033,288 @@ String utcTime = dateFormat.format(cal.getTime()); vars.put("utcTime", utcTime); - - true - - - - false - { - "auditEventId": "RES-SER-191", - "auditEventName": "get vids", - "auditEventType": "SYSTEM", + + true + + + Auth Proxy Audit Log Endpoint + 100 + true + + + Proxy Audit Log Endpoint + 100 + true + + + + + + true + + + + false + { + "auditEventId": "${auditEventId}", + "auditEventName": "${auditEventName}", + "auditEventType": "${auditEventType}", "actionTimeStamp": "${utcTime}Z", - "hostName": "resident-6f6fb6c845-6frw4", - "hostIp": "10.42.2.150", - "applicationId": "10011", - "applicationName": "Resident portal", - "sessionUserId": "resident-111995", - "sessionUserName": "resident-111995", - "id": "NO_ID", - "idType": "NO_ID_TYPE", - "createdBy": "resident-111995", - "moduleName": "Residence service", - "moduleId": "RES-SER", - "description": "get vids" + "applicationId": "RES-SER", + "applicationName": "${auditEventName}", + "createdBy": "tester", + "moduleName": "${auditEventName}", + "moduleId": "${auditEventId}", + "description": "testing in Perf" } - = - - - - ${serverIPInternal} - ${serverPortNo} - ${protocol} - - /resident/v1/auth-proxy/audit/log - POST - true - false - true - false - - - - - - - - - Content-Type - application/json - - - Cookie - Authorization=${accessToken};id_token=${idToken} - - - - - - - "errors":null - - - Assertion.response_data - false - 16 - - - - - 200 - - - Assertion.response_code - false - 2 - - + = + + + + ${serverIPInternal} + ${serverPortNo} + ${protocol} + + /resident/v1/auth-proxy/audit/log + POST + true + false + true + false + + + + + + + + + Content-Type + application/json + + + Cookie + Authorization=${accessToken};id_token=${idToken} + + + + + + + 200 + + + Assertion.response_code + false + 2 + + + + + true + + + + false + { + "auditEventId": "${auditEventId}", + "auditEventName": "${auditEventName}", + "auditEventType": "${auditEventType}", + "actionTimeStamp": "${utcTime}Z", + "applicationId": "RES-SER", + "applicationName": "${auditEventName}", + "createdBy": "tester", + "moduleName": "${auditEventName}", + "moduleId": "${auditEventId}", + "description": "testing in Perf" +} + = + + + + ${serverIPInternal} + ${serverPortNo} + ${protocol} + + /resident/v1/proxy/audit/log + POST + true + false + true + false + + + + + + + + + Content-Type + application/json + + + Cookie + Authorization=${accessToken};id_token=${idToken} + + + + + + + 200 + + + Assertion.response_code + false + 2 + + + - - true - - - - false - { - "auditEventId": "RES-SER-191", - "auditEventName": "get vids", - "auditEventType": "SYSTEM", - "actionTimeStamp": "${utcTime}Z", - "hostName": "resident-6f6fb6c845-6frw4", - "hostIp": "10.42.2.150", - "applicationId": "10011", - "applicationName": "Resident portal", - "sessionUserId": "resident-111995", - "sessionUserName": "resident-111995", - "id": "NO_ID", - "idType": "NO_ID_TYPE", - "createdBy": "resident-111995", - "moduleName": "Residence service", - "moduleId": "RES-SER", - "description": "get vids" -} - = - - - - ${serverIPInternal} - ${serverPortNo} - ${protocol} - - /resident/v1/proxy/audit/log - POST - true - false - true - false - - - - + + + continue + + false + 1 + + 1 + 1 + false + ${testDuration} + + true + + + + D:/Jmeter Scripts/Resident Services/runtime-files/eventid_idToken_accessToken.txt + + idToken,accessToken + true + , + false + true + false + shareMode.all + + + - - - - Content-Type - application/json - - - Cookie - Authorization=${accessToken};id_token=${idToken} - - - - - - - "errors":null - - - Assertion.response_data - false - 16 - - - - - 200 - - - Assertion.response_code - false - 2 - - + + + + + ${serverIPInternal} + ${serverPortNo} + ${protocol} + + /resident/v1/profile + GET + true + false + true + false + + + + + + + + + Content-Type + application/json + + + Cookie + Authorization=${accessToken};id_token=${idToken} + + + + + + + "errors":null} + + + Assertion.response_data + false + 2 + + + + + 200 + + + Assertion.response_code + false + 2 + + + + + + + + false + ${loginUriEncoded} + = + true + redirecturi + + + + ${serverIPInternal} + ${serverPortNo} + ${protocol} + + /resident/v1/logout/user + GET + true + false + true + false + + + + + + + + + Content-Type + application/json + + + Cookie + Authorization=${accessToken};id_token=${idToken} + + + + + + + ResidentUi + + + Assertion.response_data + false + 2 + + + + + 200 + + + Assertion.response_code + false + 2 + + + @@ -3477,6 +7391,96 @@ vars.put("utcTime", utcTime); + + 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 + + + + 500 + false + + Endpoint + + + false + false + + + + 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 + + + + 500 + false + + Endpoint + + + false + false + + diff --git a/resident-services/support-files/Get_my_UIN_22_May_2024_14.35.06.pdf b/resident-services/support-files/Get_my_UIN_22_May_2024_14.35.06.pdf new file mode 100644 index 0000000000000000000000000000000000000000..2d4358e8cb3ee607e0f3bb4f339bfc5b896c80f2 GIT binary patch literal 78708 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 q2$FRGGLbRu)oe~S3Lwv*s0+{w5% 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 literal 0 HcmV?d00001 diff --git a/resident-services/support-files/channel_verification_list.txt b/resident-services/support-files/channel_verification_list.txt new file mode 100644 index 00000000..e4a37753 --- /dev/null +++ b/resident-services/support-files/channel_verification_list.txt @@ -0,0 +1,32 @@ +${individualIdOtp},${otpChannel} +eyJraWQiOiJIb0tLSFRZc1FUNEpTMWs2MXlpZXlEVmJBcG5qMVFEamVpak91ZDMzRkU4IiwiYWxnIjoiUlMyNTYifQ.eyJhdF9oYXNoIjpudWxsLCJzdWIiOiIzNTcyNTM5MjQzNjUxNzE5MjE2NDk4NTcyMTMxODE0NzU0NTciLCJhdWQiOiJWVDkyRmJJZ2RlSGl1eTdOOEVUUmV5UldWOTJKOGNYc3pDejlWY0R2S0NvIiwiYWNyIjoibW9zaXA6aWRwOmFjcjpnZW5lcmF0ZWQtY29kZSIsImF1dGhfdGltZSI6MTcxNTE0ODI2MCwiaXNzIjoiaHR0cHM6XC9cL2VzaWduZXQucWEtcGxhdGZvcm0xLm1vc2lwLm5ldFwvdjFcL2VzaWduZXQiLCJleHAiOjE3MTUxNTE4NjMsImlhdCI6MTcxNTE0ODI2Mywibm9uY2UiOiI5NzNlaWVsanpuZyJ9.KI1ZCJ0TQS8Mf3Q_dbEOUe7IoZ2LilcypRPtAuyRrXRnRUwPhZcgDDcNAHGWavW8sG_XaENc9gfRX_M9g9dMfijsfnhp25EG3SAduNMJfYy2y1WHxaNcb_FxLy9VXL0qovf8VhswXIWAHhNkvOdtPLlpjoAPhLo6zl1fwqhqmC2FFuwmwCD9QL3oBhX-m-eNx-4kV7UxyCCpJz00dMyZd6M188CpOhJ7ZY9ksiD_k1Hun7j31KCLLO84Sb0C2-hWDzxfouq5BNU3xChJzi3mUGyiSBoJEtrIefjpfZQ7YiZD0XCbqfFUIcfS6-_l1Vw7f45RA_wi40PkOz7yLUBg0g,PHONE +eyJraWQiOiJIb0tLSFRZc1FUNEpTMWs2MXlpZXlEVmJBcG5qMVFEamVpak91ZDMzRkU4IiwiYWxnIjoiUlMyNTYifQ.eyJhdF9oYXNoIjpudWxsLCJzdWIiOiIzNTcyNTM5MjQzNjUxNzE5MjE2NDk4NTcyMTMxODE0NzU0NTciLCJhdWQiOiJWVDkyRmJJZ2RlSGl1eTdOOEVUUmV5UldWOTJKOGNYc3pDejlWY0R2S0NvIiwiYWNyIjoibW9zaXA6aWRwOmFjcjpnZW5lcmF0ZWQtY29kZSIsImF1dGhfdGltZSI6MTcxNTE0ODI2MCwiaXNzIjoiaHR0cHM6XC9cL2VzaWduZXQucWEtcGxhdGZvcm0xLm1vc2lwLm5ldFwvdjFcL2VzaWduZXQiLCJleHAiOjE3MTUxNTE4NjMsImlhdCI6MTcxNTE0ODI2Mywibm9uY2UiOiI5NzNlaWVsanpuZyJ9.KI1ZCJ0TQS8Mf3Q_dbEOUe7IoZ2LilcypRPtAuyRrXRnRUwPhZcgDDcNAHGWavW8sG_XaENc9gfRX_M9g9dMfijsfnhp25EG3SAduNMJfYy2y1WHxaNcb_FxLy9VXL0qovf8VhswXIWAHhNkvOdtPLlpjoAPhLo6zl1fwqhqmC2FFuwmwCD9QL3oBhX-m-eNx-4kV7UxyCCpJz00dMyZd6M188CpOhJ7ZY9ksiD_k1Hun7j31KCLLO84Sb0C2-hWDzxfouq5BNU3xChJzi3mUGyiSBoJEtrIefjpfZQ7YiZD0XCbqfFUIcfS6-_l1Vw7f45RA_wi40PkOz7yLUBg0g,EMAIL +${individualIdOtp},${otpChannel} +eyJraWQiOiJIb0tLSFRZc1FUNEpTMWs2MXlpZXlEVmJBcG5qMVFEamVpak91ZDMzRkU4IiwiYWxnIjoiUlMyNTYifQ.eyJhdF9oYXNoIjpudWxsLCJzdWIiOiIzNTcyNTM5MjQzNjUxNzE5MjE2NDk4NTcyMTMxODE0NzU0NTciLCJhdWQiOiJWVDkyRmJJZ2RlSGl1eTdOOEVUUmV5UldWOTJKOGNYc3pDejlWY0R2S0NvIiwiYWNyIjoibW9zaXA6aWRwOmFjcjpnZW5lcmF0ZWQtY29kZSIsImF1dGhfdGltZSI6MTcxNTE0ODI2MCwiaXNzIjoiaHR0cHM6XC9cL2VzaWduZXQucWEtcGxhdGZvcm0xLm1vc2lwLm5ldFwvdjFcL2VzaWduZXQiLCJleHAiOjE3MTUxNTE4NjMsImlhdCI6MTcxNTE0ODI2Mywibm9uY2UiOiI5NzNlaWVsanpuZyJ9.KI1ZCJ0TQS8Mf3Q_dbEOUe7IoZ2LilcypRPtAuyRrXRnRUwPhZcgDDcNAHGWavW8sG_XaENc9gfRX_M9g9dMfijsfnhp25EG3SAduNMJfYy2y1WHxaNcb_FxLy9VXL0qovf8VhswXIWAHhNkvOdtPLlpjoAPhLo6zl1fwqhqmC2FFuwmwCD9QL3oBhX-m-eNx-4kV7UxyCCpJz00dMyZd6M188CpOhJ7ZY9ksiD_k1Hun7j31KCLLO84Sb0C2-hWDzxfouq5BNU3xChJzi3mUGyiSBoJEtrIefjpfZQ7YiZD0XCbqfFUIcfS6-_l1Vw7f45RA_wi40PkOz7yLUBg0g,PHONE +${individualIdOtp},${otpChannel} +5849382146035781,PHONE +${individualIdOtp},${otpChannel} +5849382146035781,PHONE +${individualIdOtp},${otpChannel} +eyJraWQiOiJIb0tLSFRZc1FUNEpTMWs2MXlpZXlEVmJBcG5qMVFEamVpak91ZDMzRkU4IiwiYWxnIjoiUlMyNTYifQ.eyJhdF9oYXNoIjpudWxsLCJzdWIiOiIzNTcyNTM5MjQzNjUxNzE5MjE2NDk4NTcyMTMxODE0NzU0NTciLCJhdWQiOiJWVDkyRmJJZ2RlSGl1eTdOOEVUUmV5UldWOTJKOGNYc3pDejlWY0R2S0NvIiwiYWNyIjoibW9zaXA6aWRwOmFjcjpnZW5lcmF0ZWQtY29kZSIsImF1dGhfdGltZSI6MTcxNTE2NTg2MSwiaXNzIjoiaHR0cHM6XC9cL2VzaWduZXQucWEtcGxhdGZvcm0xLm1vc2lwLm5ldFwvdjFcL2VzaWduZXQiLCJleHAiOjE3MTUxNjk0NjMsImlhdCI6MTcxNTE2NTg2Mywibm9uY2UiOiI5NzNlaWVsanpuZyJ9.hSrcxc_RPMHDy-dL5DCW-_Tjwk1AsDASv_sMM6I4vmvYZaYW-cHPmQSdxPKZiwt2QU1NFVkcufR59yIDy9H6r2adDp5G2fbXUeFx6BdsQhKrqrl6MexmmUoNX2ka1Ft_2rrfQ9Loz9iyebgXIFa973I3nNDwy3iFgNUBh7Yw0zfAOeDDuFSRU_4avIR9FTnS2LPFEiZ0h8JxiP5YSBDs-KNvgy5QbXxNZHu7w7YzlQhIBInlMPwC7XWdC3Vfc8UBwov4QsaGet8izX14ULpzwQblgMckMQ9ucuSYQC9N71C0yljBjQIJLNSK0afZDjNMZIAkshRfxTJ4cbab5iVz0A,PHONE +${individualIdOtp},${otpChannel} +eyJraWQiOiJIb0tLSFRZc1FUNEpTMWs2MXlpZXlEVmJBcG5qMVFEamVpak91ZDMzRkU4IiwiYWxnIjoiUlMyNTYifQ.eyJhdF9oYXNoIjpudWxsLCJzdWIiOiIzNTcyNTM5MjQzNjUxNzE5MjE2NDk4NTcyMTMxODE0NzU0NTciLCJhdWQiOiJWVDkyRmJJZ2RlSGl1eTdOOEVUUmV5UldWOTJKOGNYc3pDejlWY0R2S0NvIiwiYWNyIjoibW9zaXA6aWRwOmFjcjpnZW5lcmF0ZWQtY29kZSIsImF1dGhfdGltZSI6MTcxNTE2NTg2MSwiaXNzIjoiaHR0cHM6XC9cL2VzaWduZXQucWEtcGxhdGZvcm0xLm1vc2lwLm5ldFwvdjFcL2VzaWduZXQiLCJleHAiOjE3MTUxNjk0NjMsImlhdCI6MTcxNTE2NTg2Mywibm9uY2UiOiI5NzNlaWVsanpuZyJ9.hSrcxc_RPMHDy-dL5DCW-_Tjwk1AsDASv_sMM6I4vmvYZaYW-cHPmQSdxPKZiwt2QU1NFVkcufR59yIDy9H6r2adDp5G2fbXUeFx6BdsQhKrqrl6MexmmUoNX2ka1Ft_2rrfQ9Loz9iyebgXIFa973I3nNDwy3iFgNUBh7Yw0zfAOeDDuFSRU_4avIR9FTnS2LPFEiZ0h8JxiP5YSBDs-KNvgy5QbXxNZHu7w7YzlQhIBInlMPwC7XWdC3Vfc8UBwov4QsaGet8izX14ULpzwQblgMckMQ9ucuSYQC9N71C0yljBjQIJLNSK0afZDjNMZIAkshRfxTJ4cbab5iVz0A,PHONE +${individualIdOtp},${otpChannel} +eyJraWQiOiJIb0tLSFRZc1FUNEpTMWs2MXlpZXlEVmJBcG5qMVFEamVpak91ZDMzRkU4IiwiYWxnIjoiUlMyNTYifQ.eyJhdF9oYXNoIjpudWxsLCJzdWIiOiIzNTcyNTM5MjQzNjUxNzE5MjE2NDk4NTcyMTMxODE0NzU0NTciLCJhdWQiOiJWVDkyRmJJZ2RlSGl1eTdOOEVUUmV5UldWOTJKOGNYc3pDejlWY0R2S0NvIiwiYWNyIjoibW9zaXA6aWRwOmFjcjpnZW5lcmF0ZWQtY29kZSIsImF1dGhfdGltZSI6MTcxNTE2NjIwOCwiaXNzIjoiaHR0cHM6XC9cL2VzaWduZXQucWEtcGxhdGZvcm0xLm1vc2lwLm5ldFwvdjFcL2VzaWduZXQiLCJleHAiOjE3MTUxNjk4MTAsImlhdCI6MTcxNTE2NjIxMCwibm9uY2UiOiI5NzNlaWVsanpuZyJ9.lwbEw71sLQdN6pFHTRnLTLLveT5UMQcIfAg2afRzBJwDgYtRKEaG_-YBe4EndFSm6HHmUuf-90Z_Af-Uqspk01Y2lLXEfZurTStfUXyYKpPBB71BuHZm0jMImObXyrhnVWNfZL3NM1kHHuXMb2xoo096LmphrYxULiT6sezmGCOH4CgMcVpad6_16IAZTGZD9VKDpimRIUvyoR2yMZwgAc9goYzilQfM8KxNE41TjQOAsjo5FVZQHCRWyS-J4V4SUvWrMc-O4huX6e-ohLzC_YADGxf_oXBwOdHpqvsxgsjFc876KE5H0-ca_cEtB6S0sfnlLUkF7lArBngKef8Y0w,PHONE +${individualIdOtp},${otpChannel} +5849382146035781,PHONE +${individualIdOtp},${otpChannel} +${individualIdOtp},PHONE +${individualIdOtp},${otpChannel} +${individualIdOtp},PHONE +${individualIdOtp},${otpChannel} +${individualIdOtp},PHONE +${individualIdOtp},${otpChannel} +5849382146035781,PHONE +${individualIdOtp},${otpChannel} +5849382146035781,PHONE +${individualIdOtp},${otpChannel} +2879526156839276,PHONE +${individualIdOtp},${otpChannel} +5849382146035781,PHONE +${individualIdOtp},${otpChannel} diff --git a/resident-services/support-files/resident_access_id_token.txt b/resident-services/support-files/resident_access_id_token.txt deleted file mode 100644 index a517dd3b..00000000 --- a/resident-services/support-files/resident_access_id_token.txt +++ /dev/null @@ -1,2 +0,0 @@ -${id_token},${access_token},${tokenIndividualId} -eyJraWQiOiJIb0tLSFRZc1FUNEpTMWs2MXlpZXlEVmJBcG5qMVFEamVpak91ZDMzRkU4IiwiYWxnIjoiUlMyNTYifQ.eyJhdF9oYXNoIjpudWxsLCJzdWIiOiIzNTcyNTM5MjQzNjUxNzE5MjE2NDk4NTcyMTMxODE0NzU0NTciLCJhdWQiOiJWVDkyRmJJZ2RlSGl1eTdOOEVUUmV5UldWOTJKOGNYc3pDejlWY0R2S0NvIiwiYWNyIjoibW9zaXA6aWRwOmFjcjpnZW5lcmF0ZWQtY29kZSIsImF1dGhfdGltZSI6MTcxNDk5NDI3MSwiaXNzIjoiaHR0cHM6XC9cL2VzaWduZXQucWEtcGxhdGZvcm0xLm1vc2lwLm5ldFwvdjFcL2VzaWduZXQiLCJleHAiOjE3MTQ5OTc4NzQsImlhdCI6MTcxNDk5NDI3NCwibm9uY2UiOiI5NzNlaWVsanpuZyJ9.TP0RWB8FFV_p_xsHLd7yBKKdkEYXWvp7E9Fx67my91KgOxFtwIgYGp4L3IMVxqx21FbbbvVcbulgKH81yKh_cqWInHAT4fa998uHw9FBMimsQ3RJXWYpCikWgtvccOBkE9SJmVXFVvRdgt0dQiFEWkBpBwOyD-5Qd2Vd4I-OaL6MMlPnUcimfL1dqRsQ-H5eAgiruZik21WQIsef5XSzrGams9OtYh8OUEPMYtMD4lKZkBb9vm2GDlhF9KormemnQE5rn-lZHzJ1qRPvWWQUME6AWoHasxbIDbIhU740Y2hlg8tcMP6Lv1xz2AbUwKtFDjtSZEnxspFUauXE4yd3lA,eyJraWQiOiJIb0tLSFRZc1FUNEpTMWs2MXlpZXlEVmJBcG5qMVFEamVpak91ZDMzRkU4IiwiYWxnIjoiUlMyNTYifQ.eyJzdWIiOiIzNTcyNTM5MjQzNjUxNzE5MjE2NDk4NTcyMTMxODE0NzU0NTciLCJhdWQiOiJWVDkyRmJJZ2RlSGl1eTdOOEVUUmV5UldWOTJKOGNYc3pDejlWY0R2S0NvIiwic2NvcGUiOiJNYW5hZ2UtSWRlbnRpdHktRGF0YSBNYW5hZ2UtVklEIE1hbmFnZS1BdXRoZW50aWNhdGlvbiBNYW5hZ2UtU2VydmljZS1SZXF1ZXN0cyBNYW5hZ2UtQ3JlZGVudGlhbHMiLCJpc3MiOiJodHRwczpcL1wvZXNpZ25ldC5xYS1wbGF0Zm9ybTEubW9zaXAubmV0XC92MVwvZXNpZ25ldCIsImV4cCI6MTcxNDk5Nzg3MywiaWF0IjoxNzE0OTk0MjczLCJjbGllbnRfaWQiOiJWVDkyRmJJZ2RlSGl1eTdOOEVUUmV5UldWOTJKOGNYc3pDejlWY0R2S0NvIn0.d5ZSzf-JTkGpmqEmDFCoohvgHr2o3HOxc8Y46d8a4lp17gAV1Yw6VV7pQuXaQdgKcZi_m-QWMdHyw__ihfYeBhCMMQCKp7vc3vN42F9rS109YhLQgkneqt4L3RZ7c5oG8f3na0WEMUeSAi6c8h9S414TI9YqkN-VrXugknbkw4q_NUBKL9imb9b43kb6pWJQDr-FU673Q7PlWrVd0WhgD0OOYMjYfp2BnLj08W8gppD8nzOPgzq5ZnIOusJqvDKJjeCpr72k2anrlNB_G5N29Aw3wWSb_0zGV0LDyqwUxCxYWAC-wdvdIUisFcJHL4t_ywZElJqTy7M_LOGn1GShfw,5849382146035781 diff --git a/resident-services/support-files/vid_list_resident.txt b/resident-services/support-files/vid_list_resident.txt deleted file mode 100644 index 4024ab34..00000000 --- a/resident-services/support-files/vid_list_resident.txt +++ /dev/null @@ -1,2 +0,0 @@ -${vid} -5849382146035781 From 98b3a690593d9dabe53f1351d43465512d3f854e Mon Sep 17 00:00:00 2001 From: Akhil Date: Fri, 7 Jun 2024 16:21:36 +0530 Subject: [PATCH 3/4] Scenario based Resident Services Scripts updated Signed-off-by: Akhil --- .../scripts/Resident_Test_script.jmx | 419 ++++++++++-------- 1 file changed, 230 insertions(+), 189 deletions(-) diff --git a/resident-services/scripts/Resident_Test_script.jmx b/resident-services/scripts/Resident_Test_script.jmx index 275f5fc3..5df18ecb 100644 --- a/resident-services/scripts/Resident_Test_script.jmx +++ b/resident-services/scripts/Resident_Test_script.jmx @@ -19,6 +19,11 @@ 10 = + + rampUp + 1 + = + protocol https @@ -51,7 +56,7 @@ residentOidcClientId - VT92FbIgdeHiuy7N8ETReyRWV92J8cXszCz9VcDvKCo + Hj65cNync_lOBQhuhwDhDd7yjQ2eAIcKAt9CFG6BUeI = @@ -61,7 +66,7 @@ regProcSecretKey - IMEXRmebs2ZnRtHs + abc123 = @@ -76,7 +81,7 @@ idRepoSecretKey - MztmjErLZDCaifRy + abc123 = @@ -730,7 +735,7 @@ vars.put("utcTime", utcTime); - + continue false @@ -1291,7 +1296,7 @@ function encodeBase64Url(value) { - + continue false @@ -1402,15 +1407,15 @@ vars.put("utcTime", utcTime); - + continue false - 1 + -1 - 1 - 1 - false + 20 + ${rampUp} + true ${testDuration} true @@ -1469,12 +1474,12 @@ vars.put("utcTime", utcTime); true - + S01 T01 Login​ Redirect URI Controller 100 true - + S01 T02 UIN Login Controller 100 true @@ -2164,16 +2169,25 @@ function encodeBase64Url(value) { + + 0 + + throughput + 1200.0 + 0.0 + + + - + continue false - 1 + -1 - 1 - 1 - false + 3 + ${rampUp} + true ${testDuration} true @@ -2226,27 +2240,27 @@ vars.put("utcTime", utcTime); true - + Service History Endpoint 20 true - + Grievance Ticket Endpoint 20 true - + Unpinned Endpoint 100 true - + Pinned Endpoint 100 true - + Download Service History Endpoint 100 true @@ -2546,16 +2560,25 @@ vars.put("utcTime", utcTime); + + 0 + + throughput + 180.0 + 0.0 + + + - + continue false - 1 + -1 - 1 - 1 - false + 5 + ${rampUp} + true ${testDuration} true @@ -2599,9 +2622,9 @@ vars.put("utcTime", utcTime); true - + S03 T01 Generate / Revoke VID Controller - 100 + 50 true @@ -3005,16 +3028,25 @@ vars.put("utcTime", utcTime); + + 0 + + throughput + 300.0 + 0.0 + + + - + continue false - 1 + -1 - 1 - 1 - false + 5 + ${rampUp} + true ${duration} true @@ -3202,16 +3234,25 @@ vars.put("utcTime", utcTime); + + 0 + + throughput + 300.0 + 0.0 + + + - + continue false - 1 + -1 - 1 - 1 - false + 5 + ${rampUp} + true ${testDuration} true @@ -3232,12 +3273,12 @@ vars.put("utcTime", utcTime); true - + Track Service Request Endpoint 100 true - + Download Service Request Endpoint 100 true @@ -3360,16 +3401,25 @@ vars.put("utcTime", utcTime); + + 0 + + throughput + 300.0 + 0.0 + + + - + continue false - 1 + -1 - 1 - 1 - false + 5 + ${rampUp} + true ${testDuration} true @@ -3704,16 +3754,25 @@ vars.put("utcTime", utcTime); + + 0 + + throughput + 300.0 + 0.0 + + + - + continue false - 1 + -1 - 1 - 1 - false + 5 + ${rampUp} + true ${testDuration} true @@ -4174,16 +4233,25 @@ vars.put("utcTime", utcTime); + + 0 + + throughput + 300.0 + 0.0 + + + - + continue false - 1 + -1 - 1 - 1 - false + 15 + ${rampUp} + true ${testDuration} true @@ -4344,27 +4412,27 @@ vars.put("utcTime", utcTime); true - + S07 T01 Update Data Controller 100 true - + S07 T02 Documents Controller 100 true - + S07 T03 Update UIN Controller 100 true - + S07 T04 Contact Details Controller 100 true - + S07 T05 Transliteration Controller 100 true @@ -5397,16 +5465,25 @@ vars.put("utcTime", utcTime); + + 0 + + throughput + 900.0 + 0.0 + + + - + continue false - 1 + -1 - 1 - 1 - false + 10 + ${rampUp} + true ${testDuration} true @@ -5546,12 +5623,12 @@ vars.put("utcTime", utcTime); true - + S08 T01 Registration Center Controller 100 true - + S08 T02 Supporting Documents Controller 100 true @@ -6265,16 +6342,25 @@ vars.put("utcTime", utcTime); + + 0 + + throughput + 600.0 + 0.0 + + + - + continue false - 1 + -1 - 1 - 1 - false + 15 + ${rampUp} + true ${testDuration} true @@ -6528,16 +6614,25 @@ vars.put("utcTime", utcTime); + + 0 + + throughput + 900.0 + 0.0 + + + - + continue false - 1 + -1 - 1 - 1 - false + 3 + ${rampUp} + true ${testDuration} true @@ -6736,16 +6831,25 @@ vars.put("utcTime", utcTime); + + 0 + + throughput + 180.0 + 0.0 + + + - + continue false - 1 + -1 - 1 - 1 - false + 4 + ${rampUp} + true ${testDuration} true @@ -6766,22 +6870,22 @@ vars.put("utcTime", utcTime); true - + Unread Notification Count Endpoint 100 true - + Bell Update Time Endpoint 100 true - + Bell Notification Click Endpoint 100 true - + Notifications Language Code Endpoint 100 true @@ -6992,16 +7096,25 @@ vars.put("utcTime", utcTime); + + 0 + + throughput + 240.0 + 0.0 + + + - + continue false - 1 + -1 - 1 - 1 - false + 2 + ${rampUp} + true ${testDuration} true @@ -7036,12 +7149,12 @@ vars.put("utcTime", utcTime); true - + Auth Proxy Audit Log Endpoint 100 true - + Proxy Audit Log Endpoint 100 true @@ -7172,16 +7285,25 @@ vars.put("utcTime", utcTime); + + 0 + + throughput + 120.0 + 0.0 + + + - + continue false - 1 + -1 - 1 - 1 - false + 3 + ${rampUp} + true ${testDuration} true @@ -7316,6 +7438,15 @@ vars.put("utcTime", utcTime); + + 0 + + throughput + 180.0 + 0.0 + + + false @@ -7391,96 +7522,6 @@ vars.put("utcTime", utcTime); - - 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 - - - - 500 - false - - Endpoint - - - false - false - - - - 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 - - - - 500 - false - - Endpoint - - - false - false - - From 558cd530fe125627df108564c85100f3ba41acc2 Mon Sep 17 00:00:00 2001 From: Akhil Date: Fri, 7 Jun 2024 16:31:42 +0530 Subject: [PATCH 4/4] Scenario based Resident Services Scripts updated Signed-off-by: Akhil --- .../scripts/Resident_Test_script.jmx | 46 +++++++++---------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/resident-services/scripts/Resident_Test_script.jmx b/resident-services/scripts/Resident_Test_script.jmx index 5df18ecb..e50ccd1d 100644 --- a/resident-services/scripts/Resident_Test_script.jmx +++ b/resident-services/scripts/Resident_Test_script.jmx @@ -1474,12 +1474,12 @@ vars.put("utcTime", utcTime); true - + S01 T01 Login​ Redirect URI Controller 100 true - + S01 T02 UIN Login Controller 100 true @@ -2170,7 +2170,7 @@ function encodeBase64Url(value) { - 0 + 2 throughput 1200.0 @@ -2561,7 +2561,7 @@ vars.put("utcTime", utcTime); - 0 + 2 throughput 180.0 @@ -3029,7 +3029,7 @@ vars.put("utcTime", utcTime); - 0 + 2 throughput 300.0 @@ -3047,7 +3047,7 @@ vars.put("utcTime", utcTime); 5 ${rampUp} true - ${duration} + ${testDuration} true @@ -3235,7 +3235,7 @@ vars.put("utcTime", utcTime); - 0 + 2 throughput 300.0 @@ -3402,7 +3402,7 @@ vars.put("utcTime", utcTime); - 0 + 2 throughput 300.0 @@ -3755,7 +3755,7 @@ vars.put("utcTime", utcTime); - 0 + 2 throughput 300.0 @@ -4234,7 +4234,7 @@ vars.put("utcTime", utcTime); - 0 + 2 throughput 300.0 @@ -5466,7 +5466,7 @@ vars.put("utcTime", utcTime); - 0 + 2 throughput 900.0 @@ -6343,7 +6343,7 @@ vars.put("utcTime", utcTime); - 0 + 2 throughput 600.0 @@ -6615,7 +6615,7 @@ vars.put("utcTime", utcTime); - 0 + 2 throughput 900.0 @@ -6832,7 +6832,7 @@ vars.put("utcTime", utcTime); - 0 + 2 throughput 180.0 @@ -6870,22 +6870,22 @@ vars.put("utcTime", utcTime); true - + Unread Notification Count Endpoint 100 true - + Bell Update Time Endpoint 100 true - + Bell Notification Click Endpoint 100 true - + Notifications Language Code Endpoint 100 true @@ -7097,7 +7097,7 @@ vars.put("utcTime", utcTime); - 0 + 2 throughput 240.0 @@ -7149,12 +7149,12 @@ vars.put("utcTime", utcTime); true - + Auth Proxy Audit Log Endpoint 100 true - + Proxy Audit Log Endpoint 100 true @@ -7286,7 +7286,7 @@ vars.put("utcTime", utcTime); - 0 + 2 throughput 120.0 @@ -7439,7 +7439,7 @@ vars.put("utcTime", utcTime); - 0 + 2 throughput 180.0