diff --git a/agent/agent_common/src/main/java/com/intuit/tank/http/json/GenericJsonHandler.java b/agent/agent_common/src/main/java/com/intuit/tank/http/json/GenericJsonHandler.java new file mode 100644 index 000000000..e7be77626 --- /dev/null +++ b/agent/agent_common/src/main/java/com/intuit/tank/http/json/GenericJsonHandler.java @@ -0,0 +1,28 @@ +package com.intuit.tank.http.json; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import tools.jackson.databind.json.JsonMapper; + +/** + * Global shared, threads-safe JsonMapper instance. + */ +public class GenericJsonHandler { + private static final Logger logger = LogManager.getLogger(GenericJsonHandler.class); + private static final JsonMapper jsonMapper = JsonMapper.builder().build(); + + /** + * Converts a JSON string to a Java object of a specified class. + * @param json + * @param clazz + * @return + */ + protected static T fromJson(String json, Class clazz) { + try { + return jsonMapper.readValue(json, clazz); + } catch (Exception ex) { + logger.warn("Unable to parse the response string as a JSON object: {}", json, ex); + } + return null; + } +} diff --git a/agent/agent_common/src/main/java/com/intuit/tank/http/json/JsonResponse.java b/agent/agent_common/src/main/java/com/intuit/tank/http/json/JsonResponse.java index cd21cc70f..eb686c9bf 100644 --- a/agent/agent_common/src/main/java/com/intuit/tank/http/json/JsonResponse.java +++ b/agent/agent_common/src/main/java/com/intuit/tank/http/json/JsonResponse.java @@ -13,13 +13,12 @@ * #L% */ -import java.io.IOException; import java.net.URLDecoder; import java.nio.charset.StandardCharsets; +import java.util.Collections; import java.util.HashMap; import java.util.Map; -import com.fasterxml.jackson.databind.ObjectMapper; import org.apache.commons.jxpath.JXPathContext; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.math.NumberUtils; @@ -46,13 +45,13 @@ public JsonResponse(String resp) { @Override public void setResponseBody(String body) { - this.response = this.cleanString(body); + this.response = body.strip(); } @Override public void setResponseBody(byte[] byteArray) { this.responseByteArray = byteArray; - this.response = this.cleanString(new String(byteArray)); + this.response = new String(byteArray).strip(); } @Override @@ -79,24 +78,10 @@ public String getValue(String key) { } } - private String cleanString(String input) { - try { - return StringUtils.remove(input.trim(),"(\r\n)+"); - } catch (Exception ex) { - return input; - } - } - private void initialize() { - try { - if (!StringUtils.isEmpty(this.response)) { - this.jsonMap = new ObjectMapper().readValue(this.response, HashMap.class); - } else { - this.jsonMap = new HashMap(); - } - } catch (IOException ex) { - logger.warn("Unable to parse the response string as a JSON object: " + this.response, ex); - } + this.jsonMap = (StringUtils.isNotEmpty(this.response)) ? + GenericJsonHandler.fromJson(this.response, HashMap.class) : + Collections.emptyMap(); } } diff --git a/agent/agent_common/src/test/java/com/intuit/tank/http/json/JsonResponseTest.java b/agent/agent_common/src/test/java/com/intuit/tank/http/json/JsonResponseTest.java index 741951349..a88e74817 100644 --- a/agent/agent_common/src/test/java/com/intuit/tank/http/json/JsonResponseTest.java +++ b/agent/agent_common/src/test/java/com/intuit/tank/http/json/JsonResponseTest.java @@ -16,9 +16,8 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotNull; -import java.io.BufferedReader; -import java.io.FileReader; -import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Paths; import java.util.stream.Stream; import org.apache.commons.lang3.tuple.ImmutablePair; @@ -93,7 +92,7 @@ public void testGetValue_1() public void testJsonResponseBody() throws Exception{ JsonResponse fixture = new JsonResponse(); - fixture.setResponseBody(readFile("src/test/resources/json-response.json")); + fixture.setResponseBody(Files.readString(Paths.get("src/test/resources/json-response.json"))); Stream> keys = Stream.of( new ImmutablePair<>("/data/data/returns/IRS1040/Return/ReturnData/PPPerson/SpouseFilerInfoPP/FieldAttributes/UUID", "de7f702f-e40b-4f16-8a7d-e4263f11421d"), @@ -114,18 +113,4 @@ public void testJsonResponseBody() throws Exception{ keys.forEach(pair -> assertEquals(pair.getValue(), fixture.getValue(pair.getKey()))); } - - private String readFile( String file ) throws IOException { - - try (BufferedReader reader = new BufferedReader(new FileReader(file))) { - String line = null; - StringBuilder stringBuilder = new StringBuilder(); - String ls = System.getProperty("line.separator"); - while ((line = reader.readLine()) != null) { - stringBuilder.append(line); - stringBuilder.append(ls); - } - return stringBuilder.toString(); - } - } } diff --git a/agent/agent_standalone/src/main/java/com/intuit/tank/standalone/agent/StandaloneAgentStartup.java b/agent/agent_standalone/src/main/java/com/intuit/tank/standalone/agent/StandaloneAgentStartup.java index da89ee400..bb16a3427 100644 --- a/agent/agent_standalone/src/main/java/com/intuit/tank/standalone/agent/StandaloneAgentStartup.java +++ b/agent/agent_standalone/src/main/java/com/intuit/tank/standalone/agent/StandaloneAgentStartup.java @@ -23,7 +23,7 @@ import java.util.zip.ZipException; import java.util.zip.ZipInputStream; -import com.fasterxml.jackson.core.JsonProcessingException; +import tools.jackson.core.JacksonException; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.builder.ToStringBuilder; import org.apache.logging.log4j.LogManager; @@ -111,7 +111,7 @@ public void startTest(final StandaloneAgentRequest request) { currentAvailability.setAvailabilityStatus(AgentAvailabilityStatus.AVAILABLE); try { sendAvailability(); - } catch (JsonProcessingException ex) { + } catch (JacksonException ex) { throw new RuntimeException(ex); } } @@ -152,7 +152,7 @@ private void startPinger() { t.start(); } - private void sendAvailability() throws JsonProcessingException { + private void sendAvailability() throws JacksonException { // create new availability as a copy of the original AgentAvailability availability = new AgentAvailability(currentAvailability.getInstanceId(), currentAvailability.getInstanceUrl(), currentAvailability.getCapacity(), diff --git a/agent/apiharness/src/main/java/com/intuit/tank/harness/APIMonitor.java b/agent/apiharness/src/main/java/com/intuit/tank/harness/APIMonitor.java index 7211a8467..36712c4b9 100644 --- a/agent/apiharness/src/main/java/com/intuit/tank/harness/APIMonitor.java +++ b/agent/apiharness/src/main/java/com/intuit/tank/harness/APIMonitor.java @@ -20,9 +20,9 @@ import java.net.http.HttpResponse; import java.util.Date; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.ObjectWriter; +import tools.jackson.core.JacksonException; +import tools.jackson.databind.ObjectMapper; +import tools.jackson.databind.ObjectWriter; import org.apache.http.HttpHeaders; import org.apache.http.entity.ContentType; import org.apache.logging.log4j.LogManager; @@ -169,7 +169,7 @@ public synchronized static void setJobStatus(JobStatus jobStatus) { } } - protected static void setInstanceStatus(String instanceId, CloudVmStatus VmStatus) throws URISyntaxException, JsonProcessingException { + protected static void setInstanceStatus(String instanceId, CloudVmStatus VmStatus) throws URISyntaxException, JacksonException { String json = objectWriter.writeValueAsString(VmStatus); String token = APITestHarness.getInstance().getTankConfig().getAgentConfig().getAgentToken(); HttpRequest request = HttpRequest.newBuilder() diff --git a/agent/apiharness/src/main/java/com/intuit/tank/harness/APITestHarness.java b/agent/apiharness/src/main/java/com/intuit/tank/harness/APITestHarness.java index fff55d082..7ce696ba4 100644 --- a/agent/apiharness/src/main/java/com/intuit/tank/harness/APITestHarness.java +++ b/agent/apiharness/src/main/java/com/intuit/tank/harness/APITestHarness.java @@ -30,7 +30,6 @@ import java.util.concurrent.Semaphore; import java.util.zip.GZIPInputStream; -import com.fasterxml.jackson.databind.ObjectMapper; import com.intuit.tank.http.TankHttpClient; import com.intuit.tank.vm.api.enumerated.*; import org.apache.commons.io.FileUtils; @@ -66,6 +65,7 @@ import com.intuit.tank.vm.common.TankConstants; import com.intuit.tank.vm.settings.TankConfig; import software.amazon.awssdk.regions.internal.util.EC2MetadataUtils; +import tools.jackson.databind.json.JsonMapper; public class APITestHarness { private static final Logger LOG = LogManager.getLogger(APITestHarness.class); @@ -299,8 +299,8 @@ private void startHttp(String baseUrl, String token) { LOG.info(LogUtil.getLogMessage("Sending AgentData to controller: " + data.toString())); while (count < FIBONACCI.length) { try { - ObjectMapper objectMapper = new ObjectMapper(); - String json = objectMapper.writerFor(AgentData.class) + JsonMapper jsonMapper = new JsonMapper(); + String json = jsonMapper.writerFor(AgentData.class) .withDefaultPrettyPrinter().writeValueAsString(data); HttpRequest request = HttpRequest.newBuilder() .uri(new URI(baseUrl + "/v2/agent/ready")) @@ -310,10 +310,10 @@ private void startHttp(String baseUrl, String token) { .POST(BodyPublishers.ofString(json)) .build(); HttpResponse response = client.send(request, BodyHandlers.ofString()); - startData = objectMapper.readerFor(AgentTestStartData.class).readValue(response.body()); + startData = jsonMapper.readerFor(AgentTestStartData.class).readValue(response.body()); break; } catch (Exception e) { - LOG.error("Error sending ready: " + e, e); + LOG.error("Error sending ready: {}", e, e); try { Thread.sleep(FIBONACCI[count++] * 1000); } catch ( InterruptedException ignored) {} @@ -345,7 +345,7 @@ private void startHttp(String baseUrl, String token) { thread.setDaemon(false); thread.start(); } catch (Exception e) { - LOG.error("Error communicating with controller: " + e, e); + LOG.error("Error communicating with controller: {}", e, e); System.exit(0); } } diff --git a/agent/apiharness/src/main/java/com/intuit/tank/harness/test/data/Variables.java b/agent/apiharness/src/main/java/com/intuit/tank/harness/test/data/Variables.java index 40890d045..0330d948a 100644 --- a/agent/apiharness/src/main/java/com/intuit/tank/harness/test/data/Variables.java +++ b/agent/apiharness/src/main/java/com/intuit/tank/harness/test/data/Variables.java @@ -16,8 +16,10 @@ import java.util.HashMap; import java.util.Map; import java.util.Map.Entry; +import java.util.concurrent.ConcurrentHashMap; import java.util.regex.Matcher; import java.util.regex.Pattern; +import java.util.stream.Collectors; import org.apache.commons.jexl3.JexlBuilder; import org.apache.commons.jexl3.JexlContext; @@ -60,16 +62,19 @@ public class Variables { private static final Pattern p = Pattern.compile(TankConstants.EXPRESSION_REGEX); + // Cache for compiled JEXL expressions to avoid repeated parsing + private static final Map expressionCache = new ConcurrentHashMap<>(); + private JexlContext context; /** * Get the single instance of the variables class - * + * * @return The variable class instance - * + * * static public Variables getInstance(){ if (Variables.instance == null) Variables.instance = new * Variables(); return Variables.instance; } - * + * * /** Constructor */ public Variables() { @@ -98,33 +103,42 @@ public JexlContext getContext() { } public String evaluate(String s) { - if (StringUtils.isNotEmpty(s)) { - if (s.contains("#")) { // Performance Shortcut - Matcher m = p.matcher(s); - while (m.find()) { // find next match, very costly - String match = m.group(); - String group = m.group(1); - JexlExpression expression = jexl.createExpression(group); - String result = (String) expression.evaluate(context); - if (result == null && (group.contains("getCSVData") || group.contains("getFile"))) { - APITestHarness.getInstance().addKill(); - LOG.error(LogUtil.getLogMessage("CSV file (" + group + ") has no more data.", - LogEventType.Validation, LoggingProfile.USER_VARIABLE)); - throw new KillScriptException("CSV file (" + group + ") has no more data."); - } - s = StringUtils.replace(s, match, result != null ? result : ""); - } - } - } - return s; + if (StringUtils.isEmpty(s) || s.indexOf('#') == -1) { + return s; // Fast path: no expressions to evaluate + } + + Matcher m = p.matcher(s); + if (!m.find()) { + return s; // No matches found + } + + // Use StringBuilder with appendReplacement for efficient string building + StringBuilder result = new StringBuilder(s.length() + 64); + do { + String group = m.group(1); + + // Get or create cached expression + JexlExpression expression = expressionCache.computeIfAbsent(group, jexl::createExpression); + + String evalResult = (String) expression.evaluate(context); + if (evalResult == null && (group.contains("getCSVData") || group.contains("getFile"))) { + APITestHarness.getInstance().addKill(); + LOG.error(LogUtil.getLogMessage("CSV file (" + group + ") has no more data.", + LogEventType.Validation, LoggingProfile.USER_VARIABLE)); + throw new KillScriptException("CSV file (" + group + ") has no more data."); + } + + // Use appendReplacement to build result efficiently + m.appendReplacement(result, Matcher.quoteReplacement(evalResult != null ? evalResult : "")); + } while (m.find()); + + m.appendTail(result); + return result.toString(); } public Map getVariableValues() { - Map ret = new HashMap(); - for (Entry entry : variables.entrySet()) { - ret.put(entry.getKey(), entry.getValue().getValue()); - } - return ret; + return variables.entrySet().stream() + .collect(Collectors.toMap(Entry::getKey, e -> e.getValue().getValue())); } /** @@ -165,17 +179,13 @@ public void addVariable(String key, String value) { * true to allow override of variable */ public void addVariable(String key, String value, boolean allowOverride) { - String result = null; - if (value.length() < 1) { - result = this.processString(key, value); - } else if (ValidationUtil.isFunction(value)) { - result = this.processFunction(key, value); - } else { - result = this.processString(key, value); - } - VariableValue variableValue = this.variables.get(key); + String result = ValidationUtil.isFunction(value) + ? processFunction(key, value) + : processString(key, value); + + VariableValue variableValue = variables.get(key); if (variableValue == null || variableValue.allowOverride) { - this.variables.put(key, new VariableValue(result, allowOverride)); + variables.put(key, new VariableValue(result, allowOverride)); context.set(key, result); } } @@ -207,7 +217,7 @@ public Double getDoubleValue(String key) { return Double.valueOf(variable); } } catch (NumberFormatException e) { - LOG.error(variable + " is not a Double."); + LOG.error("{} is not a Double.", variable); } return null; } @@ -225,7 +235,7 @@ public Integer getIntegerValue(String key) { return Integer.valueOf(variable); } } catch (NumberFormatException e) { - LOG.error(variable + " is not a Double."); + LOG.error("{} is not a Integer.", variable); } return null; } @@ -256,7 +266,6 @@ private String processFunction(String key, String value) { * The string value */ private String processString(String key, String value) { - value = evaluate(value); logVariable(key, value); return value; diff --git a/agent/apiharness/src/test/java/com/intuit/tank/harness/APIMonitorTest.java b/agent/apiharness/src/test/java/com/intuit/tank/harness/APIMonitorTest.java index 796b08560..1ce86a72c 100644 --- a/agent/apiharness/src/test/java/com/intuit/tank/harness/APIMonitorTest.java +++ b/agent/apiharness/src/test/java/com/intuit/tank/harness/APIMonitorTest.java @@ -1,7 +1,7 @@ package com.intuit.tank.harness; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.ObjectWriter; +import tools.jackson.databind.ObjectMapper; +import tools.jackson.databind.ObjectWriter; import com.intuit.tank.reporting.api.ResultsReporter; import com.intuit.tank.reporting.api.TPSInfoContainer; import com.intuit.tank.vm.api.enumerated.VMImageType; diff --git a/agent/http_client_3/pom.xml b/agent/http_client_3/pom.xml index dc7d9616b..c4b05ddcd 100644 --- a/agent/http_client_3/pom.xml +++ b/agent/http_client_3/pom.xml @@ -40,7 +40,7 @@ jackson-annotations - com.fasterxml.jackson.core + tools.jackson.core jackson-core diff --git a/agent/http_client_4/pom.xml b/agent/http_client_4/pom.xml index d7075670f..75fb10510 100644 --- a/agent/http_client_4/pom.xml +++ b/agent/http_client_4/pom.xml @@ -45,7 +45,7 @@ jackson-annotations - com.fasterxml.jackson.core + tools.jackson.core jackson-core diff --git a/api/pom.xml b/api/pom.xml index daa9bc9e4..7933d5ed9 100644 --- a/api/pom.xml +++ b/api/pom.xml @@ -71,7 +71,7 @@ - com.fasterxml.jackson.core + tools.jackson.core jackson-databind diff --git a/api/src/main/java/com/intuit/tank/harness/AmazonUtil.java b/api/src/main/java/com/intuit/tank/harness/AmazonUtil.java index c252215f9..ee76a4ca8 100644 --- a/api/src/main/java/com/intuit/tank/harness/AmazonUtil.java +++ b/api/src/main/java/com/intuit/tank/harness/AmazonUtil.java @@ -22,10 +22,10 @@ import java.util.Collections; import java.util.Map; -import com.fasterxml.jackson.core.type.TypeReference; +import tools.jackson.core.type.TypeReference; import jakarta.annotation.Nonnull; -import com.fasterxml.jackson.databind.ObjectMapper; +import tools.jackson.databind.ObjectMapper; import org.apache.commons.lang3.StringUtils; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; diff --git a/api/src/main/java/com/intuit/tank/vm/api/enumerated/VMRegion.java b/api/src/main/java/com/intuit/tank/vm/api/enumerated/VMRegion.java index afabaf2bf..364bd2013 100644 --- a/api/src/main/java/com/intuit/tank/vm/api/enumerated/VMRegion.java +++ b/api/src/main/java/com/intuit/tank/vm/api/enumerated/VMRegion.java @@ -76,14 +76,6 @@ public String getDescription() { return description; } - /** - * - * {@inheritDoc} - */ - public String toString() { - return description; - } - /** * @return the endpoint */ diff --git a/api/src/main/java/com/intuit/tank/vm/common/util/ValidationUtil.java b/api/src/main/java/com/intuit/tank/vm/common/util/ValidationUtil.java index 69ef2880c..d047875d4 100644 --- a/api/src/main/java/com/intuit/tank/vm/common/util/ValidationUtil.java +++ b/api/src/main/java/com/intuit/tank/vm/common/util/ValidationUtil.java @@ -17,6 +17,7 @@ */ import org.apache.commons.lang3.StringUtils; +import org.apache.commons.lang3.Strings; /** * ValidationUtil @@ -40,11 +41,7 @@ public static boolean isVariable(String key) { return false; } - if (key.charAt(0) == identifierChar) { - return true; - } - - return false; + return key.charAt(0) == identifierChar; } /** @@ -62,11 +59,7 @@ public static boolean isAnyVariable(String key) { if (key.charAt(0) == identifierChar) { return true; } - if (key.indexOf("#{") == 0 && key.indexOf("}") == key.length() - 1) { - return true; - } - - return false; + return key.indexOf("#{") == 0 && key.indexOf("}") == key.length() - 1; } /** @@ -80,10 +73,7 @@ public static boolean isFunction(String function) { if (StringUtils.isEmpty(function)) { return false; } - if (function.startsWith(functionIdentifier)) { - return true; - } - return false; + return function.startsWith(functionIdentifier); } public static String removeVariableIdentifier(String key) { @@ -92,9 +82,9 @@ public static String removeVariableIdentifier(String key) { public static String removeAllVariableIdentifier(String key) { key = removeIdentifier(key, identifierChar); - key = StringUtils.removeStart(key, "#"); - key = StringUtils.removeStart(key, "{"); - return StringUtils.removeEnd(key, "}"); + key = Strings.CS.removeStart(key, "#"); + key = Strings.CS.removeStart(key, "{"); + return Strings.CS.removeEnd(key, "}"); } private static String removeIdentifier(String key, char c) { diff --git a/api/src/test/java/com/intuit/tank/vm/agent/messages/AgentDataCpTest.java b/api/src/test/java/com/intuit/tank/vm/agent/messages/AgentDataCpTest.java index ee1b65b32..4b2e5bf94 100644 --- a/api/src/test/java/com/intuit/tank/vm/agent/messages/AgentDataCpTest.java +++ b/api/src/test/java/com/intuit/tank/vm/agent/messages/AgentDataCpTest.java @@ -241,7 +241,7 @@ public void testGetRegion_1() assertNotNull(result); assertEquals("Asia Pacific (Singapore)", result.getDescription()); - assertEquals("Asia Pacific (Singapore)", result.toString()); + assertEquals("ASIA_1", result.toString()); assertEquals("ec2.ap-southeast-1.amazonaws.com", result.getEndpoint()); assertEquals("ASIA_1", result.name()); } @@ -312,10 +312,12 @@ public void testSetUsers_1() throws Exception { AgentData fixture = new AgentData("", "", "", 1, VMRegion.ASIA_1, ""); fixture.setUsers(1); - int users = 1; + int users = 2; fixture.setUsers(users); + assertEquals(2, fixture.getUsers()); + } /** diff --git a/api/src/test/java/com/intuit/tank/vm/agent/messages/AgentMngrAPIResponseCpTest.java b/api/src/test/java/com/intuit/tank/vm/agent/messages/AgentMngrAPIResponseCpTest.java index f4f2a76c8..40f91ab04 100644 --- a/api/src/test/java/com/intuit/tank/vm/agent/messages/AgentMngrAPIResponseCpTest.java +++ b/api/src/test/java/com/intuit/tank/vm/agent/messages/AgentMngrAPIResponseCpTest.java @@ -148,7 +148,7 @@ public void testGetRegion_1() assertNotNull(result); assertEquals("Asia Pacific (Singapore)", result.getDescription()); - assertEquals("Asia Pacific (Singapore)", result.toString()); + assertEquals("ASIA_1", result.toString()); assertEquals("ec2.ap-southeast-1.amazonaws.com", result.getEndpoint()); assertEquals("ASIA_1", result.name()); } diff --git a/api/src/test/java/com/intuit/tank/vm/api/enumerated/VMRegionCpTest.java b/api/src/test/java/com/intuit/tank/vm/api/enumerated/VMRegionCpTest.java index 8d3f5f79a..f8315e9c2 100644 --- a/api/src/test/java/com/intuit/tank/vm/api/enumerated/VMRegionCpTest.java +++ b/api/src/test/java/com/intuit/tank/vm/api/enumerated/VMRegionCpTest.java @@ -74,7 +74,7 @@ public void testGetRegionFromZone_1() assertNotNull(result); assertEquals("Standalone Agent", result.getDescription()); - assertEquals("Standalone Agent", result.toString()); + assertEquals("STANDALONE", result.toString()); assertEquals("", result.getEndpoint()); assertEquals("STANDALONE", result.name()); } @@ -95,7 +95,7 @@ public void testGetRegionFromZone_2() assertNotNull(result); assertEquals("Standalone Agent", result.getDescription()); - assertEquals("Standalone Agent", result.toString()); + assertEquals("STANDALONE", result.toString()); assertEquals("", result.getEndpoint()); assertEquals("STANDALONE", result.name()); } @@ -116,7 +116,7 @@ public void testGetRegionFromZone_3() assertNotNull(result); assertEquals("Standalone Agent", result.getDescription()); - assertEquals("Standalone Agent", result.toString()); + assertEquals("STANDALONE", result.toString()); assertEquals("", result.getEndpoint()); assertEquals("STANDALONE", result.name()); } @@ -135,6 +135,6 @@ public void testToString_1() String result = fixture.toString(); - assertEquals("Asia Pacific (Singapore)", result); + assertEquals("ASIA_1", result); } } \ No newline at end of file diff --git a/api/src/test/java/com/intuit/tank/vm/perfManager/RequestAgentsCpTest.java b/api/src/test/java/com/intuit/tank/vm/perfManager/RequestAgentsCpTest.java index 37ebe9e3c..1334ec81f 100644 --- a/api/src/test/java/com/intuit/tank/vm/perfManager/RequestAgentsCpTest.java +++ b/api/src/test/java/com/intuit/tank/vm/perfManager/RequestAgentsCpTest.java @@ -140,7 +140,7 @@ public void testGetRegion_1() assertNotNull(result); assertEquals("Asia Pacific (Singapore)", result.getDescription()); - assertEquals("Asia Pacific (Singapore)", result.toString()); + assertEquals("ASIA_1", result.toString()); assertEquals("ec2.ap-southeast-1.amazonaws.com", result.getEndpoint()); assertEquals("ASIA_1", result.name()); } diff --git a/api/src/test/java/com/intuit/tank/vm/settings/ReportingInstanceCpTest.java b/api/src/test/java/com/intuit/tank/vm/settings/ReportingInstanceCpTest.java index 1c230e1f5..62ca721da 100644 --- a/api/src/test/java/com/intuit/tank/vm/settings/ReportingInstanceCpTest.java +++ b/api/src/test/java/com/intuit/tank/vm/settings/ReportingInstanceCpTest.java @@ -75,7 +75,7 @@ public void testGetRegion_1() assertNotNull(result); assertEquals("US East (Northern Virginia)", result.getDescription()); - assertEquals("US East (Northern Virginia)", result.toString()); + assertEquals("US_EAST", result.toString()); assertEquals("ec2.us-east-1.amazonaws.com", result.getEndpoint()); assertEquals("US_EAST", result.name()); } @@ -97,7 +97,7 @@ public void testGetRegion_2() assertNotNull(result); assertEquals("US East (Northern Virginia)", result.getDescription()); - assertEquals("US East (Northern Virginia)", result.toString()); + assertEquals("US_EAST", result.toString()); assertEquals("ec2.us-east-1.amazonaws.com", result.getEndpoint()); assertEquals("US_EAST", result.name()); } diff --git a/api/src/test/java/com/intuit/tank/vm/vmManager/models/CloudVmStatusTest.java b/api/src/test/java/com/intuit/tank/vm/vmManager/models/CloudVmStatusTest.java index b13284a9d..2d014bae5 100644 --- a/api/src/test/java/com/intuit/tank/vm/vmManager/models/CloudVmStatusTest.java +++ b/api/src/test/java/com/intuit/tank/vm/vmManager/models/CloudVmStatusTest.java @@ -477,7 +477,7 @@ public void testGetVmRegion_1() VMRegion result = fixture.getVmRegion(); assertNotNull(result); - assertEquals("Asia Pacific (Singapore)", result.toString()); + assertEquals("ASIA_1", result.toString()); assertEquals("ap-southeast-1", result.getRegion()); assertEquals("ec2.ap-southeast-1.amazonaws.com", result.getEndpoint()); assertEquals("Asia Pacific (Singapore)", result.getDescription()); diff --git a/data_model/src/test/java/com/intuit/tank/project/JobRegionTest.java b/data_model/src/test/java/com/intuit/tank/project/JobRegionTest.java index 333cdf579..91ba2a015 100644 --- a/data_model/src/test/java/com/intuit/tank/project/JobRegionTest.java +++ b/data_model/src/test/java/com/intuit/tank/project/JobRegionTest.java @@ -13,13 +13,12 @@ * #L% */ -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertNotNull; - import org.junit.jupiter.api.Test; import com.intuit.tank.vm.api.enumerated.VMRegion; +import static org.junit.jupiter.api.Assertions.*; + /** * The class JobRegionTest contains tests for the class {@link JobRegion}. * @@ -42,8 +41,8 @@ public void testJobRegion_1() assertNotNull(result); assertEquals("0", result.getUsers()); assertEquals(0, result.getId()); - assertEquals(null, result.getModified()); - assertEquals(null, result.getCreated()); + assertNull(result.getModified()); + assertNull(result.getCreated()); } /** @@ -64,8 +63,8 @@ public void testJobRegion_2() assertNotNull(result); assertEquals("0", result.getUsers()); assertEquals(0, result.getId()); - assertEquals(null, result.getModified()); - assertEquals(null, result.getCreated()); + assertNull(result.getModified()); + assertNull(result.getCreated()); } /** @@ -101,7 +100,7 @@ public void testEquals_1() boolean result = fixture.equals(obj); - assertEquals(false, result); + assertFalse(result); } /** @@ -119,7 +118,7 @@ public void testEquals_2() boolean result = fixture.equals(obj); - assertEquals(false, result); + assertFalse(result); } /** @@ -137,7 +136,7 @@ public void testEquals_3() boolean result = fixture.equals(obj); - assertEquals(false, result); + assertFalse(result); } /** @@ -155,7 +154,7 @@ public void testEquals_4() boolean result = fixture.equals(obj); - assertEquals(false, result); + assertFalse(result); } /** @@ -173,7 +172,7 @@ public void testEquals_5() boolean result = fixture.equals(obj); - assertEquals(false, result); + assertFalse(result); } /** @@ -191,7 +190,7 @@ public void testGetRegion_1() VMRegion result = fixture.getRegion(); assertNotNull(result); - assertEquals("Asia Pacific (Singapore)", result.toString()); + assertEquals("ASIA_1", result.toString()); assertEquals("ap-southeast-1", result.getRegion()); assertEquals("ec2.ap-southeast-1.amazonaws.com", result.getEndpoint()); assertEquals("Asia Pacific (Singapore)", result.getDescription()); diff --git a/data_model/src/test/java/com/intuit/tank/project/VMInstanceTest.java b/data_model/src/test/java/com/intuit/tank/project/VMInstanceTest.java index 1555556be..1f01811c9 100644 --- a/data_model/src/test/java/com/intuit/tank/project/VMInstanceTest.java +++ b/data_model/src/test/java/com/intuit/tank/project/VMInstanceTest.java @@ -13,9 +13,7 @@ * #L% */ -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertNotNull; - +import java.util.Collections; import java.util.Date; import java.util.HashSet; import java.util.Set; @@ -26,6 +24,8 @@ import com.intuit.tank.project.VMInstance; import com.intuit.tank.vm.api.enumerated.VMRegion; +import static org.junit.jupiter.api.Assertions.*; + /** * The class VMInstanceTest contains tests for the class {@link VMInstance}. * @@ -54,9 +54,7 @@ public void testVMInstance_1() @Test public void testBuilder_1() throws Exception { - VMInstance.Builder result = VMInstance.builder(); - assertNotNull(result); } @@ -71,9 +69,7 @@ public void testBuilder_1() public void testBuilderFrom_1() throws Exception { VMInstance image = new VMInstance(); - VMInstance.Builder result = VMInstance.builderFrom(image); - assertNotNull(result); } @@ -92,7 +88,7 @@ public void testEquals_1() fixture.setInstanceId(""); fixture.setJobId(""); fixture.setSize(""); - fixture.setVMInstances(new HashSet()); + fixture.setVMInstances(Collections.emptySet()); fixture.setStatus(""); fixture.setEndTime(new Date()); fixture.setStartTime(new Date()); @@ -101,7 +97,7 @@ public void testEquals_1() boolean result = fixture.equals(obj); - assertEquals(false, result); + assertFalse(result); } /** @@ -119,7 +115,7 @@ public void testEquals_2() fixture.setInstanceId(""); fixture.setJobId(""); fixture.setSize(""); - fixture.setVMInstances(new HashSet()); + fixture.setVMInstances(Collections.emptySet()); fixture.setStatus(""); fixture.setEndTime(new Date()); fixture.setStartTime(new Date()); @@ -128,7 +124,7 @@ public void testEquals_2() boolean result = fixture.equals(obj); - assertEquals(true, result); + assertTrue(result); } /** @@ -146,7 +142,7 @@ public void testEquals_3() fixture.setInstanceId(""); fixture.setJobId(""); fixture.setSize(""); - fixture.setVMInstances(new HashSet()); + fixture.setVMInstances(Collections.emptySet()); fixture.setStatus(""); fixture.setEndTime(new Date()); fixture.setStartTime(new Date()); @@ -155,7 +151,7 @@ public void testEquals_3() boolean result = fixture.equals(obj); - assertEquals(true, result); + assertTrue(result); } /** @@ -173,7 +169,7 @@ public void testGetAmiId_1() fixture.setInstanceId(""); fixture.setJobId(""); fixture.setSize(""); - fixture.setVMInstances(new HashSet()); + fixture.setVMInstances(Collections.emptySet()); fixture.setStatus(""); fixture.setEndTime(new Date()); fixture.setStartTime(new Date()); @@ -199,7 +195,7 @@ public void testGetEndTime_1() fixture.setInstanceId(""); fixture.setJobId(""); fixture.setSize(""); - fixture.setVMInstances(new HashSet()); + fixture.setVMInstances(Collections.emptySet()); fixture.setStatus(""); fixture.setEndTime(new Date()); fixture.setStartTime(new Date()); @@ -225,7 +221,7 @@ public void testGetInstanceId_1() fixture.setInstanceId(""); fixture.setJobId(""); fixture.setSize(""); - fixture.setVMInstances(new HashSet()); + fixture.setVMInstances(Collections.emptySet()); fixture.setStatus(""); fixture.setEndTime(new Date()); fixture.setStartTime(new Date()); @@ -251,7 +247,7 @@ public void testGetJobId_1() fixture.setInstanceId(""); fixture.setJobId(""); fixture.setSize(""); - fixture.setVMInstances(new HashSet()); + fixture.setVMInstances(Collections.emptySet()); fixture.setStatus(""); fixture.setEndTime(new Date()); fixture.setStartTime(new Date()); @@ -277,7 +273,7 @@ public void testGetRegion_1() fixture.setInstanceId(""); fixture.setJobId(""); fixture.setSize(""); - fixture.setVMInstances(new HashSet()); + fixture.setVMInstances(Collections.emptySet()); fixture.setStatus(""); fixture.setEndTime(new Date()); fixture.setStartTime(new Date()); @@ -286,7 +282,7 @@ public void testGetRegion_1() VMRegion result = fixture.getRegion(); assertNotNull(result); - assertEquals("Asia Pacific (Singapore)", result.toString()); + assertEquals("ASIA_1", result.toString()); assertEquals("ap-southeast-1", result.getRegion()); assertEquals("ec2.ap-southeast-1.amazonaws.com", result.getEndpoint()); assertEquals("Asia Pacific (Singapore)", result.getDescription()); @@ -308,7 +304,7 @@ public void testGetSize_1() fixture.setInstanceId(""); fixture.setJobId(""); fixture.setSize(""); - fixture.setVMInstances(new HashSet()); + fixture.setVMInstances(Collections.emptySet()); fixture.setStatus(""); fixture.setEndTime(new Date()); fixture.setStartTime(new Date()); @@ -334,7 +330,7 @@ public void testGetStartTime_1() fixture.setInstanceId(""); fixture.setJobId(""); fixture.setSize(""); - fixture.setVMInstances(new HashSet()); + fixture.setVMInstances(Collections.emptySet()); fixture.setStatus(""); fixture.setEndTime(new Date()); fixture.setStartTime(new Date()); @@ -360,7 +356,7 @@ public void testGetStatus_1() fixture.setInstanceId(""); fixture.setJobId(""); fixture.setSize(""); - fixture.setVMInstances(new HashSet()); + fixture.setVMInstances(Collections.emptySet()); fixture.setStatus(""); fixture.setEndTime(new Date()); fixture.setStartTime(new Date()); @@ -386,7 +382,7 @@ public void testGetVMInstances_1() fixture.setInstanceId(""); fixture.setJobId(""); fixture.setSize(""); - fixture.setVMInstances(new HashSet()); + fixture.setVMInstances(Collections.emptySet()); fixture.setStatus(""); fixture.setEndTime(new Date()); fixture.setStartTime(new Date()); @@ -413,7 +409,7 @@ public void testHashCode_1() fixture.setInstanceId(""); fixture.setJobId(""); fixture.setSize(""); - fixture.setVMInstances(new HashSet()); + fixture.setVMInstances(Collections.emptySet()); fixture.setStatus(""); fixture.setEndTime(new Date()); fixture.setStartTime(new Date()); @@ -439,7 +435,7 @@ public void testSetAmiId_1() fixture.setInstanceId(""); fixture.setJobId(""); fixture.setSize(""); - fixture.setVMInstances(new HashSet()); + fixture.setVMInstances(Collections.emptySet()); fixture.setStatus(""); fixture.setEndTime(new Date()); fixture.setStartTime(new Date()); @@ -465,7 +461,7 @@ public void testSetEndTime_1() fixture.setInstanceId(""); fixture.setJobId(""); fixture.setSize(""); - fixture.setVMInstances(new HashSet()); + fixture.setVMInstances(Collections.emptySet()); fixture.setStatus(""); fixture.setEndTime(new Date()); fixture.setStartTime(new Date()); @@ -491,7 +487,7 @@ public void testSetInstanceId_1() fixture.setInstanceId(""); fixture.setJobId(""); fixture.setSize(""); - fixture.setVMInstances(new HashSet()); + fixture.setVMInstances(Collections.emptySet()); fixture.setStatus(""); fixture.setEndTime(new Date()); fixture.setStartTime(new Date()); @@ -517,7 +513,7 @@ public void testSetJobId_1() fixture.setInstanceId(""); fixture.setJobId(""); fixture.setSize(""); - fixture.setVMInstances(new HashSet()); + fixture.setVMInstances(Collections.emptySet()); fixture.setStatus(""); fixture.setEndTime(new Date()); fixture.setStartTime(new Date()); @@ -543,7 +539,7 @@ public void testSetRegion_1() fixture.setInstanceId(""); fixture.setJobId(""); fixture.setSize(""); - fixture.setVMInstances(new HashSet()); + fixture.setVMInstances(Collections.emptySet()); fixture.setStatus(""); fixture.setEndTime(new Date()); fixture.setStartTime(new Date()); @@ -569,7 +565,7 @@ public void testSetSize_1() fixture.setInstanceId(""); fixture.setJobId(""); fixture.setSize(""); - fixture.setVMInstances(new HashSet()); + fixture.setVMInstances(Collections.emptySet()); fixture.setStatus(""); fixture.setEndTime(new Date()); fixture.setStartTime(new Date()); @@ -595,7 +591,7 @@ public void testSetStartTime_1() fixture.setInstanceId(""); fixture.setJobId(""); fixture.setSize(""); - fixture.setVMInstances(new HashSet()); + fixture.setVMInstances(Collections.emptySet()); fixture.setStatus(""); fixture.setEndTime(new Date()); fixture.setStartTime(new Date()); @@ -621,7 +617,7 @@ public void testSetStatus_1() fixture.setInstanceId(""); fixture.setJobId(""); fixture.setSize(""); - fixture.setVMInstances(new HashSet()); + fixture.setVMInstances(Collections.emptySet()); fixture.setStatus(""); fixture.setEndTime(new Date()); fixture.setStartTime(new Date()); @@ -647,12 +643,12 @@ public void testSetVMInstances_1() fixture.setInstanceId(""); fixture.setJobId(""); fixture.setSize(""); - fixture.setVMInstances(new HashSet()); + fixture.setVMInstances(Collections.emptySet()); fixture.setStatus(""); fixture.setEndTime(new Date()); fixture.setStartTime(new Date()); fixture.setAmiId(""); - Set vmImages = new HashSet(); + Set vmImages = Collections.emptySet(); fixture.setVMInstances(vmImages); @@ -673,7 +669,7 @@ public void testToString_1() fixture.setInstanceId(""); fixture.setJobId(""); fixture.setSize(""); - fixture.setVMInstances(new HashSet()); + fixture.setVMInstances(Collections.emptySet()); fixture.setStatus(""); fixture.setEndTime(new Date()); fixture.setStartTime(new Date()); diff --git a/pom.xml b/pom.xml index 240f53bfe..31a151c4e 100644 --- a/pom.xml +++ b/pom.xml @@ -51,7 +51,7 @@ 4.0.2 6.2.15 3.13.2 - 2.19.4 + 3.1.0 2.25.3 @@ -614,9 +614,11 @@ pom - com.fasterxml.jackson.core - jackson-databind + tools.jackson + jackson-bom ${version.jackson} + import + pom org.json @@ -783,12 +785,7 @@ com.fasterxml.jackson.core jackson-annotations - ${version.jackson} - - - com.fasterxml.jackson.core - jackson-core - ${version.jackson} + 2.21 org.projectlombok diff --git a/rest-mvc/clients/pom.xml b/rest-mvc/clients/pom.xml index c5bacb917..1ca1943ae 100644 --- a/rest-mvc/clients/pom.xml +++ b/rest-mvc/clients/pom.xml @@ -24,11 +24,11 @@ commons-lang3 - com.fasterxml.jackson.core + tools.jackson.core jackson-core - com.fasterxml.jackson.core + tools.jackson.core jackson-databind @@ -36,9 +36,9 @@ jakarta.annotation-api - com.fasterxml.jackson.dataformat + tools.jackson.dataformat jackson-dataformat-xml - 2.16.0 + 3.1.0 diff --git a/rest-mvc/clients/src/main/java/com/intuit/tank/clients/AgentClient.java b/rest-mvc/clients/src/main/java/com/intuit/tank/clients/AgentClient.java index c03f70c74..1fe263a9b 100644 --- a/rest-mvc/clients/src/main/java/com/intuit/tank/clients/AgentClient.java +++ b/rest-mvc/clients/src/main/java/com/intuit/tank/clients/AgentClient.java @@ -7,9 +7,9 @@ */ package com.intuit.tank.clients; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.dataformat.xml.XmlMapper; -import com.fasterxml.jackson.databind.ObjectMapper; +import tools.jackson.core.JacksonException; +import tools.jackson.databind.json.JsonMapper; +import tools.jackson.dataformat.xml.XmlMapper; import com.intuit.tank.clients.util.ClientException; import com.intuit.tank.agent.models.TankHttpClientDefinitionContainer; import com.intuit.tank.projects.models.ProjectTO; @@ -87,13 +87,12 @@ public InputStream getSupportFiles() { } - public AgentTestStartData agentReady(AgentData agentData) throws JsonProcessingException { - ObjectMapper objectMapper = new ObjectMapper(); + public AgentTestStartData agentReady(AgentData agentData) throws JacksonException { HttpRequest request = requestBuilder("/ready") .header("Accept", "application/json") .header("Content-Type", "application/json") - .POST(HttpRequest.BodyPublishers.ofString(objectMapper.writeValueAsString(agentData))) + .POST(HttpRequest.BodyPublishers.ofString(JSON_MAPPER.writeValueAsString(agentData))) .build(); try { @@ -101,7 +100,7 @@ public AgentTestStartData agentReady(AgentData agentData) throws JsonProcessingE if (checkStatusCode(response.statusCode())) { try (InputStream is = response.body()) { - return objectMapper.readValue(is, AgentTestStartData.class); + return JSON_MAPPER.readValue(is, AgentTestStartData.class); } } else { try (InputStream errorStream = response.body()) { @@ -109,7 +108,7 @@ public AgentTestStartData agentReady(AgentData agentData) throws JsonProcessingE throw new ClientException(responseBody, response.statusCode()); } } - } catch (JsonProcessingException e) { + } catch (JacksonException e) { throw new IllegalArgumentException("Failed to process JSON object: ", e); } catch (ClientException e1) { throw e1; @@ -156,9 +155,8 @@ public TankHttpClientDefinitionContainer getClients() { HttpResponse response = client.send(request, HttpResponse.BodyHandlers.ofInputStream()); if (checkStatusCode(response.statusCode())) { - ObjectMapper objectMapper = new ObjectMapper(); try (InputStream is = response.body()) { - return objectMapper.readValue(is, TankHttpClientDefinitionContainer.class); + return JSON_MAPPER.readValue(is, TankHttpClientDefinitionContainer.class); } } else { try (InputStream errorStream = response.body()) { @@ -174,13 +172,12 @@ public TankHttpClientDefinitionContainer getClients() { return null; } - public void setStandaloneAgentAvailability(AgentAvailability availability) throws JsonProcessingException { - ObjectMapper objectMapper = new ObjectMapper(); + public void setStandaloneAgentAvailability(AgentAvailability availability) throws JacksonException { HttpRequest request = requestBuilder("/availability") .header("Accept", "application/json") .header("Content-Type", "application/json") - .POST(HttpRequest.BodyPublishers.ofString(objectMapper.writeValueAsString(availability))) + .POST(HttpRequest.BodyPublishers.ofString(JSON_MAPPER.writeValueAsString(availability))) .build(); try { @@ -191,7 +188,7 @@ public void setStandaloneAgentAvailability(AgentAvailability availability) throw throw new ClientException(responseBody, response.statusCode()); } } - } catch (JsonProcessingException e) { + } catch (JacksonException e) { throw new IllegalArgumentException("Failed to process JSON object: ", e); } catch (ClientException e1) { throw e1; @@ -209,9 +206,8 @@ public CloudVmStatus getInstanceStatus(String instanceId) { HttpResponse response = client.send(request, HttpResponse.BodyHandlers.ofInputStream()); if(checkStatusCode(response.statusCode())) { - ObjectMapper objectMapper = new ObjectMapper(); try(InputStream is = response.body()) { - return objectMapper.readValue(is, CloudVmStatus.class); + return JSON_MAPPER.readValue(is, CloudVmStatus.class); } } else { try(InputStream errorStream = response.body()) { @@ -227,13 +223,12 @@ public CloudVmStatus getInstanceStatus(String instanceId) { return null; } - public Void setInstanceStatus(String instanceId, CloudVmStatus VmStatus) throws JsonProcessingException { - ObjectMapper objectMapper = new ObjectMapper(); + public Void setInstanceStatus(String instanceId, CloudVmStatus VmStatus) throws JacksonException { HttpRequest request = requestBuilder("/instance/status/", instanceId) .header("Accept", "application/json") .header("Content-Type", "application/json") - .POST(HttpRequest.BodyPublishers.ofString(objectMapper.writeValueAsString(VmStatus))) + .POST(HttpRequest.BodyPublishers.ofString(JSON_MAPPER.writeValueAsString(VmStatus))) .build(); try { @@ -245,7 +240,7 @@ public Void setInstanceStatus(String instanceId, CloudVmStatus VmStatus) throws throw new ClientException(responseBody, response.statusCode()); } } - } catch (JsonProcessingException e) { + } catch (JacksonException e) { throw new IllegalArgumentException("Failed to process JSON object: ", e); } catch (ClientException e1) { throw e1; diff --git a/rest-mvc/clients/src/main/java/com/intuit/tank/clients/BaseClient.java b/rest-mvc/clients/src/main/java/com/intuit/tank/clients/BaseClient.java index 7d6f00f2e..98d7aaf29 100644 --- a/rest-mvc/clients/src/main/java/com/intuit/tank/clients/BaseClient.java +++ b/rest-mvc/clients/src/main/java/com/intuit/tank/clients/BaseClient.java @@ -13,6 +13,7 @@ import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.message.ObjectMessage; +import tools.jackson.databind.json.JsonMapper; import java.net.InetSocketAddress; import java.net.ProxySelector; @@ -25,6 +26,7 @@ public abstract class BaseClient { private static final Logger LOGGER = LogManager.getLogger(BaseClient.class); + protected static final JsonMapper JSON_MAPPER = JsonMapper.builder().build(); protected String baseUrl; diff --git a/rest-mvc/clients/src/main/java/com/intuit/tank/clients/DataFileClient.java b/rest-mvc/clients/src/main/java/com/intuit/tank/clients/DataFileClient.java index 562a246db..b599d6a01 100644 --- a/rest-mvc/clients/src/main/java/com/intuit/tank/clients/DataFileClient.java +++ b/rest-mvc/clients/src/main/java/com/intuit/tank/clients/DataFileClient.java @@ -7,10 +7,10 @@ */ package com.intuit.tank.clients; -import com.fasterxml.jackson.databind.ObjectMapper; import com.intuit.tank.clients.util.ClientException; import com.intuit.tank.datafiles.models.DataFileDescriptor; import com.intuit.tank.datafiles.models.DataFileDescriptorContainer; +import tools.jackson.databind.ObjectMapper; import java.io.ByteArrayOutputStream; import java.io.IOException; @@ -51,9 +51,8 @@ public DataFileDescriptorContainer getDatafiles() throws IOException, Interrupte HttpResponse response = client.send(request, HttpResponse.BodyHandlers.ofInputStream()); if(checkStatusCode(response.statusCode())) { - ObjectMapper objectMapper = new ObjectMapper(); try(InputStream is = response.body()) { - return objectMapper.readValue(is, DataFileDescriptorContainer.class); + return JSON_MAPPER.readValue(is, DataFileDescriptorContainer.class); } } else { try(InputStream errorStream = response.body()) { @@ -79,9 +78,8 @@ public DataFileDescriptor getDatafile(Integer datafileId) { HttpResponse response = client.send(request, HttpResponse.BodyHandlers.ofInputStream()); if(checkStatusCode(response.statusCode())) { - ObjectMapper objectMapper = new ObjectMapper(); try(InputStream is = response.body()) { - return objectMapper.readValue(is, DataFileDescriptor.class); + return JSON_MAPPER.readValue(is, DataFileDescriptor.class); } } else { try(InputStream errorStream = response.body()) { @@ -167,13 +165,9 @@ public String downloadDatafile(Integer datafileId) { } public Map uploadDatafile(Integer id, Path filepath) throws IOException { - URI uri; - - if(id == null) { - uri = URI.create(urlBuilder.buildUrl("/upload")); - } else { - uri = URI.create(urlBuilder.buildUrl("/upload") + "?id=" + id); - } + URI uri = (id == null) ? + URI.create(urlBuilder.buildUrl("/upload")) : + URI.create(urlBuilder.buildUrl("/upload") + "?id=" + id); String boundary = "Boundary-" + Long.toHexString(System.currentTimeMillis()); diff --git a/rest-mvc/clients/src/main/java/com/intuit/tank/clients/FilterClient.java b/rest-mvc/clients/src/main/java/com/intuit/tank/clients/FilterClient.java index 0f69deb61..f166611e8 100644 --- a/rest-mvc/clients/src/main/java/com/intuit/tank/clients/FilterClient.java +++ b/rest-mvc/clients/src/main/java/com/intuit/tank/clients/FilterClient.java @@ -7,10 +7,9 @@ */ package com.intuit.tank.clients; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; import com.intuit.tank.clients.util.ClientException; import com.intuit.tank.filters.models.*; +import tools.jackson.core.JacksonException; import java.io.InputStream; import java.net.http.HttpRequest; @@ -44,9 +43,8 @@ public FilterContainer getFilters() { HttpResponse response = client.send(request, HttpResponse.BodyHandlers.ofInputStream()); if(checkStatusCode(response.statusCode())) { - ObjectMapper objectMapper = new ObjectMapper(); try(InputStream is = response.body()) { - return objectMapper.readValue(is, FilterContainer.class); + return JSON_MAPPER.readValue(is, FilterContainer.class); } } else { try(InputStream errorStream = response.body()) { @@ -72,9 +70,8 @@ public FilterGroupContainer getFilterGroups() { HttpResponse response = client.send(request, HttpResponse.BodyHandlers.ofInputStream()); if(checkStatusCode(response.statusCode())) { - ObjectMapper objectMapper = new ObjectMapper(); try(InputStream is = response.body()) { - return objectMapper.readValue(is, FilterGroupContainer.class); + return JSON_MAPPER.readValue(is, FilterGroupContainer.class); } } else { try(InputStream errorStream = response.body()) { @@ -100,9 +97,8 @@ public FilterTO getFilter(Integer filterId) { HttpResponse response = client.send(request, HttpResponse.BodyHandlers.ofInputStream()); if(checkStatusCode(response.statusCode())) { - ObjectMapper objectMapper = new ObjectMapper(); try(InputStream is = response.body()) { - return objectMapper.readValue(is, FilterTO.class); + return JSON_MAPPER.readValue(is, FilterTO.class); } } else { try(InputStream errorStream = response.body()) { @@ -128,9 +124,8 @@ public FilterGroupTO getFilterGroup(Integer filterGroupId) { HttpResponse response = client.send(request, HttpResponse.BodyHandlers.ofInputStream()); if(checkStatusCode(response.statusCode())) { - ObjectMapper objectMapper = new ObjectMapper(); try(InputStream is = response.body()) { - return objectMapper.readValue(is, FilterGroupTO.class); + return JSON_MAPPER.readValue(is, FilterGroupTO.class); } } else { try(InputStream errorStream = response.body()) { @@ -147,12 +142,11 @@ public FilterGroupTO getFilterGroup(Integer filterGroupId) { } public String applyFilters(Integer scriptId, ApplyFiltersRequest filtersRequest) { - ObjectMapper objectMapper = new ObjectMapper(); String requestBody; try { - requestBody = objectMapper.writeValueAsString(filtersRequest); - } catch (JsonProcessingException e) { + requestBody = JSON_MAPPER.writeValueAsString(filtersRequest); + } catch (JacksonException e) { throw new IllegalArgumentException("Failed to serialize JSON object: ", e); } diff --git a/rest-mvc/clients/src/main/java/com/intuit/tank/clients/JobClient.java b/rest-mvc/clients/src/main/java/com/intuit/tank/clients/JobClient.java index 43238347b..bb0af8ed2 100644 --- a/rest-mvc/clients/src/main/java/com/intuit/tank/clients/JobClient.java +++ b/rest-mvc/clients/src/main/java/com/intuit/tank/clients/JobClient.java @@ -7,17 +7,10 @@ */ package com.intuit.tank.clients; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.dataformat.xml.XmlMapper; +import tools.jackson.core.JacksonException; import com.intuit.tank.clients.util.ClientException; -import com.intuit.tank.projects.models.ProjectContainer; import com.intuit.tank.jobs.models.*; -import com.intuit.tank.projects.models.ProjectTO; -import com.intuit.tank.script.models.ExternalScriptTO; -import com.intuit.tank.vm.agent.messages.Headers; -import java.io.IOException; import java.io.InputStream; import java.net.http.HttpRequest; import java.net.http.HttpResponse; @@ -52,9 +45,8 @@ public JobContainer getAllJobs() { HttpResponse response = client.send(request, HttpResponse.BodyHandlers.ofInputStream()); if(checkStatusCode(response.statusCode())) { - ObjectMapper objectMapper = new ObjectMapper(); try(InputStream is = response.body()) { - return objectMapper.readValue(is, JobContainer.class); + return JSON_MAPPER.readValue(is, JobContainer.class); } } else { try(InputStream errorStream = response.body()) { @@ -80,9 +72,8 @@ public JobTO getJob(Integer jobId) { HttpResponse response = client.send(request, HttpResponse.BodyHandlers.ofInputStream()); if(checkStatusCode(response.statusCode())) { - ObjectMapper objectMapper = new ObjectMapper(); try(InputStream is = response.body()) { - return objectMapper.readValue(is, JobTO.class); + return JSON_MAPPER.readValue(is, JobTO.class); } } else { try(InputStream errorStream = response.body()) { @@ -108,9 +99,8 @@ public JobContainer getJobsByProject(Integer projectId) { HttpResponse response = client.send(request, HttpResponse.BodyHandlers.ofInputStream()); if(checkStatusCode(response.statusCode())) { - ObjectMapper objectMapper = new ObjectMapper(); try(InputStream is = response.body()) { - return objectMapper.readValue(is, JobContainer.class); + return JSON_MAPPER.readValue(is, JobContainer.class); } } else { try(InputStream errorStream = response.body()) { @@ -127,12 +117,11 @@ public JobContainer getJobsByProject(Integer projectId) { } public Map createJob(CreateJobRequest jobRequest) { - ObjectMapper objectMapper = new ObjectMapper(); String requestBody; try { - requestBody = objectMapper.writeValueAsString(jobRequest); - } catch (JsonProcessingException e) { + requestBody = JSON_MAPPER.writeValueAsString(jobRequest); + } catch (JacksonException e) { throw new IllegalArgumentException("Failed to serialize JSON object: ", e); } @@ -146,7 +135,7 @@ public Map createJob(CreateJobRequest jobRequest) { HttpResponse response = client.send(request, HttpResponse.BodyHandlers.ofString()); if(checkStatusCode(response.statusCode())) { - return objectMapper.readValue(response.body(), Map.class); + return JSON_MAPPER.readValue(response.body(), Map.class); } else { throw new ClientException(response.body(), response.statusCode()); } @@ -168,9 +157,8 @@ public List> getAllJobStatus() { HttpResponse response = client.send(request, HttpResponse.BodyHandlers.ofInputStream()); if(checkStatusCode(response.statusCode())) { - ObjectMapper objectMapper = new ObjectMapper(); try(InputStream is = response.body()) { - return objectMapper.readValue(is, List.class); + return JSON_MAPPER.readValue(is, List.class); } } else { try(InputStream errorStream = response.body()) { diff --git a/rest-mvc/clients/src/main/java/com/intuit/tank/clients/ProjectClient.java b/rest-mvc/clients/src/main/java/com/intuit/tank/clients/ProjectClient.java index b469d4a6c..b5d738aaa 100644 --- a/rest-mvc/clients/src/main/java/com/intuit/tank/clients/ProjectClient.java +++ b/rest-mvc/clients/src/main/java/com/intuit/tank/clients/ProjectClient.java @@ -7,25 +7,21 @@ */ package com.intuit.tank.clients; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; +import tools.jackson.core.JacksonException; import com.intuit.tank.clients.util.ClientException; import com.intuit.tank.projects.models.AutomationRequest; import com.intuit.tank.projects.models.ProjectContainer; import com.intuit.tank.projects.models.ProjectTO; -import com.intuit.tank.script.models.ExternalScriptTO; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; -import java.net.URI; import java.net.http.HttpRequest; import java.net.http.HttpResponse; import java.nio.charset.StandardCharsets; import java.util.Map; public class ProjectClient extends BaseClient{ - private static final String SERVICE_BASE_URL = "/v2/projects"; public ProjectClient(String serviceUrl, String token) { @@ -51,9 +47,8 @@ public ProjectContainer getProjects() { HttpResponse response = client.send(request, HttpResponse.BodyHandlers.ofInputStream()); if(checkStatusCode(response.statusCode())) { - ObjectMapper objectMapper = new ObjectMapper(); try(InputStream is = response.body()) { - return objectMapper.readValue(is, ProjectContainer.class); + return JSON_MAPPER.readValue(is, ProjectContainer.class); } } else { try(InputStream errorStream = response.body()) { @@ -70,9 +65,8 @@ public ProjectContainer getProjects() { } public Map getProjectNames() throws IOException, InterruptedException { - ObjectMapper objectMapper = new ObjectMapper(); - HttpRequest request = requestBuilder("/names") + .header("Accept", "application/json") .GET() .build(); @@ -80,7 +74,7 @@ public Map getProjectNames() throws IOException, InterruptedExc HttpResponse response = client.send(request, HttpResponse.BodyHandlers.ofString()); if(checkStatusCode(response.statusCode())) { - return objectMapper.readValue(response.body(), Map.class); + return JSON_MAPPER.readValue(response.body(), Map.class); } else { throw new ClientException(response.body(), response.statusCode()); } @@ -102,9 +96,8 @@ public ProjectTO getProject(Integer projectId) throws IOException, InterruptedEx HttpResponse response = client.send(request, HttpResponse.BodyHandlers.ofInputStream()); if(checkStatusCode(response.statusCode())) { - ObjectMapper objectMapper = new ObjectMapper(); try(InputStream is = response.body()) { - return objectMapper.readValue(is, ProjectTO.class); + return JSON_MAPPER.readValue(is, ProjectTO.class); } } else { try(InputStream errorStream = response.body()) { @@ -121,12 +114,11 @@ public ProjectTO getProject(Integer projectId) throws IOException, InterruptedEx } public Map createProject(AutomationRequest projectRequest) { - ObjectMapper objectMapper = new ObjectMapper(); String requestBody; try { - requestBody = objectMapper.writeValueAsString(projectRequest); - } catch (JsonProcessingException e) { + requestBody = JSON_MAPPER.writeValueAsString(projectRequest); + } catch (JacksonException e) { throw new IllegalArgumentException("Failed to serialize JSON object: ", e); } @@ -140,7 +132,7 @@ public Map createProject(AutomationRequest projectRequest) { HttpResponse response = client.send(request, HttpResponse.BodyHandlers.ofString()); if(checkStatusCode(response.statusCode())) { - return objectMapper.readValue(response.body(), Map.class); + return JSON_MAPPER.readValue(response.body(), Map.class); } else { throw new ClientException(response.body(), response.statusCode()); } @@ -152,12 +144,11 @@ public Map createProject(AutomationRequest projectRequest) { public Map updateProject(AutomationRequest projectRequest) { - ObjectMapper objectMapper = new ObjectMapper(); String requestBody; try { - requestBody = objectMapper.writeValueAsString(projectRequest); - } catch (JsonProcessingException e) { + requestBody = JSON_MAPPER.writeValueAsString(projectRequest); + } catch (JacksonException e) { throw new IllegalArgumentException("Failed to serialize JSON object: ", e); } @@ -171,7 +162,7 @@ public Map updateProject(AutomationRequest projectRequest) { HttpResponse response = client.send(request, HttpResponse.BodyHandlers.ofString()); if(checkStatusCode(response.statusCode())) { - return objectMapper.readValue(response.body(), Map.class); + return JSON_MAPPER.readValue(response.body(), Map.class); } else { throw new ClientException(response.body(), response.statusCode()); } diff --git a/rest-mvc/clients/src/main/java/com/intuit/tank/clients/ScriptClient.java b/rest-mvc/clients/src/main/java/com/intuit/tank/clients/ScriptClient.java index 26fa56ef6..3cd136c32 100644 --- a/rest-mvc/clients/src/main/java/com/intuit/tank/clients/ScriptClient.java +++ b/rest-mvc/clients/src/main/java/com/intuit/tank/clients/ScriptClient.java @@ -7,10 +7,8 @@ */ package com.intuit.tank.clients; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; +import tools.jackson.core.JacksonException; import com.intuit.tank.clients.util.ClientException; -import com.intuit.tank.projects.models.ProjectTO; import com.intuit.tank.script.models.ExternalScriptContainer; import com.intuit.tank.script.models.ExternalScriptTO; import com.intuit.tank.script.models.ScriptDescriptionContainer; @@ -19,14 +17,9 @@ import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; -import java.net.URI; import java.net.http.HttpRequest; import java.net.http.HttpResponse; import java.nio.charset.StandardCharsets; -import java.nio.file.Files; -import java.nio.file.Path; -import java.util.ArrayList; -import java.util.Map; public class ScriptClient extends BaseClient { @@ -56,9 +49,8 @@ public ScriptDescriptionContainer getScripts() throws IOException, InterruptedEx HttpResponse response = client.send(request, HttpResponse.BodyHandlers.ofInputStream()); if(checkStatusCode(response.statusCode())) { - ObjectMapper objectMapper = new ObjectMapper(); try(InputStream is = response.body()) { - return objectMapper.readValue(is, ScriptDescriptionContainer.class); + return JSON_MAPPER.readValue(is, ScriptDescriptionContainer.class); } } else { try(InputStream errorStream = response.body()) { @@ -85,9 +77,8 @@ public ScriptTO getScript(Integer scriptId) { HttpResponse response = client.send(request, HttpResponse.BodyHandlers.ofInputStream()); if(checkStatusCode(response.statusCode())) { - ObjectMapper objectMapper = new ObjectMapper(); try(InputStream is = response.body()) { - return objectMapper.readValue(is, ScriptTO.class); + return JSON_MAPPER.readValue(is, ScriptTO.class); } } else { try(InputStream errorStream = response.body()) { @@ -192,8 +183,6 @@ public String deleteScript(Integer scriptId) { // External Scripts public ExternalScriptContainer getExternalScripts() throws IOException, InterruptedException { - ObjectMapper objectMapper = new ObjectMapper(); - HttpRequest request = requestBuilder("/external") .header("Accept", "application/json") .GET() @@ -203,7 +192,7 @@ public ExternalScriptContainer getExternalScripts() throws IOException, Interrup HttpResponse response = client.send(request, HttpResponse.BodyHandlers.ofString()); if(checkStatusCode(response.statusCode())) { - return objectMapper.readValue(response.body(), ExternalScriptContainer.class); + return JSON_MAPPER.readValue(response.body(), ExternalScriptContainer.class); } else { throw new ClientException(response.body(), response.statusCode()); } @@ -217,8 +206,6 @@ public ExternalScriptContainer getExternalScripts() throws IOException, Interrup public ExternalScriptTO getExternalScript(Integer externalScriptId) { - ObjectMapper objectMapper = new ObjectMapper(); - HttpRequest request = requestBuilder("/external", externalScriptId) .header("Accept", "application/json") .GET() @@ -228,7 +215,7 @@ public ExternalScriptTO getExternalScript(Integer externalScriptId) { HttpResponse response = client.send(request, HttpResponse.BodyHandlers.ofString()); if(checkStatusCode(response.statusCode())) { - return objectMapper.readValue(response.body(), ExternalScriptTO.class); + return JSON_MAPPER.readValue(response.body(), ExternalScriptTO.class); } else { throw new ClientException(response.body(), response.statusCode()); } @@ -241,12 +228,11 @@ public ExternalScriptTO getExternalScript(Integer externalScriptId) { } public ExternalScriptTO createExternalScript(ExternalScriptTO script) throws IOException, InterruptedException { - ObjectMapper objectMapper = new ObjectMapper(); String requestBody; try { - requestBody = objectMapper.writeValueAsString(script); - } catch (JsonProcessingException e) { + requestBody = JSON_MAPPER.writeValueAsString(script); + } catch (JacksonException e) { throw new IllegalArgumentException("Failed to serialize JSON object: ", e); } @@ -260,7 +246,7 @@ public ExternalScriptTO createExternalScript(ExternalScriptTO script) throws IOE HttpResponse response = client.send(request, HttpResponse.BodyHandlers.ofString()); if(checkStatusCode(response.statusCode())) { - return objectMapper.readValue(response.body(), ExternalScriptTO.class); + return JSON_MAPPER.readValue(response.body(), ExternalScriptTO.class); } else { throw new ClientException(response.body(), response.statusCode()); } diff --git a/rest-mvc/clients/src/main/java/com/intuit/tank/clients/util/ClientException.java b/rest-mvc/clients/src/main/java/com/intuit/tank/clients/util/ClientException.java index abbb11b56..b7e85ed73 100644 --- a/rest-mvc/clients/src/main/java/com/intuit/tank/clients/util/ClientException.java +++ b/rest-mvc/clients/src/main/java/com/intuit/tank/clients/util/ClientException.java @@ -7,8 +7,8 @@ */ package com.intuit.tank.clients.util; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.core.JsonProcessingException; +import tools.jackson.databind.ObjectMapper; +import tools.jackson.core.JacksonException; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -43,7 +43,7 @@ public String getErrorMessage() { ObjectMapper mapper = new ObjectMapper(); Map map = mapper.readValue(this.message, Map.class); return map.get("message"); - } catch (JsonProcessingException e) { + } catch (JacksonException e) { LOGGER.error("ClientException error processing JSON error message"); return message; } diff --git a/rest-mvc/impl/src/main/java/com/intuit/tank/rest/mvc/rest/controllers/errors/ClientException.java b/rest-mvc/impl/src/main/java/com/intuit/tank/rest/mvc/rest/controllers/errors/ClientException.java index 845216471..45a8b8aa6 100644 --- a/rest-mvc/impl/src/main/java/com/intuit/tank/rest/mvc/rest/controllers/errors/ClientException.java +++ b/rest-mvc/impl/src/main/java/com/intuit/tank/rest/mvc/rest/controllers/errors/ClientException.java @@ -7,8 +7,8 @@ */ package com.intuit.tank.rest.mvc.rest.controllers.errors; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; +import tools.jackson.core.JacksonException; +import tools.jackson.databind.ObjectMapper; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -43,7 +43,7 @@ public String getErrorMessage() { ObjectMapper mapper = new ObjectMapper(); Map map = mapper.readValue(this.message, Map.class); return map.get("message"); - } catch (JsonProcessingException e) { + } catch (JacksonException e) { LOGGER.error("ClientException error processing JSON error message"); return message; } diff --git a/rest-mvc/impl/src/main/java/com/intuit/tank/rest/mvc/rest/util/JobDetailFormatter.java b/rest-mvc/impl/src/main/java/com/intuit/tank/rest/mvc/rest/util/JobDetailFormatter.java index 070457766..eecef5968 100644 --- a/rest-mvc/impl/src/main/java/com/intuit/tank/rest/mvc/rest/util/JobDetailFormatter.java +++ b/rest-mvc/impl/src/main/java/com/intuit/tank/rest/mvc/rest/util/JobDetailFormatter.java @@ -168,7 +168,7 @@ protected static String buildDetails(JobValidator validator, Workload workload, addError(errorSB, "User Percentage of Test Plans does not add up to 100%"); } // datafiles - addProperty(sb, "Data Files", proposedJobInstance.getDataFileVersions().size() == 0 ? "None" : null, + addProperty(sb, "Data Files", proposedJobInstance.getDataFileVersions().isEmpty() ? "None" : null, "emphasis"); DataFileDao dfd = new DataFileDao(); Set datafiles = new HashSet(); @@ -184,7 +184,7 @@ protected static String buildDetails(JobValidator validator, Workload workload, sb.append(BREAK); // variables - addProperty(sb, "Global Variables", proposedJobInstance.getVariables().size() == 0 ? "None" + addProperty(sb, "Global Variables", proposedJobInstance.getVariables().isEmpty() ? "None" : " (Allow Overide: " + proposedJobInstance.isAllowOverride() + ")", "emphasis"); for (Entry entry : proposedJobInstance.getVariables().entrySet()) { @@ -198,13 +198,13 @@ protected static String buildDetails(JobValidator validator, Workload workload, sb.append(BREAK); // notifications - addProperty(sb, "Notifications", proposedJobInstance.getNotificationVersions().size() == 0 ? "None" : null, + addProperty(sb, "Notifications", proposedJobInstance.getNotificationVersions().isEmpty() ? "None" : null, "emphasis"); JobNotificationDao jnd = new JobNotificationDao(); for (EntityVersion ver : proposedJobInstance.getNotificationVersions()) { JobNotification not = jnd.findById(ver.getObjectId()); if (not != null) { - if (not.getLifecycleEvents().size() > 0) { + if (!not.getLifecycleEvents().isEmpty()) { addProperty(sb, " " + not.getRecipientList(), StringUtils.join(not.getLifecycleEvents(), ", ")); } else { addProperty(sb, " " + not.getRecipientList(), "no events selected", "error"); @@ -234,12 +234,12 @@ protected static String buildDetails(JobValidator validator, Workload workload, + TimeUtil.toTimeString(validator.getExpectedTime(plan.getName())), userPercentage != 100 ? "error" : null); - if (plan.getScriptGroups().size() == 0) { + if (plan.getScriptGroups().isEmpty()) { addProperty(sb, " " + plan.getName(), "contains no script groups", "error"); } for (ScriptGroup group : plan.getScriptGroups()) { addProperty(sb, " " + group.getName(), "loop " + group.getLoop() + " time(s)"); - if (group.getScriptGroupSteps().size() == 0) { + if (group.getScriptGroupSteps().isEmpty()) { addProperty(sb, " " + group.getName(), "contains no scripts", "error"); } for (ScriptGroupStep s : group.getScriptGroupSteps()) { @@ -249,7 +249,7 @@ protected static String buildDetails(JobValidator validator, Workload workload, } } sb.append(BREAK); - if (stepsList.size() == 0) { + if (stepsList.isEmpty()) { addError(errorSB, "No scripts defined."); } @@ -294,7 +294,7 @@ protected static String buildDetails(JobValidator validator, Workload workload, sb.insert(0, tsb.toString()); } - if (errorSB.length() > 0) { + if (!errorSB.isEmpty()) { sb = new StringBuilder().append("ERRORS").append(BREAK).append(errorSB.append(BREAK).toString()) .append(sb.toString()); } @@ -358,7 +358,7 @@ private static void addProperty(StringBuilder sb, String key, String value, Stri if (StringUtils.isNotBlank(style)) { sb.append(""); } - sb.append(StringUtils.replace(key, " ", " ")); + sb.append(key.replace(" ", " ")); if (StringUtils.isNotBlank(style)) { sb.append(""); } @@ -367,7 +367,7 @@ private static void addProperty(StringBuilder sb, String key, String value, Stri sb.append(": "); } if (StringUtils.isNotBlank(style)) { - sb.append(""); + sb.append(""); } sb.append(value); if (StringUtils.isNotBlank(style)) { diff --git a/tank_vmManager/src/main/java/com/intuit/tank/perfManager/workLoads/JobManager.java b/tank_vmManager/src/main/java/com/intuit/tank/perfManager/workLoads/JobManager.java index ef6bd5e9b..198965ec7 100644 --- a/tank_vmManager/src/main/java/com/intuit/tank/perfManager/workLoads/JobManager.java +++ b/tank_vmManager/src/main/java/com/intuit/tank/perfManager/workLoads/JobManager.java @@ -32,7 +32,7 @@ import jakarta.inject.Named; import com.amazonaws.xray.contexts.SegmentContextExecutors; -import com.fasterxml.jackson.databind.ObjectMapper; +import tools.jackson.databind.ObjectMapper; import com.intuit.tank.vm.api.enumerated.*; import com.intuit.tank.logging.ControllerLoggingConfig; import org.apache.commons.lang3.StringUtils; @@ -134,9 +134,8 @@ public synchronized void startJob(int id) { } private void sendRequest(String instanceUrl, StandaloneAgentRequest standaloneAgentRequest) { - ObjectMapper objectMapper = new ObjectMapper(); try { - String requestBody = objectMapper + String requestBody = new ObjectMapper() .writeValueAsString(standaloneAgentRequest); var request = HttpRequest.newBuilder() .POST(HttpRequest.BodyPublishers.ofString(requestBody)) @@ -149,7 +148,7 @@ private void sendRequest(String instanceUrl, StandaloneAgentRequest standaloneAg throw new RuntimeException("failed to send standalone start to agent: " + response.toString()); } } catch (IOException | InterruptedException e) { - LOG.error("Error sending StandaloneAgentRequest : " + e.getMessage(), e); + LOG.error("Error sending StandaloneAgentRequest : {}", e.getMessage(), e); } } diff --git a/tank_vmManager/src/main/java/com/intuit/tank/vmManager/environment/amazon/AmazonInstance.java b/tank_vmManager/src/main/java/com/intuit/tank/vmManager/environment/amazon/AmazonInstance.java index ad226044e..3a0e0a727 100644 --- a/tank_vmManager/src/main/java/com/intuit/tank/vmManager/environment/amazon/AmazonInstance.java +++ b/tank_vmManager/src/main/java/com/intuit/tank/vmManager/environment/amazon/AmazonInstance.java @@ -2,8 +2,8 @@ import com.amazonaws.xray.AWSXRay; import com.amazonaws.xray.entities.Subsegment; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; +import tools.jackson.core.JacksonException; +import tools.jackson.databind.ObjectMapper; import com.intuit.tank.dao.JobInstanceDao; import com.intuit.tank.logging.ControllerLoggingConfig; import com.intuit.tank.project.JobInstance; @@ -623,7 +623,7 @@ private String buildUserData(@Nonnull Map userDataMap) { try { String sb = new ObjectMapper().writeValueAsString(userDataMap); return Base64.getEncoder().encodeToString(sb.getBytes()); - } catch (JsonProcessingException e) { + } catch (JacksonException e) { LOG.error("Failed to convert userDataMap to Json: {}", e.getMessage()); } return ""; diff --git a/test_support/pom.xml b/test_support/pom.xml index 0edd97c2e..28b3cedd7 100644 --- a/test_support/pom.xml +++ b/test_support/pom.xml @@ -30,7 +30,7 @@ 3.5.3 4.0.2 5.12.2 - 2.18.3 + 3.1.0 2.31.25 2.0.0 3.14.0 @@ -116,7 +116,7 @@ ${version.software.amazon.awssdk} - com.fasterxml.jackson.core + tools.jackson.core jackson-databind ${version.jackson} diff --git a/test_support/src/test/java/com/intuit/tank/integration_tests/AgentApiIT.java b/test_support/src/test/java/com/intuit/tank/integration_tests/AgentApiIT.java index 911ee72af..936e74528 100644 --- a/test_support/src/test/java/com/intuit/tank/integration_tests/AgentApiIT.java +++ b/test_support/src/test/java/com/intuit/tank/integration_tests/AgentApiIT.java @@ -1,8 +1,7 @@ package com.intuit.tank.integration_tests; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; import org.junit.jupiter.api.*; +import tools.jackson.databind.JsonNode; import java.net.URI; import java.net.http.HttpRequest; @@ -17,7 +16,6 @@ public class AgentApiIT extends BaseIT { private static final String AGENT_ENDPOINT = "/v2/agent"; private static final String JOBS_ENDPOINT = "/v2/jobs"; - private final ObjectMapper objectMapper = new ObjectMapper(); private final List createdJobIds = new ArrayList<>(); private final List testInstanceIds = new ArrayList<>(); @@ -77,7 +75,7 @@ public void testGetAgentSettings() throws Exception { HttpResponse response = httpClient.send(request, BodyHandlers.ofString()); // Assert - assertTrue(response.statusCode() == 200, "Should return HTTP 200 OK"); + assertEquals(200, response.statusCode(), "Should return HTTP 200 OK"); assertEquals("application/xml;charset=UTF-8", response.headers().firstValue("Content-Type").orElse(""), "Should return XML content type"); assertTrue(response.body().contains(""), "Response should contain XML content"); @@ -98,7 +96,7 @@ public void testGetAgentSupportFiles() throws Exception { HttpResponse response = httpClient.send(request, BodyHandlers.ofString()); // Assert - assertTrue(response.statusCode() == 200, "Should return HTTP 200 OK"); + assertEquals(200, response.statusCode(), "Should return HTTP 200 OK"); assertEquals("application/octet-stream", response.headers().firstValue("Content-Type").orElse(""), @@ -124,7 +122,7 @@ public void testGetAgentHeaders() throws Exception { HttpResponse response = httpClient.send(request, BodyHandlers.ofString()); // Assert - assertTrue(response.statusCode() == 200,"Should return HTTP 200 OK"); + assertEquals(200, response.statusCode(), "Should return HTTP 200 OK"); assertEquals("application/xml", response.headers().firstValue("Content-Type").orElse(""), "Should return XML content type"); @@ -148,7 +146,7 @@ public void testGetAgentClients() throws Exception { HttpResponse response = httpClient.send(request, BodyHandlers.ofString()); // Assert - assertTrue(response.statusCode() == 200, "Should return HTTP 200 OK"); + assertEquals(200, response.statusCode(), "Should return HTTP 200 OK"); assertEquals("application/xml", response.headers().firstValue("Content-Type").orElse(""), "Should return XML content type"); assertTrue(response.body().contains(" response = httpClient.send(request, BodyHandlers.ofString()); // Assert - assertTrue(response.statusCode() == 200, "Should return HTTP 200 OK"); - JsonNode responseBody = objectMapper.readTree(response.body()); + assertEquals(200, response.statusCode(), "Should return HTTP 200 OK"); + JsonNode responseBody = jsonMapper.readTree(response.body()); assertTrue(responseBody.has("jobId"), "Response should contain jobId"); assertTrue(responseBody.has("rampTime"), "Response should contain rampTime"); assertTrue(responseBody.has("totalAgents"), "Response should contain totalAgents"); assertTrue(responseBody.has("concurrentUsers"), "Response should contain concurrentUsers"); // Verify the response contains the correct job ID - assertEquals(String.valueOf(jobId), responseBody.get("jobId").asText(), + assertEquals(String.valueOf(jobId), responseBody.get("jobId").asString(), "Response jobId should match the created job ID"); } @@ -256,16 +254,16 @@ private void testGetInstanceStatus(String instanceId) throws Exception { HttpResponse response = httpClient.send(request, BodyHandlers.ofString()); - assertTrue(response.statusCode() == 200,"Should return HTTP 200 OK"); + assertEquals(200, response.statusCode(), "Should return HTTP 200 OK"); - JsonNode instanceStatus = objectMapper.readTree(response.body()); + JsonNode instanceStatus = jsonMapper.readTree(response.body()); assertTrue(instanceStatus.has("instanceId"), "Response should contain instanceId"); assertTrue(instanceStatus.has("jobId"), "Response should contain jobId"); assertTrue(instanceStatus.has("jobStatus"), "Response should contain jobStatus"); assertTrue(instanceStatus.has("vmStatus"), "Response should contain vmStatus"); assertTrue(instanceStatus.has("vmRegion"), "Response should contain vmRegion"); - assertEquals(instanceId, instanceStatus.get("instanceId").asText(), + assertEquals(instanceId, instanceStatus.get("instanceId").asString(), "Instance ID should match requested ID"); } @@ -368,7 +366,7 @@ public void testSetInstanceStatus() throws Exception { HttpResponse response = httpClient.send(request, BodyHandlers.ofString()); // Assert - assertTrue(response.statusCode() == 202); + assertEquals(202, response.statusCode()); } @Test @@ -473,7 +471,7 @@ private int createAndStartTestJob() throws Exception { HttpResponse createResponse = httpClient.send(createRequest, BodyHandlers.ofString()); assertEquals(201, createResponse.statusCode(), "Should create job successfully"); - Map responseBody = objectMapper.readValue(createResponse.body(), Map.class); + Map responseBody = jsonMapper.readValue(createResponse.body(), Map.class); int jobId = Integer.parseInt(responseBody.get("JobId")); createdJobIds.add(jobId); @@ -487,7 +485,7 @@ private int createAndStartTestJob() throws Exception { HttpResponse startResponse = httpClient.send(startRequest, BodyHandlers.ofString()); assertEquals(200, startResponse.statusCode(), "Should start job successfully"); - assertEquals(startResponse.body(), "Starting", "Should return 'Starting' status"); + assertEquals("Starting", startResponse.body(), "Should return 'Starting' status"); return jobId; } @@ -506,13 +504,13 @@ private List getInstanceIdsFromJob(int jobId) throws Exception { HttpResponse response = httpClient.send(request, BodyHandlers.ofString()); - JsonNode vmStatuses = objectMapper.readTree(response.body()); + JsonNode vmStatuses = jsonMapper.readTree(response.body()); if (vmStatuses.has("statuses")) { JsonNode statuses = vmStatuses.get("statuses"); if (statuses.isArray()) { for (JsonNode status : statuses) { if (status.has("instanceId")) { - instanceIds.add(status.get("instanceId").asText()); + instanceIds.add(status.get("instanceId").asString()); } } } diff --git a/test_support/src/test/java/com/intuit/tank/integration_tests/BaseIT.java b/test_support/src/test/java/com/intuit/tank/integration_tests/BaseIT.java index b5b772a3f..82b3fc7d0 100644 --- a/test_support/src/test/java/com/intuit/tank/integration_tests/BaseIT.java +++ b/test_support/src/test/java/com/intuit/tank/integration_tests/BaseIT.java @@ -1,6 +1,5 @@ package com.intuit.tank.integration_tests; -import com.fasterxml.jackson.databind.ObjectMapper; import software.amazon.awssdk.services.ssm.SsmClient; import software.amazon.awssdk.services.ssm.model.GetParameterRequest; import software.amazon.awssdk.services.ssm.model.GetParameterResponse; @@ -12,6 +11,7 @@ import java.util.Properties; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; +import tools.jackson.databind.json.JsonMapper; public class BaseIT { @@ -31,7 +31,7 @@ public class BaseIT { protected static final String ACCEPT_VALUE = "application/json"; protected static final HttpClient httpClient = getHttpClient(); - protected final ObjectMapper objectMapper = new ObjectMapper(); + protected final JsonMapper jsonMapper = new JsonMapper(); protected static HttpClient getHttpClient() { diff --git a/test_support/src/test/java/com/intuit/tank/integration_tests/DataFileApiIT.java b/test_support/src/test/java/com/intuit/tank/integration_tests/DataFileApiIT.java index c2ae5d4a0..11855c8c6 100644 --- a/test_support/src/test/java/com/intuit/tank/integration_tests/DataFileApiIT.java +++ b/test_support/src/test/java/com/intuit/tank/integration_tests/DataFileApiIT.java @@ -1,10 +1,8 @@ package com.intuit.tank.integration_tests; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; +import tools.jackson.databind.JsonNode; import org.junit.jupiter.api.*; -import java.io.ByteArrayInputStream; import java.io.IOException; import java.net.URI; import java.net.http.HttpRequest; @@ -19,7 +17,6 @@ public class DataFileApiIT extends BaseIT { private static final String DATAFILES_ENDPOINT = "/v2/datafiles"; - private final ObjectMapper objectMapper = new ObjectMapper(); private final List createdDataFileIds = new ArrayList<>(); @AfterEach @@ -79,13 +76,13 @@ public void testGetAllDataFiles_shouldReturnDataFilesList() throws Exception { // Assert assertEquals(200, response.statusCode(), "Should return HTTP 200 OK"); - JsonNode responseBody = objectMapper.readTree(response.body()); + JsonNode responseBody = jsonMapper.readTree(response.body()); assertTrue(responseBody.has("dataFiles"), "Response should contain 'dataFiles' field"); JsonNode dataFiles = responseBody.get("dataFiles"); assertTrue(dataFiles.isArray(), "DataFiles should be an array"); - assertTrue(dataFiles.size() > 0, "Should have at least one data file to test with"); + assertFalse(dataFiles.isEmpty(), "Should have at least one data file to test with"); // Validate data file structure based on provided sample JsonNode firstDataFile = dataFiles.get(0); assertTrue(firstDataFile.has("id"), "DataFile should have 'id' field"); @@ -98,11 +95,11 @@ public void testGetAllDataFiles_shouldReturnDataFilesList() throws Exception { // Validate data types assertTrue(firstDataFile.get("id").isInt(), "DataFile ID should be integer"); - assertTrue(firstDataFile.get("name").isTextual(), "DataFile name should be string"); - assertTrue(firstDataFile.get("creator").isTextual(), "DataFile creator should be string"); + assertTrue(firstDataFile.get("name").isString(), "DataFile name should be string"); + assertTrue(firstDataFile.get("creator").isString(), "DataFile creator should be string"); // Validate dataUrl format - String dataUrl = firstDataFile.get("dataUrl").asText(); + String dataUrl = firstDataFile.get("dataUrl").asString(); assertTrue(dataUrl.contains("/v2/datafiles/content?id="), "DataUrl should contain correct endpoint"); // Validate that dataUrl contains the same ID as the data file @@ -128,10 +125,10 @@ public void testGetAllDataFileNames_shouldReturnDataFileNamesMap() throws Except // Assert assertEquals(200, response.statusCode(), "Should return HTTP 200 OK"); - Map dataFileNames = objectMapper.readValue(response.body(), Map.class); + Map dataFileNames = jsonMapper.readValue(response.body(), Map.class); assertNotNull(dataFileNames, "DataFile names map should not be null"); - assertTrue(dataFileNames.size() > 0, "Should have at least one data file to test with"); + assertFalse(dataFileNames.isEmpty(), "Should have at least one data file to test with"); // Validate that keys are numeric (data file IDs) and values are strings (names) for (Map.Entry entry : dataFileNames.entrySet()) { assertDoesNotThrow(() -> Integer.parseInt(entry.getKey()), @@ -156,12 +153,12 @@ public void testGetSpecificDataFile() throws Exception { HttpResponse getAllResponse = httpClient.send(getAllRequest, BodyHandlers.ofString()); assertEquals(200, getAllResponse.statusCode(), "Should get all data files successfully"); - JsonNode responseBody = objectMapper.readTree(getAllResponse.body()); + JsonNode responseBody = jsonMapper.readTree(getAllResponse.body()); JsonNode dataFiles = responseBody.get("dataFiles"); - - assertTrue(dataFiles.size() > 0, "Should have at least one data file to test with"); + + assertFalse(dataFiles.isEmpty(), "Should have at least one data file to test with"); int dataFileId = dataFiles.get(0).get("id").asInt(); - String expectedName = dataFiles.get(0).get("name").asText(); + String expectedName = dataFiles.get(0).get("name").asString(); // Act - Get specific data file HttpRequest request = HttpRequest.newBuilder() @@ -177,9 +174,9 @@ public void testGetSpecificDataFile() throws Exception { // Assert assertEquals(200, response.statusCode(), "Should return HTTP 200 OK"); - JsonNode dataFile = objectMapper.readTree(response.body()); + JsonNode dataFile = jsonMapper.readTree(response.body()); assertEquals(dataFileId, dataFile.get("id").asInt(), "Should return correct data file ID"); - assertEquals(expectedName, dataFile.get("name").asText(), "Should return correct data file name"); + assertEquals(expectedName, dataFile.get("name").asString(), "Should return correct data file name"); assertTrue(dataFile.has("created"), "DataFile should have created timestamp"); assertTrue(dataFile.has("modified"), "DataFile should have modified timestamp"); assertTrue(dataFile.has("creator"), "DataFile should have creator"); @@ -223,7 +220,7 @@ public void testGetDataFileContent() throws Exception { HttpResponse response = httpClient.send(request, BodyHandlers.ofString()); // Assert - assertEquals(response.statusCode(), 200); + assertEquals(200, response.statusCode()); assertNotNull(response.body(), "Content should not be null"); assertEquals("text/plain;charset=UTF-8", response.headers().firstValue("Content-Type").orElse(""), @@ -247,7 +244,7 @@ public void testDownloadDataFile() throws Exception { System.out.println(response.body()); // Assert - assertEquals(response.statusCode(), 200); + assertEquals(200, response.statusCode()); assertEquals("application/octet-stream", response.headers().firstValue("Content-Type").orElse(""), "Should return application/octet-stream content type"); @@ -309,7 +306,7 @@ public void testUploadDataFile_shouldCreateNewDataFile() throws Exception { // Assert assertEquals(201, response.statusCode(), "Should return HTTP 201 Created"); - Map responseBody = objectMapper.readValue(response.body(), Map.class); + Map responseBody = jsonMapper.readValue(response.body(), Map.class); assertNotNull(responseBody.get("datafileId"), "Response should contain datafileId"); assertTrue(responseBody.get("message").contains("uploaded"), "Response should indicate successful upload"); @@ -342,7 +339,7 @@ public void testUploadDataFileWithExistingId_shouldOverwriteDataFile() throws Ex HttpResponse createResponse = httpClient.send(createRequest, BodyHandlers.ofString()); assertEquals(201, createResponse.statusCode(), "Should create initial data file"); - Map createResponseBody = objectMapper.readValue(createResponse.body(), Map.class); + Map createResponseBody = jsonMapper.readValue(createResponse.body(), Map.class); int dataFileId = Integer.parseInt(createResponseBody.get("datafileId")); createdDataFileIds.add(dataFileId); @@ -366,7 +363,7 @@ public void testUploadDataFileWithExistingId_shouldOverwriteDataFile() throws Ex // Assert assertEquals(201, updateResponse.statusCode(), "Should return HTTP 201 Created for overwrite"); - Map updateResponseBody = objectMapper.readValue(updateResponse.body(), Map.class); + Map updateResponseBody = jsonMapper.readValue(updateResponse.body(), Map.class); assertEquals(String.valueOf(dataFileId), updateResponseBody.get("datafileId"), "Should return same datafileId for overwrite"); assertTrue(updateResponseBody.get("message").contains("overwritten with new datafile"), @@ -394,7 +391,7 @@ public void testDeleteDataFile_shouldRemoveDataFile() throws Exception { HttpResponse createResponse = httpClient.send(createRequest, BodyHandlers.ofString()); assertEquals(201, createResponse.statusCode(), "Should create data file for deletion test"); - Map createResponseBody = objectMapper.readValue(createResponse.body(), Map.class); + Map createResponseBody = jsonMapper.readValue(createResponse.body(), Map.class); int dataFileId = Integer.parseInt(createResponseBody.get("datafileId")); // Act - Delete the data file @@ -532,8 +529,8 @@ private void verifyDataFileExists(int dataFileId, String expectedName) throws Ex HttpResponse response = httpClient.send(request, BodyHandlers.ofString()); assertEquals(200, response.statusCode(), "Data file should exist after creation"); - JsonNode dataFile = objectMapper.readTree(response.body()); + JsonNode dataFile = jsonMapper.readTree(response.body()); assertEquals(dataFileId, dataFile.get("id").asInt(), "Data file ID should match"); - assertEquals(expectedName, dataFile.get("name").asText(), "Data file name should match"); + assertEquals(expectedName, dataFile.get("name").asString(), "Data file name should match"); } } diff --git a/test_support/src/test/java/com/intuit/tank/integration_tests/FilterApiIT.java b/test_support/src/test/java/com/intuit/tank/integration_tests/FilterApiIT.java index 8cee38577..b387fbcca 100644 --- a/test_support/src/test/java/com/intuit/tank/integration_tests/FilterApiIT.java +++ b/test_support/src/test/java/com/intuit/tank/integration_tests/FilterApiIT.java @@ -1,7 +1,6 @@ package com.intuit.tank.integration_tests; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; +import tools.jackson.databind.JsonNode; import org.junit.jupiter.api.*; import java.net.URI; @@ -16,7 +15,6 @@ public class FilterApiIT extends BaseIT { private static final String FILTERS_ENDPOINT = "/v2/filters"; - private final ObjectMapper objectMapper = new ObjectMapper(); @Test @Tag("integration") @@ -55,12 +53,12 @@ public void testGetAllFilters() throws Exception { // Assert assertEquals(200, response.statusCode(), "Should return HTTP 200 OK"); - JsonNode responseBody = objectMapper.readTree(response.body()); + JsonNode responseBody = jsonMapper.readTree(response.body()); assertTrue(responseBody.has("filters"), "Response should contain 'filters' field"); JsonNode filters = responseBody.get("filters"); assertTrue(filters.isArray(), "Filters should be an array"); - assertTrue(filters.size() > 0, "Should contain at least one filter"); + assertFalse(filters.isEmpty(), "Should contain at least one filter"); // Validate specific known filters from the response boolean foundTokenSubmitPath = false; @@ -75,34 +73,34 @@ public void testGetAllFilters() throws Exception { // Validate data types assertTrue(filter.get("id").isInt(), "Filter ID should be integer"); - assertTrue(filter.get("name").isTextual(), "Filter name should be string"); + assertTrue(filter.get("name").isString(), "Filter name should be string"); assertTrue(filter.get("id").asInt() > 0, "Filter ID should be positive"); - assertFalse(filter.get("name").asText().trim().isEmpty(), "Filter name should not be empty"); + assertFalse(filter.get("name").asString().trim().isEmpty(), "Filter name should not be empty"); // ProductName can be null, empty string, or actual value JsonNode productNameNode = filter.get("productName"); - assertTrue(productNameNode.isTextual() || productNameNode.isNull(), + assertTrue(productNameNode.isString() || productNameNode.isNull(), "ProductName should be string or null"); // Check for specific known filters int filterId = filter.get("id").asInt(); - String filterName = filter.get("name").asText(); + String filterName = filter.get("name").asString(); if (filterId == 1 && "Token SUBMIT PATH".equals(filterName)) { foundTokenSubmitPath = true; - assertEquals("", filter.get("productName").asText(), + assertEquals("", filter.get("productName").asString(), "Token SUBMIT PATH should have empty productName"); } if (filterId == 2 && "Remove TTO flash".equals(filterName)) { foundRemoveTTOFlash = true; - assertEquals("ShowAll", filter.get("productName").asText(), + assertEquals("ShowAll", filter.get("productName").asString(), "Remove TTO flash should have 'ShowAll' productName"); } if (filterId == 5 && "Intuit Domain Only".equals(filterName)) { foundIntuitDomainOnly = true; - assertEquals("AllProducts", filter.get("productName").asText(), + assertEquals("AllProducts", filter.get("productName").asString(), "Intuit Domain Only should have 'AllProducts' productName"); } } @@ -130,7 +128,7 @@ public void testGetAllFilters() throws Exception { for (JsonNode filter : filters) { JsonNode productNameNode = filter.get("productName"); if (!productNameNode.isNull()) { - productNames.add(productNameNode.asText()); + productNames.add(productNameNode.asString()); } } assertTrue(productNames.contains("ShowAll"), "Should have filters with 'ShowAll' productName"); @@ -156,12 +154,12 @@ public void testGetAllFilterGroups() throws Exception { // Assert assertEquals(200, response.statusCode(), "Should return HTTP 200 OK"); - JsonNode responseBody = objectMapper.readTree(response.body()); + JsonNode responseBody = jsonMapper.readTree(response.body()); assertTrue(responseBody.has("filterGroups"), "Response should contain 'filterGroups' field"); JsonNode filterGroups = responseBody.get("filterGroups"); assertTrue(filterGroups.isArray(), "Filter groups should be an array"); - assertTrue(filterGroups.size() > 0, "Should contain at least one filter group"); + assertFalse(filterGroups.isEmpty(), "Should contain at least one filter group"); // Validate specific known filter groups from the response boolean foundTTOProdCapacity = false; @@ -177,28 +175,28 @@ public void testGetAllFilterGroups() throws Exception { // Validate data types assertTrue(filterGroup.get("id").isInt(), "Filter group ID should be integer"); - assertTrue(filterGroup.get("name").isTextual(), "Filter group name should be string"); + assertTrue(filterGroup.get("name").isString(), "Filter group name should be string"); assertTrue(filterGroup.get("id").asInt() > 0, "Filter group ID should be positive"); - assertFalse(filterGroup.get("name").asText().trim().isEmpty(), "Filter group name should not be empty"); + assertFalse(filterGroup.get("name").asString().trim().isEmpty(), "Filter group name should not be empty"); // ProductName can be null, empty string, or actual value JsonNode productNameNode = filterGroup.get("productName"); - assertTrue(productNameNode.isTextual() || productNameNode.isNull(), + assertTrue(productNameNode.isString() || productNameNode.isNull(), "ProductName should be string or null"); // Check for specific known filter groups int filterGroupId = filterGroup.get("id").asInt(); - String filterGroupName = filterGroup.get("name").asText(); + String filterGroupName = filterGroup.get("name").asString(); if (filterGroupId == 2 && "TTO Prod Capacity".equals(filterGroupName)) { foundTTOProdCapacity = true; - assertEquals("TTO", filterGroup.get("productName").asText(), + assertEquals("TTO", filterGroup.get("productName").asString(), "TTO Prod Capacity should have 'TTO' productName"); } if (filterGroupId == 3 && "AutomationBaseline".equals(filterGroupName)) { foundAutomationBaseline = true; - assertEquals("TTO", filterGroup.get("productName").asText(), + assertEquals("TTO", filterGroup.get("productName").asString(), "AutomationBaseline should have 'TTO' productName"); } } @@ -224,7 +222,7 @@ public void testGetAllFilterGroups() throws Exception { boolean foundEmptyProductName = false; for (JsonNode filterGroup : filterGroups) { JsonNode productNameNode = filterGroup.get("productName"); - if (!productNameNode.isNull() && productNameNode.asText().isEmpty()) { + if (!productNameNode.isNull() && productNameNode.asString().isEmpty()) { foundEmptyProductName = true; break; } @@ -236,7 +234,7 @@ public void testGetAllFilterGroups() throws Exception { for (JsonNode filterGroup : filterGroups) { JsonNode productNameNode = filterGroup.get("productName"); if (!productNameNode.isNull()) { - productNames.add(productNameNode.asText()); + productNames.add(productNameNode.asString()); } } assertTrue(productNames.contains("TTO"), "Should have filter groups with 'TTO' productName"); @@ -263,7 +261,7 @@ public void testGetSpecificFilter() throws Exception { // Assert assertEquals(200, response.statusCode(), "Should return HTTP 200 OK"); - JsonNode filter = objectMapper.readTree(response.body()); + JsonNode filter = jsonMapper.readTree(response.body()); assertEquals(filterId, filter.get("id").asInt(), "Should return correct filter ID"); assertTrue(filter.has("name"), "Filter should have name field"); assertTrue(filter.has("productName"), "Filter should have productName field"); @@ -309,7 +307,7 @@ public void testGetSpecificFilterGroup() throws Exception { // Assert assertEquals(200, response.statusCode(), "Should return HTTP 200 OK"); - JsonNode filterGroup = objectMapper.readTree(response.body()); + JsonNode filterGroup = jsonMapper.readTree(response.body()); assertEquals(filterGroupId, filterGroup.get("id").asInt(), "Should return correct filter group ID"); assertTrue(filterGroup.has("name"), "Filter group should have name field"); assertTrue(filterGroup.has("productName"), "Filter group should have productName field"); @@ -354,7 +352,7 @@ public void testApplyFiltersToScript_shouldTransformScript() throws Exception { HttpResponse copyResponse = httpClient.send(copyRequest, BodyHandlers.ofString()); assertEquals(201, copyResponse.statusCode(), "Should successfully copy script"); - Map responseBody = objectMapper.readValue(copyResponse.body(), Map.class); + Map responseBody = jsonMapper.readValue(copyResponse.body(), Map.class); assertNotNull(responseBody.get("message"), "Copy response should contain message"); String message = responseBody.get("message"); @@ -392,7 +390,7 @@ public void testApplyFiltersToScript_shouldTransformScript() throws Exception { HttpResponse response = httpClient.send(applyFiltersRequest, BodyHandlers.ofString()); // Assert - assertTrue(response.statusCode() == 200, "Should return HTTP 200 OK for successful filter application"); + assertEquals(200, response.statusCode(), "Should return HTTP 200 OK for successful filter application"); assertTrue(response.body().contains("applied") || response.body().contains("success") || response.body().contains("filter"), "Response should indicate successful filter application"); } finally { diff --git a/test_support/src/test/java/com/intuit/tank/integration_tests/JobApiIT.java b/test_support/src/test/java/com/intuit/tank/integration_tests/JobApiIT.java index f000b50e0..b980eb587 100644 --- a/test_support/src/test/java/com/intuit/tank/integration_tests/JobApiIT.java +++ b/test_support/src/test/java/com/intuit/tank/integration_tests/JobApiIT.java @@ -1,7 +1,6 @@ package com.intuit.tank.integration_tests; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; +import tools.jackson.databind.JsonNode; import org.junit.jupiter.api.*; import java.net.URI; @@ -16,7 +15,6 @@ public class JobApiIT extends BaseIT { private static final String JOBS_ENDPOINT = "/v2/jobs"; - private final ObjectMapper objectMapper = new ObjectMapper(); private final List createdJobIds = new ArrayList<>(); @AfterEach @@ -77,13 +75,13 @@ public void testGetAllJobs_shouldReturnJobsList() throws Exception { // Assert assertEquals(200, response.statusCode(), "Should return HTTP 200 OK"); - JsonNode responseBody = objectMapper.readTree(response.body()); + JsonNode responseBody = jsonMapper.readTree(response.body()); assertTrue(responseBody.has("jobs"), "Response should contain 'jobs' field"); JsonNode jobs = responseBody.get("jobs"); assertTrue(jobs.isArray(), "Jobs should be an array"); - if (jobs.size() > 0) { + if (!jobs.isEmpty()) { // Validate job structure JsonNode firstJob = jobs.get(0); assertTrue(firstJob.has("id"), "Job should have 'id' field"); @@ -93,8 +91,8 @@ public void testGetAllJobs_shouldReturnJobsList() throws Exception { // Validate data types assertTrue(firstJob.get("id").isInt(), "Job ID should be integer"); - assertTrue(firstJob.get("name").isTextual(), "Job name should be string"); - assertTrue(firstJob.get("status").isTextual(), "Job status should be string"); + assertTrue(firstJob.get("name").isString(), "Job name should be string"); + assertTrue(firstJob.get("status").isString(), "Job status should be string"); assertTrue(firstJob.get("numUsers").isInt(), "Job numUsers should be integer"); } } @@ -119,7 +117,7 @@ public void testGetJobsByProject() throws Exception { // Assert assertEquals(200, response.statusCode(), "Should return HTTP 200 OK"); - JsonNode responseBody = objectMapper.readTree(response.body()); + JsonNode responseBody = jsonMapper.readTree(response.body()); assertTrue(responseBody.has("jobs"), "Response should contain 'jobs' field"); JsonNode jobs = responseBody.get("jobs"); @@ -174,7 +172,7 @@ public void testCreateJob_shouldCreateAndReturnJobId() throws Exception { // Assert assertEquals(201, response.statusCode(), "Should return HTTP 201 Created"); - Map responseBody = objectMapper.readValue(response.body(), Map.class); + Map responseBody = jsonMapper.readValue(response.body(), Map.class); assertNotNull(responseBody.get("JobId"), "Response should contain JobId"); assertTrue(responseBody.get("status").contains("created"), "Response should indicate job creation"); @@ -238,7 +236,7 @@ public void testGetSpecificJob_shouldReturnJobDetails() throws Exception { // Assert assertEquals(200, response.statusCode(), "Should return HTTP 200 OK"); - JsonNode job = objectMapper.readTree(response.body()); + JsonNode job = jsonMapper.readTree(response.body()); assertEquals(jobId, job.get("id").asInt(), "Should return correct job ID"); assertTrue(job.has("name"), "Job should have name field"); assertTrue(job.has("status"), "Job should have status field"); @@ -261,9 +259,9 @@ public void testGetAllJobStatus_shouldReturnStatusList() throws Exception { HttpResponse response = httpClient.send(request, BodyHandlers.ofString()); // Assert - assertTrue(response.statusCode() == 200); + assertEquals(200, response.statusCode()); - List> statuses = objectMapper.readValue(response.body(), List.class); + List> statuses = jsonMapper.readValue(response.body(), List.class); assertNotNull(statuses, "Status list should not be null"); if (!statuses.isEmpty()) { @@ -315,7 +313,7 @@ private int createTestJob() throws Exception { HttpResponse response = httpClient.send(request, BodyHandlers.ofString()); assertEquals(201, response.statusCode(), "Should create test job successfully"); - Map responseBody = objectMapper.readValue(response.body(), Map.class); + Map responseBody = jsonMapper.readValue(response.body(), Map.class); int jobId = Integer.parseInt(responseBody.get("JobId")); createdJobIds.add(jobId); @@ -335,7 +333,7 @@ private void verifyJobInProjectList(int jobId, int projectId) throws Exception { HttpResponse response = httpClient.send(request, BodyHandlers.ofString()); assertEquals(200, response.statusCode(), "Should return HTTP 200 OK"); - JsonNode responseBody = objectMapper.readTree(response.body()); + JsonNode responseBody = jsonMapper.readTree(response.body()); JsonNode jobs = responseBody.get("jobs"); boolean jobFound = false; @@ -362,7 +360,7 @@ private void verifyJobInAllJobs(int jobId) throws Exception { HttpResponse response = httpClient.send(request, BodyHandlers.ofString()); assertEquals(200, response.statusCode(), "Should return HTTP 200 OK"); - JsonNode responseBody = objectMapper.readTree(response.body()); + JsonNode responseBody = jsonMapper.readTree(response.body()); JsonNode jobs = responseBody.get("jobs"); boolean jobFound = false; @@ -390,10 +388,10 @@ private void verifyJobExists(int jobId, String expectedName, int numUsers) throw assertEquals(200, response.statusCode(), "Job should exist after creation"); System.out.println(response.body()); - JsonNode job = objectMapper.readTree(response.body()); + JsonNode job = jsonMapper.readTree(response.body()); assertEquals(jobId, job.get("id").asInt(), "Job ID should match"); - assertEquals(expectedName, job.get("name").asText(), "Job name should match"); - assertEquals(job.get("status").asText(), "Created", "Job status should be 'Created'"); + assertEquals(expectedName, job.get("name").asString(), "Job name should match"); + assertEquals("Created", job.get("status").asString(), "Job status should be 'Created'"); assertEquals(job.get("numUsers").asInt(), numUsers, "Job numUsers should match expected value"); } @@ -414,7 +412,7 @@ public void testGetJobStatus_shouldReturnStatusForSpecificJob() throws Exception HttpResponse response = httpClient.send(request, BodyHandlers.ofString()); // Assert - assertEquals(response.statusCode(), 200); + assertEquals(200, response.statusCode()); String status = response.body(); assertNotNull(status, "Status should not be null"); @@ -446,7 +444,7 @@ public void testGetJobVMStatuses_shouldReturnVMStatusesForJob() throws Exception "Should return HTTP 200 OK or 404 Not Found for job VM statuses"); if (response.statusCode() == 200) { - JsonNode vmStatuses = objectMapper.readTree(response.body()); + JsonNode vmStatuses = jsonMapper.readTree(response.body()); assertTrue(vmStatuses.has("vmStatuses"), "Response should contain vmStatuses field"); assertTrue(vmStatuses.get("vmStatuses").isArray(), "VM statuses should be an array"); } @@ -517,7 +515,7 @@ public void testDownloadJobHarnessFile_shouldReturnHarnessFile() throws Exceptio HttpResponse response = httpClient.send(request, BodyHandlers.ofString()); // Assert - assertEquals(response.statusCode(), 200); + assertEquals(200, response.statusCode()); assertEquals("application/xml", response.headers().firstValue("Content-Type").orElse(""), "Should return XML content type"); assertTrue(response.headers().firstValue("Content-Disposition").isPresent(), @@ -655,7 +653,7 @@ public void testCreateJobWithDifferentWorkloadTypes_shouldCreateStandardWorkload // Assert assertEquals(201, response.statusCode(), "Should create standard workload job successfully"); - Map responseBody = objectMapper.readValue(response.body(), Map.class); + Map responseBody = jsonMapper.readValue(response.body(), Map.class); assertNotNull(responseBody.get("JobId"), "Response should contain JobId"); // Store for cleanup diff --git a/test_support/src/test/java/com/intuit/tank/integration_tests/ProjectApiIT.java b/test_support/src/test/java/com/intuit/tank/integration_tests/ProjectApiIT.java index 77e477fbd..a9be2e597 100644 --- a/test_support/src/test/java/com/intuit/tank/integration_tests/ProjectApiIT.java +++ b/test_support/src/test/java/com/intuit/tank/integration_tests/ProjectApiIT.java @@ -1,6 +1,6 @@ package com.intuit.tank.integration_tests; -import com.fasterxml.jackson.databind.JsonNode; +import tools.jackson.databind.JsonNode; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Tag; @@ -25,6 +25,7 @@ import java.util.ArrayList; import java.util.List; import java.util.Map; +import java.util.Objects; import java.util.regex.Pattern; import static org.junit.jupiter.api.Assertions.*; @@ -88,12 +89,12 @@ public void testGetAllProjects_shouldReturnProjectsList() throws Exception { // Assert assertEquals(200, response.statusCode(), "Should return HTTP 200 OK"); - JsonNode responseBody = objectMapper.readTree(response.body()); + JsonNode responseBody = jsonMapper.readTree(response.body()); assertTrue(responseBody.has("projects"), "Response should contain 'projects' field"); JsonNode projects = responseBody.get("projects"); assertTrue(projects.isArray(), "Projects should be an array"); - assertTrue(projects.size() > 0, "Should contain at least one project"); + assertFalse(projects.isEmpty(), "Should contain at least one project"); // Validate project structure JsonNode firstProject = projects.get(0); @@ -117,7 +118,7 @@ public void testGetProjectNames_shouldReturnProjectNamesMap() throws Exception { HttpResponse response = httpClient.send(request, BodyHandlers.ofString()); assertEquals(200, response.statusCode(), "Should return HTTP 200 OK"); - Map projectNames = objectMapper.readValue(response.body(), Map.class); + Map projectNames = jsonMapper.readValue(response.body(), Map.class); assertTrue(projectNames.containsValue("Simple Endurance Project"), "Response should contain 'Simple Endurance Project'"); assertTrue(projectNames.containsValue("PDS_Perf_Baseline"), @@ -126,17 +127,17 @@ public void testGetProjectNames_shouldReturnProjectNamesMap() throws Exception { assertTrue(projectNames.size() > 10, "Response should contain multiple projects (at least 10)"); - assertEquals(298, Integer.parseInt(projectNames.entrySet().stream() + assertEquals(298, Integer.parseInt(Objects.requireNonNull(projectNames.entrySet().stream() .filter(entry -> "Simple Endurance Project".equals(entry.getValue())) .map(Map.Entry::getKey) .findFirst() - .orElse(null)), "Should find project ID for 'Simple Endurance Project'"); + .orElse(null))), "Should find project ID for 'Simple Endurance Project'"); - assertEquals(367, Integer.parseInt(projectNames.entrySet().stream() - .filter(entry -> "PDS_Perf_Baseline".equals(entry.getValue())) - .map(Map.Entry::getKey) - .findFirst() - .orElse(null)), "Should find project ID for 'PDS_Perf_Baseline'"); + assertEquals(367, Integer.parseInt(Objects.requireNonNull(projectNames.entrySet().stream() + .filter(entry -> "PDS_Perf_Baseline".equals(entry.getValue())) + .map(Map.Entry::getKey) + .findFirst() + .orElse(null))), "Should find project ID for 'PDS_Perf_Baseline'"); } @Test @@ -159,9 +160,9 @@ public void testGetProjectById_shouldReturnSpecificProject() throws Exception { // Assert assertEquals(200, response.statusCode(), "Should return HTTP 200 OK"); - JsonNode project = objectMapper.readTree(response.body()); + JsonNode project = jsonMapper.readTree(response.body()); assertEquals(projectId, project.get("id").asInt(), "Should return correct project ID"); - assertEquals("Simple Endurance Project", project.get("name").asText(), "Should return correct project name"); + assertEquals("Simple Endurance Project", project.get("name").asString(), "Should return correct project name"); assertTrue(project.has("creator"), "Project should have creator field"); assertTrue(project.has("created"), "Project should have created field"); assertTrue(project.has("modified"), "Project should have modified field"); @@ -210,9 +211,9 @@ public void testCreateProject_shouldCreateAndReturnProject() throws Exception { // Assert assertEquals(201, response.statusCode(), "Should return HTTP 201 Created"); - Map responseBody = objectMapper.readValue(response.body(), Map.class); + Map responseBody = jsonMapper.readValue(response.body(), Map.class); assertNotNull(responseBody.get("ProjectId"), "Response should contain ProjectId"); - assertEquals(responseBody.get("status"), ("Created"), "Response should indicate project was created"); + assertEquals(("Created"), responseBody.get("status"), "Response should indicate project was created"); // Store for cleanup int projectId = Integer.parseInt(responseBody.get("ProjectId")); @@ -244,7 +245,7 @@ public void testCreateProjectWithComplexConfiguration_shouldCreateComplexProject // Assert assertEquals(201, response.statusCode(), "Should return HTTP 201 Created"); - Map responseBody = objectMapper.readValue(response.body(), Map.class); + Map responseBody = jsonMapper.readValue(response.body(), Map.class); assertNotNull(responseBody.get("ProjectId"), "Response should contain ProjectId"); // Store for cleanup @@ -280,7 +281,7 @@ public void testUpdateProject_shouldUpdateExistingProject() throws Exception { // Assert assertEquals(200, response.statusCode(), "Should return HTTP 200 OK"); - Map responseBody = objectMapper.readValue(response.body(), Map.class); + Map responseBody = jsonMapper.readValue(response.body(), Map.class); assertEquals(String.valueOf(projectId), responseBody.get("ProjectId"), "Response should contain correct ProjectId"); assertTrue(responseBody.get("status").contains("Updated"), "Response should indicate project was updated"); @@ -575,7 +576,7 @@ private int createTestProject(String projectName) throws Exception { HttpResponse response = httpClient.send(request, BodyHandlers.ofString()); assertEquals(201, response.statusCode(), "Should create project successfully"); - Map responseBody = objectMapper.readValue(response.body(), Map.class); + Map responseBody = jsonMapper.readValue(response.body(), Map.class); int projectId = Integer.parseInt(responseBody.get("ProjectId")); createdProjectIds.add(projectId); @@ -594,9 +595,9 @@ private void verifyProjectExists(int projectId, String expectedName) throws Exce HttpResponse response = httpClient.send(request, BodyHandlers.ofString()); assertEquals(200, response.statusCode(), "Project should exist"); - JsonNode project = objectMapper.readTree(response.body()); + JsonNode project = jsonMapper.readTree(response.body()); assertEquals(projectId, project.get("id").asInt(), "Should return correct project ID"); - assertEquals(expectedName, project.get("name").asText(), "Should return correct project name"); + assertEquals(expectedName, project.get("name").asString(), "Should return correct project name"); } private void verifyComplexProjectConfiguration(int projectId, String expectedName) throws Exception { @@ -611,20 +612,20 @@ private void verifyComplexProjectConfiguration(int projectId, String expectedNam HttpResponse response = httpClient.send(request, BodyHandlers.ofString()); assertEquals(200, response.statusCode(), "Project should exist"); - JsonNode project = objectMapper.readTree(response.body()); + JsonNode project = jsonMapper.readTree(response.body()); assertEquals(projectId, project.get("id").asInt(), "Should return correct project ID"); - assertEquals(expectedName, project.get("name").asText(), "Should return correct project name"); - assertEquals("Complex Integration Test Product", project.get("productName").asText(), + assertEquals(expectedName, project.get("name").asString(), "Should return correct project name"); + assertEquals("Complex Integration Test Product", project.get("productName").asString(), "Should have correct product name"); // Verify workload configuration - if (project.has("workloads") && project.get("workloads").isArray() && project.get("workloads").size() > 0) { + if (project.has("workloads") && project.get("workloads").isArray() && !project.get("workloads").isEmpty()) { JsonNode workload = project.get("workloads").get(0); assertTrue(workload.has("jobConfiguration"), "Workload should have job configuration"); JsonNode jobConfig = workload.get("jobConfiguration"); - assertEquals("120s", jobConfig.get("rampTimeExpression").asText(), "Should have correct ramp time"); - assertEquals("600s", jobConfig.get("simulationTimeExpression").asText(), "Should have correct simulation time"); + assertEquals("120s", jobConfig.get("rampTimeExpression").asString(), "Should have correct ramp time"); + assertEquals("600s", jobConfig.get("simulationTimeExpression").asString(), "Should have correct simulation time"); } } diff --git a/test_support/src/test/java/com/intuit/tank/integration_tests/ScriptApiIT.java b/test_support/src/test/java/com/intuit/tank/integration_tests/ScriptApiIT.java index 7aad6b4d7..a48818bed 100644 --- a/test_support/src/test/java/com/intuit/tank/integration_tests/ScriptApiIT.java +++ b/test_support/src/test/java/com/intuit/tank/integration_tests/ScriptApiIT.java @@ -1,6 +1,6 @@ package com.intuit.tank.integration_tests; -import com.fasterxml.jackson.databind.JsonNode; +import tools.jackson.databind.JsonNode; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; @@ -80,12 +80,12 @@ public void testGetAllScripts_shouldReturnScriptsList() throws Exception { // Assert assertEquals(200, response.statusCode(), "Should return HTTP 200 OK"); - JsonNode responseBody = objectMapper.readTree(response.body()); + JsonNode responseBody = jsonMapper.readTree(response.body()); assertTrue(responseBody.has("scripts"), "Response should contain 'scripts' field"); JsonNode scripts = responseBody.get("scripts"); assertTrue(scripts.isArray(), "Scripts should be an array"); - assertTrue(scripts.size() > 0, "Should contain at least one script"); + assertFalse(scripts.isEmpty(), "Should contain at least one script"); // Validate script structure JsonNode firstScript = scripts.get(0); @@ -112,8 +112,8 @@ public void testGetAllScriptNames_shouldReturnScriptNamesMap() throws Exception // Assert assertEquals(200, response.statusCode(), "Should return HTTP 200 OK"); - Map scriptNames = objectMapper.readValue(response.body(), Map.class); - assertTrue(scriptNames.size() > 0, "Should contain at least one script"); + Map scriptNames = jsonMapper.readValue(response.body(), Map.class); + assertFalse(scriptNames.isEmpty(), "Should contain at least one script"); // Validate structure - keys should be script IDs, values should be script names for (Map.Entry entry : scriptNames.entrySet()) { @@ -189,7 +189,7 @@ public void testGetSpecificScript() throws Exception { // Assert assertEquals(200, response.statusCode(), "Should return HTTP 200 OK for existing script"); - JsonNode script = objectMapper.readTree(response.body()); + JsonNode script = jsonMapper.readTree(response.body()); assertEquals(scriptId, script.get("id").asInt(), "Should return correct script ID"); assertTrue(script.has("name"), "Script should have name field"); assertTrue(script.has("creator"), "Script should have creator field"); @@ -252,7 +252,7 @@ public void testUploadTankProxyRecording_shouldCreateScriptFromRecording() throw // Assert assertEquals(201, response.statusCode(), "Should return HTTP 201 Created"); - Map responseBody = objectMapper.readValue(response.body(), Map.class); + Map responseBody = jsonMapper.readValue(response.body(), Map.class); assertNotNull(responseBody.get("scriptId"), "Response should contain scriptId"); assertTrue(responseBody.get("message").contains("uploaded"), "Response should indicate successful upload"); @@ -296,7 +296,7 @@ public void testUploadTankProxyRecordingGzipped_shouldCreateScriptFromGzippedRec // Assert assertEquals(201, response.statusCode(), "Should return HTTP 201 Created for gzipped proxy recording upload"); - Map responseBody = objectMapper.readValue(response.body(), Map.class); + Map responseBody = jsonMapper.readValue(response.body(), Map.class); assertNotNull(responseBody.get("scriptId"), "Response should contain scriptId"); assertTrue(responseBody.get("message").contains("uploaded"), "Response should indicate successful upload"); @@ -344,7 +344,7 @@ public void testUploadTankScriptGzipped_shouldCreateScriptFromGzippedXml() throw // Assert assertEquals(201, response.statusCode(), "Should return HTTP 201 Created for gzipped Tank script upload"); - Map responseBody = objectMapper.readValue(response.body(), Map.class); + Map responseBody = jsonMapper.readValue(response.body(), Map.class); assertNotNull(responseBody.get("message"), "Response should contain message"); String message = responseBody.get("message"); @@ -388,7 +388,7 @@ public void testCopyExistingScript_shouldCreateScriptCopy() throws Exception { // Assert assertEquals(201, response.statusCode(), "Should return HTTP 201 Created for script copy"); - Map responseBody = objectMapper.readValue(response.body(), Map.class); + Map responseBody = jsonMapper.readValue(response.body(), Map.class); String message = responseBody.get("message"); assertTrue(message.contains("script ID"), "Message should contain script ID"); @@ -599,7 +599,7 @@ private int createTestScriptFromSample() throws Exception { HttpResponse response = httpClient.send(request, BodyHandlers.ofString()); assertEquals(201, response.statusCode(), "Should create script successfully"); - Map responseBody = objectMapper.readValue(response.body(), Map.class); + Map responseBody = jsonMapper.readValue(response.body(), Map.class); assertNotNull(responseBody.get("message"), "Response should contain message"); // Extract script ID from message: "Script Sample Tank Script with script ID 1647 updated successfully" @@ -630,9 +630,9 @@ private void verifyScriptExists(int scriptId, String expectedName) throws Except HttpResponse response = httpClient.send(request, BodyHandlers.ofString()); assertEquals(200, response.statusCode(), "Script should exist"); - JsonNode script = objectMapper.readTree(response.body()); + JsonNode script = jsonMapper.readTree(response.body()); assertEquals(scriptId, script.get("id").asInt(), "Should return correct script ID"); - assertEquals(expectedName, script.get("name").asText(), "Should return correct script name"); + assertEquals(expectedName, script.get("name").asString(), "Should return correct script name"); } private void verifyScriptDeleted(int scriptId) throws Exception { @@ -668,7 +668,7 @@ public void testGetAllExternalScripts_shouldReturnExternalScriptsList() throws E // Assert assertEquals(200, response.statusCode(), "Should return HTTP 200 OK"); - JsonNode responseBody = objectMapper.readTree(response.body()); + JsonNode responseBody = jsonMapper.readTree(response.body()); System.out.println(responseBody); assertTrue(responseBody.has("scripts"), "Response should contain 'scripts' field"); @@ -676,7 +676,7 @@ public void testGetAllExternalScripts_shouldReturnExternalScriptsList() throws E assertTrue(externalScripts.isArray(), "scripts should be an array"); // If there are external scripts, validate structure - if (externalScripts.size() > 0) { + if (!externalScripts.isEmpty()) { JsonNode firstScript = externalScripts.get(0); assertTrue(firstScript.has("id"), "External script should have 'id' field"); assertTrue(firstScript.has("name"), "External script should have 'name' field"); @@ -718,10 +718,10 @@ public void testCreateExternalScript_shouldCreateNewExternalScript() throws Exce assertTrue(response.headers().firstValue("Location").isPresent(), "Should have Location header for created resource"); - JsonNode responseBody = objectMapper.readTree(response.body()); + JsonNode responseBody = jsonMapper.readTree(response.body()); assertTrue(responseBody.has("id"), "Response should contain external script ID"); - assertEquals(scriptName, responseBody.get("name").asText(), "Should return correct script name"); - assertEquals("integration-test", responseBody.get("creator").asText(), "Should return correct creator"); + assertEquals(scriptName, responseBody.get("name").asString(), "Should return correct script name"); + assertEquals("integration-test", responseBody.get("creator").asString(), "Should return correct creator"); // Store for cleanup int externalScriptId = responseBody.get("id").asInt(); @@ -771,7 +771,7 @@ public void testGetSpecificExternalScript_shouldReturnExternalScript() throws Ex // Assert assertEquals(200, response.statusCode(), "Should return HTTP 200 OK for existing external script"); - JsonNode script = objectMapper.readTree(response.body()); + JsonNode script = jsonMapper.readTree(response.body()); assertEquals(externalScriptId, script.get("id").asInt(), "Should return correct external script ID"); assertTrue(script.has("name"), "External script should have name field"); assertTrue(script.has("creator"), "External script should have creator field"); @@ -915,7 +915,7 @@ private int createTestExternalScript() throws Exception { HttpResponse response = httpClient.send(request, BodyHandlers.ofString()); assertEquals(201, response.statusCode(), "Should create external script successfully"); - JsonNode responseBody = objectMapper.readTree(response.body()); + JsonNode responseBody = jsonMapper.readTree(response.body()); int externalScriptId = responseBody.get("id").asInt(); createdScriptIds.add(-externalScriptId); // Use negative ID to distinguish external scripts @@ -934,9 +934,9 @@ private void verifyExternalScriptExists(int externalScriptId, String expectedNam HttpResponse response = httpClient.send(request, BodyHandlers.ofString()); assertEquals(200, response.statusCode(), "External script should exist"); - JsonNode script = objectMapper.readTree(response.body()); + JsonNode script = jsonMapper.readTree(response.body()); assertEquals(externalScriptId, script.get("id").asInt(), "Should return correct external script ID"); - assertEquals(expectedName, script.get("name").asText(), "Should return correct external script name"); + assertEquals(expectedName, script.get("name").asString(), "Should return correct external script name"); } private void verifyExternalScriptDeleted(int externalScriptId) throws Exception { diff --git a/web/web_support/src/main/java/com/intuit/tank/project/JobDetailFormatter.java b/web/web_support/src/main/java/com/intuit/tank/project/JobDetailFormatter.java index 4ddf26d62..2910f71d3 100644 --- a/web/web_support/src/main/java/com/intuit/tank/project/JobDetailFormatter.java +++ b/web/web_support/src/main/java/com/intuit/tank/project/JobDetailFormatter.java @@ -174,7 +174,7 @@ protected static String buildDetails(JobValidator validator, Workload workload, addError(errorSB, "User Percentage of Test Plans does not add up to 100%"); } // datafiles - addProperty(sb, "Data Files", proposedJobInstance.getDataFileVersions().size() == 0 ? "None" : null, + addProperty(sb, "Data Files", proposedJobInstance.getDataFileVersions().isEmpty() ? "None" : null, "emphasis"); DataFileDao dfd = new DataFileDao(); Set datafiles = new HashSet(); @@ -190,7 +190,7 @@ protected static String buildDetails(JobValidator validator, Workload workload, sb.append(BREAK); // variables - addProperty(sb, "Global Variables", proposedJobInstance.getVariables().size() == 0 ? "None" + addProperty(sb, "Global Variables", proposedJobInstance.getVariables().isEmpty() ? "None" : " (Allow Overide: " + proposedJobInstance.isAllowOverride() + ")", "emphasis"); for (Entry entry : proposedJobInstance.getVariables().entrySet()) { @@ -204,13 +204,13 @@ protected static String buildDetails(JobValidator validator, Workload workload, sb.append(BREAK); // notifications - addProperty(sb, "Notifications", proposedJobInstance.getNotificationVersions().size() == 0 ? "None" : null, + addProperty(sb, "Notifications", proposedJobInstance.getNotificationVersions().isEmpty() ? "None" : null, "emphasis"); JobNotificationDao jnd = new JobNotificationDao(); for (EntityVersion ver : proposedJobInstance.getNotificationVersions()) { JobNotification not = jnd.findById(ver.getObjectId()); if (not != null) { - if (not.getLifecycleEvents().size() > 0) { + if (!not.getLifecycleEvents().isEmpty()) { addProperty(sb, " " + not.getRecipientList(), StringUtils.join(not.getLifecycleEvents(), ", ")); } else { addProperty(sb, " " + not.getRecipientList(), "no events selected", "error"); @@ -240,12 +240,12 @@ protected static String buildDetails(JobValidator validator, Workload workload, + TimeUtil.toTimeString(validator.getExpectedTime(plan.getName())), userPercentage != 100 ? "error" : null); - if (plan.getScriptGroups().size() == 0) { + if (plan.getScriptGroups().isEmpty()) { addProperty(sb, " " + plan.getName(), "contains no script groups", "error"); } for (ScriptGroup group : plan.getScriptGroups()) { addProperty(sb, " " + group.getName(), "loop " + group.getLoop() + " time(s)"); - if (group.getScriptGroupSteps().size() == 0) { + if (group.getScriptGroupSteps().isEmpty()) { addProperty(sb, " " + group.getName(), "contains no scripts", "error"); } for (ScriptGroupStep s : group.getScriptGroupSteps()) { @@ -255,7 +255,7 @@ protected static String buildDetails(JobValidator validator, Workload workload, } } sb.append(BREAK); - if (stepsList.size() == 0) { + if (stepsList.isEmpty()) { addError(errorSB, "No scripts defined."); } @@ -300,7 +300,7 @@ protected static String buildDetails(JobValidator validator, Workload workload, sb.insert(0, tsb.toString()); } - if (errorSB.length() > 0) { + if (!errorSB.isEmpty()) { sb = new StringBuilder().append("ERRORS").append(BREAK).append(errorSB.append(BREAK).toString()) .append(sb.toString()); } @@ -366,7 +366,7 @@ private static void addProperty(StringBuilder sb, String key, String value, Stri if (StringUtils.isNotBlank(style)) { sb.append(""); } - sb.append(StringUtils.replace(key, " ", " ")); + sb.append(key.replace(" ", " ")); if (StringUtils.isNotBlank(style)) { sb.append(""); } @@ -375,7 +375,7 @@ private static void addProperty(StringBuilder sb, String key, String value, Stri sb.append(": "); } if (StringUtils.isNotBlank(style)) { - sb.append(""); + sb.append(""); } sb.append(value); if (StringUtils.isNotBlank(style)) {