From 29859940ae93d6f51095ecba91dbbf351537f049 Mon Sep 17 00:00:00 2001 From: ravinperera00 Date: Thu, 26 Sep 2024 15:22:58 +0530 Subject: [PATCH 1/2] Remove Gson from testerina runtime and ballerina rt --- bvm/ballerina-rt/build.gradle | 2 - .../ballerinalang/test/runtime/BTestMain.java | 53 +++++++++++++++---- 2 files changed, 42 insertions(+), 13 deletions(-) diff --git a/bvm/ballerina-rt/build.gradle b/bvm/ballerina-rt/build.gradle index 3a68ec3a1989..c93838f4bacd 100644 --- a/bvm/ballerina-rt/build.gradle +++ b/bvm/ballerina-rt/build.gradle @@ -108,8 +108,6 @@ dependencies { //// metrics dist project(':metrics-extensions:ballerina-metrics-extension') - dist "com.google.code.gson:gson:${project.gsonVersion}" - // Transaction related third party jars dist "com.atomikos:transactions-jta:${project.atomikosTransactionsJtaVersion}" dist "com.atomikos:atomikos-util:${project.atomikosUtilVersion}" diff --git a/misc/testerina/modules/testerina-runtime/src/main/java/org/ballerinalang/test/runtime/BTestMain.java b/misc/testerina/modules/testerina-runtime/src/main/java/org/ballerinalang/test/runtime/BTestMain.java index d4902ec5ee91..ce549207b271 100644 --- a/misc/testerina/modules/testerina-runtime/src/main/java/org/ballerinalang/test/runtime/BTestMain.java +++ b/misc/testerina/modules/testerina-runtime/src/main/java/org/ballerinalang/test/runtime/BTestMain.java @@ -17,9 +17,13 @@ */ package org.ballerinalang.test.runtime; -import com.google.gson.Gson; -import com.google.gson.reflect.TypeToken; import io.ballerina.projects.util.ProjectConstants; +import io.ballerina.runtime.api.utils.JsonUtils; +import io.ballerina.runtime.api.utils.StringUtils; +import io.ballerina.runtime.api.values.BArray; +import io.ballerina.runtime.api.values.BMap; +import io.ballerina.runtime.api.values.BString; +import io.ballerina.runtime.internal.values.BmpStringValue; import org.ballerinalang.test.runtime.entity.MockFunctionReplaceVisitor; import org.ballerinalang.test.runtime.entity.ModuleStatus; import org.ballerinalang.test.runtime.entity.TestReport; @@ -108,13 +112,12 @@ public static void main(String[] args) throws IOException { } else { br = Files.newBufferedReader(testSuiteJsonPath, StandardCharsets.UTF_8); } - Gson gson = new Gson(); - Map testSuiteMap = gson.fromJson(br, - new TypeToken>() { }.getType()); + Object jsonObj = JsonUtils.parse(br, JsonUtils.NonStringValueProcessingMode.FROM_JSON_STRING); + BMap testSuiteMap = (BMap)jsonObj; if (!testSuiteMap.isEmpty()) { - for (Map.Entry entry : testSuiteMap.entrySet()) { - String moduleName = entry.getKey(); - TestSuite testSuite = entry.getValue(); + for (Map.Entry entry : testSuiteMap.entrySet()) { + String moduleName = entry.getKey().toString(); + TestSuite testSuite = testSuiteGenerator((BMap) entry.getValue()); String packageName = testSuite.getPackageName(); out.println("\n\t" + (moduleName.equals(packageName) ? (moduleName.equals(TesterinaConstants.DOT) ? testSuite.getSourceFileName() : moduleName) @@ -176,9 +179,7 @@ private static void writeStatusToJsonFile(ModuleStatus moduleStatus, Path tmpJso } try (FileOutputStream fileOutputStream = new FileOutputStream(jsonFile)) { try (Writer writer = new OutputStreamWriter(fileOutputStream, StandardCharsets.UTF_8)) { - Gson gson = new Gson(); - String json = gson.toJson(moduleStatus); - writer.write(new String(json.getBytes(StandardCharsets.UTF_8), StandardCharsets.UTF_8)); + JsonUtils.serialize(JsonUtils.convertToJson(moduleStatus), writer); } } } @@ -369,4 +370,34 @@ public static ClassLoader getClassLoader() { return classLoader; } + private static TestSuite testSuiteGenerator(BMap map) { + String packageName = map.get(StringUtils.fromString("packageName")).toString(); + String orgName = map.get(StringUtils.fromString("orgName")).toString(); + String version = map.get(StringUtils.fromString("version")).toString(); + String sourceRootPath = map.get(StringUtils.fromString("sourceRootPath")).toString(); + String packageId = map.get(StringUtils.fromString("packageId")).toString(); + String testPackageId = map.get(StringUtils.fromString("testPackageId")).toString(); + String executeFilePath = map.get(StringUtils.fromString("executeFilePath")).toString(); + BMap mockFunctionNamesMap = (BMap)map.get(StringUtils.fromString("mockFunctionNamesMap")); + BMap testUtilityFunctions = (BMap)map.get(StringUtils.fromString("testUtilityFunctions")); + List testExecutionDependencies = Arrays.stream( + ((BArray)map.get(StringUtils.fromString("testExecutionDependencies"))).getValues()).toList(); + TestSuite testSuite = new TestSuite(packageId, testPackageId, packageName,orgName, version,executeFilePath); + testSuite.setSourceRootPath(sourceRootPath); + for(BString key : mockFunctionNamesMap.getKeys()) { + testSuite.addMockFunction(key.toString(), mockFunctionNamesMap.get(key).toString()); + } + for(BString key : testUtilityFunctions.getKeys()) { + testSuite.addTestUtilityFunction(key.toString(), testUtilityFunctions.get(key).toString()); + } + List paths = new ArrayList<>(); + for(Object item : testExecutionDependencies) { + if (item != null) { + paths.add(Paths.get(((BString)item).getValue())); + } + } + testSuite.addTestExecutionDependencies(paths); + return testSuite; + } + } From bef4cc48816b420758056cc73a84cfc6feb6cc9d Mon Sep 17 00:00:00 2001 From: ravinperera00 Date: Fri, 27 Sep 2024 09:39:21 +0530 Subject: [PATCH 2/2] Fix bug in TestSuite generation --- .../ballerinalang/test/runtime/BTestMain.java | 21 ++++++++++++------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/misc/testerina/modules/testerina-runtime/src/main/java/org/ballerinalang/test/runtime/BTestMain.java b/misc/testerina/modules/testerina-runtime/src/main/java/org/ballerinalang/test/runtime/BTestMain.java index ce549207b271..3f6e0a7a0a09 100644 --- a/misc/testerina/modules/testerina-runtime/src/main/java/org/ballerinalang/test/runtime/BTestMain.java +++ b/misc/testerina/modules/testerina-runtime/src/main/java/org/ballerinalang/test/runtime/BTestMain.java @@ -113,7 +113,7 @@ public static void main(String[] args) throws IOException { br = Files.newBufferedReader(testSuiteJsonPath, StandardCharsets.UTF_8); } Object jsonObj = JsonUtils.parse(br, JsonUtils.NonStringValueProcessingMode.FROM_JSON_STRING); - BMap testSuiteMap = (BMap)jsonObj; + BMap testSuiteMap = (BMap) jsonObj; if (!testSuiteMap.isEmpty()) { for (Map.Entry entry : testSuiteMap.entrySet()) { String moduleName = entry.getKey().toString(); @@ -378,22 +378,27 @@ private static TestSuite testSuiteGenerator(BMap map) { String packageId = map.get(StringUtils.fromString("packageId")).toString(); String testPackageId = map.get(StringUtils.fromString("testPackageId")).toString(); String executeFilePath = map.get(StringUtils.fromString("executeFilePath")).toString(); - BMap mockFunctionNamesMap = (BMap)map.get(StringUtils.fromString("mockFunctionNamesMap")); - BMap testUtilityFunctions = (BMap)map.get(StringUtils.fromString("testUtilityFunctions")); + BMap mockFunctionNamesMap = (BMap) map.get(StringUtils.fromString("mockFunctionNamesMap")); + BMap testUtilityFunctions = (BMap) map.get(StringUtils.fromString("testUtilityFunctions")); List testExecutionDependencies = Arrays.stream( - ((BArray)map.get(StringUtils.fromString("testExecutionDependencies"))).getValues()).toList(); + ((BArray) map.get(StringUtils.fromString("testExecutionDependencies"))).getValues()).toList(); + String sourceFileName = null; TestSuite testSuite = new TestSuite(packageId, testPackageId, packageName,orgName, version,executeFilePath); testSuite.setSourceRootPath(sourceRootPath); - for(BString key : mockFunctionNamesMap.getKeys()) { + if (map.get(StringUtils.fromString("sourceFileName")) != null) { + sourceFileName = map.get(StringUtils.fromString("sourceFileName")).toString(); + } + testSuite.setSourceFileName(sourceFileName); + for (BString key : mockFunctionNamesMap.getKeys()) { testSuite.addMockFunction(key.toString(), mockFunctionNamesMap.get(key).toString()); } - for(BString key : testUtilityFunctions.getKeys()) { + for (BString key : testUtilityFunctions.getKeys()) { testSuite.addTestUtilityFunction(key.toString(), testUtilityFunctions.get(key).toString()); } List paths = new ArrayList<>(); - for(Object item : testExecutionDependencies) { + for (Object item : testExecutionDependencies) { if (item != null) { - paths.add(Paths.get(((BString)item).getValue())); + paths.add(Paths.get(((BString) item).getValue())); } } testSuite.addTestExecutionDependencies(paths);