added a testing class for billers
This commit is contained in:
@@ -0,0 +1,189 @@
|
||||
package com.billpaymentservice.bbps;
|
||||
|
||||
import java.net.URI;
|
||||
import java.net.http.*;
|
||||
import java.util.*;
|
||||
import java.util.concurrent.*;
|
||||
import org.json.*;
|
||||
|
||||
public class BBPSAutomationTest {
|
||||
|
||||
private static final String BASE_URL = "http://localhost:9090/masterData";
|
||||
private static final String BILLER_API = "https://bbps-staging.digiledge.in/agent/cou-master/masters/billers";
|
||||
private static final HttpClient client = HttpClient.newHttpClient();
|
||||
|
||||
// Run 10 threads in parallel
|
||||
private static final ExecutorService executor = Executors.newFixedThreadPool(10);
|
||||
|
||||
public static void main(String[] args) {
|
||||
try {
|
||||
System.out.println("🚀 Starting BBPS Test Flow (Multi-Threaded)...\n");
|
||||
|
||||
List<String> categories = getAllCategories();
|
||||
if (categories.isEmpty()) {
|
||||
System.out.println("❌ No categories found. Exiting...");
|
||||
return;
|
||||
}
|
||||
|
||||
System.out.println("\n✅ Total Categories Found: " + categories.size());
|
||||
|
||||
int count = 1;
|
||||
for (String category : categories) {
|
||||
System.out.println("\n📂 [" + count++ + "/" + categories.size() + "] Category: " + category);
|
||||
|
||||
List<String> billerIds = Collections.emptyList();
|
||||
try {
|
||||
billerIds = fetchBillersByCategory(category);
|
||||
} catch (Exception ex) {
|
||||
System.err.println("⚠️ Skipping category '" + category + "' due to error: " + ex.getMessage());
|
||||
continue; // skip and go to next category
|
||||
}
|
||||
|
||||
if (billerIds == null || billerIds.isEmpty()) {
|
||||
System.out.println("⚠️ No billers found for: " + category + " — Skipping...");
|
||||
continue;
|
||||
}
|
||||
|
||||
System.out.println("🔹 Found " + billerIds.size() + " billers. Fetching details in parallel...");
|
||||
|
||||
// Run all biller calls in parallel threads
|
||||
List<Future<?>> futures = new ArrayList<>();
|
||||
for (String billerId : billerIds) {
|
||||
futures.add(executor.submit(() -> {
|
||||
try {
|
||||
sendBillerDetails(billerId);
|
||||
} catch (Exception e) {
|
||||
System.err.println("❌ Error with biller " + billerId + ": " + e.getMessage());
|
||||
}
|
||||
}));
|
||||
}
|
||||
|
||||
// Wait for all billers to finish
|
||||
for (Future<?> f : futures) {
|
||||
try {
|
||||
f.get();
|
||||
} catch (Exception e) {
|
||||
System.err.println("⚠️ Thread interrupted: " + e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
System.out.println("✅ Completed all billers for category: " + category);
|
||||
}
|
||||
|
||||
executor.shutdown();
|
||||
System.out.println("\n🎯 All categories processed successfully (multi-threaded & safe)!");
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
// Step 1 - Get All Categories
|
||||
private static List<String> getAllCategories() throws Exception {
|
||||
String reqId = UUID.randomUUID().toString();
|
||||
|
||||
JSONObject body = new JSONObject();
|
||||
body.put("mid", "ALLCOS00117BHO");
|
||||
body.put("reqId", reqId);
|
||||
body.put("secretKey", "ABCD1234SECRET");
|
||||
|
||||
JSONObject device = new JSONObject();
|
||||
device.put("deviceId", "DEVICE001");
|
||||
device.put("deviceName", "Samsung Galaxy S23");
|
||||
device.put("os", "Android 14");
|
||||
device.put("appVersion", "1.0.5");
|
||||
device.put("ipAddress", "192.168.1.101");
|
||||
body.put("deviceDetial", device);
|
||||
|
||||
HttpRequest request = HttpRequest.newBuilder()
|
||||
.uri(URI.create(BASE_URL + "/getAllMastersData"))
|
||||
.header("Content-Type", "application/json")
|
||||
.POST(HttpRequest.BodyPublishers.ofString(body.toString()))
|
||||
.build();
|
||||
|
||||
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
|
||||
if (response.statusCode() != 200) {
|
||||
System.out.println("❌ getAllMastersData failed | HTTP " + response.statusCode());
|
||||
return Collections.emptyList();
|
||||
}
|
||||
|
||||
JSONObject json = new JSONObject(response.body());
|
||||
JSONArray catArray = json.optJSONObject("data") != null
|
||||
? json.getJSONObject("data").optJSONArray("categoryRespList")
|
||||
: null;
|
||||
|
||||
List<String> categories = new ArrayList<>();
|
||||
if (catArray != null && catArray.length() > 0) {
|
||||
for (int i = 0; i < catArray.length(); i++) {
|
||||
categories.add(catArray.getJSONObject(i).getString("categoryName"));
|
||||
}
|
||||
}
|
||||
|
||||
System.out.println("✅ Categories found: " + categories.size());
|
||||
return categories;
|
||||
}
|
||||
|
||||
// Step 2 - Fetch Billers by Category
|
||||
private static List<String> fetchBillersByCategory(String category) throws Exception {
|
||||
// Encode category to handle spaces & special characters safely
|
||||
String encodedCategory = java.net.URLEncoder.encode(category, java.nio.charset.StandardCharsets.UTF_8);
|
||||
String url = BILLER_API + "?category=" + encodedCategory + "&page=0&pagesize=50";
|
||||
|
||||
HttpRequest request = HttpRequest.newBuilder().uri(URI.create(url)).GET().build();
|
||||
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
|
||||
|
||||
if (response.statusCode() != 200) {
|
||||
System.out.println("❌ Failed to fetch billers for " + category + " | HTTP " + response.statusCode());
|
||||
return Collections.emptyList();
|
||||
}
|
||||
|
||||
JSONObject json = new JSONObject(response.body());
|
||||
JSONArray billersArray = json.optJSONArray("billerResp");
|
||||
|
||||
if (billersArray == null || billersArray.length() == 0) {
|
||||
System.out.println("⚠️ billerResp empty or null for category: " + category);
|
||||
return Collections.emptyList();
|
||||
}
|
||||
|
||||
List<String> billerIds = new ArrayList<>();
|
||||
for (int i = 0; i < billersArray.length(); i++) {
|
||||
billerIds.add(billersArray.getJSONObject(i).getString("billerId"));
|
||||
}
|
||||
|
||||
return billerIds;
|
||||
}
|
||||
|
||||
// Step 3 - Get Biller Details
|
||||
private static void sendBillerDetails(String billerId) throws Exception {
|
||||
String reqId = UUID.randomUUID().toString();
|
||||
|
||||
JSONObject body = new JSONObject();
|
||||
body.put("mid", "ALLCOS00117BHO");
|
||||
body.put("reqId", reqId);
|
||||
body.put("billerId", billerId);
|
||||
body.put("secretKey", "ABCD1234SECRET");
|
||||
|
||||
JSONObject device = new JSONObject();
|
||||
device.put("deviceId", "DEVICE001");
|
||||
device.put("deviceName", "Samsung Galaxy S23");
|
||||
device.put("os", "Android 14");
|
||||
device.put("appVersion", "1.0.5");
|
||||
device.put("ipAddress", "192.168.1.101");
|
||||
body.put("deviceDetial", device);
|
||||
|
||||
HttpRequest request = HttpRequest.newBuilder()
|
||||
.uri(URI.create(BASE_URL + "/getBillerDetails"))
|
||||
.header("Content-Type", "application/json")
|
||||
.POST(HttpRequest.BodyPublishers.ofString(body.toString()))
|
||||
.build();
|
||||
|
||||
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
|
||||
|
||||
synchronized (System.out) { // thread-safe log printing
|
||||
if (response.statusCode() == 200) {
|
||||
System.out.println("✅ Success: " + billerId);
|
||||
} else {
|
||||
System.out.println("❌ Failed: " + billerId + " | HTTP " + response.statusCode());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user