diff --git a/.gitignore b/.gitignore index 3917bb44679..a1015659cae 100644 --- a/.gitignore +++ b/.gitignore @@ -36,6 +36,7 @@ src/test/java/org/tron/consensus2 src/main/java/META-INF/ src/main/resources/META-INF/ /bin/ +bin/ # Eclipse IDE specific files and folders /.project @@ -57,3 +58,4 @@ Wallet /framework/propPath .cache +.claude diff --git a/actuator/src/main/java/org/tron/core/vm/trace/ProgramTrace.java b/actuator/src/main/java/org/tron/core/vm/trace/ProgramTrace.java index bd8bc18e78e..953278ab7f3 100644 --- a/actuator/src/main/java/org/tron/core/vm/trace/ProgramTrace.java +++ b/actuator/src/main/java/org/tron/core/vm/trace/ProgramTrace.java @@ -90,12 +90,12 @@ public void merge(ProgramTrace programTrace) { this.ops.addAll(programTrace.ops); } - public String asJsonString(boolean formatted) { - return serializeFieldsOnly(this, formatted); + public String asJsonString() { + return serializeFieldsOnly(this); } @Override public String toString() { - return asJsonString(true); + return asJsonString(); } } diff --git a/actuator/src/main/java/org/tron/core/vm/trace/Serializers.java b/actuator/src/main/java/org/tron/core/vm/trace/Serializers.java index 69056d359c5..ddf18105941 100644 --- a/actuator/src/main/java/org/tron/core/vm/trace/Serializers.java +++ b/actuator/src/main/java/org/tron/core/vm/trace/Serializers.java @@ -1,73 +1,28 @@ package org.tron.core.vm.trace; -import com.fasterxml.jackson.annotation.JsonAutoDetect; -import com.fasterxml.jackson.core.JsonGenerator; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.JsonSerializer; +import com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility; +import com.fasterxml.jackson.annotation.PropertyAccessor; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.SerializationFeature; -import com.fasterxml.jackson.databind.SerializerProvider; -import com.fasterxml.jackson.databind.introspect.VisibilityChecker; -import java.io.IOException; +import com.fasterxml.jackson.databind.json.JsonMapper; import lombok.extern.slf4j.Slf4j; -import org.bouncycastle.util.encoders.Hex; -import org.tron.common.runtime.vm.DataWord; -import org.tron.core.vm.Op; @Slf4j(topic = "VM") public final class Serializers { - public static String serializeFieldsOnly(Object value, boolean pretty) { - try { - ObjectMapper mapper = createMapper(pretty); - mapper.setVisibilityChecker(fieldsOnlyVisibilityChecker(mapper)); + private static final ObjectMapper mapper = JsonMapper.builder() + .enable(SerializationFeature.INDENT_OUTPUT) + .visibility(PropertyAccessor.FIELD, Visibility.ANY) + .visibility(PropertyAccessor.GETTER, Visibility.NONE) + .visibility(PropertyAccessor.IS_GETTER, Visibility.NONE) + .build(); + public static String serializeFieldsOnly(Object value) { + try { return mapper.writeValueAsString(value); } catch (Exception e) { logger.error("JSON serialization error: ", e); return "{}"; } } - - private static VisibilityChecker fieldsOnlyVisibilityChecker(ObjectMapper mapper) { - return mapper.getSerializationConfig().getDefaultVisibilityChecker() - .withFieldVisibility(JsonAutoDetect.Visibility.ANY) - .withGetterVisibility(JsonAutoDetect.Visibility.NONE) - .withIsGetterVisibility(JsonAutoDetect.Visibility.NONE); - } - - public static ObjectMapper createMapper(boolean pretty) { - ObjectMapper mapper = new ObjectMapper(); - if (pretty) { - mapper.enable(SerializationFeature.INDENT_OUTPUT); - } - return mapper; - } - - public static class DataWordSerializer extends JsonSerializer { - - @Override - public void serialize(DataWord energy, JsonGenerator jgen, SerializerProvider provider) - throws IOException, JsonProcessingException { - jgen.writeString(energy.value().toString()); - } - } - - public static class ByteArraySerializer extends JsonSerializer { - - @Override - public void serialize(byte[] memory, JsonGenerator jgen, SerializerProvider provider) - throws IOException, JsonProcessingException { - jgen.writeString(Hex.toHexString(memory)); - } - } - - public static class OpCodeSerializer extends JsonSerializer { - - @Override - public void serialize(Byte op, JsonGenerator jgen, SerializerProvider provider) - throws IOException, JsonProcessingException { - jgen.writeString(Op.getNameOf(op)); - } - } } diff --git a/common/build.gradle b/common/build.gradle index 98fc3257190..acde43a1ea9 100644 --- a/common/build.gradle +++ b/common/build.gradle @@ -8,7 +8,7 @@ sourceCompatibility = 1.8 dependencies { - api group: 'com.fasterxml.jackson.core', name: 'jackson-databind', version: '2.18.3' // https://github.com/FasterXML/jackson-databind/issues/3627 + api group: 'com.fasterxml.jackson.core', name: 'jackson-databind', version: '2.18.6' // https://github.com/FasterXML/jackson-databind/issues/3627 api "com.cedarsoftware:java-util:3.2.0" api group: 'org.apache.httpcomponents', name: 'httpasyncclient', version: '4.1.1' api group: 'commons-codec', name: 'commons-codec', version: '1.11' diff --git a/common/src/main/java/org/tron/common/utils/JsonUtil.java b/common/src/main/java/org/tron/common/utils/JsonUtil.java index 0847e18607b..254f4b5a21f 100644 --- a/common/src/main/java/org/tron/common/utils/JsonUtil.java +++ b/common/src/main/java/org/tron/common/utils/JsonUtil.java @@ -1,14 +1,16 @@ package org.tron.common.utils; import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.json.JsonMapper; import org.springframework.util.StringUtils; public class JsonUtil { + private static final ObjectMapper om = JsonMapper.builder().build(); + public static final T json2Obj(String jsonString, Class clazz) { if (!StringUtils.isEmpty(jsonString) && clazz != null) { try { - ObjectMapper om = new ObjectMapper(); return om.readValue(jsonString, clazz); } catch (Exception var3) { throw new RuntimeException(var3); @@ -22,7 +24,6 @@ public static final String obj2Json(Object obj) { if (obj == null) { return null; } else { - ObjectMapper om = new ObjectMapper(); try { return om.writeValueAsString(obj); } catch (Exception var3) { diff --git a/common/src/main/java/org/tron/json/JSON.java b/common/src/main/java/org/tron/json/JSON.java new file mode 100644 index 00000000000..cba77540b58 --- /dev/null +++ b/common/src/main/java/org/tron/json/JSON.java @@ -0,0 +1,168 @@ +package org.tron.json; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.MapperFeature; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializationFeature; +import com.fasterxml.jackson.databind.json.JsonMapper; +import com.fasterxml.jackson.databind.node.ObjectNode; + +/** + * Drop-in replacement for {@code com.alibaba.fastjson.JSON}. + * Swap the import line; no other source changes required for basic usages. + * + *

All static methods delegate to a shared, thread-safe Jackson {@link ObjectMapper} that is + * configured to match the lenient parsing behavior historically provided by Fastjson: + *

    + *
  • Unquoted field names and single-quoted strings are accepted.
  • + *
  • Unknown properties are ignored (Fastjson default).
  • + *
  • Floating-point numbers are mapped to {@link java.math.BigDecimal} for precision.
  • + *
  • Case-insensitive property matching is enabled.
  • + *
+ */ +public final class JSON { + + /** + * Shared, fully-configured Jackson mapper. Exposed for callers that hold a mapper reference. + */ + public static final ObjectMapper MAPPER = JsonMapper.builder() + .configure(JsonParser.Feature.ALLOW_UNQUOTED_FIELD_NAMES, true) + .configure(JsonParser.Feature.ALLOW_SINGLE_QUOTES, true) + .configure(DeserializationFeature.USE_BIG_DECIMAL_FOR_FLOATS, true) + .configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false) + .configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false) + .serializationInclusion(JsonInclude.Include.NON_NULL) + .disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS) + .configure(MapperFeature.ACCEPT_CASE_INSENSITIVE_PROPERTIES, true) + .build(); + + private JSON() { + } + + // ------------------------------------------------------------------------- + // parseObject + // ------------------------------------------------------------------------- + + /** + * Parses a JSON object string and returns a {@link JSONObject}. + * Mirrors {@code JSON.parseObject(String)} and {@code JSONObject.parseObject(String)}. + */ + public static JSONObject parseObject(String text) { + if (text == null || text.trim().isEmpty()) { + return null; + } + try { + JsonNode node = MAPPER.readTree(text); + if (node == null || node.isNull()) { + return null; + } + if (!node.isObject()) { + throw new JSONException("Expected JSON object but got: " + node.getNodeType()); + } + return new JSONObject((ObjectNode) node); + } catch (JSONException e) { + throw e; + } catch (Exception e) { + throw new JSONException("Failed to parse JSON object: " + e.getMessage(), e); + } + } + + /** + * Parses a JSON string and deserializes it into the given Java type. + * Mirrors {@code JSON.parseObject(String, Class)}. + */ + public static T parseObject(String text, Class clazz) { + if (text == null || text.isEmpty()) { + return null; + } + try { + return MAPPER.readValue(text, clazz); + } catch (Exception e) { + throw new JSONException("Failed to parse JSON object: " + e.getMessage(), e); + } + } + + // ------------------------------------------------------------------------- + // parse (validate / generic parse — callers typically ignore the return value) + // ------------------------------------------------------------------------- + + /** + * Parses any valid JSON value. Throws {@link JSONException} on invalid input + * so callers can detect malformed JSON (e.g. via try/catch), mirroring + * Fastjson's observable behaviour in this codebase. + * Mirrors {@code JSON.parse(String)}. + */ + public static JsonNode parse(String text) { + if (text == null || text.isEmpty()) { + return null; + } + try { + return MAPPER.readTree(text); + } catch (Exception e) { + throw new JSONException("Failed to parse JSON: " + e.getMessage(), e); + } + } + + /** + * Parses a JSON array string and returns a {@link JSONArray}. + * Mirrors {@code JSON.parseArray(String)} and {@code JSONArray.parseArray(String)}. + */ + public static JSONArray parseArray(String text) { + return JSONArray.parseArray(text); + } + + // ------------------------------------------------------------------------- + // toJSONString + // ------------------------------------------------------------------------- + + /** + * Serializes an object to a compact JSON string. + * Mirrors {@code JSON.toJSONString(Object)}. + */ + public static String toJSONString(Object obj) { + if (obj == null) { + return "null"; + } + // Unwrap our own wrapper types so the inner Jackson node is serialized + if (obj instanceof JSONObject) { + return ((JSONObject) obj).unwrap().toString(); + } + if (obj instanceof JSONArray) { + return ((JSONArray) obj).unwrap().toString(); + } + try { + return MAPPER.writeValueAsString(obj); + } catch (Exception e) { + throw new JSONException("Failed to serialise object: " + e.getMessage(), e); + } + } + + /** + * Serializes an object to a JSON string, optionally pretty-printed. + * Mirrors {@code JSON.toJSONString(Object, boolean)}. + */ + public static String toJSONString(Object obj, boolean prettyFormat) { + if (!prettyFormat) { + return toJSONString(obj); + } + if (obj == null) { + return "null"; + } + try { + if (obj instanceof JSONObject) { + return MAPPER.writerWithDefaultPrettyPrinter() + .writeValueAsString(((JSONObject) obj).unwrap()); + } + if (obj instanceof JSONArray) { + return MAPPER.writerWithDefaultPrettyPrinter() + .writeValueAsString(((JSONArray) obj).unwrap()); + } + return MAPPER.writerWithDefaultPrettyPrinter().writeValueAsString(obj); + } catch (Exception e) { + throw new JSONException("Failed to serialise object: " + e.getMessage(), e); + } + } +} diff --git a/common/src/main/java/org/tron/json/JSONArray.java b/common/src/main/java/org/tron/json/JSONArray.java new file mode 100644 index 00000000000..20c8aa7fe00 --- /dev/null +++ b/common/src/main/java/org/tron/json/JSONArray.java @@ -0,0 +1,178 @@ +package org.tron.json; + +import com.fasterxml.jackson.annotation.JsonValue; +import com.fasterxml.jackson.databind.node.ArrayNode; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + +/** + * Drop-in replacement for {@code com.alibaba.fastjson.JSONArray}. + * Swap the import line; no other source changes required for basic usages. + */ +public class JSONArray implements Iterable { + + private final ArrayNode node; + + public JSONArray(ArrayNode node) { + this.node = node; + } + + public JSONArray() { + this.node = JSON.MAPPER.createArrayNode(); + } + + /** Static factory — mirrors {@code JSONArray.parseArray(String)}. */ + public static JSONArray parseArray(String text) { + if (text == null || text.trim().isEmpty()) { + return new JSONArray(); + } + try { + com.fasterxml.jackson.databind.JsonNode node = JSON.MAPPER.readTree(text); + if (node == null || node.isNull()) { + return new JSONArray(); + } + if (!node.isArray()) { + throw new JSONException("Expected JSON array but got: " + node.getNodeType()); + } + return new JSONArray((ArrayNode) node); + } catch (JSONException e) { + throw e; + } catch (Exception e) { + throw new JSONException("Failed to parse JSON array: " + e.getMessage(), e); + } + } + + public int size() { + return node.size(); + } + + public boolean isEmpty() { + return node.isEmpty(); + } + + public Object get(int index) { + return JSONObject.convertNode(node.get(index)); + } + + public JSONObject getJSONObject(int index) { + com.fasterxml.jackson.databind.JsonNode child = node.get(index); + if (child == null || child.isNull()) { + return null; + } + if (!child.isObject()) { + throw new JSONException("Element at index " + index + " is not an object"); + } + return new JSONObject((com.fasterxml.jackson.databind.node.ObjectNode) child); + } + + public JSONArray getJSONArray(int index) { + com.fasterxml.jackson.databind.JsonNode child = node.get(index); + if (child == null || child.isNull()) { + return null; + } + if (!child.isArray()) { + throw new JSONException("Element at index " + index + " is not an array"); + } + return new JSONArray((ArrayNode) child); + } + + public String getString(int index) { + com.fasterxml.jackson.databind.JsonNode child = node.get(index); + if (child == null || child.isNull()) { + return null; + } + if (child.isObject() || child.isArray()) { + return child.toString(); + } + return child.asText(null); + } + + public Boolean getBoolean(int index) { + com.fasterxml.jackson.databind.JsonNode child = node.get(index); + if (child == null || child.isNull()) { + return null; + } + if (child.isBoolean()) { + return child.booleanValue(); + } + if (child.isNumber()) { + return child.longValue() != 0; + } + if (child.isTextual()) { + String text = child.asText(); + if ("true".equalsIgnoreCase(text) || "1".equals(text)) { + return Boolean.TRUE; + } + if ("false".equalsIgnoreCase(text) || "0".equals(text)) { + return Boolean.FALSE; + } + throw new JSONException("Cannot cast '" + text + "' to Boolean"); + } + throw new JSONException("Cannot cast " + child.getNodeType() + " to Boolean"); + } + + public List toJavaList(Class clazz) { + try { + List result = new ArrayList<>(); + for (com.fasterxml.jackson.databind.JsonNode element : node) { + result.add(JSON.MAPPER.treeToValue(element, clazz)); + } + return result; + } catch (Exception e) { + throw new JSONException("Failed to convert JSONArray to List<" + clazz.getSimpleName() + ">", e); + } + } + + // ------------------------------------------------------------------------- + // Mutation helpers + // ------------------------------------------------------------------------- + + public JSONArray add(JSONObject value) { + node.add(value == null ? node.nullNode() : value.unwrap()); + return this; + } + + public JSONArray add(JSONArray value) { + node.add(value == null ? node.nullNode() : value.unwrap()); + return this; + } + + public JSONArray add(String value) { + node.add(value); + return this; + } + + public JSONArray add(Object value) { + if (value instanceof JSONObject) { + return add((JSONObject) value); + } + if (value instanceof JSONArray) { + return add((JSONArray) value); + } + node.add(JSON.MAPPER.valueToTree(value)); + return this; + } + + /** Returns the underlying Jackson {@link ArrayNode}. */ + @JsonValue + public ArrayNode unwrap() { + return node; + } + + @Override + public Iterator iterator() { + List list = new ArrayList<>(); + node.forEach(child -> list.add(JSONObject.convertNode(child))); + return list.iterator(); + } + + @Override + public String toString() { + return node.toString(); + } + + public String toJSONString() { + return node.toString(); + } +} diff --git a/common/src/main/java/org/tron/json/JSONException.java b/common/src/main/java/org/tron/json/JSONException.java new file mode 100644 index 00000000000..a9ef5bc0e9b --- /dev/null +++ b/common/src/main/java/org/tron/json/JSONException.java @@ -0,0 +1,20 @@ +package org.tron.json; + +/** + * Drop-in replacement for {@code com.alibaba.fastjson.JSONException}. + * Swap the import line; no other source changes required. + */ +public class JSONException extends RuntimeException { + + public JSONException(String message) { + super(message); + } + + public JSONException(String message, Throwable cause) { + super(message, cause); + } + + public JSONException(Throwable cause) { + super(cause); + } +} diff --git a/common/src/main/java/org/tron/json/JSONObject.java b/common/src/main/java/org/tron/json/JSONObject.java new file mode 100644 index 00000000000..8d5b9c532ba --- /dev/null +++ b/common/src/main/java/org/tron/json/JSONObject.java @@ -0,0 +1,392 @@ +package org.tron.json; + +import com.fasterxml.jackson.annotation.JsonValue; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.node.ArrayNode; +import com.fasterxml.jackson.databind.node.ObjectNode; +import java.math.BigDecimal; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Set; + +/** + * Drop-in replacement for {@code com.alibaba.fastjson.JSONObject}. + * Swap the import line; no other source changes required for basic usages. + */ +public class JSONObject { + + private final ObjectNode node; + + public JSONObject(ObjectNode node) { + this.node = node; + } + + public JSONObject() { + this.node = JSON.MAPPER.createObjectNode(); + } + + // ------------------------------------------------------------------------- + // Static factories + // ------------------------------------------------------------------------- + + /** {@code JSONObject.parseObject(String)} */ + public static JSONObject parseObject(String text) { + return JSON.parseObject(text); + } + + /** {@code JSONObject.parseArray(String)} */ + public static JSONArray parseArray(String text) { + return JSONArray.parseArray(text); + } + + // ------------------------------------------------------------------------- + // Field access + // ------------------------------------------------------------------------- + + public boolean containsKey(String key) { + return node.has(key); + } + + /** + * Returns the string representation of the value for the given key. + * For object/array nodes, returns the JSON text (matching Fastjson behaviour). + * Returns {@code null} if the key is missing or the value is a JSON {@code null}. + */ + public String getString(String key) { + JsonNode child = node.get(key); + if (child == null || child.isNull()) { + return null; + } + if (child.isObject() || child.isArray()) { + return child.toString(); + } + return child.asText(null); + } + + public Boolean getBoolean(String key) { + JsonNode child = node.get(key); + if (child == null || child.isNull()) { + return null; + } + if (child.isBoolean()) { + return child.booleanValue(); + } + if (child.isNumber()) { + return child.longValue() != 0; + } + if (child.isTextual()) { + String text = child.asText(); + if ("true".equalsIgnoreCase(text) || "1".equals(text)) { + return Boolean.TRUE; + } + if ("false".equalsIgnoreCase(text) || "0".equals(text)) { + return Boolean.FALSE; + } + throw new JSONException("Cannot cast '" + text + "' to Boolean"); + } + throw new JSONException("Cannot cast " + child.getNodeType() + " to Boolean"); + } + + public Integer getInteger(String key) { + JsonNode child = node.get(key); + if (child == null || child.isNull()) { + return null; + } + if (child.isNumber()) { + return child.asInt(); + } + if (child.isTextual()) { + try { + return Integer.parseInt(child.asText()); + } catch (NumberFormatException e) { + throw new JSONException("Cannot cast '" + child.asText() + "' to Integer", e); + } + } + throw new JSONException("Cannot cast " + child.getNodeType() + " to Integer"); + } + + public Long getLong(String key) { + JsonNode child = node.get(key); + if (child == null || child.isNull()) { + return null; + } + if (child.isNumber()) { + return child.longValue(); + } + if (child.isTextual()) { + try { + return Long.parseLong(child.asText()); + } catch (NumberFormatException e) { + throw new JSONException("Cannot cast '" + child.asText() + "' to Long", e); + } + } + throw new JSONException("Cannot cast " + child.getNodeType() + " to Long"); + } + + public long getLongValue(String key) { + JsonNode child = node.get(key); + if (child == null || child.isNull()) { + return 0L; + } + if (child.isNumber()) { + return child.longValue(); + } + if (child.isTextual()) { + try { + return Long.parseLong(child.asText()); + } catch (NumberFormatException e) { + throw new JSONException("Cannot cast '" + child.asText() + "' to long", e); + } + } + throw new JSONException("Cannot cast " + child.getNodeType() + " to long"); + } + + public int getIntValue(String key) { + JsonNode child = node.get(key); + if (child == null || child.isNull()) { + return 0; + } + if (child.isNumber()) { + return child.intValue(); + } + if (child.isTextual()) { + try { + return Integer.parseInt(child.asText()); + } catch (NumberFormatException e) { + throw new JSONException("Cannot cast '" + child.asText() + "' to int", e); + } + } + throw new JSONException("Cannot cast " + child.getNodeType() + " to int"); + } + + public Double getDouble(String key) { + JsonNode child = node.get(key); + if (child == null || child.isNull()) { + return null; + } + if (child.isNumber()) { + return child.doubleValue(); + } + if (child.isTextual()) { + try { + return Double.parseDouble(child.asText()); + } catch (NumberFormatException e) { + throw new JSONException("Cannot cast '" + child.asText() + "' to Double", e); + } + } + throw new JSONException("Cannot cast " + child.getNodeType() + " to Double"); + } + + public BigDecimal getBigDecimal(String key) { + JsonNode child = node.get(key); + if (child == null || child.isNull()) { + return null; + } + if (child.isNumber()) { + return child.decimalValue(); + } + if (child.isTextual()) { + String text = child.asText().trim(); + if (text.isEmpty()) { + return null; + } + try { + return new BigDecimal(text); + } catch (NumberFormatException e) { + throw new JSONException("Cannot cast '" + text + "' to BigDecimal", e); + } + } + throw new JSONException("Cannot cast " + child.getNodeType() + " to BigDecimal"); + } + + /** + * Returns the raw value for the given key. + * Mirrors {@code Map.get(String)} from fastjson's JSONObject. + */ + public Object get(String key) { + return convertNode(node.get(key)); + } + + /** + * Converts a Jackson {@link JsonNode} to the corresponding Java type, + * matching Fastjson's return types from generic accessors. + */ + static Object convertNode(JsonNode child) { + if (child == null || child.isNull()) { + return null; + } + if (child.isObject()) { + return new JSONObject((ObjectNode) child); + } + if (child.isArray()) { + return new JSONArray((ArrayNode) child); + } + if (child.isTextual()) { + return child.asText(); + } + if (child.isInt()) { + return child.intValue(); + } + if (child.isLong()) { + return child.longValue(); + } + if (child.isBigInteger()) { + return child.bigIntegerValue(); + } + if (child.isBigDecimal()) { + return child.decimalValue(); + } + if (child.isDouble() || child.isFloat()) { + return child.doubleValue(); + } + if (child.isBoolean()) { + return child.booleanValue(); + } + return child.asText(); + } + + public JSONObject getJSONObject(String key) { + JsonNode child = node.get(key); + if (child == null || child.isNull()) { + return null; + } + if (!child.isObject()) { + throw new JSONException("Field '" + key + "' is not an object"); + } + return new JSONObject((ObjectNode) child); + } + + public JSONArray getJSONArray(String key) { + JsonNode child = node.get(key); + if (child == null || child.isNull()) { + return null; + } + if (!child.isArray()) { + throw new JSONException("Field '" + key + "' is not an array"); + } + return new JSONArray((ArrayNode) child); + } + + /** + * Deserializes the field value into the given Java type. + * Mirrors {@code JSONObject.getObject(String, Class)}. + */ + public T getObject(String key, Class clazz) { + JsonNode child = node.get(key); + if (child == null || child.isNull()) { + return null; + } + try { + return JSON.MAPPER.treeToValue(child, clazz); + } catch (Exception e) { + throw new JSONException("Failed to convert field '" + key + "' to " + clazz.getSimpleName(), e); + } + } + + // ------------------------------------------------------------------------- + // Mutation helpers (used minimally in the codebase) + // ------------------------------------------------------------------------- + + public JSONObject put(String key, String value) { + node.put(key, value); + return this; + } + + public JSONObject put(String key, Boolean value) { + node.put(key, value); + return this; + } + + public JSONObject put(String key, Integer value) { + node.put(key, value); + return this; + } + + public JSONObject put(String key, Long value) { + node.put(key, value); + return this; + } + + public JSONObject put(String key, JSONObject value) { + node.set(key, value == null ? node.nullNode() : value.unwrap()); + return this; + } + + public JSONObject put(String key, JSONArray value) { + node.set(key, value == null ? node.nullNode() : value.unwrap()); + return this; + } + + public JSONObject put(String key, Object value) { + if (value instanceof JSONObject) { + return put(key, (JSONObject) value); + } + if (value instanceof JSONArray) { + return put(key, (JSONArray) value); + } + node.set(key, JSON.MAPPER.valueToTree(value)); + return this; + } + + public JSONObject put(String key, List value) { + if (value == null) { + node.set(key, node.nullNode()); + return this; + } + ArrayNode arr = JSON.MAPPER.createArrayNode(); + value.forEach(v -> arr.add(JSON.MAPPER.valueToTree(v))); + node.set(key, arr); + return this; + } + + public Object remove(String key) { + JsonNode removed = node.remove(key); + return convertNode(removed); + } + + public int size() { + return node.size(); + } + + public Set keySet() { + Set keys = new HashSet<>(); + node.fieldNames().forEachRemaining(keys::add); + return keys; + } + + // ------------------------------------------------------------------------- + // Conversion + // ------------------------------------------------------------------------- + + public Map toMap() { + try { + Map map = new HashMap<>(); + Iterator> fields = node.fields(); + while (fields.hasNext()) { + Map.Entry entry = fields.next(); + map.put(entry.getKey(), JSON.MAPPER.treeToValue(entry.getValue(), Object.class)); + } + return map; + } catch (Exception e) { + throw new JSONException("Failed to convert JSONObject to Map", e); + } + } + + /** Returns the underlying Jackson {@link ObjectNode}. */ + @JsonValue + public ObjectNode unwrap() { + return node; + } + + @Override + public String toString() { + return node.toString(); + } + + public String toJSONString() { + return node.toString(); + } +} diff --git a/framework/build.gradle b/framework/build.gradle index d884b6a7c49..b48d854eb7d 100644 --- a/framework/build.gradle +++ b/framework/build.gradle @@ -44,7 +44,6 @@ dependencies { // http implementation 'org.eclipse.jetty:jetty-server:9.4.57.v20241219' implementation 'org.eclipse.jetty:jetty-servlet:9.4.57.v20241219' - implementation 'com.alibaba:fastjson:1.2.83' // end http // https://mvnrepository.com/artifact/com.github.briandilley.jsonrpc4j/jsonrpc4j diff --git a/framework/src/main/java/org/tron/common/logsfilter/ContractEventParserJson.java b/framework/src/main/java/org/tron/common/logsfilter/ContractEventParserJson.java index 4236230ef18..4424e28f237 100644 --- a/framework/src/main/java/org/tron/common/logsfilter/ContractEventParserJson.java +++ b/framework/src/main/java/org/tron/common/logsfilter/ContractEventParserJson.java @@ -1,7 +1,5 @@ package org.tron.common.logsfilter; -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -9,6 +7,8 @@ import org.apache.commons.lang3.ArrayUtils; import org.bouncycastle.util.encoders.Hex; import org.pf4j.util.StringUtils; +import org.tron.json.JSONArray; +import org.tron.json.JSONObject; @Slf4j(topic = "Parser") public class ContractEventParserJson extends ContractEventParser { diff --git a/framework/src/main/java/org/tron/common/logsfilter/EventPluginLoader.java b/framework/src/main/java/org/tron/common/logsfilter/EventPluginLoader.java index 7061b2e9d57..91cac8ab169 100644 --- a/framework/src/main/java/org/tron/common/logsfilter/EventPluginLoader.java +++ b/framework/src/main/java/org/tron/common/logsfilter/EventPluginLoader.java @@ -3,6 +3,7 @@ import com.beust.jcommander.internal.Sets; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.json.JsonMapper; import java.io.File; import java.util.HashSet; import java.util.List; @@ -37,7 +38,7 @@ public class EventPluginLoader { private List eventListeners; - private ObjectMapper objectMapper = new ObjectMapper(); + private ObjectMapper objectMapper = JsonMapper.builder().build(); private String serverAddress; diff --git a/framework/src/main/java/org/tron/core/config/DefaultConfig.java b/framework/src/main/java/org/tron/core/config/DefaultConfig.java index d01820626c3..9bce903d411 100755 --- a/framework/src/main/java/org/tron/core/config/DefaultConfig.java +++ b/framework/src/main/java/org/tron/core/config/DefaultConfig.java @@ -1,6 +1,5 @@ package org.tron.core.config; -import com.alibaba.fastjson.parser.ParserConfig; import lombok.extern.slf4j.Slf4j; import org.rocksdb.RocksDB; import org.springframework.beans.factory.annotation.Autowired; @@ -27,7 +26,6 @@ public class DefaultConfig { static { RocksDB.loadLibrary(); - ParserConfig.getGlobalInstance().setSafeMode(true); } @Autowired diff --git a/framework/src/main/java/org/tron/core/services/filter/HttpApiAccessFilter.java b/framework/src/main/java/org/tron/core/services/filter/HttpApiAccessFilter.java index 59b9b15582b..c598f99aa91 100644 --- a/framework/src/main/java/org/tron/core/services/filter/HttpApiAccessFilter.java +++ b/framework/src/main/java/org/tron/core/services/filter/HttpApiAccessFilter.java @@ -1,6 +1,5 @@ package org.tron.core.services.filter; -import com.alibaba.fastjson.JSONObject; import java.net.URI; import java.util.List; import javax.servlet.Filter; @@ -13,6 +12,7 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; import org.tron.common.parameter.CommonParameter; +import org.tron.json.JSONObject; @Component @Slf4j(topic = "httpApiAccessFilter") diff --git a/framework/src/main/java/org/tron/core/services/http/AccountPermissionUpdateServlet.java b/framework/src/main/java/org/tron/core/services/http/AccountPermissionUpdateServlet.java index c8ddd93f103..6fe83eff8be 100644 --- a/framework/src/main/java/org/tron/core/services/http/AccountPermissionUpdateServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/AccountPermissionUpdateServlet.java @@ -1,12 +1,12 @@ package org.tron.core.services.http; -import com.alibaba.fastjson.JSONObject; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.tron.core.Wallet; +import org.tron.json.JSONObject; import org.tron.protos.Protocol.Transaction; import org.tron.protos.Protocol.Transaction.Contract.ContractType; import org.tron.protos.contract.AccountContract.AccountPermissionUpdateContract; diff --git a/framework/src/main/java/org/tron/core/services/http/BroadcastHexServlet.java b/framework/src/main/java/org/tron/core/services/http/BroadcastHexServlet.java index ec115b20a15..5d59df59678 100644 --- a/framework/src/main/java/org/tron/core/services/http/BroadcastHexServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/BroadcastHexServlet.java @@ -1,6 +1,5 @@ package org.tron.core.services.http; -import com.alibaba.fastjson.JSONObject; import java.util.stream.Collectors; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -11,6 +10,7 @@ import org.tron.common.utils.ByteArray; import org.tron.core.Wallet; import org.tron.core.capsule.TransactionCapsule; +import org.tron.json.JSONObject; import org.tron.protos.Protocol.Transaction; @Component diff --git a/framework/src/main/java/org/tron/core/services/http/BroadcastServlet.java b/framework/src/main/java/org/tron/core/services/http/BroadcastServlet.java index 6b265c35e02..370a81eef4e 100644 --- a/framework/src/main/java/org/tron/core/services/http/BroadcastServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/BroadcastServlet.java @@ -1,6 +1,5 @@ package org.tron.core.services.http; -import com.alibaba.fastjson.JSONObject; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import lombok.extern.slf4j.Slf4j; @@ -10,6 +9,7 @@ import org.tron.common.utils.ByteArray; import org.tron.core.Wallet; import org.tron.core.capsule.TransactionCapsule; +import org.tron.json.JSONObject; import org.tron.protos.Protocol.Transaction; diff --git a/framework/src/main/java/org/tron/core/services/http/CancelAllUnfreezeV2Servlet.java b/framework/src/main/java/org/tron/core/services/http/CancelAllUnfreezeV2Servlet.java index 894126e50da..a2d4571be27 100644 --- a/framework/src/main/java/org/tron/core/services/http/CancelAllUnfreezeV2Servlet.java +++ b/framework/src/main/java/org/tron/core/services/http/CancelAllUnfreezeV2Servlet.java @@ -1,13 +1,13 @@ package org.tron.core.services.http; -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.tron.core.Wallet; +import org.tron.json.JSON; +import org.tron.json.JSONObject; import org.tron.protos.Protocol.Transaction; import org.tron.protos.Protocol.Transaction.Contract.ContractType; import org.tron.protos.contract.BalanceContract.CancelAllUnfreezeV2Contract; diff --git a/framework/src/main/java/org/tron/core/services/http/ClearABIServlet.java b/framework/src/main/java/org/tron/core/services/http/ClearABIServlet.java index c897b895c58..e0833052ce8 100644 --- a/framework/src/main/java/org/tron/core/services/http/ClearABIServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/ClearABIServlet.java @@ -1,12 +1,12 @@ package org.tron.core.services.http; -import com.alibaba.fastjson.JSONObject; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.tron.core.Wallet; +import org.tron.json.JSONObject; import org.tron.protos.Protocol.Transaction; import org.tron.protos.Protocol.Transaction.Contract.ContractType; import org.tron.protos.contract.SmartContractOuterClass.ClearABIContract; diff --git a/framework/src/main/java/org/tron/core/services/http/CreateAccountServlet.java b/framework/src/main/java/org/tron/core/services/http/CreateAccountServlet.java index 102d9ca80ce..b547fd00364 100644 --- a/framework/src/main/java/org/tron/core/services/http/CreateAccountServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/CreateAccountServlet.java @@ -1,12 +1,12 @@ package org.tron.core.services.http; -import com.alibaba.fastjson.JSONObject; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.tron.core.Wallet; +import org.tron.json.JSONObject; import org.tron.protos.Protocol.Transaction; import org.tron.protos.Protocol.Transaction.Contract.ContractType; import org.tron.protos.contract.AccountContract.AccountCreateContract; diff --git a/framework/src/main/java/org/tron/core/services/http/CreateAssetIssueServlet.java b/framework/src/main/java/org/tron/core/services/http/CreateAssetIssueServlet.java index 9d537ab641b..bc1a33509e0 100644 --- a/framework/src/main/java/org/tron/core/services/http/CreateAssetIssueServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/CreateAssetIssueServlet.java @@ -1,12 +1,12 @@ package org.tron.core.services.http; -import com.alibaba.fastjson.JSONObject; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.tron.core.Wallet; +import org.tron.json.JSONObject; import org.tron.protos.Protocol.Transaction; import org.tron.protos.Protocol.Transaction.Contract.ContractType; import org.tron.protos.contract.AssetIssueContractOuterClass.AssetIssueContract; diff --git a/framework/src/main/java/org/tron/core/services/http/CreateCommonTransactionServlet.java b/framework/src/main/java/org/tron/core/services/http/CreateCommonTransactionServlet.java index c3a515f84a5..f4b5e03db82 100644 --- a/framework/src/main/java/org/tron/core/services/http/CreateCommonTransactionServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/CreateCommonTransactionServlet.java @@ -1,6 +1,5 @@ package org.tron.core.services.http; -import com.alibaba.fastjson.JSONObject; import com.google.protobuf.GeneratedMessageV3; import com.google.protobuf.Message; import java.lang.reflect.Constructor; @@ -13,6 +12,7 @@ import org.tron.core.Wallet; import org.tron.core.actuator.TransactionFactory; import org.tron.core.exception.ContractValidateException; +import org.tron.json.JSONObject; import org.tron.protos.Protocol.Transaction; import org.tron.protos.Protocol.Transaction.Contract.ContractType; diff --git a/framework/src/main/java/org/tron/core/services/http/CreateShieldedTransactionWithoutSpendAuthSigServlet.java b/framework/src/main/java/org/tron/core/services/http/CreateShieldedTransactionWithoutSpendAuthSigServlet.java index b77fff77034..eb870bd1721 100644 --- a/framework/src/main/java/org/tron/core/services/http/CreateShieldedTransactionWithoutSpendAuthSigServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/CreateShieldedTransactionWithoutSpendAuthSigServlet.java @@ -1,7 +1,5 @@ package org.tron.core.services.http; -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import lombok.extern.slf4j.Slf4j; @@ -9,6 +7,8 @@ import org.springframework.stereotype.Component; import org.tron.api.GrpcAPI.PrivateParametersWithoutAsk; import org.tron.core.Wallet; +import org.tron.json.JSON; +import org.tron.json.JSONObject; import org.tron.protos.Protocol.Transaction; diff --git a/framework/src/main/java/org/tron/core/services/http/CreateWitnessServlet.java b/framework/src/main/java/org/tron/core/services/http/CreateWitnessServlet.java index 55e1b25ce3d..3258dbbe6b9 100644 --- a/framework/src/main/java/org/tron/core/services/http/CreateWitnessServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/CreateWitnessServlet.java @@ -1,12 +1,12 @@ package org.tron.core.services.http; -import com.alibaba.fastjson.JSONObject; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.tron.core.Wallet; +import org.tron.json.JSONObject; import org.tron.protos.Protocol.Transaction; import org.tron.protos.Protocol.Transaction.Contract.ContractType; import org.tron.protos.contract.WitnessContract.WitnessCreateContract; diff --git a/framework/src/main/java/org/tron/core/services/http/DelegateResourceServlet.java b/framework/src/main/java/org/tron/core/services/http/DelegateResourceServlet.java index 00994238988..25641ff093c 100644 --- a/framework/src/main/java/org/tron/core/services/http/DelegateResourceServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/DelegateResourceServlet.java @@ -1,13 +1,13 @@ package org.tron.core.services.http; -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.tron.core.Wallet; +import org.tron.json.JSON; +import org.tron.json.JSONObject; import org.tron.protos.Protocol.Transaction; import org.tron.protos.Protocol.Transaction.Contract.ContractType; import org.tron.protos.contract.BalanceContract.DelegateResourceContract; diff --git a/framework/src/main/java/org/tron/core/services/http/DeployContractServlet.java b/framework/src/main/java/org/tron/core/services/http/DeployContractServlet.java index 1209c6fb385..45a5be961e9 100644 --- a/framework/src/main/java/org/tron/core/services/http/DeployContractServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/DeployContractServlet.java @@ -3,7 +3,6 @@ import static org.tron.core.services.http.Util.getHexAddress; import static org.tron.core.services.http.Util.setTransactionPermissionId; -import com.alibaba.fastjson.JSONObject; import com.google.common.base.Strings; import com.google.protobuf.ByteString; import javax.servlet.http.HttpServletRequest; @@ -14,6 +13,7 @@ import org.springframework.stereotype.Component; import org.tron.common.utils.ByteArray; import org.tron.core.Wallet; +import org.tron.json.JSONObject; import org.tron.protos.Protocol.Transaction; import org.tron.protos.Protocol.Transaction.Contract.ContractType; import org.tron.protos.contract.SmartContractOuterClass.CreateSmartContract; @@ -91,4 +91,4 @@ protected void doPost(HttpServletRequest request, HttpServletResponse response) Util.processError(e, response); } } -} \ No newline at end of file +} diff --git a/framework/src/main/java/org/tron/core/services/http/EstimateEnergyServlet.java b/framework/src/main/java/org/tron/core/services/http/EstimateEnergyServlet.java index d88f7dd1af1..91d673a2d08 100644 --- a/framework/src/main/java/org/tron/core/services/http/EstimateEnergyServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/EstimateEnergyServlet.java @@ -1,6 +1,5 @@ package org.tron.core.services.http; -import com.alibaba.fastjson.JSONObject; import com.google.protobuf.ByteString; import io.netty.util.internal.StringUtil; import java.io.IOException; @@ -17,6 +16,7 @@ import org.tron.core.Wallet; import org.tron.core.capsule.TransactionCapsule; import org.tron.core.exception.ContractValidateException; +import org.tron.json.JSONObject; import org.tron.protos.Protocol; import org.tron.protos.contract.SmartContractOuterClass.TriggerSmartContract; diff --git a/framework/src/main/java/org/tron/core/services/http/ExchangeCreateServlet.java b/framework/src/main/java/org/tron/core/services/http/ExchangeCreateServlet.java index b7e2d7beb50..84707c5586f 100644 --- a/framework/src/main/java/org/tron/core/services/http/ExchangeCreateServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/ExchangeCreateServlet.java @@ -1,12 +1,12 @@ package org.tron.core.services.http; -import com.alibaba.fastjson.JSONObject; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.tron.core.Wallet; +import org.tron.json.JSONObject; import org.tron.protos.Protocol.Transaction; import org.tron.protos.Protocol.Transaction.Contract.ContractType; import org.tron.protos.contract.ExchangeContract.ExchangeCreateContract; diff --git a/framework/src/main/java/org/tron/core/services/http/ExchangeInjectServlet.java b/framework/src/main/java/org/tron/core/services/http/ExchangeInjectServlet.java index a6c8ebc2132..b4b2b31221e 100644 --- a/framework/src/main/java/org/tron/core/services/http/ExchangeInjectServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/ExchangeInjectServlet.java @@ -1,12 +1,12 @@ package org.tron.core.services.http; -import com.alibaba.fastjson.JSONObject; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.tron.core.Wallet; +import org.tron.json.JSONObject; import org.tron.protos.Protocol.Transaction; import org.tron.protos.Protocol.Transaction.Contract.ContractType; import org.tron.protos.contract.ExchangeContract.ExchangeInjectContract; diff --git a/framework/src/main/java/org/tron/core/services/http/ExchangeTransactionServlet.java b/framework/src/main/java/org/tron/core/services/http/ExchangeTransactionServlet.java index b788e6bba9f..a143cd45c70 100644 --- a/framework/src/main/java/org/tron/core/services/http/ExchangeTransactionServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/ExchangeTransactionServlet.java @@ -1,12 +1,12 @@ package org.tron.core.services.http; -import com.alibaba.fastjson.JSONObject; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.tron.core.Wallet; +import org.tron.json.JSONObject; import org.tron.protos.Protocol.Transaction; import org.tron.protos.Protocol.Transaction.Contract.ContractType; import org.tron.protos.contract.ExchangeContract.ExchangeTransactionContract; diff --git a/framework/src/main/java/org/tron/core/services/http/ExchangeWithdrawServlet.java b/framework/src/main/java/org/tron/core/services/http/ExchangeWithdrawServlet.java index f454e08df9c..159f23abb22 100644 --- a/framework/src/main/java/org/tron/core/services/http/ExchangeWithdrawServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/ExchangeWithdrawServlet.java @@ -1,12 +1,12 @@ package org.tron.core.services.http; -import com.alibaba.fastjson.JSONObject; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.tron.core.Wallet; +import org.tron.json.JSONObject; import org.tron.protos.Protocol.Transaction; import org.tron.protos.Protocol.Transaction.Contract.ContractType; import org.tron.protos.contract.ExchangeContract.ExchangeWithdrawContract; diff --git a/framework/src/main/java/org/tron/core/services/http/FreezeBalanceServlet.java b/framework/src/main/java/org/tron/core/services/http/FreezeBalanceServlet.java index e73c294e023..2990755b928 100644 --- a/framework/src/main/java/org/tron/core/services/http/FreezeBalanceServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/FreezeBalanceServlet.java @@ -1,12 +1,12 @@ package org.tron.core.services.http; -import com.alibaba.fastjson.JSONObject; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.tron.core.Wallet; +import org.tron.json.JSONObject; import org.tron.protos.Protocol.Transaction; import org.tron.protos.Protocol.Transaction.Contract.ContractType; import org.tron.protos.contract.BalanceContract.FreezeBalanceContract; diff --git a/framework/src/main/java/org/tron/core/services/http/FreezeBalanceV2Servlet.java b/framework/src/main/java/org/tron/core/services/http/FreezeBalanceV2Servlet.java index f1687a5bbb1..95d20233898 100644 --- a/framework/src/main/java/org/tron/core/services/http/FreezeBalanceV2Servlet.java +++ b/framework/src/main/java/org/tron/core/services/http/FreezeBalanceV2Servlet.java @@ -1,12 +1,12 @@ package org.tron.core.services.http; -import com.alibaba.fastjson.JSONObject; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.tron.core.Wallet; +import org.tron.json.JSONObject; import org.tron.protos.Protocol.Transaction; import org.tron.protos.Protocol.Transaction.Contract.ContractType; import org.tron.protos.contract.BalanceContract.FreezeBalanceV2Contract; diff --git a/framework/src/main/java/org/tron/core/services/http/GetAccountBalanceServlet.java b/framework/src/main/java/org/tron/core/services/http/GetAccountBalanceServlet.java index 159c3899666..db48fc11340 100644 --- a/framework/src/main/java/org/tron/core/services/http/GetAccountBalanceServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/GetAccountBalanceServlet.java @@ -1,13 +1,11 @@ package org.tron.core.services.http; -import com.alibaba.fastjson.JSONObject; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.tron.core.Wallet; -import org.tron.protos.Protocol.Account; import org.tron.protos.contract.BalanceContract; diff --git a/framework/src/main/java/org/tron/core/services/http/GetAccountByIdServlet.java b/framework/src/main/java/org/tron/core/services/http/GetAccountByIdServlet.java index 7387b801168..96243327c70 100644 --- a/framework/src/main/java/org/tron/core/services/http/GetAccountByIdServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/GetAccountByIdServlet.java @@ -1,6 +1,5 @@ package org.tron.core.services.http; -import com.alibaba.fastjson.JSONObject; import java.io.IOException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -8,6 +7,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.tron.core.Wallet; +import org.tron.json.JSONObject; import org.tron.protos.Protocol.Account; @@ -48,4 +48,4 @@ private void fillResponse(Account account, boolean visible, HttpServletResponse Account reply = wallet.getAccountById(account); Util.printAccount(reply, response, visible); } -} \ No newline at end of file +} diff --git a/framework/src/main/java/org/tron/core/services/http/GetAccountResourceServlet.java b/framework/src/main/java/org/tron/core/services/http/GetAccountResourceServlet.java index 98224334e1a..0e26a526a12 100644 --- a/framework/src/main/java/org/tron/core/services/http/GetAccountResourceServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/GetAccountResourceServlet.java @@ -1,6 +1,5 @@ package org.tron.core.services.http; -import com.alibaba.fastjson.JSONObject; import com.google.protobuf.ByteString; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -10,6 +9,7 @@ import org.tron.api.GrpcAPI.AccountResourceMessage; import org.tron.common.utils.ByteArray; import org.tron.core.Wallet; +import org.tron.json.JSONObject; @Component @Slf4j(topic = "API") diff --git a/framework/src/main/java/org/tron/core/services/http/GetAccountServlet.java b/framework/src/main/java/org/tron/core/services/http/GetAccountServlet.java index 7de95dab541..ee5bbdf3d3a 100644 --- a/framework/src/main/java/org/tron/core/services/http/GetAccountServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/GetAccountServlet.java @@ -1,12 +1,12 @@ package org.tron.core.services.http; -import com.alibaba.fastjson.JSONObject; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.tron.core.Wallet; +import org.tron.json.JSONObject; import org.tron.protos.Protocol.Account; diff --git a/framework/src/main/java/org/tron/core/services/http/GetAssetIssueByIdServlet.java b/framework/src/main/java/org/tron/core/services/http/GetAssetIssueByIdServlet.java index 08f8227deee..b705c4ed0cd 100644 --- a/framework/src/main/java/org/tron/core/services/http/GetAssetIssueByIdServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/GetAssetIssueByIdServlet.java @@ -1,12 +1,12 @@ package org.tron.core.services.http; -import com.alibaba.fastjson.JSONObject; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.tron.core.Wallet; +import org.tron.json.JSONObject; import org.tron.protos.contract.AssetIssueContractOuterClass.AssetIssueContract; diff --git a/framework/src/main/java/org/tron/core/services/http/GetAssetIssueByNameServlet.java b/framework/src/main/java/org/tron/core/services/http/GetAssetIssueByNameServlet.java index a1cc0525514..da6a7243f41 100644 --- a/framework/src/main/java/org/tron/core/services/http/GetAssetIssueByNameServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/GetAssetIssueByNameServlet.java @@ -1,7 +1,5 @@ package org.tron.core.services.http; -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; import com.google.protobuf.ByteString; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -10,6 +8,8 @@ import org.springframework.stereotype.Component; import org.tron.common.utils.ByteArray; import org.tron.core.Wallet; +import org.tron.json.JSON; +import org.tron.json.JSONObject; import org.tron.protos.contract.AssetIssueContractOuterClass.AssetIssueContract; diff --git a/framework/src/main/java/org/tron/core/services/http/GetAssetIssueListByNameServlet.java b/framework/src/main/java/org/tron/core/services/http/GetAssetIssueListByNameServlet.java index d9b7426011d..2c203ed983e 100644 --- a/framework/src/main/java/org/tron/core/services/http/GetAssetIssueListByNameServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/GetAssetIssueListByNameServlet.java @@ -1,7 +1,5 @@ package org.tron.core.services.http; -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; import com.google.protobuf.ByteString; import java.io.IOException; import javax.servlet.http.HttpServletRequest; @@ -12,6 +10,8 @@ import org.tron.api.GrpcAPI.AssetIssueList; import org.tron.common.utils.ByteArray; import org.tron.core.Wallet; +import org.tron.json.JSON; +import org.tron.json.JSONObject; @Component diff --git a/framework/src/main/java/org/tron/core/services/http/GetBlockBalanceServlet.java b/framework/src/main/java/org/tron/core/services/http/GetBlockBalanceServlet.java index 0fc3256899c..5217b37907a 100644 --- a/framework/src/main/java/org/tron/core/services/http/GetBlockBalanceServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/GetBlockBalanceServlet.java @@ -1,13 +1,11 @@ package org.tron.core.services.http; -import com.alibaba.fastjson.JSONObject; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.tron.core.Wallet; -import org.tron.protos.Protocol.Account; import org.tron.protos.contract.BalanceContract.BlockBalanceTrace; diff --git a/framework/src/main/java/org/tron/core/services/http/GetBlockServlet.java b/framework/src/main/java/org/tron/core/services/http/GetBlockServlet.java index 0e0104e8014..2320fc87c7d 100644 --- a/framework/src/main/java/org/tron/core/services/http/GetBlockServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/GetBlockServlet.java @@ -1,7 +1,5 @@ package org.tron.core.services.http; -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; import com.google.common.base.Strings; import java.io.IOException; import javax.servlet.http.HttpServletRequest; @@ -12,6 +10,8 @@ import org.springframework.stereotype.Component; import org.tron.api.GrpcAPI.BlockReq; import org.tron.core.Wallet; +import org.tron.json.JSON; +import org.tron.json.JSONObject; import org.tron.protos.Protocol.Block; diff --git a/framework/src/main/java/org/tron/core/services/http/GetContractInfoServlet.java b/framework/src/main/java/org/tron/core/services/http/GetContractInfoServlet.java index 86ed7f6d9b6..6a1549bd398 100644 --- a/framework/src/main/java/org/tron/core/services/http/GetContractInfoServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/GetContractInfoServlet.java @@ -1,7 +1,5 @@ package org.tron.core.services.http; -import com.alibaba.fastjson.JSONObject; -import java.util.stream.Collectors; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import lombok.extern.slf4j.Slf4j; @@ -9,7 +7,7 @@ import org.springframework.stereotype.Component; import org.tron.api.GrpcAPI.BytesMessage; import org.tron.core.Wallet; -import org.tron.protos.contract.SmartContractOuterClass.SmartContract; +import org.tron.json.JSONObject; import org.tron.protos.contract.SmartContractOuterClass.SmartContractDataWrapper; diff --git a/framework/src/main/java/org/tron/core/services/http/GetContractServlet.java b/framework/src/main/java/org/tron/core/services/http/GetContractServlet.java index b9efd6c1520..3565d3121f6 100644 --- a/framework/src/main/java/org/tron/core/services/http/GetContractServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/GetContractServlet.java @@ -2,7 +2,6 @@ import static org.tron.core.services.http.PostParams.S_VALUE; -import com.alibaba.fastjson.JSONObject; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import lombok.extern.slf4j.Slf4j; @@ -10,6 +9,7 @@ import org.springframework.stereotype.Component; import org.tron.api.GrpcAPI.BytesMessage; import org.tron.core.Wallet; +import org.tron.json.JSONObject; import org.tron.protos.contract.SmartContractOuterClass.SmartContract; diff --git a/framework/src/main/java/org/tron/core/services/http/GetDelegatedResourceAccountIndexServlet.java b/framework/src/main/java/org/tron/core/services/http/GetDelegatedResourceAccountIndexServlet.java index 035e20cb873..e022c523548 100644 --- a/framework/src/main/java/org/tron/core/services/http/GetDelegatedResourceAccountIndexServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/GetDelegatedResourceAccountIndexServlet.java @@ -1,6 +1,5 @@ package org.tron.core.services.http; -import com.alibaba.fastjson.JSONObject; import com.google.protobuf.ByteString; import java.io.IOException; import javax.servlet.http.HttpServletRequest; @@ -11,6 +10,7 @@ import org.tron.api.GrpcAPI.BytesMessage; import org.tron.common.utils.ByteArray; import org.tron.core.Wallet; +import org.tron.json.JSONObject; import org.tron.protos.Protocol.DelegatedResourceAccountIndex; diff --git a/framework/src/main/java/org/tron/core/services/http/GetDelegatedResourceAccountIndexV2Servlet.java b/framework/src/main/java/org/tron/core/services/http/GetDelegatedResourceAccountIndexV2Servlet.java index 3d5bff80941..7ff517256f9 100644 --- a/framework/src/main/java/org/tron/core/services/http/GetDelegatedResourceAccountIndexV2Servlet.java +++ b/framework/src/main/java/org/tron/core/services/http/GetDelegatedResourceAccountIndexV2Servlet.java @@ -1,6 +1,5 @@ package org.tron.core.services.http; -import com.alibaba.fastjson.JSONObject; import com.google.protobuf.ByteString; import java.io.IOException; import javax.servlet.http.HttpServletRequest; @@ -11,6 +10,7 @@ import org.tron.api.GrpcAPI.BytesMessage; import org.tron.common.utils.ByteArray; import org.tron.core.Wallet; +import org.tron.json.JSONObject; import org.tron.protos.Protocol.DelegatedResourceAccountIndex; diff --git a/framework/src/main/java/org/tron/core/services/http/GetExchangeByIdServlet.java b/framework/src/main/java/org/tron/core/services/http/GetExchangeByIdServlet.java index 7a84c0ea8a4..1e87a4f188f 100644 --- a/framework/src/main/java/org/tron/core/services/http/GetExchangeByIdServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/GetExchangeByIdServlet.java @@ -1,9 +1,7 @@ package org.tron.core.services.http; -import com.alibaba.fastjson.JSONObject; import com.google.protobuf.ByteString; import java.io.IOException; -import java.util.stream.Collectors; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import lombok.extern.slf4j.Slf4j; @@ -11,6 +9,7 @@ import org.springframework.stereotype.Component; import org.tron.common.utils.ByteArray; import org.tron.core.Wallet; +import org.tron.json.JSONObject; @Component diff --git a/framework/src/main/java/org/tron/core/services/http/GetIncomingViewingKeyServlet.java b/framework/src/main/java/org/tron/core/services/http/GetIncomingViewingKeyServlet.java index b572cf348e5..4eb3a01693e 100644 --- a/framework/src/main/java/org/tron/core/services/http/GetIncomingViewingKeyServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/GetIncomingViewingKeyServlet.java @@ -1,6 +1,5 @@ package org.tron.core.services.http; -import com.alibaba.fastjson.JSONObject; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import lombok.extern.slf4j.Slf4j; @@ -9,6 +8,7 @@ import org.tron.api.GrpcAPI; import org.tron.common.utils.ByteArray; import org.tron.core.Wallet; +import org.tron.json.JSONObject; @Component diff --git a/framework/src/main/java/org/tron/core/services/http/GetMarketOrderByAccountServlet.java b/framework/src/main/java/org/tron/core/services/http/GetMarketOrderByAccountServlet.java index 1c3190b62ea..1f011bb88ce 100644 --- a/framework/src/main/java/org/tron/core/services/http/GetMarketOrderByAccountServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/GetMarketOrderByAccountServlet.java @@ -1,10 +1,7 @@ package org.tron.core.services.http; -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; import com.google.protobuf.ByteString; import java.io.IOException; -import java.util.stream.Collectors; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import lombok.extern.slf4j.Slf4j; @@ -12,6 +9,8 @@ import org.springframework.stereotype.Component; import org.tron.common.utils.ByteArray; import org.tron.core.Wallet; +import org.tron.json.JSON; +import org.tron.json.JSONObject; import org.tron.protos.Protocol.MarketOrderList; diff --git a/framework/src/main/java/org/tron/core/services/http/GetNodeInfoServlet.java b/framework/src/main/java/org/tron/core/services/http/GetNodeInfoServlet.java index 8516d1c51bb..0b8f7b9ce2b 100644 --- a/framework/src/main/java/org/tron/core/services/http/GetNodeInfoServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/GetNodeInfoServlet.java @@ -1,6 +1,5 @@ package org.tron.core.services.http; -import com.alibaba.fastjson.JSON; import java.io.IOException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -9,6 +8,7 @@ import org.springframework.stereotype.Component; import org.tron.common.entity.NodeInfo; import org.tron.core.services.NodeInfoService; +import org.tron.json.JSON; @Component diff --git a/framework/src/main/java/org/tron/core/services/http/GetProposalByIdServlet.java b/framework/src/main/java/org/tron/core/services/http/GetProposalByIdServlet.java index 9d7805d4f98..f57bc8b1b3f 100644 --- a/framework/src/main/java/org/tron/core/services/http/GetProposalByIdServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/GetProposalByIdServlet.java @@ -1,10 +1,7 @@ package org.tron.core.services.http; -import com.alibaba.fastjson.JSONObject; import com.google.protobuf.ByteString; import java.io.IOException; -import java.util.HashMap; -import java.util.stream.Collectors; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import lombok.extern.slf4j.Slf4j; @@ -12,6 +9,7 @@ import org.springframework.stereotype.Component; import org.tron.common.utils.ByteArray; import org.tron.core.Wallet; +import org.tron.json.JSONObject; import org.tron.protos.Protocol.Proposal; diff --git a/framework/src/main/java/org/tron/core/services/http/GetTransactionInfoByBlockNumServlet.java b/framework/src/main/java/org/tron/core/services/http/GetTransactionInfoByBlockNumServlet.java index 587dd2d6613..5d0a09b1a68 100644 --- a/framework/src/main/java/org/tron/core/services/http/GetTransactionInfoByBlockNumServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/GetTransactionInfoByBlockNumServlet.java @@ -1,7 +1,5 @@ package org.tron.core.services.http; -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; import java.io.IOException; import java.util.List; import javax.servlet.http.HttpServletRequest; @@ -12,6 +10,8 @@ import org.tron.api.GrpcAPI.NumberMessage; import org.tron.api.GrpcAPI.TransactionInfoList; import org.tron.core.Wallet; +import org.tron.json.JSONArray; +import org.tron.json.JSONObject; import org.tron.protos.Protocol.TransactionInfo; import org.tron.protos.Protocol.TransactionInfo.Log; diff --git a/framework/src/main/java/org/tron/core/services/http/GetZenPaymentAddressServlet.java b/framework/src/main/java/org/tron/core/services/http/GetZenPaymentAddressServlet.java index c78b663eec2..c4f81ea7f87 100644 --- a/framework/src/main/java/org/tron/core/services/http/GetZenPaymentAddressServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/GetZenPaymentAddressServlet.java @@ -1,6 +1,5 @@ package org.tron.core.services.http; -import com.alibaba.fastjson.JSONObject; import java.util.stream.Collectors; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -12,6 +11,7 @@ import org.tron.core.Wallet; import org.tron.core.zen.address.DiversifierT; import org.tron.core.zen.address.IncomingViewingKey; +import org.tron.json.JSONObject; @Component diff --git a/framework/src/main/java/org/tron/core/services/http/JsonFormat.java b/framework/src/main/java/org/tron/core/services/http/JsonFormat.java index 96dedb1e20c..2dd0af9ba80 100644 --- a/framework/src/main/java/org/tron/core/services/http/JsonFormat.java +++ b/framework/src/main/java/org/tron/core/services/http/JsonFormat.java @@ -29,7 +29,6 @@ SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -import com.alibaba.fastjson.JSON; import com.google.common.collect.ImmutableSet; import com.google.protobuf.ByteString; import com.google.protobuf.Descriptors; @@ -58,6 +57,7 @@ SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT import org.tron.common.utils.ByteArray; import org.tron.common.utils.Commons; import org.tron.common.utils.StringUtil; +import org.tron.json.JSON; import org.tron.protos.contract.BalanceContract; /** diff --git a/framework/src/main/java/org/tron/core/services/http/MarketCancelOrderServlet.java b/framework/src/main/java/org/tron/core/services/http/MarketCancelOrderServlet.java index 8d19d60ce5c..a9e27bfb8e3 100644 --- a/framework/src/main/java/org/tron/core/services/http/MarketCancelOrderServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/MarketCancelOrderServlet.java @@ -1,12 +1,12 @@ package org.tron.core.services.http; -import com.alibaba.fastjson.JSONObject; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.tron.core.Wallet; +import org.tron.json.JSONObject; import org.tron.protos.Protocol.Transaction; import org.tron.protos.Protocol.Transaction.Contract.ContractType; import org.tron.protos.contract.MarketContract.MarketCancelOrderContract; diff --git a/framework/src/main/java/org/tron/core/services/http/MarketSellAssetServlet.java b/framework/src/main/java/org/tron/core/services/http/MarketSellAssetServlet.java index 258dd270811..12bb7e3e078 100644 --- a/framework/src/main/java/org/tron/core/services/http/MarketSellAssetServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/MarketSellAssetServlet.java @@ -1,6 +1,5 @@ package org.tron.core.services.http; -import com.alibaba.fastjson.JSONObject; import java.util.stream.Collectors; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -8,6 +7,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.tron.core.Wallet; +import org.tron.json.JSONObject; import org.tron.protos.Protocol.Transaction; import org.tron.protos.Protocol.Transaction.Contract.ContractType; import org.tron.protos.contract.MarketContract.MarketSellAssetContract; diff --git a/framework/src/main/java/org/tron/core/services/http/MetricsServlet.java b/framework/src/main/java/org/tron/core/services/http/MetricsServlet.java index bb4bf18e58e..aaaebb22146 100644 --- a/framework/src/main/java/org/tron/core/services/http/MetricsServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/MetricsServlet.java @@ -1,6 +1,5 @@ package org.tron.core.services.http; -import com.alibaba.fastjson.JSON; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import lombok.extern.slf4j.Slf4j; @@ -8,6 +7,7 @@ import org.springframework.stereotype.Component; import org.tron.core.metrics.MetricsApiService; import org.tron.core.metrics.MetricsInfo; +import org.tron.json.JSON; @Component @Slf4j(topic = "API") diff --git a/framework/src/main/java/org/tron/core/services/http/ParticipateAssetIssueServlet.java b/framework/src/main/java/org/tron/core/services/http/ParticipateAssetIssueServlet.java index 1e864250bff..ec5e3d956f6 100644 --- a/framework/src/main/java/org/tron/core/services/http/ParticipateAssetIssueServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/ParticipateAssetIssueServlet.java @@ -1,6 +1,5 @@ package org.tron.core.services.http; -import com.alibaba.fastjson.JSONObject; import java.util.stream.Collectors; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -8,6 +7,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.tron.core.Wallet; +import org.tron.json.JSONObject; import org.tron.protos.Protocol.Transaction; import org.tron.protos.Protocol.Transaction.Contract.ContractType; import org.tron.protos.contract.AssetIssueContractOuterClass.ParticipateAssetIssueContract; diff --git a/framework/src/main/java/org/tron/core/services/http/ProposalApproveServlet.java b/framework/src/main/java/org/tron/core/services/http/ProposalApproveServlet.java index 3fc60016780..dfeeb1acde5 100644 --- a/framework/src/main/java/org/tron/core/services/http/ProposalApproveServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/ProposalApproveServlet.java @@ -1,6 +1,5 @@ package org.tron.core.services.http; -import com.alibaba.fastjson.JSONObject; import java.util.stream.Collectors; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -8,6 +7,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.tron.core.Wallet; +import org.tron.json.JSONObject; import org.tron.protos.Protocol.Transaction; import org.tron.protos.Protocol.Transaction.Contract.ContractType; import org.tron.protos.contract.ProposalContract.ProposalApproveContract; diff --git a/framework/src/main/java/org/tron/core/services/http/ProposalCreateServlet.java b/framework/src/main/java/org/tron/core/services/http/ProposalCreateServlet.java index 9660ee7f863..f1055e00396 100644 --- a/framework/src/main/java/org/tron/core/services/http/ProposalCreateServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/ProposalCreateServlet.java @@ -1,6 +1,5 @@ package org.tron.core.services.http; -import com.alibaba.fastjson.JSONObject; import java.util.stream.Collectors; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -8,6 +7,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.tron.core.Wallet; +import org.tron.json.JSONObject; import org.tron.protos.Protocol.Transaction; import org.tron.protos.Protocol.Transaction.Contract.ContractType; import org.tron.protos.contract.ProposalContract.ProposalCreateContract; diff --git a/framework/src/main/java/org/tron/core/services/http/ProposalDeleteServlet.java b/framework/src/main/java/org/tron/core/services/http/ProposalDeleteServlet.java index 09c4c78a37a..8e7163f490b 100644 --- a/framework/src/main/java/org/tron/core/services/http/ProposalDeleteServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/ProposalDeleteServlet.java @@ -1,6 +1,5 @@ package org.tron.core.services.http; -import com.alibaba.fastjson.JSONObject; import java.util.stream.Collectors; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -8,6 +7,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.tron.core.Wallet; +import org.tron.json.JSONObject; import org.tron.protos.Protocol.Transaction; import org.tron.protos.Protocol.Transaction.Contract.ContractType; import org.tron.protos.contract.ProposalContract.ProposalDeleteContract; diff --git a/framework/src/main/java/org/tron/core/services/http/ScanAndMarkNoteByIvkServlet.java b/framework/src/main/java/org/tron/core/services/http/ScanAndMarkNoteByIvkServlet.java index 692a1c2ecdc..b91fd394442 100644 --- a/framework/src/main/java/org/tron/core/services/http/ScanAndMarkNoteByIvkServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/ScanAndMarkNoteByIvkServlet.java @@ -1,7 +1,5 @@ package org.tron.core.services.http; -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import lombok.extern.slf4j.Slf4j; @@ -11,6 +9,8 @@ import org.tron.api.GrpcAPI.IvkDecryptAndMarkParameters; import org.tron.common.utils.ByteArray; import org.tron.core.Wallet; +import org.tron.json.JSONArray; +import org.tron.json.JSONObject; @Component @Slf4j(topic = "API") diff --git a/framework/src/main/java/org/tron/core/services/http/ScanNoteByIvkServlet.java b/framework/src/main/java/org/tron/core/services/http/ScanNoteByIvkServlet.java index c0076a705f8..c8e25a2fc37 100644 --- a/framework/src/main/java/org/tron/core/services/http/ScanNoteByIvkServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/ScanNoteByIvkServlet.java @@ -1,7 +1,5 @@ package org.tron.core.services.http; -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; import java.util.stream.Collectors; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -12,6 +10,8 @@ import org.tron.api.GrpcAPI.IvkDecryptParameters; import org.tron.common.utils.ByteArray; import org.tron.core.Wallet; +import org.tron.json.JSONArray; +import org.tron.json.JSONObject; @Component @Slf4j(topic = "API") diff --git a/framework/src/main/java/org/tron/core/services/http/ScanShieldedTRC20NotesByIvkServlet.java b/framework/src/main/java/org/tron/core/services/http/ScanShieldedTRC20NotesByIvkServlet.java index 2b52883f490..04c956e544a 100644 --- a/framework/src/main/java/org/tron/core/services/http/ScanShieldedTRC20NotesByIvkServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/ScanShieldedTRC20NotesByIvkServlet.java @@ -1,7 +1,5 @@ package org.tron.core.services.http; -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; import java.util.stream.Collectors; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -12,6 +10,8 @@ import org.tron.api.GrpcAPI.IvkDecryptTRC20Parameters; import org.tron.common.utils.ByteArray; import org.tron.core.Wallet; +import org.tron.json.JSONArray; +import org.tron.json.JSONObject; @Component @Slf4j(topic = "API") diff --git a/framework/src/main/java/org/tron/core/services/http/SetAccountIdServlet.java b/framework/src/main/java/org/tron/core/services/http/SetAccountIdServlet.java index 36203749e0b..2f5b9fd9cd4 100644 --- a/framework/src/main/java/org/tron/core/services/http/SetAccountIdServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/SetAccountIdServlet.java @@ -1,6 +1,5 @@ package org.tron.core.services.http; -import com.alibaba.fastjson.JSONObject; import java.util.stream.Collectors; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -8,6 +7,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.tron.core.Wallet; +import org.tron.json.JSONObject; import org.tron.protos.Protocol; import org.tron.protos.contract.AccountContract.SetAccountIdContract; diff --git a/framework/src/main/java/org/tron/core/services/http/TransferAssetServlet.java b/framework/src/main/java/org/tron/core/services/http/TransferAssetServlet.java index af2699c4bf4..c8becdb9fde 100644 --- a/framework/src/main/java/org/tron/core/services/http/TransferAssetServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/TransferAssetServlet.java @@ -1,6 +1,5 @@ package org.tron.core.services.http; -import com.alibaba.fastjson.JSONObject; import java.util.stream.Collectors; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -8,6 +7,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.tron.core.Wallet; +import org.tron.json.JSONObject; import org.tron.protos.Protocol.Transaction; import org.tron.protos.Protocol.Transaction.Contract.ContractType; import org.tron.protos.contract.AssetIssueContractOuterClass.TransferAssetContract; diff --git a/framework/src/main/java/org/tron/core/services/http/TransferServlet.java b/framework/src/main/java/org/tron/core/services/http/TransferServlet.java index 6f575e4fe3f..11b2179800a 100644 --- a/framework/src/main/java/org/tron/core/services/http/TransferServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/TransferServlet.java @@ -1,6 +1,5 @@ package org.tron.core.services.http; -import com.alibaba.fastjson.JSONObject; import java.util.stream.Collectors; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -8,6 +7,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.tron.core.Wallet; +import org.tron.json.JSONObject; import org.tron.protos.Protocol.Transaction; import org.tron.protos.Protocol.Transaction.Contract.ContractType; import org.tron.protos.contract.BalanceContract.TransferContract; diff --git a/framework/src/main/java/org/tron/core/services/http/TriggerConstantContractServlet.java b/framework/src/main/java/org/tron/core/services/http/TriggerConstantContractServlet.java index 8a46ee1ed74..634165911d1 100644 --- a/framework/src/main/java/org/tron/core/services/http/TriggerConstantContractServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/TriggerConstantContractServlet.java @@ -1,6 +1,5 @@ package org.tron.core.services.http; -import com.alibaba.fastjson.JSONObject; import com.google.protobuf.ByteString; import io.netty.util.internal.StringUtil; import java.io.IOException; @@ -17,6 +16,7 @@ import org.tron.core.Wallet; import org.tron.core.capsule.TransactionCapsule; import org.tron.core.exception.ContractValidateException; +import org.tron.json.JSONObject; import org.tron.protos.Protocol.Transaction; import org.tron.protos.Protocol.Transaction.Contract.ContractType; import org.tron.protos.contract.SmartContractOuterClass.TriggerSmartContract; diff --git a/framework/src/main/java/org/tron/core/services/http/TriggerSmartContractServlet.java b/framework/src/main/java/org/tron/core/services/http/TriggerSmartContractServlet.java index 6577a9e5f24..bc4d9dc5f66 100644 --- a/framework/src/main/java/org/tron/core/services/http/TriggerSmartContractServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/TriggerSmartContractServlet.java @@ -1,6 +1,5 @@ package org.tron.core.services.http; -import com.alibaba.fastjson.JSONObject; import com.google.protobuf.ByteString; import io.netty.util.internal.StringUtil; import java.io.IOException; @@ -18,6 +17,7 @@ import org.tron.core.Wallet; import org.tron.core.capsule.TransactionCapsule; import org.tron.core.exception.ContractValidateException; +import org.tron.json.JSONObject; import org.tron.protos.Protocol.Transaction; import org.tron.protos.Protocol.Transaction.Contract.ContractType; import org.tron.protos.contract.SmartContractOuterClass.TriggerSmartContract; diff --git a/framework/src/main/java/org/tron/core/services/http/UnDelegateResourceServlet.java b/framework/src/main/java/org/tron/core/services/http/UnDelegateResourceServlet.java index cf9c2c95dcd..140129d4e34 100644 --- a/framework/src/main/java/org/tron/core/services/http/UnDelegateResourceServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/UnDelegateResourceServlet.java @@ -1,12 +1,12 @@ package org.tron.core.services.http; -import com.alibaba.fastjson.JSONObject; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.tron.core.Wallet; +import org.tron.json.JSONObject; import org.tron.protos.Protocol.Transaction; import org.tron.protos.Protocol.Transaction.Contract.ContractType; import org.tron.protos.contract.BalanceContract.UnDelegateResourceContract; diff --git a/framework/src/main/java/org/tron/core/services/http/UnFreezeAssetServlet.java b/framework/src/main/java/org/tron/core/services/http/UnFreezeAssetServlet.java index 6118b39f2cd..a2218547b4a 100644 --- a/framework/src/main/java/org/tron/core/services/http/UnFreezeAssetServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/UnFreezeAssetServlet.java @@ -1,13 +1,12 @@ package org.tron.core.services.http; -import com.alibaba.fastjson.JSONObject; -import java.util.stream.Collectors; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.tron.core.Wallet; +import org.tron.json.JSONObject; import org.tron.protos.Protocol.Transaction; import org.tron.protos.Protocol.Transaction.Contract.ContractType; import org.tron.protos.contract.AssetIssueContractOuterClass.UnfreezeAssetContract; diff --git a/framework/src/main/java/org/tron/core/services/http/UnFreezeBalanceServlet.java b/framework/src/main/java/org/tron/core/services/http/UnFreezeBalanceServlet.java index eb075b7139d..1f893003c20 100644 --- a/framework/src/main/java/org/tron/core/services/http/UnFreezeBalanceServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/UnFreezeBalanceServlet.java @@ -1,13 +1,12 @@ package org.tron.core.services.http; -import com.alibaba.fastjson.JSONObject; -import java.util.stream.Collectors; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.tron.core.Wallet; +import org.tron.json.JSONObject; import org.tron.protos.Protocol.Transaction; import org.tron.protos.Protocol.Transaction.Contract.ContractType; import org.tron.protos.contract.BalanceContract.UnfreezeBalanceContract; diff --git a/framework/src/main/java/org/tron/core/services/http/UnFreezeBalanceV2Servlet.java b/framework/src/main/java/org/tron/core/services/http/UnFreezeBalanceV2Servlet.java index 614a7ca6b7a..05644c0b941 100644 --- a/framework/src/main/java/org/tron/core/services/http/UnFreezeBalanceV2Servlet.java +++ b/framework/src/main/java/org/tron/core/services/http/UnFreezeBalanceV2Servlet.java @@ -1,12 +1,12 @@ package org.tron.core.services.http; -import com.alibaba.fastjson.JSONObject; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.tron.core.Wallet; +import org.tron.json.JSONObject; import org.tron.protos.Protocol.Transaction; import org.tron.protos.Protocol.Transaction.Contract.ContractType; import org.tron.protos.contract.BalanceContract.UnfreezeBalanceV2Contract; diff --git a/framework/src/main/java/org/tron/core/services/http/UpdateAccountServlet.java b/framework/src/main/java/org/tron/core/services/http/UpdateAccountServlet.java index 0251a46ec64..532d7acf658 100644 --- a/framework/src/main/java/org/tron/core/services/http/UpdateAccountServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/UpdateAccountServlet.java @@ -1,13 +1,12 @@ package org.tron.core.services.http; -import com.alibaba.fastjson.JSONObject; -import java.util.stream.Collectors; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.tron.core.Wallet; +import org.tron.json.JSONObject; import org.tron.protos.Protocol.Transaction; import org.tron.protos.Protocol.Transaction.Contract.ContractType; import org.tron.protos.contract.AccountContract.AccountUpdateContract; diff --git a/framework/src/main/java/org/tron/core/services/http/UpdateAssetServlet.java b/framework/src/main/java/org/tron/core/services/http/UpdateAssetServlet.java index d3f467ff7a8..e7e8179b1a4 100644 --- a/framework/src/main/java/org/tron/core/services/http/UpdateAssetServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/UpdateAssetServlet.java @@ -1,13 +1,12 @@ package org.tron.core.services.http; -import com.alibaba.fastjson.JSONObject; -import java.util.stream.Collectors; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.tron.core.Wallet; +import org.tron.json.JSONObject; import org.tron.protos.Protocol.Transaction; import org.tron.protos.Protocol.Transaction.Contract.ContractType; import org.tron.protos.contract.AssetIssueContractOuterClass.UpdateAssetContract; diff --git a/framework/src/main/java/org/tron/core/services/http/UpdateBrokerageServlet.java b/framework/src/main/java/org/tron/core/services/http/UpdateBrokerageServlet.java index 23daaef6072..e1073354ddc 100644 --- a/framework/src/main/java/org/tron/core/services/http/UpdateBrokerageServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/UpdateBrokerageServlet.java @@ -1,13 +1,12 @@ package org.tron.core.services.http; -import com.alibaba.fastjson.JSONObject; -import java.util.stream.Collectors; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.tron.core.Wallet; +import org.tron.json.JSONObject; import org.tron.protos.Protocol.Transaction; import org.tron.protos.Protocol.Transaction.Contract.ContractType; import org.tron.protos.contract.StorageContract.UpdateBrokerageContract; diff --git a/framework/src/main/java/org/tron/core/services/http/UpdateEnergyLimitServlet.java b/framework/src/main/java/org/tron/core/services/http/UpdateEnergyLimitServlet.java index aac6e8ff50e..cd349c7e153 100644 --- a/framework/src/main/java/org/tron/core/services/http/UpdateEnergyLimitServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/UpdateEnergyLimitServlet.java @@ -1,13 +1,12 @@ package org.tron.core.services.http; -import com.alibaba.fastjson.JSONObject; -import java.util.stream.Collectors; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.tron.core.Wallet; +import org.tron.json.JSONObject; import org.tron.protos.Protocol.Transaction; import org.tron.protos.Protocol.Transaction.Contract.ContractType; import org.tron.protos.contract.SmartContractOuterClass.UpdateEnergyLimitContract; diff --git a/framework/src/main/java/org/tron/core/services/http/UpdateSettingServlet.java b/framework/src/main/java/org/tron/core/services/http/UpdateSettingServlet.java index 821054c7b4e..e58f02df157 100644 --- a/framework/src/main/java/org/tron/core/services/http/UpdateSettingServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/UpdateSettingServlet.java @@ -1,12 +1,12 @@ package org.tron.core.services.http; -import com.alibaba.fastjson.JSONObject; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.tron.core.Wallet; +import org.tron.json.JSONObject; import org.tron.protos.Protocol.Transaction; import org.tron.protos.Protocol.Transaction.Contract.ContractType; import org.tron.protos.contract.SmartContractOuterClass.UpdateSettingContract; diff --git a/framework/src/main/java/org/tron/core/services/http/UpdateWitnessServlet.java b/framework/src/main/java/org/tron/core/services/http/UpdateWitnessServlet.java index 3584557d3b6..6b0c4449e88 100644 --- a/framework/src/main/java/org/tron/core/services/http/UpdateWitnessServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/UpdateWitnessServlet.java @@ -1,13 +1,12 @@ package org.tron.core.services.http; -import com.alibaba.fastjson.JSONObject; -import java.util.stream.Collectors; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.tron.core.Wallet; +import org.tron.json.JSONObject; import org.tron.protos.Protocol.Transaction; import org.tron.protos.Protocol.Transaction.Contract.ContractType; import org.tron.protos.contract.WitnessContract.WitnessUpdateContract; diff --git a/framework/src/main/java/org/tron/core/services/http/Util.java b/framework/src/main/java/org/tron/core/services/http/Util.java index 2b6b929d8a0..7ea80325b91 100644 --- a/framework/src/main/java/org/tron/core/services/http/Util.java +++ b/framework/src/main/java/org/tron/core/services/http/Util.java @@ -3,16 +3,11 @@ import static org.apache.commons.lang3.StringUtils.EMPTY; import static org.tron.common.utils.Commons.decodeFromBase58Check; -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONException; -import com.alibaba.fastjson.JSONObject; import com.google.protobuf.Any; import com.google.protobuf.ByteString; import com.google.protobuf.GeneratedMessageV3; import com.google.protobuf.InvalidProtocolBufferException; import com.google.protobuf.Message; - import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; @@ -52,6 +47,10 @@ import org.tron.core.config.args.Args; import org.tron.core.db.TransactionTrace; import org.tron.core.services.http.JsonFormat.ParseException; +import org.tron.json.JSON; +import org.tron.json.JSONArray; +import org.tron.json.JSONException; +import org.tron.json.JSONObject; import org.tron.protos.Protocol.Account; import org.tron.protos.Protocol.Block; import org.tron.protos.Protocol.Transaction; @@ -636,8 +635,7 @@ public static String getJsonString(String str) { public static boolean isValidJson(String json) { try { - JSON.parse(json); - return true; + return JSON.parse(json) != null; } catch (Exception e) { return false; } diff --git a/framework/src/main/java/org/tron/core/services/http/ValidateAddressServlet.java b/framework/src/main/java/org/tron/core/services/http/ValidateAddressServlet.java index a65e2ce2ee0..07eecfc5466 100644 --- a/framework/src/main/java/org/tron/core/services/http/ValidateAddressServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/ValidateAddressServlet.java @@ -1,7 +1,5 @@ package org.tron.core.services.http; -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; import java.io.IOException; import java.util.Base64; import java.util.stream.Collectors; @@ -12,6 +10,8 @@ import org.tron.common.utils.ByteArray; import org.tron.common.utils.Commons; import org.tron.common.utils.DecodeUtil; +import org.tron.json.JSON; +import org.tron.json.JSONObject; @Component diff --git a/framework/src/main/java/org/tron/core/services/http/VoteWitnessAccountServlet.java b/framework/src/main/java/org/tron/core/services/http/VoteWitnessAccountServlet.java index 0a77a0e6fc1..f3695b83de8 100644 --- a/framework/src/main/java/org/tron/core/services/http/VoteWitnessAccountServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/VoteWitnessAccountServlet.java @@ -1,6 +1,5 @@ package org.tron.core.services.http; -import com.alibaba.fastjson.JSONObject; import java.util.stream.Collectors; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -8,6 +7,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.tron.core.Wallet; +import org.tron.json.JSONObject; import org.tron.protos.Protocol.Transaction; import org.tron.protos.Protocol.Transaction.Contract.ContractType; import org.tron.protos.contract.WitnessContract.VoteWitnessContract; diff --git a/framework/src/main/java/org/tron/core/services/http/WithdrawBalanceServlet.java b/framework/src/main/java/org/tron/core/services/http/WithdrawBalanceServlet.java index 27ea54d8ee2..33faa01866c 100644 --- a/framework/src/main/java/org/tron/core/services/http/WithdrawBalanceServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/WithdrawBalanceServlet.java @@ -1,6 +1,5 @@ package org.tron.core.services.http; -import com.alibaba.fastjson.JSONObject; import java.util.stream.Collectors; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -8,6 +7,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.tron.core.Wallet; +import org.tron.json.JSONObject; import org.tron.protos.Protocol.Transaction; import org.tron.protos.Protocol.Transaction.Contract.ContractType; import org.tron.protos.contract.BalanceContract.WithdrawBalanceContract; diff --git a/framework/src/main/java/org/tron/core/services/http/WithdrawExpireUnfreezeServlet.java b/framework/src/main/java/org/tron/core/services/http/WithdrawExpireUnfreezeServlet.java index 4888ee42de4..7e5f3f96c57 100644 --- a/framework/src/main/java/org/tron/core/services/http/WithdrawExpireUnfreezeServlet.java +++ b/framework/src/main/java/org/tron/core/services/http/WithdrawExpireUnfreezeServlet.java @@ -1,7 +1,5 @@ package org.tron.core.services.http; -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; import java.util.stream.Collectors; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -9,6 +7,8 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.tron.core.Wallet; +import org.tron.json.JSON; +import org.tron.json.JSONObject; import org.tron.protos.Protocol.Transaction; import org.tron.protos.Protocol.Transaction.Contract.ContractType; import org.tron.protos.contract.BalanceContract.WithdrawExpireUnfreezeContract; diff --git a/framework/src/main/java/org/tron/core/services/jsonrpc/TronJsonRpc.java b/framework/src/main/java/org/tron/core/services/jsonrpc/TronJsonRpc.java index 115df6ef9da..f94ebe84a9b 100644 --- a/framework/src/main/java/org/tron/core/services/jsonrpc/TronJsonRpc.java +++ b/framework/src/main/java/org/tron/core/services/jsonrpc/TronJsonRpc.java @@ -1,6 +1,5 @@ package org.tron.core.services.jsonrpc; -import com.alibaba.fastjson.JSONObject; import com.fasterxml.jackson.annotation.JsonPropertyOrder; import com.googlecode.jsonrpc4j.JsonRpcError; import com.googlecode.jsonrpc4j.JsonRpcErrors; @@ -30,6 +29,7 @@ import org.tron.core.services.jsonrpc.types.CallArguments; import org.tron.core.services.jsonrpc.types.TransactionReceipt; import org.tron.core.services.jsonrpc.types.TransactionResult; +import org.tron.json.JSONObject; /** * Error code refers to https://www.quicknode.com/docs/ethereum/error-references diff --git a/framework/src/main/java/org/tron/core/services/jsonrpc/TronJsonRpcImpl.java b/framework/src/main/java/org/tron/core/services/jsonrpc/TronJsonRpcImpl.java index de939bdfff4..9084df3e5c7 100644 --- a/framework/src/main/java/org/tron/core/services/jsonrpc/TronJsonRpcImpl.java +++ b/framework/src/main/java/org/tron/core/services/jsonrpc/TronJsonRpcImpl.java @@ -10,7 +10,6 @@ import static org.tron.core.services.jsonrpc.JsonRpcApiUtil.getTxID; import static org.tron.core.services.jsonrpc.JsonRpcApiUtil.triggerCallContract; -import com.alibaba.fastjson.JSON; import com.google.common.cache.Cache; import com.google.common.cache.CacheBuilder; import com.google.protobuf.ByteString; @@ -85,6 +84,7 @@ import org.tron.core.services.jsonrpc.types.TransactionResult; import org.tron.core.store.StorageRowStore; import org.tron.core.vm.program.Storage; +import org.tron.json.JSON; import org.tron.program.Version; import org.tron.protos.Protocol.Account; import org.tron.protos.Protocol.Block; diff --git a/framework/src/main/java/org/tron/keystore/WalletUtils.java b/framework/src/main/java/org/tron/keystore/WalletUtils.java index 8bcc68cbab0..1ddb64eded5 100644 --- a/framework/src/main/java/org/tron/keystore/WalletUtils.java +++ b/framework/src/main/java/org/tron/keystore/WalletUtils.java @@ -3,6 +3,7 @@ import com.fasterxml.jackson.core.JsonParser; import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.json.JsonMapper; import java.io.Console; import java.io.File; import java.io.IOException; @@ -25,7 +26,7 @@ */ public class WalletUtils { - private static final ObjectMapper objectMapper = new ObjectMapper(); + private static final ObjectMapper objectMapper = JsonMapper.builder().build(); static { objectMapper.configure(JsonParser.Feature.ALLOW_UNQUOTED_FIELD_NAMES, true); diff --git a/framework/src/test/java/org/tron/common/logsfilter/EventParserJsonTest.java b/framework/src/test/java/org/tron/common/logsfilter/EventParserJsonTest.java index 34a8e82c424..9ad41517ae6 100644 --- a/framework/src/test/java/org/tron/common/logsfilter/EventParserJsonTest.java +++ b/framework/src/test/java/org/tron/common/logsfilter/EventParserJsonTest.java @@ -2,8 +2,6 @@ import static org.tron.core.Constant.ADD_PRE_FIX_BYTE_MAINNET; -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; import java.util.LinkedList; import java.util.List; import java.util.Map; @@ -12,6 +10,8 @@ import org.tron.common.crypto.Hash; import org.tron.common.utils.ByteArray; import org.tron.core.Wallet; +import org.tron.json.JSONArray; +import org.tron.json.JSONObject; public class EventParserJsonTest { diff --git a/framework/src/test/java/org/tron/common/utils/client/utils/AbiUtil.java b/framework/src/test/java/org/tron/common/utils/client/utils/AbiUtil.java index 1d780bfacd4..8a56d48fd39 100644 --- a/framework/src/test/java/org/tron/common/utils/client/utils/AbiUtil.java +++ b/framework/src/test/java/org/tron/common/utils/client/utils/AbiUtil.java @@ -3,6 +3,7 @@ import static org.tron.common.math.Maths.abs; import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.json.JsonMapper; import java.io.IOException; import java.util.ArrayList; import java.util.List; @@ -19,6 +20,7 @@ public class AbiUtil { private static Pattern paramTypeBytes = Pattern.compile("^bytes([0-9]*)$"); private static Pattern paramTypeNumber = Pattern.compile("^(u?int)([0-9]*)$"); private static Pattern paramTypeArray = Pattern.compile("^(.*)\\[([0-9]*)]$"); + private static final ObjectMapper mapper = JsonMapper.builder().build(); public static String[] getTypes(String methodSign) { int start = methodSign.indexOf('(') + 1; @@ -221,7 +223,6 @@ public static String parseSelector(String methodSign) { } public static byte[] encodeInput(String methodSign, String input) { - ObjectMapper mapper = new ObjectMapper(); input = "[" + input + "]"; List items; try { @@ -315,7 +316,6 @@ byte[] encode(String arrayValues) { List items; try { - ObjectMapper mapper = new ObjectMapper(); items = mapper.readValue(arrayValues, List.class); } catch (IOException e) { e.printStackTrace(); diff --git a/framework/src/test/java/org/tron/common/utils/client/utils/HttpMethed.java b/framework/src/test/java/org/tron/common/utils/client/utils/HttpMethed.java index 030fbd80dea..cea17b0c033 100644 --- a/framework/src/test/java/org/tron/common/utils/client/utils/HttpMethed.java +++ b/framework/src/test/java/org/tron/common/utils/client/utils/HttpMethed.java @@ -1,7 +1,5 @@ package org.tron.common.utils.client.utils; -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; import com.google.common.collect.Lists; import com.google.gson.Gson; import com.google.gson.JsonArray; @@ -29,6 +27,8 @@ import org.tron.common.utils.ByteUtil; import org.tron.common.utils.PublicMethod; import org.tron.common.utils.client.Configuration; +import org.tron.json.JSONArray; +import org.tron.json.JSONObject; @Slf4j public class HttpMethed { diff --git a/framework/src/test/java/org/tron/common/utils/client/utils/JSONObjectWarp.java b/framework/src/test/java/org/tron/common/utils/client/utils/JSONObjectWarp.java index bab667dedf1..500d1f452b2 100644 --- a/framework/src/test/java/org/tron/common/utils/client/utils/JSONObjectWarp.java +++ b/framework/src/test/java/org/tron/common/utils/client/utils/JSONObjectWarp.java @@ -1,9 +1,34 @@ package org.tron.common.utils.client.utils; -import com.alibaba.fastjson.JSONObject; +import org.tron.json.JSONObject; public class JSONObjectWarp extends JSONObject { + @Override + public JSONObjectWarp put(String key, String value) { + super.put(key, value); + return this; + } + + @Override + public JSONObjectWarp put(String key, Boolean value) { + super.put(key, value); + return this; + } + + @Override + public JSONObjectWarp put(String key, Integer value) { + super.put(key, value); + return this; + } + + @Override + public JSONObjectWarp put(String key, Long value) { + super.put(key, value); + return this; + } + + @Override public JSONObjectWarp put(String key, Object value) { super.put(key, value); return this; diff --git a/framework/src/test/java/org/tron/core/actuator/vm/SerializersTest.java b/framework/src/test/java/org/tron/core/actuator/vm/SerializersTest.java index 52ee1eeb937..efbcf82d0a0 100644 --- a/framework/src/test/java/org/tron/core/actuator/vm/SerializersTest.java +++ b/framework/src/test/java/org/tron/core/actuator/vm/SerializersTest.java @@ -7,6 +7,6 @@ public class SerializersTest { @Test public void testSerializeFieldsOnly() { - Serializers.serializeFieldsOnly("testString", true); + Serializers.serializeFieldsOnly("testString"); } } diff --git a/framework/src/test/java/org/tron/core/jsonrpc/JsonrpcServiceTest.java b/framework/src/test/java/org/tron/core/jsonrpc/JsonrpcServiceTest.java index ced7048c9d2..5f57890d4a7 100644 --- a/framework/src/test/java/org/tron/core/jsonrpc/JsonrpcServiceTest.java +++ b/framework/src/test/java/org/tron/core/jsonrpc/JsonrpcServiceTest.java @@ -3,7 +3,6 @@ import static org.tron.core.services.jsonrpc.JsonRpcApiUtil.getByJsonBlockId; import static org.tron.core.services.jsonrpc.TronJsonRpcImpl.TAG_PENDING_SUPPORT_ERROR; -import com.alibaba.fastjson.JSON; import com.google.gson.JsonArray; import com.google.gson.JsonObject; import com.google.protobuf.ByteString; @@ -50,6 +49,7 @@ import org.tron.core.services.jsonrpc.types.BlockResult; import org.tron.core.services.jsonrpc.types.TransactionReceipt; import org.tron.core.services.jsonrpc.types.TransactionResult; +import org.tron.json.JSON; import org.tron.protos.Protocol; import org.tron.protos.Protocol.Transaction.Contract.ContractType; import org.tron.protos.contract.BalanceContract.TransferContract; diff --git a/framework/src/test/java/org/tron/core/net/messagehandler/PbftDataSyncHandlerTest.java b/framework/src/test/java/org/tron/core/net/messagehandler/PbftDataSyncHandlerTest.java index e5d242a6c4d..8c5196ce04a 100644 --- a/framework/src/test/java/org/tron/core/net/messagehandler/PbftDataSyncHandlerTest.java +++ b/framework/src/test/java/org/tron/core/net/messagehandler/PbftDataSyncHandlerTest.java @@ -1,6 +1,5 @@ package org.tron.core.net.messagehandler; -import com.alibaba.fastjson.JSON; import com.google.protobuf.ByteString; import java.lang.reflect.Field; import java.util.ArrayList; @@ -15,6 +14,7 @@ import org.tron.core.db.PbftSignDataStore; import org.tron.core.net.message.pbft.PbftCommitMessage; import org.tron.core.store.DynamicPropertiesStore; +import org.tron.json.JSON; import org.tron.protos.Protocol; public class PbftDataSyncHandlerTest { diff --git a/framework/src/test/java/org/tron/core/pbft/PbftApiTest.java b/framework/src/test/java/org/tron/core/pbft/PbftApiTest.java index 48af7408b6f..36253333a4e 100755 --- a/framework/src/test/java/org/tron/core/pbft/PbftApiTest.java +++ b/framework/src/test/java/org/tron/core/pbft/PbftApiTest.java @@ -1,7 +1,5 @@ package org.tron.core.pbft; -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; import com.google.protobuf.ByteString; import java.io.IOException; import java.util.Objects; @@ -29,6 +27,8 @@ import org.tron.core.db2.ISession; import org.tron.core.services.interfaceOnPBFT.http.PBFT.HttpApiOnPBFTService; import org.tron.core.store.DynamicPropertiesStore; +import org.tron.json.JSON; +import org.tron.json.JSONObject; @Slf4j public class PbftApiTest extends BaseTest { diff --git a/framework/src/test/java/org/tron/core/services/NodeInfoServiceTest.java b/framework/src/test/java/org/tron/core/services/NodeInfoServiceTest.java index 10e69258406..ce0a09da94a 100644 --- a/framework/src/test/java/org/tron/core/services/NodeInfoServiceTest.java +++ b/framework/src/test/java/org/tron/core/services/NodeInfoServiceTest.java @@ -1,6 +1,5 @@ package org.tron.core.services; -import com.alibaba.fastjson.JSON; import com.google.protobuf.ByteString; import java.net.InetSocketAddress; import javax.annotation.Resource; @@ -21,6 +20,7 @@ import org.tron.core.net.P2pEventHandlerImpl; import org.tron.core.net.TronNetService; import org.tron.core.net.peer.PeerManager; +import org.tron.json.JSON; import org.tron.p2p.P2pConfig; import org.tron.p2p.connection.Channel; import org.tron.program.Version; diff --git a/framework/src/test/java/org/tron/core/services/http/AccountPermissionUpdateServletTest.java b/framework/src/test/java/org/tron/core/services/http/AccountPermissionUpdateServletTest.java new file mode 100644 index 00000000000..acf78fbc15f --- /dev/null +++ b/framework/src/test/java/org/tron/core/services/http/AccountPermissionUpdateServletTest.java @@ -0,0 +1,65 @@ +package org.tron.core.services.http; + +import static java.nio.charset.StandardCharsets.UTF_8; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.when; + +import java.lang.reflect.Field; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +import org.springframework.mock.web.MockHttpServletRequest; +import org.springframework.mock.web.MockHttpServletResponse; +import org.tron.core.Wallet; +import org.tron.core.capsule.TransactionCapsule; +import org.tron.protos.Protocol.Transaction; + +public class AccountPermissionUpdateServletTest { + + private AccountPermissionUpdateServlet servlet; + @Mock + private Wallet wallet; + private AutoCloseable closeable; + + @Before + public void setUp() throws Exception { + closeable = MockitoAnnotations.openMocks(this); + servlet = new AccountPermissionUpdateServlet(); + Field f = AccountPermissionUpdateServlet.class.getDeclaredField("wallet"); + f.setAccessible(true); + f.set(servlet, wallet); + when(wallet.createTransactionCapsule(any(), any())) + .thenReturn(new TransactionCapsule(Transaction.getDefaultInstance())); + } + + @After + public void clearMocks() throws Exception { + closeable.close(); + } + + @Test + public void testAccountPermissionUpdate() throws Exception { + String jsonParam = "{" + + "\"owner_address\": \"4199357684BC659F5166046B56C95A0E99F1265CD1\"," + + "\"owner\": {\"type\": 0, \"permission_name\": \"owner\", \"threshold\": 1," + + " \"keys\": [{\"address\": \"4199357684BC659F5166046B56C95A0E99F1265CD1\"," + + " \"weight\": 1}]}" + + "}"; + MockHttpServletRequest request = new MockHttpServletRequest(); + request.setMethod("POST"); + request.setContentType("application/json"); + request.setContent(jsonParam.getBytes(UTF_8)); + + MockHttpServletResponse response = new MockHttpServletResponse(); + servlet.doPost(request, response); + assertEquals(200, response.getStatus()); + String content = response.getContentAsString(); + assertFalse(content.contains("\"Error\"")); + assertTrue(content.contains("txID")); + } +} diff --git a/framework/src/test/java/org/tron/core/services/http/CancelAllUnfreezeV2ServletTest.java b/framework/src/test/java/org/tron/core/services/http/CancelAllUnfreezeV2ServletTest.java new file mode 100644 index 00000000000..78b8c1f02dd --- /dev/null +++ b/framework/src/test/java/org/tron/core/services/http/CancelAllUnfreezeV2ServletTest.java @@ -0,0 +1,57 @@ +package org.tron.core.services.http; + +import static java.nio.charset.StandardCharsets.UTF_8; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.when; + +import java.lang.reflect.Field; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +import org.springframework.mock.web.MockHttpServletRequest; +import org.springframework.mock.web.MockHttpServletResponse; +import org.tron.core.Wallet; +import org.tron.core.capsule.TransactionCapsule; +import org.tron.protos.Protocol.Transaction; + +public class CancelAllUnfreezeV2ServletTest { + + private CancelAllUnfreezeV2Servlet servlet; + @Mock + private Wallet wallet; + private AutoCloseable closeable; + + @Before + public void setUp() throws Exception { + closeable = MockitoAnnotations.openMocks(this); + servlet = new CancelAllUnfreezeV2Servlet(); + Field f = CancelAllUnfreezeV2Servlet.class.getDeclaredField("wallet"); + f.setAccessible(true); + f.set(servlet, wallet); + when(wallet.createTransactionCapsule(any(), any())) + .thenReturn(new TransactionCapsule(Transaction.getDefaultInstance())); + } + + @After + public void clearMocks() throws Exception { + closeable.close(); + } + + @Test + public void testCancelAllUnfreezeV2() throws Exception { + String jsonParam = "{\"owner_address\": \"4199357684BC659F5166046B56C95A0E99F1265CD1\"}"; + MockHttpServletRequest request = new MockHttpServletRequest(); + request.setMethod("POST"); + request.setContentType("application/json"); + request.setContent(jsonParam.getBytes(UTF_8)); + + MockHttpServletResponse response = new MockHttpServletResponse(); + servlet.doPost(request, response); + assertEquals(200, response.getStatus()); + assertNotNull(response.getContentAsString()); + } +} diff --git a/framework/src/test/java/org/tron/core/services/http/ClearABIServletTest.java b/framework/src/test/java/org/tron/core/services/http/ClearABIServletTest.java index 48b538380c2..9d75226aa42 100644 --- a/framework/src/test/java/org/tron/core/services/http/ClearABIServletTest.java +++ b/framework/src/test/java/org/tron/core/services/http/ClearABIServletTest.java @@ -5,14 +5,10 @@ import static org.junit.Assert.fail; import static org.tron.common.utils.client.utils.HttpMethed.createRequest; -import com.alibaba.fastjson.JSONObject; import com.google.protobuf.ByteString; - import java.io.UnsupportedEncodingException; import javax.annotation.Resource; - import org.apache.http.client.methods.HttpPost; - import org.junit.Assert; import org.junit.Test; import org.springframework.mock.web.MockHttpServletRequest; @@ -22,6 +18,7 @@ import org.tron.common.utils.ByteArray; import org.tron.core.capsule.ContractCapsule; import org.tron.core.config.args.Args; +import org.tron.json.JSONObject; import org.tron.protos.contract.SmartContractOuterClass; public class ClearABIServletTest extends BaseTest { diff --git a/framework/src/test/java/org/tron/core/services/http/CreateAccountServletTest.java b/framework/src/test/java/org/tron/core/services/http/CreateAccountServletTest.java index 1c34d7b8a92..c9d6a4f2a63 100644 --- a/framework/src/test/java/org/tron/core/services/http/CreateAccountServletTest.java +++ b/framework/src/test/java/org/tron/core/services/http/CreateAccountServletTest.java @@ -4,12 +4,9 @@ import static org.junit.Assert.fail; import static org.tron.common.utils.client.utils.HttpMethed.createRequest; -import com.alibaba.fastjson.JSONObject; import com.google.protobuf.ByteString; - import java.io.UnsupportedEncodingException; import javax.annotation.Resource; - import org.apache.http.client.methods.HttpPost; import org.junit.Assert; import org.junit.Before; @@ -21,6 +18,7 @@ import org.tron.common.utils.ByteArray; import org.tron.core.capsule.AccountCapsule; import org.tron.core.config.args.Args; +import org.tron.json.JSONObject; import org.tron.protos.Protocol; diff --git a/framework/src/test/java/org/tron/core/services/http/CreateAssetIssueServletTest.java b/framework/src/test/java/org/tron/core/services/http/CreateAssetIssueServletTest.java index 52ada9dd0d0..9a53814ea11 100644 --- a/framework/src/test/java/org/tron/core/services/http/CreateAssetIssueServletTest.java +++ b/framework/src/test/java/org/tron/core/services/http/CreateAssetIssueServletTest.java @@ -4,12 +4,9 @@ import static org.junit.Assert.fail; import static org.tron.common.utils.client.utils.HttpMethed.createRequest; -import com.alibaba.fastjson.JSONObject; import com.google.protobuf.ByteString; - import java.io.UnsupportedEncodingException; import javax.annotation.Resource; - import org.apache.http.client.methods.HttpPost; import org.junit.Assert; import org.junit.Before; @@ -21,6 +18,7 @@ import org.tron.common.utils.ByteArray; import org.tron.core.capsule.AccountCapsule; import org.tron.core.config.args.Args; +import org.tron.json.JSONObject; import org.tron.protos.Protocol; public class CreateAssetIssueServletTest extends BaseTest { diff --git a/framework/src/test/java/org/tron/core/services/http/CreateSpendAuthSigServletTest.java b/framework/src/test/java/org/tron/core/services/http/CreateSpendAuthSigServletTest.java index 85d6764132b..0be8fe632e7 100644 --- a/framework/src/test/java/org/tron/core/services/http/CreateSpendAuthSigServletTest.java +++ b/framework/src/test/java/org/tron/core/services/http/CreateSpendAuthSigServletTest.java @@ -4,7 +4,6 @@ import static org.junit.Assert.fail; import static org.tron.common.utils.client.utils.HttpMethed.createRequest; -import com.alibaba.fastjson.JSONObject; import java.io.UnsupportedEncodingException; import javax.annotation.Resource; import org.apache.http.client.methods.HttpPost; @@ -15,6 +14,7 @@ import org.tron.common.BaseTest; import org.tron.common.TestConstants; import org.tron.core.config.args.Args; +import org.tron.json.JSONObject; public class CreateSpendAuthSigServletTest extends BaseTest { diff --git a/framework/src/test/java/org/tron/core/services/http/CreateWitnessServletTest.java b/framework/src/test/java/org/tron/core/services/http/CreateWitnessServletTest.java index 62908c1563f..bd8145fed7b 100644 --- a/framework/src/test/java/org/tron/core/services/http/CreateWitnessServletTest.java +++ b/framework/src/test/java/org/tron/core/services/http/CreateWitnessServletTest.java @@ -4,12 +4,9 @@ import static org.junit.Assert.fail; import static org.tron.common.utils.client.utils.HttpMethed.createRequest; -import com.alibaba.fastjson.JSONObject; import com.google.protobuf.ByteString; - import java.io.UnsupportedEncodingException; import javax.annotation.Resource; - import org.apache.http.client.methods.HttpPost; import org.junit.Assert; import org.junit.Before; @@ -24,6 +21,7 @@ import org.tron.core.capsule.AccountCapsule; import org.tron.core.capsule.WitnessCapsule; import org.tron.core.config.args.Args; +import org.tron.json.JSONObject; import org.tron.protos.Protocol; public class CreateWitnessServletTest extends BaseTest { diff --git a/framework/src/test/java/org/tron/core/services/http/DelegateResourceServletTest.java b/framework/src/test/java/org/tron/core/services/http/DelegateResourceServletTest.java new file mode 100644 index 00000000000..e5881692637 --- /dev/null +++ b/framework/src/test/java/org/tron/core/services/http/DelegateResourceServletTest.java @@ -0,0 +1,65 @@ +package org.tron.core.services.http; + +import static java.nio.charset.StandardCharsets.UTF_8; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.when; + +import java.lang.reflect.Field; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +import org.springframework.mock.web.MockHttpServletRequest; +import org.springframework.mock.web.MockHttpServletResponse; +import org.tron.core.Wallet; +import org.tron.core.capsule.TransactionCapsule; +import org.tron.protos.Protocol.Transaction; + +public class DelegateResourceServletTest { + + private DelegateResourceServlet servlet; + @Mock + private Wallet wallet; + private AutoCloseable closeable; + + @Before + public void setUp() throws Exception { + closeable = MockitoAnnotations.openMocks(this); + servlet = new DelegateResourceServlet(); + Field f = DelegateResourceServlet.class.getDeclaredField("wallet"); + f.setAccessible(true); + f.set(servlet, wallet); + when(wallet.createTransactionCapsule(any(), any())) + .thenReturn(new TransactionCapsule(Transaction.getDefaultInstance())); + } + + @After + public void clearMocks() throws Exception { + closeable.close(); + } + + @Test + public void testDelegateResource() throws Exception { + String jsonParam = "{" + + "\"owner_address\": \"4199357684BC659F5166046B56C95A0E99F1265CD1\"," + + "\"receiver_address\": \"41B4750E2CD76E19DCA331BF5D089B71C3C2798548\"," + + "\"balance\": 1000000," + + "\"resource\": \"BANDWIDTH\"" + + "}"; + MockHttpServletRequest request = new MockHttpServletRequest(); + request.setMethod("POST"); + request.setContentType("application/json"); + request.setContent(jsonParam.getBytes(UTF_8)); + + MockHttpServletResponse response = new MockHttpServletResponse(); + servlet.doPost(request, response); + assertEquals(200, response.getStatus()); + String content = response.getContentAsString(); + assertFalse(content.contains("\"Error\"")); + assertTrue(content.contains("txID")); + } +} diff --git a/framework/src/test/java/org/tron/core/services/http/DeployContractServletTest.java b/framework/src/test/java/org/tron/core/services/http/DeployContractServletTest.java new file mode 100644 index 00000000000..d66b09ca50a --- /dev/null +++ b/framework/src/test/java/org/tron/core/services/http/DeployContractServletTest.java @@ -0,0 +1,70 @@ +package org.tron.core.services.http; + +import static java.nio.charset.StandardCharsets.UTF_8; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.when; + +import java.lang.reflect.Field; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +import org.springframework.mock.web.MockHttpServletRequest; +import org.springframework.mock.web.MockHttpServletResponse; +import org.tron.core.Wallet; +import org.tron.core.capsule.TransactionCapsule; +import org.tron.protos.Protocol.Transaction; + +public class DeployContractServletTest { + + private DeployContractServlet servlet; + @Mock + private Wallet wallet; + private AutoCloseable closeable; + + @Before + public void setUp() throws Exception { + closeable = MockitoAnnotations.openMocks(this); + servlet = new DeployContractServlet(); + Field f = DeployContractServlet.class.getDeclaredField("wallet"); + f.setAccessible(true); + f.set(servlet, wallet); + when(wallet.createTransactionCapsule(any(), any())) + .thenReturn(new TransactionCapsule(Transaction.getDefaultInstance())); + } + + @After + public void clearMocks() throws Exception { + closeable.close(); + } + + @Test + public void testDeployContract() throws Exception { + String jsonParam = "{" + + "\"owner_address\": \"4199357684BC659F5166046B56C95A0E99F1265CD1\"," + + "\"name\": \"TestContract\"," + + "\"abi\": \"[{\\\"inputs\\\":[],\\\"name\\\":\\\"test\\\"," + + "\\\"outputs\\\":[],\\\"type\\\":\\\"function\\\"}]\"," + + "\"bytecode\": \"608060405234801561001057600080fd5b50\"," + + "\"fee_limit\": 1000000000," + + "\"call_value\": 0," + + "\"consume_user_resource_percent\": 100," + + "\"origin_energy_limit\": 10000000" + + "}"; + MockHttpServletRequest request = new MockHttpServletRequest(); + request.setMethod("POST"); + request.setContentType("application/json"); + request.setContent(jsonParam.getBytes(UTF_8)); + + MockHttpServletResponse response = new MockHttpServletResponse(); + servlet.doPost(request, response); + assertEquals(200, response.getStatus()); + String content = response.getContentAsString(); + assertFalse(content.contains("\"Error\"")); + assertTrue(content.contains("txID")); + } +} diff --git a/framework/src/test/java/org/tron/core/services/http/ExchangeCreateServletTest.java b/framework/src/test/java/org/tron/core/services/http/ExchangeCreateServletTest.java new file mode 100644 index 00000000000..ebd268b2abf --- /dev/null +++ b/framework/src/test/java/org/tron/core/services/http/ExchangeCreateServletTest.java @@ -0,0 +1,63 @@ +package org.tron.core.services.http; + +import static java.nio.charset.StandardCharsets.UTF_8; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.when; + +import java.lang.reflect.Field; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +import org.springframework.mock.web.MockHttpServletRequest; +import org.springframework.mock.web.MockHttpServletResponse; +import org.tron.core.Wallet; +import org.tron.core.capsule.TransactionCapsule; +import org.tron.protos.Protocol.Transaction; + +public class ExchangeCreateServletTest { + + private ExchangeCreateServlet servlet; + @Mock + private Wallet wallet; + private AutoCloseable closeable; + + @Before + public void setUp() throws Exception { + closeable = MockitoAnnotations.openMocks(this); + servlet = new ExchangeCreateServlet(); + Field f = ExchangeCreateServlet.class.getDeclaredField("wallet"); + f.setAccessible(true); + f.set(servlet, wallet); + when(wallet.createTransactionCapsule(any(), any())) + .thenReturn(new TransactionCapsule(Transaction.getDefaultInstance())); + } + + @After + public void clearMocks() throws Exception { + closeable.close(); + } + + @Test + public void testExchangeCreate() throws Exception { + String jsonParam = "{" + + "\"owner_address\": \"4199357684BC659F5166046B56C95A0E99F1265CD1\"," + + "\"first_token_id\": \"5f\"," + + "\"first_token_balance\": 100," + + "\"second_token_id\": \"5f\"," + + "\"second_token_balance\": 200" + + "}"; + MockHttpServletRequest request = new MockHttpServletRequest(); + request.setMethod("POST"); + request.setContentType("application/json"); + request.setContent(jsonParam.getBytes(UTF_8)); + + MockHttpServletResponse response = new MockHttpServletResponse(); + servlet.doPost(request, response); + assertEquals(200, response.getStatus()); + assertNotNull(response.getContentAsString()); + } +} diff --git a/framework/src/test/java/org/tron/core/services/http/ExchangeInjectServletTest.java b/framework/src/test/java/org/tron/core/services/http/ExchangeInjectServletTest.java new file mode 100644 index 00000000000..ffd97e9cc39 --- /dev/null +++ b/framework/src/test/java/org/tron/core/services/http/ExchangeInjectServletTest.java @@ -0,0 +1,65 @@ +package org.tron.core.services.http; + +import static java.nio.charset.StandardCharsets.UTF_8; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.when; + +import java.lang.reflect.Field; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +import org.springframework.mock.web.MockHttpServletRequest; +import org.springframework.mock.web.MockHttpServletResponse; +import org.tron.core.Wallet; +import org.tron.core.capsule.TransactionCapsule; +import org.tron.protos.Protocol.Transaction; + +public class ExchangeInjectServletTest { + + private ExchangeInjectServlet servlet; + @Mock + private Wallet wallet; + private AutoCloseable closeable; + + @Before + public void setUp() throws Exception { + closeable = MockitoAnnotations.openMocks(this); + servlet = new ExchangeInjectServlet(); + Field f = ExchangeInjectServlet.class.getDeclaredField("wallet"); + f.setAccessible(true); + f.set(servlet, wallet); + when(wallet.createTransactionCapsule(any(), any())) + .thenReturn(new TransactionCapsule(Transaction.getDefaultInstance())); + } + + @After + public void clearMocks() throws Exception { + closeable.close(); + } + + @Test + public void testExchangeInject() throws Exception { + String jsonParam = "{" + + "\"owner_address\": \"4199357684BC659F5166046B56C95A0E99F1265CD1\"," + + "\"exchange_id\": 1," + + "\"token_id\": \"5f\"," + + "\"quant\": 100" + + "}"; + MockHttpServletRequest request = new MockHttpServletRequest(); + request.setMethod("POST"); + request.setContentType("application/json"); + request.setContent(jsonParam.getBytes(UTF_8)); + + MockHttpServletResponse response = new MockHttpServletResponse(); + servlet.doPost(request, response); + assertEquals(200, response.getStatus()); + String content = response.getContentAsString(); + assertFalse(content.contains("\"Error\"")); + assertTrue(content.contains("txID")); + } +} diff --git a/framework/src/test/java/org/tron/core/services/http/ExchangeTransactionServletTest.java b/framework/src/test/java/org/tron/core/services/http/ExchangeTransactionServletTest.java new file mode 100644 index 00000000000..0d1c8655636 --- /dev/null +++ b/framework/src/test/java/org/tron/core/services/http/ExchangeTransactionServletTest.java @@ -0,0 +1,66 @@ +package org.tron.core.services.http; + +import static java.nio.charset.StandardCharsets.UTF_8; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.when; + +import java.lang.reflect.Field; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +import org.springframework.mock.web.MockHttpServletRequest; +import org.springframework.mock.web.MockHttpServletResponse; +import org.tron.core.Wallet; +import org.tron.core.capsule.TransactionCapsule; +import org.tron.protos.Protocol.Transaction; + +public class ExchangeTransactionServletTest { + + private ExchangeTransactionServlet servlet; + @Mock + private Wallet wallet; + private AutoCloseable closeable; + + @Before + public void setUp() throws Exception { + closeable = MockitoAnnotations.openMocks(this); + servlet = new ExchangeTransactionServlet(); + Field f = ExchangeTransactionServlet.class.getDeclaredField("wallet"); + f.setAccessible(true); + f.set(servlet, wallet); + when(wallet.createTransactionCapsule(any(), any())) + .thenReturn(new TransactionCapsule(Transaction.getDefaultInstance())); + } + + @After + public void clearMocks() throws Exception { + closeable.close(); + } + + @Test + public void testExchangeTransaction() throws Exception { + String jsonParam = "{" + + "\"owner_address\": \"4199357684BC659F5166046B56C95A0E99F1265CD1\"," + + "\"exchange_id\": 1," + + "\"token_id\": \"5f\"," + + "\"quant\": 100," + + "\"expected\": 10" + + "}"; + MockHttpServletRequest request = new MockHttpServletRequest(); + request.setMethod("POST"); + request.setContentType("application/json"); + request.setContent(jsonParam.getBytes(UTF_8)); + + MockHttpServletResponse response = new MockHttpServletResponse(); + servlet.doPost(request, response); + assertEquals(200, response.getStatus()); + String content = response.getContentAsString(); + assertFalse(content.contains("\"Error\"")); + assertTrue(content.contains("txID")); + } +} diff --git a/framework/src/test/java/org/tron/core/services/http/ExchangeWithdrawServletTest.java b/framework/src/test/java/org/tron/core/services/http/ExchangeWithdrawServletTest.java new file mode 100644 index 00000000000..d54b5fae1cd --- /dev/null +++ b/framework/src/test/java/org/tron/core/services/http/ExchangeWithdrawServletTest.java @@ -0,0 +1,62 @@ +package org.tron.core.services.http; + +import static java.nio.charset.StandardCharsets.UTF_8; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.when; + +import java.lang.reflect.Field; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +import org.springframework.mock.web.MockHttpServletRequest; +import org.springframework.mock.web.MockHttpServletResponse; +import org.tron.core.Wallet; +import org.tron.core.capsule.TransactionCapsule; +import org.tron.protos.Protocol.Transaction; + +public class ExchangeWithdrawServletTest { + + private ExchangeWithdrawServlet servlet; + @Mock + private Wallet wallet; + private AutoCloseable closeable; + + @Before + public void setUp() throws Exception { + closeable = MockitoAnnotations.openMocks(this); + servlet = new ExchangeWithdrawServlet(); + Field f = ExchangeWithdrawServlet.class.getDeclaredField("wallet"); + f.setAccessible(true); + f.set(servlet, wallet); + when(wallet.createTransactionCapsule(any(), any())) + .thenReturn(new TransactionCapsule(Transaction.getDefaultInstance())); + } + + @After + public void clearMocks() throws Exception { + closeable.close(); + } + + @Test + public void testExchangeWithdraw() throws Exception { + String jsonParam = "{" + + "\"owner_address\": \"4199357684BC659F5166046B56C95A0E99F1265CD1\"," + + "\"exchange_id\": 1," + + "\"token_id\": \"5f\"," + + "\"quant\": 50" + + "}"; + MockHttpServletRequest request = new MockHttpServletRequest(); + request.setMethod("POST"); + request.setContentType("application/json"); + request.setContent(jsonParam.getBytes(UTF_8)); + + MockHttpServletResponse response = new MockHttpServletResponse(); + servlet.doPost(request, response); + assertEquals(200, response.getStatus()); + assertTrue(response.getContentAsString().contains("txID")); + } +} diff --git a/framework/src/test/java/org/tron/core/services/http/FreezeBalanceServletTest.java b/framework/src/test/java/org/tron/core/services/http/FreezeBalanceServletTest.java new file mode 100644 index 00000000000..d0be5f549df --- /dev/null +++ b/framework/src/test/java/org/tron/core/services/http/FreezeBalanceServletTest.java @@ -0,0 +1,61 @@ +package org.tron.core.services.http; + +import static java.nio.charset.StandardCharsets.UTF_8; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.when; + +import java.lang.reflect.Field; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +import org.springframework.mock.web.MockHttpServletRequest; +import org.springframework.mock.web.MockHttpServletResponse; +import org.tron.core.Wallet; +import org.tron.core.capsule.TransactionCapsule; +import org.tron.protos.Protocol.Transaction; + +public class FreezeBalanceServletTest { + + private FreezeBalanceServlet servlet; + @Mock + private Wallet wallet; + private AutoCloseable closeable; + + @Before + public void setUp() throws Exception { + closeable = MockitoAnnotations.openMocks(this); + servlet = new FreezeBalanceServlet(); + Field f = FreezeBalanceServlet.class.getDeclaredField("wallet"); + f.setAccessible(true); + f.set(servlet, wallet); + when(wallet.createTransactionCapsule(any(), any())) + .thenReturn(new TransactionCapsule(Transaction.getDefaultInstance())); + } + + @After + public void clearMocks() throws Exception { + closeable.close(); + } + + @Test + public void testFreezeBalance() throws Exception { + String jsonParam = "{" + + "\"owner_address\": \"4199357684BC659F5166046B56C95A0E99F1265CD1\"," + + "\"frozen_balance\": 1000000," + + "\"frozen_duration\": 3" + + "}"; + MockHttpServletRequest request = new MockHttpServletRequest(); + request.setMethod("POST"); + request.setContentType("application/json"); + request.setContent(jsonParam.getBytes(UTF_8)); + + MockHttpServletResponse response = new MockHttpServletResponse(); + servlet.doPost(request, response); + assertEquals(200, response.getStatus()); + assertNotNull(response.getContentAsString()); + } +} diff --git a/framework/src/test/java/org/tron/core/services/http/FreezeBalanceV2ServletTest.java b/framework/src/test/java/org/tron/core/services/http/FreezeBalanceV2ServletTest.java new file mode 100644 index 00000000000..8228aed2a82 --- /dev/null +++ b/framework/src/test/java/org/tron/core/services/http/FreezeBalanceV2ServletTest.java @@ -0,0 +1,61 @@ +package org.tron.core.services.http; + +import static java.nio.charset.StandardCharsets.UTF_8; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.when; + +import java.lang.reflect.Field; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +import org.springframework.mock.web.MockHttpServletRequest; +import org.springframework.mock.web.MockHttpServletResponse; +import org.tron.core.Wallet; +import org.tron.core.capsule.TransactionCapsule; +import org.tron.protos.Protocol.Transaction; + +public class FreezeBalanceV2ServletTest { + + private FreezeBalanceV2Servlet servlet; + @Mock + private Wallet wallet; + private AutoCloseable closeable; + + @Before + public void setUp() throws Exception { + closeable = MockitoAnnotations.openMocks(this); + servlet = new FreezeBalanceV2Servlet(); + Field f = FreezeBalanceV2Servlet.class.getDeclaredField("wallet"); + f.setAccessible(true); + f.set(servlet, wallet); + when(wallet.createTransactionCapsule(any(), any())) + .thenReturn(new TransactionCapsule(Transaction.getDefaultInstance())); + } + + @After + public void clearMocks() throws Exception { + closeable.close(); + } + + @Test + public void testFreezeBalanceV2() throws Exception { + String jsonParam = "{" + + "\"owner_address\": \"4199357684BC659F5166046B56C95A0E99F1265CD1\"," + + "\"frozen_balance\": 1000000," + + "\"resource\": \"BANDWIDTH\"" + + "}"; + MockHttpServletRequest request = new MockHttpServletRequest(); + request.setMethod("POST"); + request.setContentType("application/json"); + request.setContent(jsonParam.getBytes(UTF_8)); + + MockHttpServletResponse response = new MockHttpServletResponse(); + servlet.doPost(request, response); + assertEquals(200, response.getStatus()); + assertNotNull(response.getContentAsString()); + } +} diff --git a/framework/src/test/java/org/tron/core/services/http/GetAccountResourceServletTest.java b/framework/src/test/java/org/tron/core/services/http/GetAccountResourceServletTest.java new file mode 100644 index 00000000000..0a235d99f60 --- /dev/null +++ b/framework/src/test/java/org/tron/core/services/http/GetAccountResourceServletTest.java @@ -0,0 +1,68 @@ +package org.tron.core.services.http; + +import static java.nio.charset.StandardCharsets.UTF_8; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.when; + +import java.lang.reflect.Field; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +import org.springframework.mock.web.MockHttpServletRequest; +import org.springframework.mock.web.MockHttpServletResponse; +import org.tron.api.GrpcAPI.AccountResourceMessage; +import org.tron.core.Wallet; + +public class GetAccountResourceServletTest { + + private GetAccountResourceServlet servlet; + @Mock + private Wallet wallet; + private AutoCloseable closeable; + + @Before + public void setUp() throws Exception { + closeable = MockitoAnnotations.openMocks(this); + servlet = new GetAccountResourceServlet(); + Field f = GetAccountResourceServlet.class.getDeclaredField("wallet"); + f.setAccessible(true); + f.set(servlet, wallet); + when(wallet.getAccountResource(any())) + .thenReturn(AccountResourceMessage.getDefaultInstance()); + } + + @After + public void clearMocks() throws Exception { + closeable.close(); + } + + @Test + public void testGetAccountResourcePost() throws Exception { + String jsonParam = "{\"address\": \"4199357684BC659F5166046B56C95A0E99F1265CD1\"}"; + MockHttpServletRequest request = new MockHttpServletRequest(); + request.setMethod("POST"); + request.setContentType("application/json"); + request.setContent(jsonParam.getBytes(UTF_8)); + + MockHttpServletResponse response = new MockHttpServletResponse(); + servlet.doPost(request, response); + assertEquals(200, response.getStatus()); + assertEquals(false, response.getContentAsString().isEmpty()); + } + + @Test + public void testGetAccountResourceGet() throws Exception { + MockHttpServletRequest request = new MockHttpServletRequest(); + request.setMethod("GET"); + request.addParameter("address", "4199357684BC659F5166046B56C95A0E99F1265CD1"); + + MockHttpServletResponse response = new MockHttpServletResponse(); + servlet.doGet(request, response); + assertEquals(200, response.getStatus()); + assertEquals(false, response.getContentAsString().isEmpty()); + } +} diff --git a/framework/src/test/java/org/tron/core/services/http/GetAccountServletTest.java b/framework/src/test/java/org/tron/core/services/http/GetAccountServletTest.java new file mode 100644 index 00000000000..c4f1778d7fc --- /dev/null +++ b/framework/src/test/java/org/tron/core/services/http/GetAccountServletTest.java @@ -0,0 +1,67 @@ +package org.tron.core.services.http; + +import static java.nio.charset.StandardCharsets.UTF_8; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.when; + +import java.lang.reflect.Field; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +import org.springframework.mock.web.MockHttpServletRequest; +import org.springframework.mock.web.MockHttpServletResponse; +import org.tron.core.Wallet; +import org.tron.protos.Protocol.Account; + +public class GetAccountServletTest { + + private GetAccountServlet servlet; + @Mock + private Wallet wallet; + private AutoCloseable closeable; + + @Before + public void setUp() throws Exception { + closeable = MockitoAnnotations.openMocks(this); + servlet = new GetAccountServlet(); + Field f = GetAccountServlet.class.getDeclaredField("wallet"); + f.setAccessible(true); + f.set(servlet, wallet); + when(wallet.getAccount(any(Account.class))).thenReturn(Account.getDefaultInstance()); + } + + @After + public void clearMocks() throws Exception { + closeable.close(); + } + + @Test + public void testGetAccountPost() throws Exception { + String jsonParam = "{\"address\": \"4199357684BC659F5166046B56C95A0E99F1265CD1\"}"; + MockHttpServletRequest request = new MockHttpServletRequest(); + request.setMethod("POST"); + request.setContentType("application/json"); + request.setContent(jsonParam.getBytes(UTF_8)); + + MockHttpServletResponse response = new MockHttpServletResponse(); + servlet.doPost(request, response); + assertEquals(200, response.getStatus()); + assertFalse(response.getContentAsString().contains("\"Error\"")); + } + + @Test + public void testGetAccountGet() throws Exception { + MockHttpServletRequest request = new MockHttpServletRequest(); + request.setMethod("GET"); + request.addParameter("address", "4199357684BC659F5166046B56C95A0E99F1265CD1"); + + MockHttpServletResponse response = new MockHttpServletResponse(); + servlet.doGet(request, response); + assertEquals(200, response.getStatus()); + assertFalse(response.getContentAsString().contains("\"Error\"")); + } +} diff --git a/framework/src/test/java/org/tron/core/services/http/GetAssetIssueByIdServletTest.java b/framework/src/test/java/org/tron/core/services/http/GetAssetIssueByIdServletTest.java new file mode 100644 index 00000000000..aec304c7181 --- /dev/null +++ b/framework/src/test/java/org/tron/core/services/http/GetAssetIssueByIdServletTest.java @@ -0,0 +1,67 @@ +package org.tron.core.services.http; + +import static java.nio.charset.StandardCharsets.UTF_8; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.when; + +import java.lang.reflect.Field; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +import org.springframework.mock.web.MockHttpServletRequest; +import org.springframework.mock.web.MockHttpServletResponse; +import org.tron.core.Wallet; +import org.tron.protos.contract.AssetIssueContractOuterClass.AssetIssueContract; + +public class GetAssetIssueByIdServletTest { + + private GetAssetIssueByIdServlet servlet; + @Mock + private Wallet wallet; + private AutoCloseable closeable; + + @Before + public void setUp() throws Exception { + closeable = MockitoAnnotations.openMocks(this); + servlet = new GetAssetIssueByIdServlet(); + Field f = GetAssetIssueByIdServlet.class.getDeclaredField("wallet"); + f.setAccessible(true); + f.set(servlet, wallet); + when(wallet.getAssetIssueById(any())).thenReturn(null); + } + + @After + public void clearMocks() throws Exception { + closeable.close(); + } + + @Test + public void testGetAssetIssueByIdPost() throws Exception { + String jsonParam = "{\"value\": \"100001\"}"; + MockHttpServletRequest request = new MockHttpServletRequest(); + request.setMethod("POST"); + request.setContentType("application/json"); + request.setContent(jsonParam.getBytes(UTF_8)); + + MockHttpServletResponse response = new MockHttpServletResponse(); + servlet.doPost(request, response); + org.mockito.Mockito.verify(wallet).getAssetIssueById("100001"); + assertTrue(response.getContentAsString().contains("{}")); + } + + @Test + public void testGetAssetIssueByIdGet() throws Exception { + MockHttpServletRequest request = new MockHttpServletRequest(); + request.setMethod("GET"); + request.addParameter("value", "100001"); + + MockHttpServletResponse response = new MockHttpServletResponse(); + servlet.doGet(request, response); + org.mockito.Mockito.verify(wallet).getAssetIssueById("100001"); + assertTrue(response.getContentAsString().contains("{}")); + } +} diff --git a/framework/src/test/java/org/tron/core/services/http/GetAssetIssueByNameServletTest.java b/framework/src/test/java/org/tron/core/services/http/GetAssetIssueByNameServletTest.java new file mode 100644 index 00000000000..d79adab2c59 --- /dev/null +++ b/framework/src/test/java/org/tron/core/services/http/GetAssetIssueByNameServletTest.java @@ -0,0 +1,67 @@ +package org.tron.core.services.http; + +import static java.nio.charset.StandardCharsets.UTF_8; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.when; + +import java.lang.reflect.Field; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +import org.springframework.mock.web.MockHttpServletRequest; +import org.springframework.mock.web.MockHttpServletResponse; +import org.tron.core.Wallet; +import org.tron.protos.contract.AssetIssueContractOuterClass.AssetIssueContract; + +public class GetAssetIssueByNameServletTest { + + private GetAssetIssueByNameServlet servlet; + @Mock + private Wallet wallet; + private AutoCloseable closeable; + + @Before + public void setUp() throws Exception { + closeable = MockitoAnnotations.openMocks(this); + servlet = new GetAssetIssueByNameServlet(); + Field f = GetAssetIssueByNameServlet.class.getDeclaredField("wallet"); + f.setAccessible(true); + f.set(servlet, wallet); + when(wallet.getAssetIssueByName(any())).thenReturn(null); + } + + @After + public void clearMocks() throws Exception { + closeable.close(); + } + + @Test + public void testPost() throws Exception { + String jsonParam = "{\"value\": \"74657374\"}"; + MockHttpServletRequest request = new MockHttpServletRequest(); + request.setMethod("POST"); + request.setContentType("application/json"); + request.setContent(jsonParam.getBytes(UTF_8)); + + MockHttpServletResponse response = new MockHttpServletResponse(); + servlet.doPost(request, response); + assertEquals(200, response.getStatus()); + assertTrue(response.getContentAsString().contains("{}")); + } + + @Test + public void testGet() throws Exception { + MockHttpServletRequest request = new MockHttpServletRequest(); + request.setMethod("GET"); + request.addParameter("value", "74657374"); + + MockHttpServletResponse response = new MockHttpServletResponse(); + servlet.doGet(request, response); + assertEquals(200, response.getStatus()); + assertTrue(response.getContentAsString().contains("{}")); + } +} diff --git a/framework/src/test/java/org/tron/core/services/http/GetAssetIssueListByNameServletTest.java b/framework/src/test/java/org/tron/core/services/http/GetAssetIssueListByNameServletTest.java new file mode 100644 index 00000000000..a7469c4e987 --- /dev/null +++ b/framework/src/test/java/org/tron/core/services/http/GetAssetIssueListByNameServletTest.java @@ -0,0 +1,66 @@ +package org.tron.core.services.http; + +import static java.nio.charset.StandardCharsets.UTF_8; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.when; + +import java.lang.reflect.Field; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +import org.springframework.mock.web.MockHttpServletRequest; +import org.springframework.mock.web.MockHttpServletResponse; +import org.tron.core.Wallet; + +public class GetAssetIssueListByNameServletTest { + + private GetAssetIssueListByNameServlet servlet; + @Mock + private Wallet wallet; + private AutoCloseable closeable; + + @Before + public void setUp() throws Exception { + closeable = MockitoAnnotations.openMocks(this); + servlet = new GetAssetIssueListByNameServlet(); + Field f = GetAssetIssueListByNameServlet.class.getDeclaredField("wallet"); + f.setAccessible(true); + f.set(servlet, wallet); + when(wallet.getAssetIssueListByName(any())).thenReturn(null); + } + + @After + public void clearMocks() throws Exception { + closeable.close(); + } + + @Test + public void testPost() throws Exception { + String jsonParam = "{\"value\": \"74657374\"}"; + MockHttpServletRequest request = new MockHttpServletRequest(); + request.setMethod("POST"); + request.setContentType("application/json"); + request.setContent(jsonParam.getBytes(UTF_8)); + + MockHttpServletResponse response = new MockHttpServletResponse(); + servlet.doPost(request, response); + assertEquals(200, response.getStatus()); + assertTrue(response.getContentAsString().contains("{}")); + } + + @Test + public void testGet() throws Exception { + MockHttpServletRequest request = new MockHttpServletRequest(); + request.setMethod("GET"); + request.addParameter("value", "74657374"); + + MockHttpServletResponse response = new MockHttpServletResponse(); + servlet.doGet(request, response); + assertEquals(200, response.getStatus()); + assertTrue(response.getContentAsString().contains("{}")); + } +} diff --git a/framework/src/test/java/org/tron/core/services/http/GetAssetIssueListServletTest.java b/framework/src/test/java/org/tron/core/services/http/GetAssetIssueListServletTest.java index 935a3d1416d..2b9e997cf80 100644 --- a/framework/src/test/java/org/tron/core/services/http/GetAssetIssueListServletTest.java +++ b/framework/src/test/java/org/tron/core/services/http/GetAssetIssueListServletTest.java @@ -3,7 +3,6 @@ import static java.nio.charset.StandardCharsets.UTF_8; import static org.junit.Assert.fail; -import com.alibaba.fastjson.JSONObject; import java.io.UnsupportedEncodingException; import javax.annotation.Resource; import org.junit.Test; @@ -12,6 +11,7 @@ import org.tron.common.BaseTest; import org.tron.common.TestConstants; import org.tron.core.config.args.Args; +import org.tron.json.JSONObject; public class GetAssetIssueListServletTest extends BaseTest { diff --git a/framework/src/test/java/org/tron/core/services/http/GetBandwidthPricesServletTest.java b/framework/src/test/java/org/tron/core/services/http/GetBandwidthPricesServletTest.java index e4837610e23..2ddfda17bef 100644 --- a/framework/src/test/java/org/tron/core/services/http/GetBandwidthPricesServletTest.java +++ b/framework/src/test/java/org/tron/core/services/http/GetBandwidthPricesServletTest.java @@ -4,7 +4,6 @@ import static org.junit.Assert.fail; import static org.tron.common.utils.client.utils.HttpMethed.createRequest; -import com.alibaba.fastjson.JSONObject; import java.io.UnsupportedEncodingException; import javax.annotation.Resource; import org.apache.http.client.methods.HttpGet; @@ -16,6 +15,7 @@ import org.tron.common.BaseTest; import org.tron.common.TestConstants; import org.tron.core.config.args.Args; +import org.tron.json.JSONObject; public class GetBandwidthPricesServletTest extends BaseTest { diff --git a/framework/src/test/java/org/tron/core/services/http/GetBlockByNumServletTest.java b/framework/src/test/java/org/tron/core/services/http/GetBlockByNumServletTest.java index d4d6f33cf17..b28e1d33308 100644 --- a/framework/src/test/java/org/tron/core/services/http/GetBlockByNumServletTest.java +++ b/framework/src/test/java/org/tron/core/services/http/GetBlockByNumServletTest.java @@ -3,11 +3,8 @@ import static org.junit.Assert.assertTrue; import static org.tron.common.utils.client.utils.HttpMethed.createRequest; -import com.alibaba.fastjson.JSONObject; - import java.io.UnsupportedEncodingException; import javax.annotation.Resource; - import org.apache.http.client.methods.HttpPost; import org.junit.Test; import org.springframework.mock.web.MockHttpServletRequest; @@ -15,6 +12,7 @@ import org.tron.common.BaseTest; import org.tron.common.TestConstants; import org.tron.core.config.args.Args; +import org.tron.json.JSONObject; public class GetBlockByNumServletTest extends BaseTest { diff --git a/framework/src/test/java/org/tron/core/services/http/GetBlockServletTest.java b/framework/src/test/java/org/tron/core/services/http/GetBlockServletTest.java new file mode 100644 index 00000000000..b3634a975e8 --- /dev/null +++ b/framework/src/test/java/org/tron/core/services/http/GetBlockServletTest.java @@ -0,0 +1,70 @@ +package org.tron.core.services.http; + +import static java.nio.charset.StandardCharsets.UTF_8; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.when; + +import java.lang.reflect.Field; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +import org.springframework.mock.web.MockHttpServletRequest; +import org.springframework.mock.web.MockHttpServletResponse; +import org.tron.core.Wallet; +import org.tron.protos.Protocol.Block; + +public class GetBlockServletTest { + + private GetBlockServlet servlet; + @Mock + private Wallet wallet; + private AutoCloseable closeable; + + @Before + public void setUp() throws Exception { + closeable = MockitoAnnotations.openMocks(this); + servlet = new GetBlockServlet(); + Field f = GetBlockServlet.class.getDeclaredField("wallet"); + f.setAccessible(true); + f.set(servlet, wallet); + when(wallet.getBlock(org.mockito.ArgumentMatchers.argThat( + req -> req != null && "0".equals(req.getIdOrNum()) && !req.getDetail()))) + .thenReturn(Block.getDefaultInstance()); + } + + @After + public void clearMocks() throws Exception { + closeable.close(); + } + + @Test + public void testGetBlockPost() throws Exception { + String jsonParam = "{\"id_or_num\": \"0\", \"detail\": false}"; + MockHttpServletRequest request = new MockHttpServletRequest(); + request.setMethod("POST"); + request.setContentType("application/json"); + request.setContent(jsonParam.getBytes(UTF_8)); + + MockHttpServletResponse response = new MockHttpServletResponse(); + servlet.doPost(request, response); + assertEquals(200, response.getStatus()); + assertTrue(response.getContentAsString().contains("blockID")); + } + + @Test + public void testGetBlockGet() throws Exception { + MockHttpServletRequest request = new MockHttpServletRequest(); + request.setMethod("GET"); + request.addParameter("id_or_num", "0"); + request.addParameter("detail", "false"); + + MockHttpServletResponse response = new MockHttpServletResponse(); + servlet.doGet(request, response); + assertEquals(200, response.getStatus()); + assertTrue(response.getContentAsString().contains("blockID")); + } +} diff --git a/framework/src/test/java/org/tron/core/services/http/GetBrokerageServletTest.java b/framework/src/test/java/org/tron/core/services/http/GetBrokerageServletTest.java index b5fa1914541..9b37c2e4205 100644 --- a/framework/src/test/java/org/tron/core/services/http/GetBrokerageServletTest.java +++ b/framework/src/test/java/org/tron/core/services/http/GetBrokerageServletTest.java @@ -1,10 +1,7 @@ package org.tron.core.services.http; -import com.alibaba.fastjson.JSONObject; - import java.io.UnsupportedEncodingException; import javax.annotation.Resource; - import org.junit.Assert; import org.junit.Test; import org.springframework.mock.web.MockHttpServletRequest; @@ -12,6 +9,7 @@ import org.tron.common.BaseTest; import org.tron.common.TestConstants; import org.tron.core.config.args.Args; +import org.tron.json.JSONObject; public class GetBrokerageServletTest extends BaseTest { diff --git a/framework/src/test/java/org/tron/core/services/http/GetContractInfoServletTest.java b/framework/src/test/java/org/tron/core/services/http/GetContractInfoServletTest.java new file mode 100644 index 00000000000..de00275ee24 --- /dev/null +++ b/framework/src/test/java/org/tron/core/services/http/GetContractInfoServletTest.java @@ -0,0 +1,72 @@ +package org.tron.core.services.http; + +import static java.nio.charset.StandardCharsets.UTF_8; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.when; + +import java.lang.reflect.Field; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +import org.springframework.mock.web.MockHttpServletRequest; +import org.springframework.mock.web.MockHttpServletResponse; +import org.tron.core.Wallet; +import org.tron.protos.contract.SmartContractOuterClass.SmartContract; +import org.tron.protos.contract.SmartContractOuterClass.SmartContractDataWrapper; + +public class GetContractInfoServletTest { + + private GetContractInfoServlet servlet; + @Mock + private Wallet wallet; + private AutoCloseable closeable; + + @Before + public void setUp() throws Exception { + closeable = MockitoAnnotations.openMocks(this); + servlet = new GetContractInfoServlet(); + Field f = GetContractInfoServlet.class.getDeclaredField("wallet"); + f.setAccessible(true); + f.set(servlet, wallet); + } + + @After + public void clearMocks() throws Exception { + closeable.close(); + } + + @Test + public void testGetContractInfoPost() throws Exception { + when(wallet.getContractInfo(any())).thenReturn( + SmartContractDataWrapper.newBuilder() + .setSmartContract(SmartContract.newBuilder().setName("TestContract").build()) + .build()); + String jsonParam = "{\"value\": \"41B4750E2CD76E19DCA331BF5D089B71C3C2798548\"}"; + MockHttpServletRequest request = new MockHttpServletRequest(); + request.setMethod("POST"); + request.setContentType("application/json"); + request.setContent(jsonParam.getBytes(UTF_8)); + + MockHttpServletResponse response = new MockHttpServletResponse(); + servlet.doPost(request, response); + assertEquals(200, response.getStatus()); + assertTrue(response.getContentAsString().contains("TestContract")); + } + + @Test + public void testGetContractInfoGet() throws Exception { + when(wallet.getContractInfo(any())).thenReturn(null); + MockHttpServletRequest request = new MockHttpServletRequest(); + request.setMethod("GET"); + request.addParameter("value", "41B4750E2CD76E19DCA331BF5D089B71C3C2798548"); + + MockHttpServletResponse response = new MockHttpServletResponse(); + servlet.doGet(request, response); + assertEquals(200, response.getStatus()); + assertEquals("{}", response.getContentAsString().trim()); + } +} diff --git a/framework/src/test/java/org/tron/core/services/http/GetContractServletTest.java b/framework/src/test/java/org/tron/core/services/http/GetContractServletTest.java new file mode 100644 index 00000000000..62fa601a57c --- /dev/null +++ b/framework/src/test/java/org/tron/core/services/http/GetContractServletTest.java @@ -0,0 +1,85 @@ +package org.tron.core.services.http; + +import static java.nio.charset.StandardCharsets.UTF_8; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.when; + +import java.lang.reflect.Field; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +import org.springframework.mock.web.MockHttpServletRequest; +import org.springframework.mock.web.MockHttpServletResponse; +import org.tron.core.Wallet; +import org.tron.protos.contract.SmartContractOuterClass.SmartContract; + +public class GetContractServletTest { + + private GetContractServlet servlet; + @Mock + private Wallet wallet; + private AutoCloseable closeable; + + @Before + public void setUp() throws Exception { + closeable = MockitoAnnotations.openMocks(this); + servlet = new GetContractServlet(); + Field f = GetContractServlet.class.getDeclaredField("wallet"); + f.setAccessible(true); + f.set(servlet, wallet); + } + + @After + public void clearMocks() throws Exception { + closeable.close(); + } + + @Test + public void testGetContractPostFound() throws Exception { + when(wallet.getContract(any())).thenReturn( + SmartContract.newBuilder().setName("TestContract").build()); + String jsonParam = "{\"value\": \"41B4750E2CD76E19DCA331BF5D089B71C3C2798548\"}"; + MockHttpServletRequest request = new MockHttpServletRequest(); + request.setMethod("POST"); + request.setContentType("application/json"); + request.setContent(jsonParam.getBytes(UTF_8)); + + MockHttpServletResponse response = new MockHttpServletResponse(); + servlet.doPost(request, response); + assertEquals(200, response.getStatus()); + assertTrue(response.getContentAsString().contains("name")); + } + + @Test + public void testGetContractPostNotFound() throws Exception { + when(wallet.getContract(any())).thenReturn(null); + String jsonParam = "{\"value\": \"41B4750E2CD76E19DCA331BF5D089B71C3C2798548\"}"; + MockHttpServletRequest request = new MockHttpServletRequest(); + request.setMethod("POST"); + request.setContentType("application/json"); + request.setContent(jsonParam.getBytes(UTF_8)); + + MockHttpServletResponse response = new MockHttpServletResponse(); + servlet.doPost(request, response); + assertEquals(200, response.getStatus()); + assertTrue(response.getContentAsString().contains("{}")); + } + + @Test + public void testGetContractGet() throws Exception { + when(wallet.getContract(any())).thenReturn(null); + MockHttpServletRequest request = new MockHttpServletRequest(); + request.setMethod("GET"); + request.addParameter("value", "41B4750E2CD76E19DCA331BF5D089B71C3C2798548"); + + MockHttpServletResponse response = new MockHttpServletResponse(); + servlet.doGet(request, response); + assertEquals(200, response.getStatus()); + assertTrue(response.getContentAsString().contains("{}")); + } +} diff --git a/framework/src/test/java/org/tron/core/services/http/GetDelegatedResourceAccountIndexServletTest.java b/framework/src/test/java/org/tron/core/services/http/GetDelegatedResourceAccountIndexServletTest.java new file mode 100644 index 00000000000..3b9395ba13a --- /dev/null +++ b/framework/src/test/java/org/tron/core/services/http/GetDelegatedResourceAccountIndexServletTest.java @@ -0,0 +1,67 @@ +package org.tron.core.services.http; + +import static java.nio.charset.StandardCharsets.UTF_8; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.when; + +import java.lang.reflect.Field; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +import org.springframework.mock.web.MockHttpServletRequest; +import org.springframework.mock.web.MockHttpServletResponse; +import org.tron.core.Wallet; +import org.tron.protos.Protocol.DelegatedResourceAccountIndex; + +public class GetDelegatedResourceAccountIndexServletTest { + + private GetDelegatedResourceAccountIndexServlet servlet; + @Mock + private Wallet wallet; + private AutoCloseable closeable; + + @Before + public void setUp() throws Exception { + closeable = MockitoAnnotations.openMocks(this); + servlet = new GetDelegatedResourceAccountIndexServlet(); + Field f = GetDelegatedResourceAccountIndexServlet.class.getDeclaredField("wallet"); + f.setAccessible(true); + f.set(servlet, wallet); + when(wallet.getDelegatedResourceAccountIndex(any())) + .thenReturn(DelegatedResourceAccountIndex.getDefaultInstance()); + } + + @After + public void clearMocks() throws Exception { + closeable.close(); + } + + @Test + public void testGetDelegatedResourceAccountIndexPost() throws Exception { + String jsonParam = "{\"value\": \"4199357684BC659F5166046B56C95A0E99F1265CD1\"}"; + MockHttpServletRequest request = new MockHttpServletRequest(); + request.setMethod("POST"); + request.setContentType("application/json"); + request.setContent(jsonParam.getBytes(UTF_8)); + + MockHttpServletResponse response = new MockHttpServletResponse(); + servlet.doPost(request, response); + assertEquals(200, response.getStatus()); + assertNotNull(response.getContentAsString()); + } + + @Test + public void testGetDelegatedResourceAccountIndexGet() throws Exception { + MockHttpServletRequest request = new MockHttpServletRequest(); + request.setMethod("GET"); + request.addParameter("value", "4199357684BC659F5166046B56C95A0E99F1265CD1"); + + MockHttpServletResponse response = new MockHttpServletResponse(); + servlet.doGet(request, response); + assertEquals(200, response.getStatus()); + } +} diff --git a/framework/src/test/java/org/tron/core/services/http/GetDelegatedResourceAccountIndexV2ServletTest.java b/framework/src/test/java/org/tron/core/services/http/GetDelegatedResourceAccountIndexV2ServletTest.java new file mode 100644 index 00000000000..037c410bf24 --- /dev/null +++ b/framework/src/test/java/org/tron/core/services/http/GetDelegatedResourceAccountIndexV2ServletTest.java @@ -0,0 +1,73 @@ +package org.tron.core.services.http; + +import static java.nio.charset.StandardCharsets.UTF_8; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.when; + +import java.lang.reflect.Field; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +import org.springframework.mock.web.MockHttpServletRequest; +import org.springframework.mock.web.MockHttpServletResponse; +import org.tron.core.Wallet; +import org.tron.protos.Protocol.DelegatedResourceAccountIndex; + +public class GetDelegatedResourceAccountIndexV2ServletTest { + + private GetDelegatedResourceAccountIndexV2Servlet servlet; + @Mock + private Wallet wallet; + private AutoCloseable closeable; + + @Before + public void setUp() throws Exception { + closeable = MockitoAnnotations.openMocks(this); + servlet = new GetDelegatedResourceAccountIndexV2Servlet(); + Field f = GetDelegatedResourceAccountIndexV2Servlet.class.getDeclaredField("wallet"); + f.setAccessible(true); + f.set(servlet, wallet); + when(wallet.getDelegatedResourceAccountIndexV2(any())) + .thenReturn(DelegatedResourceAccountIndex.getDefaultInstance()); + } + + @After + public void clearMocks() throws Exception { + closeable.close(); + } + + @Test + public void testPost() throws Exception { + String jsonParam = "{\"value\": \"4199357684BC659F5166046B56C95A0E99F1265CD1\"}"; + MockHttpServletRequest request = new MockHttpServletRequest(); + request.setMethod("POST"); + request.setContentType("application/json"); + request.setContent(jsonParam.getBytes(UTF_8)); + + MockHttpServletResponse response = new MockHttpServletResponse(); + servlet.doPost(request, response); + assertEquals(200, response.getStatus()); + String postContent = response.getContentAsString(); + assertFalse(postContent.contains("\"Error\"")); + assertTrue(!postContent.trim().isEmpty()); + } + + @Test + public void testGet() throws Exception { + MockHttpServletRequest request = new MockHttpServletRequest(); + request.setMethod("GET"); + request.addParameter("value", "4199357684BC659F5166046B56C95A0E99F1265CD1"); + + MockHttpServletResponse response = new MockHttpServletResponse(); + servlet.doGet(request, response); + assertEquals(200, response.getStatus()); + String getContent = response.getContentAsString(); + assertFalse(getContent.contains("\"Error\"")); + assertTrue(!getContent.trim().isEmpty()); + } +} diff --git a/framework/src/test/java/org/tron/core/services/http/GetEnergyPricesServletTest.java b/framework/src/test/java/org/tron/core/services/http/GetEnergyPricesServletTest.java index 6c208c59d39..f0fe69fe450 100644 --- a/framework/src/test/java/org/tron/core/services/http/GetEnergyPricesServletTest.java +++ b/framework/src/test/java/org/tron/core/services/http/GetEnergyPricesServletTest.java @@ -4,7 +4,6 @@ import static org.junit.Assert.fail; import static org.tron.common.utils.client.utils.HttpMethed.createRequest; -import com.alibaba.fastjson.JSONObject; import java.io.UnsupportedEncodingException; import javax.annotation.Resource; import org.apache.http.client.methods.HttpGet; @@ -16,6 +15,7 @@ import org.tron.common.BaseTest; import org.tron.common.TestConstants; import org.tron.core.config.args.Args; +import org.tron.json.JSONObject; public class GetEnergyPricesServletTest extends BaseTest { diff --git a/framework/src/test/java/org/tron/core/services/http/GetExchangeByIdServletTest.java b/framework/src/test/java/org/tron/core/services/http/GetExchangeByIdServletTest.java new file mode 100644 index 00000000000..d0ebc8d0cd1 --- /dev/null +++ b/framework/src/test/java/org/tron/core/services/http/GetExchangeByIdServletTest.java @@ -0,0 +1,68 @@ +package org.tron.core.services.http; + +import static java.nio.charset.StandardCharsets.UTF_8; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.when; + +import java.lang.reflect.Field; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +import org.springframework.mock.web.MockHttpServletRequest; +import org.springframework.mock.web.MockHttpServletResponse; +import org.tron.core.Wallet; +import org.tron.protos.Protocol.Exchange; + +public class GetExchangeByIdServletTest { + + private GetExchangeByIdServlet servlet; + @Mock + private Wallet wallet; + private AutoCloseable closeable; + + @Before + public void setUp() throws Exception { + closeable = MockitoAnnotations.openMocks(this); + servlet = new GetExchangeByIdServlet(); + Field f = GetExchangeByIdServlet.class.getDeclaredField("wallet"); + f.setAccessible(true); + f.set(servlet, wallet); + when(wallet.getExchangeById(any())) + .thenReturn(Exchange.newBuilder().setExchangeId(1L).build()); + } + + @After + public void clearMocks() throws Exception { + closeable.close(); + } + + @Test + public void testPost() throws Exception { + String jsonParam = "{\"id\": 1}"; + MockHttpServletRequest request = new MockHttpServletRequest(); + request.setMethod("POST"); + request.setContentType("application/json"); + request.setContent(jsonParam.getBytes(UTF_8)); + + MockHttpServletResponse response = new MockHttpServletResponse(); + servlet.doPost(request, response); + assertEquals(200, response.getStatus()); + assertTrue(response.getContentAsString().contains("exchangeId")); + } + + @Test + public void testGet() throws Exception { + MockHttpServletRequest request = new MockHttpServletRequest(); + request.setMethod("GET"); + request.addParameter("id", "1"); + + MockHttpServletResponse response = new MockHttpServletResponse(); + servlet.doGet(request, response); + assertEquals(200, response.getStatus()); + assertTrue(response.getContentAsString().contains("exchangeId")); + } +} diff --git a/framework/src/test/java/org/tron/core/services/http/GetMarketOrderByAccountServletTest.java b/framework/src/test/java/org/tron/core/services/http/GetMarketOrderByAccountServletTest.java new file mode 100644 index 00000000000..dad0df3645e --- /dev/null +++ b/framework/src/test/java/org/tron/core/services/http/GetMarketOrderByAccountServletTest.java @@ -0,0 +1,67 @@ +package org.tron.core.services.http; + +import static java.nio.charset.StandardCharsets.UTF_8; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.when; + +import java.lang.reflect.Field; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +import org.springframework.mock.web.MockHttpServletRequest; +import org.springframework.mock.web.MockHttpServletResponse; +import org.tron.core.Wallet; +import org.tron.protos.Protocol.MarketOrderList; + +public class GetMarketOrderByAccountServletTest { + + private GetMarketOrderByAccountServlet servlet; + @Mock + private Wallet wallet; + private AutoCloseable closeable; + + @Before + public void setUp() throws Exception { + closeable = MockitoAnnotations.openMocks(this); + servlet = new GetMarketOrderByAccountServlet(); + Field f = GetMarketOrderByAccountServlet.class.getDeclaredField("wallet"); + f.setAccessible(true); + f.set(servlet, wallet); + when(wallet.getMarketOrderByAccount(any())).thenReturn(null); + } + + @After + public void clearMocks() throws Exception { + closeable.close(); + } + + @Test + public void testPost() throws Exception { + String jsonParam = "{\"value\": \"4199357684BC659F5166046B56C95A0E99F1265CD1\"}"; + MockHttpServletRequest request = new MockHttpServletRequest(); + request.setMethod("POST"); + request.setContentType("application/json"); + request.setContent(jsonParam.getBytes(UTF_8)); + + MockHttpServletResponse response = new MockHttpServletResponse(); + servlet.doPost(request, response); + assertEquals(200, response.getStatus()); + assertTrue(response.getContentAsString().contains("{}")); + } + + @Test + public void testGet() throws Exception { + MockHttpServletRequest request = new MockHttpServletRequest(); + request.setMethod("GET"); + request.addParameter("value", "4199357684BC659F5166046B56C95A0E99F1265CD1"); + + MockHttpServletResponse response = new MockHttpServletResponse(); + servlet.doGet(request, response); + assertEquals(200, response.getStatus()); + assertTrue(response.getContentAsString().contains("{}")); + } +} diff --git a/framework/src/test/java/org/tron/core/services/http/GetMemoFeePricesServletTest.java b/framework/src/test/java/org/tron/core/services/http/GetMemoFeePricesServletTest.java index df8cda9e15e..b9440aa948f 100644 --- a/framework/src/test/java/org/tron/core/services/http/GetMemoFeePricesServletTest.java +++ b/framework/src/test/java/org/tron/core/services/http/GetMemoFeePricesServletTest.java @@ -4,7 +4,6 @@ import static org.junit.Assert.fail; import static org.tron.common.utils.client.utils.HttpMethed.createRequest; -import com.alibaba.fastjson.JSONObject; import java.io.UnsupportedEncodingException; import javax.annotation.Resource; import org.apache.http.client.methods.HttpGet; @@ -16,6 +15,7 @@ import org.tron.common.BaseTest; import org.tron.common.TestConstants; import org.tron.core.config.args.Args; +import org.tron.json.JSONObject; public class GetMemoFeePricesServletTest extends BaseTest { diff --git a/framework/src/test/java/org/tron/core/services/http/GetNowBlockServletTest.java b/framework/src/test/java/org/tron/core/services/http/GetNowBlockServletTest.java index bf5ab766fb1..1179e914d32 100644 --- a/framework/src/test/java/org/tron/core/services/http/GetNowBlockServletTest.java +++ b/framework/src/test/java/org/tron/core/services/http/GetNowBlockServletTest.java @@ -7,7 +7,6 @@ import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; -import com.alibaba.fastjson.JSONObject; import java.io.UnsupportedEncodingException; import javax.annotation.Resource; import org.junit.Test; @@ -16,6 +15,7 @@ import org.tron.common.BaseTest; import org.tron.common.TestConstants; import org.tron.core.config.args.Args; +import org.tron.json.JSONObject; public class GetNowBlockServletTest extends BaseTest { diff --git a/framework/src/test/java/org/tron/core/services/http/GetProposalByIdServletTest.java b/framework/src/test/java/org/tron/core/services/http/GetProposalByIdServletTest.java new file mode 100644 index 00000000000..98a77ace8b1 --- /dev/null +++ b/framework/src/test/java/org/tron/core/services/http/GetProposalByIdServletTest.java @@ -0,0 +1,67 @@ +package org.tron.core.services.http; + +import static java.nio.charset.StandardCharsets.UTF_8; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.when; + +import java.lang.reflect.Field; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +import org.springframework.mock.web.MockHttpServletRequest; +import org.springframework.mock.web.MockHttpServletResponse; +import org.tron.core.Wallet; +import org.tron.protos.Protocol.Proposal; + +public class GetProposalByIdServletTest { + + private GetProposalByIdServlet servlet; + @Mock + private Wallet wallet; + private AutoCloseable closeable; + + @Before + public void setUp() throws Exception { + closeable = MockitoAnnotations.openMocks(this); + servlet = new GetProposalByIdServlet(); + Field f = GetProposalByIdServlet.class.getDeclaredField("wallet"); + f.setAccessible(true); + f.set(servlet, wallet); + when(wallet.getProposalById(any())).thenReturn(null); + } + + @After + public void clearMocks() throws Exception { + closeable.close(); + } + + @Test + public void testPost() throws Exception { + String jsonParam = "{\"id\": 1}"; + MockHttpServletRequest request = new MockHttpServletRequest(); + request.setMethod("POST"); + request.setContentType("application/json"); + request.setContent(jsonParam.getBytes(UTF_8)); + + MockHttpServletResponse response = new MockHttpServletResponse(); + servlet.doPost(request, response); + assertEquals(200, response.getStatus()); + assertTrue(response.getContentAsString().contains("{}")); + } + + @Test + public void testGet() throws Exception { + MockHttpServletRequest request = new MockHttpServletRequest(); + request.setMethod("GET"); + request.addParameter("id", "1"); + + MockHttpServletResponse response = new MockHttpServletResponse(); + servlet.doGet(request, response); + assertEquals(200, response.getStatus()); + assertTrue(response.getContentAsString().contains("{}")); + } +} diff --git a/framework/src/test/java/org/tron/core/services/http/GetRewardServletTest.java b/framework/src/test/java/org/tron/core/services/http/GetRewardServletTest.java index 3de72eb3d45..76f85da5d8f 100644 --- a/framework/src/test/java/org/tron/core/services/http/GetRewardServletTest.java +++ b/framework/src/test/java/org/tron/core/services/http/GetRewardServletTest.java @@ -2,15 +2,9 @@ import static org.tron.common.utils.Commons.decodeFromBase58Check; -import com.alibaba.fastjson.JSONObject; - -import java.io.File; import java.io.UnsupportedEncodingException; import javax.annotation.Resource; - import lombok.extern.slf4j.Slf4j; -import org.apache.commons.lang3.StringUtils; -import org.junit.After; import org.junit.Assert; import org.junit.Before; import org.junit.Test; @@ -18,11 +12,11 @@ import org.springframework.mock.web.MockHttpServletResponse; import org.tron.common.BaseTest; import org.tron.common.TestConstants; -import org.tron.common.utils.FileUtil; import org.tron.core.config.args.Args; import org.tron.core.db.Manager; import org.tron.core.service.MortgageService; import org.tron.core.store.DelegationStore; +import org.tron.json.JSONObject; @Slf4j public class GetRewardServletTest extends BaseTest { diff --git a/framework/src/test/java/org/tron/core/services/http/GetTransactionInfoByBlockNumServletTest.java b/framework/src/test/java/org/tron/core/services/http/GetTransactionInfoByBlockNumServletTest.java index c2c02453cd4..1763e440b48 100644 --- a/framework/src/test/java/org/tron/core/services/http/GetTransactionInfoByBlockNumServletTest.java +++ b/framework/src/test/java/org/tron/core/services/http/GetTransactionInfoByBlockNumServletTest.java @@ -3,12 +3,8 @@ import static java.nio.charset.StandardCharsets.UTF_8; import static org.tron.common.utils.client.utils.HttpMethed.createRequest; -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; - import java.io.UnsupportedEncodingException; import javax.annotation.Resource; - import org.apache.http.client.methods.HttpPost; import org.junit.Assert; import org.junit.Before; @@ -18,11 +14,12 @@ import org.tron.common.BaseTest; import org.tron.common.TestConstants; import org.tron.common.utils.ByteArray; - import org.tron.core.capsule.TransactionInfoCapsule; import org.tron.core.capsule.TransactionRetCapsule; import org.tron.core.config.args.Args; import org.tron.core.db.TransactionStoreTest; +import org.tron.json.JSONArray; +import org.tron.json.JSONObject; public class GetTransactionInfoByBlockNumServletTest extends BaseTest { diff --git a/framework/src/test/java/org/tron/core/services/http/GetTransactionInfoByIdServletTest.java b/framework/src/test/java/org/tron/core/services/http/GetTransactionInfoByIdServletTest.java index ed1bc19aed6..6793433371d 100644 --- a/framework/src/test/java/org/tron/core/services/http/GetTransactionInfoByIdServletTest.java +++ b/framework/src/test/java/org/tron/core/services/http/GetTransactionInfoByIdServletTest.java @@ -3,12 +3,9 @@ import static java.nio.charset.StandardCharsets.UTF_8; import static org.tron.common.utils.client.utils.HttpMethed.createRequest; -import com.alibaba.fastjson.JSONObject; import com.google.protobuf.ByteString; - import java.io.UnsupportedEncodingException; import javax.annotation.Resource; - import org.apache.http.client.methods.HttpPost; import org.junit.Assert; import org.junit.Before; @@ -27,6 +24,7 @@ import org.tron.core.db.TransactionStore; import org.tron.core.db.TransactionStoreTest; import org.tron.core.store.TransactionRetStore; +import org.tron.json.JSONObject; import org.tron.protos.Protocol; import org.tron.protos.contract.BalanceContract; diff --git a/framework/src/test/java/org/tron/core/services/http/ListProposalsServletTest.java b/framework/src/test/java/org/tron/core/services/http/ListProposalsServletTest.java index 980c6617001..f600f704aa7 100644 --- a/framework/src/test/java/org/tron/core/services/http/ListProposalsServletTest.java +++ b/framework/src/test/java/org/tron/core/services/http/ListProposalsServletTest.java @@ -3,7 +3,6 @@ import static java.nio.charset.StandardCharsets.UTF_8; import static org.junit.Assert.fail; -import com.alibaba.fastjson.JSONObject; import java.io.UnsupportedEncodingException; import javax.annotation.Resource; import org.junit.Test; @@ -12,6 +11,7 @@ import org.tron.common.BaseTest; import org.tron.common.TestConstants; import org.tron.core.config.args.Args; +import org.tron.json.JSONObject; public class ListProposalsServletTest extends BaseTest { diff --git a/framework/src/test/java/org/tron/core/services/http/MarketCancelOrderServletTest.java b/framework/src/test/java/org/tron/core/services/http/MarketCancelOrderServletTest.java new file mode 100644 index 00000000000..aa3387f8b5a --- /dev/null +++ b/framework/src/test/java/org/tron/core/services/http/MarketCancelOrderServletTest.java @@ -0,0 +1,60 @@ +package org.tron.core.services.http; + +import static java.nio.charset.StandardCharsets.UTF_8; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.when; + +import java.lang.reflect.Field; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +import org.springframework.mock.web.MockHttpServletRequest; +import org.springframework.mock.web.MockHttpServletResponse; +import org.tron.core.Wallet; +import org.tron.core.capsule.TransactionCapsule; +import org.tron.protos.Protocol.Transaction; + +public class MarketCancelOrderServletTest { + + private MarketCancelOrderServlet servlet; + @Mock + private Wallet wallet; + private AutoCloseable closeable; + + @Before + public void setUp() throws Exception { + closeable = MockitoAnnotations.openMocks(this); + servlet = new MarketCancelOrderServlet(); + Field f = MarketCancelOrderServlet.class.getDeclaredField("wallet"); + f.setAccessible(true); + f.set(servlet, wallet); + when(wallet.createTransactionCapsule(any(), any())) + .thenReturn(new TransactionCapsule(Transaction.getDefaultInstance())); + } + + @After + public void clearMocks() throws Exception { + closeable.close(); + } + + @Test + public void testMarketCancelOrder() throws Exception { + String jsonParam = "{" + + "\"owner_address\": \"4199357684BC659F5166046B56C95A0E99F1265CD1\"," + + "\"order_id\": \"0000000000000000000000000000000000000000000000000000000000000001\"" + + "}"; + MockHttpServletRequest request = new MockHttpServletRequest(); + request.setMethod("POST"); + request.setContentType("application/json"); + request.setContent(jsonParam.getBytes(UTF_8)); + + MockHttpServletResponse response = new MockHttpServletResponse(); + servlet.doPost(request, response); + assertEquals(200, response.getStatus()); + assertNotNull(response.getContentAsString()); + } +} diff --git a/framework/src/test/java/org/tron/core/services/http/MarketSellAssetServletTest.java b/framework/src/test/java/org/tron/core/services/http/MarketSellAssetServletTest.java new file mode 100644 index 00000000000..db424b87917 --- /dev/null +++ b/framework/src/test/java/org/tron/core/services/http/MarketSellAssetServletTest.java @@ -0,0 +1,66 @@ +package org.tron.core.services.http; + +import static java.nio.charset.StandardCharsets.UTF_8; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.when; + +import java.lang.reflect.Field; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +import org.springframework.mock.web.MockHttpServletRequest; +import org.springframework.mock.web.MockHttpServletResponse; +import org.tron.core.Wallet; +import org.tron.core.capsule.TransactionCapsule; +import org.tron.protos.Protocol.Transaction; + +public class MarketSellAssetServletTest { + + private MarketSellAssetServlet servlet; + @Mock + private Wallet wallet; + private AutoCloseable closeable; + + @Before + public void setUp() throws Exception { + closeable = MockitoAnnotations.openMocks(this); + servlet = new MarketSellAssetServlet(); + Field f = MarketSellAssetServlet.class.getDeclaredField("wallet"); + f.setAccessible(true); + f.set(servlet, wallet); + when(wallet.createTransactionCapsule(any(), any())) + .thenReturn(new TransactionCapsule(Transaction.getDefaultInstance())); + } + + @After + public void clearMocks() throws Exception { + closeable.close(); + } + + @Test + public void testMarketSellAsset() throws Exception { + String jsonParam = "{" + + "\"owner_address\": \"4199357684BC659F5166046B56C95A0E99F1265CD1\"," + + "\"sell_token_id\": \"5f\"," + + "\"sell_token_quantity\": 100," + + "\"buy_token_id\": \"5f\"," + + "\"buy_token_quantity\": 200" + + "}"; + MockHttpServletRequest request = new MockHttpServletRequest(); + request.setMethod("POST"); + request.setContentType("application/json"); + request.setContent(jsonParam.getBytes(UTF_8)); + + MockHttpServletResponse response = new MockHttpServletResponse(); + servlet.doPost(request, response); + assertEquals(200, response.getStatus()); + String content = response.getContentAsString(); + assertFalse(content.contains("\"Error\"")); + assertTrue(content.contains("txID")); + } +} diff --git a/framework/src/test/java/org/tron/core/services/http/ParticipateAssetIssueServletTest.java b/framework/src/test/java/org/tron/core/services/http/ParticipateAssetIssueServletTest.java new file mode 100644 index 00000000000..983be45c10a --- /dev/null +++ b/framework/src/test/java/org/tron/core/services/http/ParticipateAssetIssueServletTest.java @@ -0,0 +1,65 @@ +package org.tron.core.services.http; + +import static java.nio.charset.StandardCharsets.UTF_8; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.when; + +import java.lang.reflect.Field; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +import org.springframework.mock.web.MockHttpServletRequest; +import org.springframework.mock.web.MockHttpServletResponse; +import org.tron.core.Wallet; +import org.tron.core.capsule.TransactionCapsule; +import org.tron.protos.Protocol.Transaction; + +public class ParticipateAssetIssueServletTest { + + private ParticipateAssetIssueServlet servlet; + @Mock + private Wallet wallet; + private AutoCloseable closeable; + + @Before + public void setUp() throws Exception { + closeable = MockitoAnnotations.openMocks(this); + servlet = new ParticipateAssetIssueServlet(); + Field f = ParticipateAssetIssueServlet.class.getDeclaredField("wallet"); + f.setAccessible(true); + f.set(servlet, wallet); + when(wallet.createTransactionCapsule(any(), any())) + .thenReturn(new TransactionCapsule(Transaction.getDefaultInstance())); + } + + @After + public void clearMocks() throws Exception { + closeable.close(); + } + + @Test + public void testParticipateAssetIssue() throws Exception { + String jsonParam = "{" + + "\"owner_address\": \"4199357684BC659F5166046B56C95A0E99F1265CD1\"," + + "\"to_address\": \"41B4750E2CD76E19DCA331BF5D089B71C3C2798548\"," + + "\"asset_name\": \"74657374\"," + + "\"amount\": 100" + + "}"; + MockHttpServletRequest request = new MockHttpServletRequest(); + request.setMethod("POST"); + request.setContentType("application/json"); + request.setContent(jsonParam.getBytes(UTF_8)); + + MockHttpServletResponse response = new MockHttpServletResponse(); + servlet.doPost(request, response); + assertEquals(200, response.getStatus()); + String content = response.getContentAsString(); + assertFalse(content.contains("\"Error\"")); + assertTrue(content.contains("txID")); + } +} diff --git a/framework/src/test/java/org/tron/core/services/http/ProposalApproveServletTest.java b/framework/src/test/java/org/tron/core/services/http/ProposalApproveServletTest.java new file mode 100644 index 00000000000..4e701571661 --- /dev/null +++ b/framework/src/test/java/org/tron/core/services/http/ProposalApproveServletTest.java @@ -0,0 +1,61 @@ +package org.tron.core.services.http; + +import static java.nio.charset.StandardCharsets.UTF_8; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.when; + +import java.lang.reflect.Field; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +import org.springframework.mock.web.MockHttpServletRequest; +import org.springframework.mock.web.MockHttpServletResponse; +import org.tron.core.Wallet; +import org.tron.core.capsule.TransactionCapsule; +import org.tron.protos.Protocol.Transaction; + +public class ProposalApproveServletTest { + + private ProposalApproveServlet servlet; + @Mock + private Wallet wallet; + private AutoCloseable closeable; + + @Before + public void setUp() throws Exception { + closeable = MockitoAnnotations.openMocks(this); + servlet = new ProposalApproveServlet(); + Field f = ProposalApproveServlet.class.getDeclaredField("wallet"); + f.setAccessible(true); + f.set(servlet, wallet); + when(wallet.createTransactionCapsule(any(), any())) + .thenReturn(new TransactionCapsule(Transaction.getDefaultInstance())); + } + + @After + public void clearMocks() throws Exception { + closeable.close(); + } + + @Test + public void testProposalApprove() throws Exception { + String jsonParam = "{" + + "\"owner_address\": \"4199357684BC659F5166046B56C95A0E99F1265CD1\"," + + "\"proposal_id\": 1," + + "\"is_add_approval\": true" + + "}"; + MockHttpServletRequest request = new MockHttpServletRequest(); + request.setMethod("POST"); + request.setContentType("application/json"); + request.setContent(jsonParam.getBytes(UTF_8)); + + MockHttpServletResponse response = new MockHttpServletResponse(); + servlet.doPost(request, response); + assertEquals(200, response.getStatus()); + assertNotNull(response.getContentAsString()); + } +} diff --git a/framework/src/test/java/org/tron/core/services/http/ProposalCreateServletTest.java b/framework/src/test/java/org/tron/core/services/http/ProposalCreateServletTest.java new file mode 100644 index 00000000000..8fc342333ff --- /dev/null +++ b/framework/src/test/java/org/tron/core/services/http/ProposalCreateServletTest.java @@ -0,0 +1,60 @@ +package org.tron.core.services.http; + +import static java.nio.charset.StandardCharsets.UTF_8; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.when; + +import java.lang.reflect.Field; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +import org.springframework.mock.web.MockHttpServletRequest; +import org.springframework.mock.web.MockHttpServletResponse; +import org.tron.core.Wallet; +import org.tron.core.capsule.TransactionCapsule; +import org.tron.protos.Protocol.Transaction; + +public class ProposalCreateServletTest { + + private ProposalCreateServlet servlet; + @Mock + private Wallet wallet; + private AutoCloseable closeable; + + @Before + public void setUp() throws Exception { + closeable = MockitoAnnotations.openMocks(this); + servlet = new ProposalCreateServlet(); + Field f = ProposalCreateServlet.class.getDeclaredField("wallet"); + f.setAccessible(true); + f.set(servlet, wallet); + when(wallet.createTransactionCapsule(any(), any())) + .thenReturn(new TransactionCapsule(Transaction.getDefaultInstance())); + } + + @After + public void clearMocks() throws Exception { + closeable.close(); + } + + @Test + public void testProposalCreate() throws Exception { + String jsonParam = "{" + + "\"owner_address\": \"4199357684BC659F5166046B56C95A0E99F1265CD1\"," + + "\"parameters\": [{\"key\": 0, \"value\": 100000}]" + + "}"; + MockHttpServletRequest request = new MockHttpServletRequest(); + request.setMethod("POST"); + request.setContentType("application/json"); + request.setContent(jsonParam.getBytes(UTF_8)); + + MockHttpServletResponse response = new MockHttpServletResponse(); + servlet.doPost(request, response); + assertEquals(200, response.getStatus()); + assertNotNull(response.getContentAsString()); + } +} diff --git a/framework/src/test/java/org/tron/core/services/http/ProposalDeleteServletTest.java b/framework/src/test/java/org/tron/core/services/http/ProposalDeleteServletTest.java new file mode 100644 index 00000000000..27677e870c9 --- /dev/null +++ b/framework/src/test/java/org/tron/core/services/http/ProposalDeleteServletTest.java @@ -0,0 +1,60 @@ +package org.tron.core.services.http; + +import static java.nio.charset.StandardCharsets.UTF_8; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.when; + +import java.lang.reflect.Field; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +import org.springframework.mock.web.MockHttpServletRequest; +import org.springframework.mock.web.MockHttpServletResponse; +import org.tron.core.Wallet; +import org.tron.core.capsule.TransactionCapsule; +import org.tron.protos.Protocol.Transaction; + +public class ProposalDeleteServletTest { + + private ProposalDeleteServlet servlet; + @Mock + private Wallet wallet; + private AutoCloseable closeable; + + @Before + public void setUp() throws Exception { + closeable = MockitoAnnotations.openMocks(this); + servlet = new ProposalDeleteServlet(); + Field f = ProposalDeleteServlet.class.getDeclaredField("wallet"); + f.setAccessible(true); + f.set(servlet, wallet); + when(wallet.createTransactionCapsule(any(), any())) + .thenReturn(new TransactionCapsule(Transaction.getDefaultInstance())); + } + + @After + public void clearMocks() throws Exception { + closeable.close(); + } + + @Test + public void testProposalDelete() throws Exception { + String jsonParam = "{" + + "\"owner_address\": \"4199357684BC659F5166046B56C95A0E99F1265CD1\"," + + "\"proposal_id\": 1" + + "}"; + MockHttpServletRequest request = new MockHttpServletRequest(); + request.setMethod("POST"); + request.setContentType("application/json"); + request.setContent(jsonParam.getBytes(UTF_8)); + + MockHttpServletResponse response = new MockHttpServletResponse(); + servlet.doPost(request, response); + assertEquals(200, response.getStatus()); + assertNotNull(response.getContentAsString()); + } +} diff --git a/framework/src/test/java/org/tron/core/services/http/SetAccountIdServletTest.java b/framework/src/test/java/org/tron/core/services/http/SetAccountIdServletTest.java new file mode 100644 index 00000000000..fb666279582 --- /dev/null +++ b/framework/src/test/java/org/tron/core/services/http/SetAccountIdServletTest.java @@ -0,0 +1,60 @@ +package org.tron.core.services.http; + +import static java.nio.charset.StandardCharsets.UTF_8; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.when; + +import java.lang.reflect.Field; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +import org.springframework.mock.web.MockHttpServletRequest; +import org.springframework.mock.web.MockHttpServletResponse; +import org.tron.core.Wallet; +import org.tron.core.capsule.TransactionCapsule; +import org.tron.protos.Protocol.Transaction; + +public class SetAccountIdServletTest { + + private SetAccountIdServlet servlet; + @Mock + private Wallet wallet; + private AutoCloseable closeable; + + @Before + public void setUp() throws Exception { + closeable = MockitoAnnotations.openMocks(this); + servlet = new SetAccountIdServlet(); + Field f = SetAccountIdServlet.class.getDeclaredField("wallet"); + f.setAccessible(true); + f.set(servlet, wallet); + when(wallet.createTransactionCapsule(any(), any())) + .thenReturn(new TransactionCapsule(Transaction.getDefaultInstance())); + } + + @After + public void clearMocks() throws Exception { + closeable.close(); + } + + @Test + public void testSetAccountId() throws Exception { + String jsonParam = "{" + + "\"owner_address\": \"4199357684BC659F5166046B56C95A0E99F1265CD1\"," + + "\"account_id\": \"6161616162626262\"" + + "}"; + MockHttpServletRequest request = new MockHttpServletRequest(); + request.setMethod("POST"); + request.setContentType("application/json"); + request.setContent(jsonParam.getBytes(UTF_8)); + + MockHttpServletResponse response = new MockHttpServletResponse(); + servlet.doPost(request, response); + assertEquals(200, response.getStatus()); + assertNotNull(response.getContentAsString()); + } +} diff --git a/framework/src/test/java/org/tron/core/services/http/TransferAssetServletTest.java b/framework/src/test/java/org/tron/core/services/http/TransferAssetServletTest.java new file mode 100644 index 00000000000..fe82ad1f366 --- /dev/null +++ b/framework/src/test/java/org/tron/core/services/http/TransferAssetServletTest.java @@ -0,0 +1,65 @@ +package org.tron.core.services.http; + +import static java.nio.charset.StandardCharsets.UTF_8; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.when; + +import java.lang.reflect.Field; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +import org.springframework.mock.web.MockHttpServletRequest; +import org.springframework.mock.web.MockHttpServletResponse; +import org.tron.core.Wallet; +import org.tron.core.capsule.TransactionCapsule; +import org.tron.protos.Protocol.Transaction; + +public class TransferAssetServletTest { + + private TransferAssetServlet servlet; + @Mock + private Wallet wallet; + private AutoCloseable closeable; + + @Before + public void setUp() throws Exception { + closeable = MockitoAnnotations.openMocks(this); + servlet = new TransferAssetServlet(); + Field f = TransferAssetServlet.class.getDeclaredField("wallet"); + f.setAccessible(true); + f.set(servlet, wallet); + when(wallet.createTransactionCapsule(any(), any())) + .thenReturn(new TransactionCapsule(Transaction.getDefaultInstance())); + } + + @After + public void clearMocks() throws Exception { + closeable.close(); + } + + @Test + public void testTransferAsset() throws Exception { + String jsonParam = "{" + + "\"owner_address\": \"4199357684BC659F5166046B56C95A0E99F1265CD1\"," + + "\"to_address\": \"41B4750E2CD76E19DCA331BF5D089B71C3C2798548\"," + + "\"asset_name\": \"74657374\"," + + "\"amount\": 100" + + "}"; + MockHttpServletRequest request = new MockHttpServletRequest(); + request.setMethod("POST"); + request.setContentType("application/json"); + request.setContent(jsonParam.getBytes(UTF_8)); + + MockHttpServletResponse response = new MockHttpServletResponse(); + servlet.doPost(request, response); + assertEquals(200, response.getStatus()); + String content = response.getContentAsString(); + assertFalse(content.contains("\"Error\"")); + assertTrue(content.contains("txID")); + } +} diff --git a/framework/src/test/java/org/tron/core/services/http/TransferServletTest.java b/framework/src/test/java/org/tron/core/services/http/TransferServletTest.java new file mode 100644 index 00000000000..9ae2d85eb69 --- /dev/null +++ b/framework/src/test/java/org/tron/core/services/http/TransferServletTest.java @@ -0,0 +1,64 @@ +package org.tron.core.services.http; + +import static java.nio.charset.StandardCharsets.UTF_8; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.when; + +import java.lang.reflect.Field; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +import org.springframework.mock.web.MockHttpServletRequest; +import org.springframework.mock.web.MockHttpServletResponse; +import org.tron.core.Wallet; +import org.tron.core.capsule.TransactionCapsule; +import org.tron.protos.Protocol.Transaction; + +public class TransferServletTest { + + private TransferServlet servlet; + @Mock + private Wallet wallet; + private AutoCloseable closeable; + + @Before + public void setUp() throws Exception { + closeable = MockitoAnnotations.openMocks(this); + servlet = new TransferServlet(); + Field f = TransferServlet.class.getDeclaredField("wallet"); + f.setAccessible(true); + f.set(servlet, wallet); + when(wallet.createTransactionCapsule(any(), any())) + .thenReturn(new TransactionCapsule(Transaction.getDefaultInstance())); + } + + @After + public void clearMocks() throws Exception { + closeable.close(); + } + + @Test + public void testTransfer() throws Exception { + String jsonParam = "{" + + "\"owner_address\": \"4199357684BC659F5166046B56C95A0E99F1265CD1\"," + + "\"to_address\": \"41B4750E2CD76E19DCA331BF5D089B71C3C2798548\"," + + "\"amount\": 100" + + "}"; + MockHttpServletRequest request = new MockHttpServletRequest(); + request.setMethod("POST"); + request.setContentType("application/json"); + request.setContent(jsonParam.getBytes(UTF_8)); + + MockHttpServletResponse response = new MockHttpServletResponse(); + servlet.doPost(request, response); + assertEquals(200, response.getStatus()); + String content = response.getContentAsString(); + assertFalse(content.contains("\"Error\"")); + assertTrue(content.contains("txID")); + } +} diff --git a/framework/src/test/java/org/tron/core/services/http/UnDelegateResourceServletTest.java b/framework/src/test/java/org/tron/core/services/http/UnDelegateResourceServletTest.java new file mode 100644 index 00000000000..b26bf9ccb07 --- /dev/null +++ b/framework/src/test/java/org/tron/core/services/http/UnDelegateResourceServletTest.java @@ -0,0 +1,64 @@ +package org.tron.core.services.http; + +import static java.nio.charset.StandardCharsets.UTF_8; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.when; + +import java.lang.reflect.Field; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +import org.springframework.mock.web.MockHttpServletRequest; +import org.springframework.mock.web.MockHttpServletResponse; +import org.tron.core.Wallet; +import org.tron.core.capsule.TransactionCapsule; +import org.tron.protos.Protocol.Transaction; + +public class UnDelegateResourceServletTest { + + private UnDelegateResourceServlet servlet; + @Mock + private Wallet wallet; + private AutoCloseable closeable; + + @Before + public void setUp() throws Exception { + closeable = MockitoAnnotations.openMocks(this); + servlet = new UnDelegateResourceServlet(); + Field f = UnDelegateResourceServlet.class.getDeclaredField("wallet"); + f.setAccessible(true); + f.set(servlet, wallet); + when(wallet.createTransactionCapsule(any(), any())) + .thenReturn(new TransactionCapsule(Transaction.getDefaultInstance())); + } + + @After + public void clearMocks() throws Exception { + closeable.close(); + } + + @Test + public void testUnDelegateResource() throws Exception { + String jsonParam = "{" + + "\"owner_address\": \"4199357684BC659F5166046B56C95A0E99F1265CD1\"," + + "\"receiver_address\": \"41B4750E2CD76E19DCA331BF5D089B71C3C2798548\"," + + "\"balance\": 1000000," + + "\"resource\": \"BANDWIDTH\"" + + "}"; + MockHttpServletRequest request = new MockHttpServletRequest(); + request.setMethod("POST"); + request.setContentType("application/json"); + request.setContent(jsonParam.getBytes(UTF_8)); + + MockHttpServletResponse response = new MockHttpServletResponse(); + servlet.doPost(request, response); + assertEquals(200, response.getStatus()); + String content = response.getContentAsString(); + org.junit.Assert.assertFalse(content.contains("\"Error\"")); + org.junit.Assert.assertTrue(content.contains("txID")); + } +} diff --git a/framework/src/test/java/org/tron/core/services/http/UnFreezeAssetServletTest.java b/framework/src/test/java/org/tron/core/services/http/UnFreezeAssetServletTest.java new file mode 100644 index 00000000000..e5e2edee862 --- /dev/null +++ b/framework/src/test/java/org/tron/core/services/http/UnFreezeAssetServletTest.java @@ -0,0 +1,59 @@ +package org.tron.core.services.http; + +import static java.nio.charset.StandardCharsets.UTF_8; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.when; + +import java.lang.reflect.Field; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +import org.springframework.mock.web.MockHttpServletRequest; +import org.springframework.mock.web.MockHttpServletResponse; +import org.tron.core.Wallet; +import org.tron.core.capsule.TransactionCapsule; +import org.tron.protos.Protocol.Transaction; + +public class UnFreezeAssetServletTest { + + private UnFreezeAssetServlet servlet; + @Mock + private Wallet wallet; + private AutoCloseable closeable; + + @Before + public void setUp() throws Exception { + closeable = MockitoAnnotations.openMocks(this); + servlet = new UnFreezeAssetServlet(); + Field f = UnFreezeAssetServlet.class.getDeclaredField("wallet"); + f.setAccessible(true); + f.set(servlet, wallet); + when(wallet.createTransactionCapsule(any(), any())) + .thenReturn(new TransactionCapsule(Transaction.getDefaultInstance())); + } + + @After + public void clearMocks() throws Exception { + closeable.close(); + } + + @Test + public void testUnFreezeAsset() throws Exception { + String jsonParam = "{" + + "\"owner_address\": \"4199357684BC659F5166046B56C95A0E99F1265CD1\"" + + "}"; + MockHttpServletRequest request = new MockHttpServletRequest(); + request.setMethod("POST"); + request.setContentType("application/json"); + request.setContent(jsonParam.getBytes(UTF_8)); + + MockHttpServletResponse response = new MockHttpServletResponse(); + servlet.doPost(request, response); + assertEquals(200, response.getStatus()); + assertNotNull(response.getContentAsString()); + } +} diff --git a/framework/src/test/java/org/tron/core/services/http/UnFreezeBalanceServletTest.java b/framework/src/test/java/org/tron/core/services/http/UnFreezeBalanceServletTest.java new file mode 100644 index 00000000000..7d71f714304 --- /dev/null +++ b/framework/src/test/java/org/tron/core/services/http/UnFreezeBalanceServletTest.java @@ -0,0 +1,59 @@ +package org.tron.core.services.http; + +import static java.nio.charset.StandardCharsets.UTF_8; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.when; + +import java.lang.reflect.Field; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +import org.springframework.mock.web.MockHttpServletRequest; +import org.springframework.mock.web.MockHttpServletResponse; +import org.tron.core.Wallet; +import org.tron.core.capsule.TransactionCapsule; +import org.tron.protos.Protocol.Transaction; + +public class UnFreezeBalanceServletTest { + + private UnFreezeBalanceServlet servlet; + @Mock + private Wallet wallet; + private AutoCloseable closeable; + + @Before + public void setUp() throws Exception { + closeable = MockitoAnnotations.openMocks(this); + servlet = new UnFreezeBalanceServlet(); + Field f = UnFreezeBalanceServlet.class.getDeclaredField("wallet"); + f.setAccessible(true); + f.set(servlet, wallet); + when(wallet.createTransactionCapsule(any(), any())) + .thenReturn(new TransactionCapsule(Transaction.getDefaultInstance())); + } + + @After + public void clearMocks() throws Exception { + closeable.close(); + } + + @Test + public void testUnFreezeBalance() throws Exception { + String jsonParam = "{" + + "\"owner_address\": \"4199357684BC659F5166046B56C95A0E99F1265CD1\"" + + "}"; + MockHttpServletRequest request = new MockHttpServletRequest(); + request.setMethod("POST"); + request.setContentType("application/json"); + request.setContent(jsonParam.getBytes(UTF_8)); + + MockHttpServletResponse response = new MockHttpServletResponse(); + servlet.doPost(request, response); + assertEquals(200, response.getStatus()); + assertNotNull(response.getContentAsString()); + } +} diff --git a/framework/src/test/java/org/tron/core/services/http/UnFreezeBalanceV2ServletTest.java b/framework/src/test/java/org/tron/core/services/http/UnFreezeBalanceV2ServletTest.java new file mode 100644 index 00000000000..132b257bf31 --- /dev/null +++ b/framework/src/test/java/org/tron/core/services/http/UnFreezeBalanceV2ServletTest.java @@ -0,0 +1,61 @@ +package org.tron.core.services.http; + +import static java.nio.charset.StandardCharsets.UTF_8; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.when; + +import java.lang.reflect.Field; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +import org.springframework.mock.web.MockHttpServletRequest; +import org.springframework.mock.web.MockHttpServletResponse; +import org.tron.core.Wallet; +import org.tron.core.capsule.TransactionCapsule; +import org.tron.protos.Protocol.Transaction; + +public class UnFreezeBalanceV2ServletTest { + + private UnFreezeBalanceV2Servlet servlet; + @Mock + private Wallet wallet; + private AutoCloseable closeable; + + @Before + public void setUp() throws Exception { + closeable = MockitoAnnotations.openMocks(this); + servlet = new UnFreezeBalanceV2Servlet(); + Field f = UnFreezeBalanceV2Servlet.class.getDeclaredField("wallet"); + f.setAccessible(true); + f.set(servlet, wallet); + when(wallet.createTransactionCapsule(any(), any())) + .thenReturn(new TransactionCapsule(Transaction.getDefaultInstance())); + } + + @After + public void clearMocks() throws Exception { + closeable.close(); + } + + @Test + public void testUnFreezeBalanceV2() throws Exception { + String jsonParam = "{" + + "\"owner_address\": \"4199357684BC659F5166046B56C95A0E99F1265CD1\"," + + "\"unfreeze_balance\": 1000000," + + "\"resource\": \"BANDWIDTH\"" + + "}"; + MockHttpServletRequest request = new MockHttpServletRequest(); + request.setMethod("POST"); + request.setContentType("application/json"); + request.setContent(jsonParam.getBytes(UTF_8)); + + MockHttpServletResponse response = new MockHttpServletResponse(); + servlet.doPost(request, response); + assertEquals(200, response.getStatus()); + assertNotNull(response.getContentAsString()); + } +} diff --git a/framework/src/test/java/org/tron/core/services/http/UpdateAssetServletTest.java b/framework/src/test/java/org/tron/core/services/http/UpdateAssetServletTest.java new file mode 100644 index 00000000000..71801f67b50 --- /dev/null +++ b/framework/src/test/java/org/tron/core/services/http/UpdateAssetServletTest.java @@ -0,0 +1,63 @@ +package org.tron.core.services.http; + +import static java.nio.charset.StandardCharsets.UTF_8; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.when; + +import java.lang.reflect.Field; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +import org.springframework.mock.web.MockHttpServletRequest; +import org.springframework.mock.web.MockHttpServletResponse; +import org.tron.core.Wallet; +import org.tron.core.capsule.TransactionCapsule; +import org.tron.protos.Protocol.Transaction; + +public class UpdateAssetServletTest { + + private UpdateAssetServlet servlet; + @Mock + private Wallet wallet; + private AutoCloseable closeable; + + @Before + public void setUp() throws Exception { + closeable = MockitoAnnotations.openMocks(this); + servlet = new UpdateAssetServlet(); + Field f = UpdateAssetServlet.class.getDeclaredField("wallet"); + f.setAccessible(true); + f.set(servlet, wallet); + when(wallet.createTransactionCapsule(any(), any())) + .thenReturn(new TransactionCapsule(Transaction.getDefaultInstance())); + } + + @After + public void clearMocks() throws Exception { + closeable.close(); + } + + @Test + public void testUpdateAsset() throws Exception { + String jsonParam = "{" + + "\"owner_address\": \"4199357684BC659F5166046B56C95A0E99F1265CD1\"," + + "\"description\": \"746573745f64657363\"," + + "\"url\": \"746573745f75726c\"," + + "\"new_limit\": 100," + + "\"new_public_limit\": 200" + + "}"; + MockHttpServletRequest request = new MockHttpServletRequest(); + request.setMethod("POST"); + request.setContentType("application/json"); + request.setContent(jsonParam.getBytes(UTF_8)); + + MockHttpServletResponse response = new MockHttpServletResponse(); + servlet.doPost(request, response); + assertEquals(200, response.getStatus()); + assertNotNull(response.getContentAsString()); + } +} diff --git a/framework/src/test/java/org/tron/core/services/http/UpdateBrokerageServletTest.java b/framework/src/test/java/org/tron/core/services/http/UpdateBrokerageServletTest.java new file mode 100644 index 00000000000..e1bfd91057a --- /dev/null +++ b/framework/src/test/java/org/tron/core/services/http/UpdateBrokerageServletTest.java @@ -0,0 +1,60 @@ +package org.tron.core.services.http; + +import static java.nio.charset.StandardCharsets.UTF_8; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.when; + +import java.lang.reflect.Field; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +import org.springframework.mock.web.MockHttpServletRequest; +import org.springframework.mock.web.MockHttpServletResponse; +import org.tron.core.Wallet; +import org.tron.core.capsule.TransactionCapsule; +import org.tron.protos.Protocol.Transaction; + +public class UpdateBrokerageServletTest { + + private UpdateBrokerageServlet servlet; + @Mock + private Wallet wallet; + private AutoCloseable closeable; + + @Before + public void setUp() throws Exception { + closeable = MockitoAnnotations.openMocks(this); + servlet = new UpdateBrokerageServlet(); + Field f = UpdateBrokerageServlet.class.getDeclaredField("wallet"); + f.setAccessible(true); + f.set(servlet, wallet); + when(wallet.createTransactionCapsule(any(), any())) + .thenReturn(new TransactionCapsule(Transaction.getDefaultInstance())); + } + + @After + public void clearMocks() throws Exception { + closeable.close(); + } + + @Test + public void testUpdateBrokerage() throws Exception { + String jsonParam = "{" + + "\"owner_address\": \"4199357684BC659F5166046B56C95A0E99F1265CD1\"," + + "\"brokerage\": 20" + + "}"; + MockHttpServletRequest request = new MockHttpServletRequest(); + request.setMethod("POST"); + request.setContentType("application/json"); + request.setContent(jsonParam.getBytes(UTF_8)); + + MockHttpServletResponse response = new MockHttpServletResponse(); + servlet.doPost(request, response); + assertEquals(200, response.getStatus()); + assertNotNull(response.getContentAsString()); + } +} diff --git a/framework/src/test/java/org/tron/core/services/http/UpdateEnergyLimitServletTest.java b/framework/src/test/java/org/tron/core/services/http/UpdateEnergyLimitServletTest.java new file mode 100644 index 00000000000..a6512070fe8 --- /dev/null +++ b/framework/src/test/java/org/tron/core/services/http/UpdateEnergyLimitServletTest.java @@ -0,0 +1,61 @@ +package org.tron.core.services.http; + +import static java.nio.charset.StandardCharsets.UTF_8; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.when; + +import java.lang.reflect.Field; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +import org.springframework.mock.web.MockHttpServletRequest; +import org.springframework.mock.web.MockHttpServletResponse; +import org.tron.core.Wallet; +import org.tron.core.capsule.TransactionCapsule; +import org.tron.protos.Protocol.Transaction; + +public class UpdateEnergyLimitServletTest { + + private UpdateEnergyLimitServlet servlet; + @Mock + private Wallet wallet; + private AutoCloseable closeable; + + @Before + public void setUp() throws Exception { + closeable = MockitoAnnotations.openMocks(this); + servlet = new UpdateEnergyLimitServlet(); + Field f = UpdateEnergyLimitServlet.class.getDeclaredField("wallet"); + f.setAccessible(true); + f.set(servlet, wallet); + when(wallet.createTransactionCapsule(any(), any())) + .thenReturn(new TransactionCapsule(Transaction.getDefaultInstance())); + } + + @After + public void clearMocks() throws Exception { + closeable.close(); + } + + @Test + public void testUpdateEnergyLimit() throws Exception { + String jsonParam = "{" + + "\"owner_address\": \"4199357684BC659F5166046B56C95A0E99F1265CD1\"," + + "\"contract_address\": \"41B4750E2CD76E19DCA331BF5D089B71C3C2798548\"," + + "\"origin_energy_limit\": 10000000" + + "}"; + MockHttpServletRequest request = new MockHttpServletRequest(); + request.setMethod("POST"); + request.setContentType("application/json"); + request.setContent(jsonParam.getBytes(UTF_8)); + + MockHttpServletResponse response = new MockHttpServletResponse(); + servlet.doPost(request, response); + assertEquals(200, response.getStatus()); + assertNotNull(response.getContentAsString()); + } +} diff --git a/framework/src/test/java/org/tron/core/services/http/UpdateSettingServletTest.java b/framework/src/test/java/org/tron/core/services/http/UpdateSettingServletTest.java new file mode 100644 index 00000000000..f49c721d20d --- /dev/null +++ b/framework/src/test/java/org/tron/core/services/http/UpdateSettingServletTest.java @@ -0,0 +1,61 @@ +package org.tron.core.services.http; + +import static java.nio.charset.StandardCharsets.UTF_8; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.when; + +import java.lang.reflect.Field; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +import org.springframework.mock.web.MockHttpServletRequest; +import org.springframework.mock.web.MockHttpServletResponse; +import org.tron.core.Wallet; +import org.tron.core.capsule.TransactionCapsule; +import org.tron.protos.Protocol.Transaction; + +public class UpdateSettingServletTest { + + private UpdateSettingServlet servlet; + @Mock + private Wallet wallet; + private AutoCloseable closeable; + + @Before + public void setUp() throws Exception { + closeable = MockitoAnnotations.openMocks(this); + servlet = new UpdateSettingServlet(); + Field f = UpdateSettingServlet.class.getDeclaredField("wallet"); + f.setAccessible(true); + f.set(servlet, wallet); + when(wallet.createTransactionCapsule(any(), any())) + .thenReturn(new TransactionCapsule(Transaction.getDefaultInstance())); + } + + @After + public void clearMocks() throws Exception { + closeable.close(); + } + + @Test + public void testUpdateSetting() throws Exception { + String jsonParam = "{" + + "\"owner_address\": \"4199357684BC659F5166046B56C95A0E99F1265CD1\"," + + "\"contract_address\": \"41B4750E2CD76E19DCA331BF5D089B71C3C2798548\"," + + "\"consume_user_resource_percent\": 50" + + "}"; + MockHttpServletRequest request = new MockHttpServletRequest(); + request.setMethod("POST"); + request.setContentType("application/json"); + request.setContent(jsonParam.getBytes(UTF_8)); + + MockHttpServletResponse response = new MockHttpServletResponse(); + servlet.doPost(request, response); + assertEquals(200, response.getStatus()); + assertNotNull(response.getContentAsString()); + } +} diff --git a/framework/src/test/java/org/tron/core/services/http/UpdateWitnessServletTest.java b/framework/src/test/java/org/tron/core/services/http/UpdateWitnessServletTest.java new file mode 100644 index 00000000000..326d5484838 --- /dev/null +++ b/framework/src/test/java/org/tron/core/services/http/UpdateWitnessServletTest.java @@ -0,0 +1,60 @@ +package org.tron.core.services.http; + +import static java.nio.charset.StandardCharsets.UTF_8; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.when; + +import java.lang.reflect.Field; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +import org.springframework.mock.web.MockHttpServletRequest; +import org.springframework.mock.web.MockHttpServletResponse; +import org.tron.core.Wallet; +import org.tron.core.capsule.TransactionCapsule; +import org.tron.protos.Protocol.Transaction; + +public class UpdateWitnessServletTest { + + private UpdateWitnessServlet servlet; + @Mock + private Wallet wallet; + private AutoCloseable closeable; + + @Before + public void setUp() throws Exception { + closeable = MockitoAnnotations.openMocks(this); + servlet = new UpdateWitnessServlet(); + Field f = UpdateWitnessServlet.class.getDeclaredField("wallet"); + f.setAccessible(true); + f.set(servlet, wallet); + when(wallet.createTransactionCapsule(any(), any())) + .thenReturn(new TransactionCapsule(Transaction.getDefaultInstance())); + } + + @After + public void clearMocks() throws Exception { + closeable.close(); + } + + @Test + public void testUpdateWitness() throws Exception { + String jsonParam = "{" + + "\"owner_address\": \"4199357684BC659F5166046B56C95A0E99F1265CD1\"," + + "\"update_url\": \"746573745f75726c\"" + + "}"; + MockHttpServletRequest request = new MockHttpServletRequest(); + request.setMethod("POST"); + request.setContentType("application/json"); + request.setContent(jsonParam.getBytes(UTF_8)); + + MockHttpServletResponse response = new MockHttpServletResponse(); + servlet.doPost(request, response); + assertEquals(200, response.getStatus()); + assertNotNull(response.getContentAsString()); + } +} diff --git a/framework/src/test/java/org/tron/core/services/http/UtilMockTest.java b/framework/src/test/java/org/tron/core/services/http/UtilMockTest.java index 221c5a7a165..1f6bd88ba79 100644 --- a/framework/src/test/java/org/tron/core/services/http/UtilMockTest.java +++ b/framework/src/test/java/org/tron/core/services/http/UtilMockTest.java @@ -1,12 +1,9 @@ package org.tron.core.services.http; -import com.alibaba.fastjson.JSONObject; import com.google.protobuf.ByteString; - import java.security.InvalidParameterException; import java.util.ArrayList; import java.util.List; - import org.apache.commons.lang3.StringUtils; import org.junit.After; import org.junit.Assert; @@ -16,6 +13,7 @@ import org.tron.common.utils.Sha256Hash; import org.tron.core.capsule.BlockCapsule; import org.tron.core.capsule.TransactionCapsule; +import org.tron.json.JSONObject; import org.tron.p2p.utils.ByteArray; import org.tron.protos.Protocol; import org.tron.protos.contract.BalanceContract; @@ -240,4 +238,4 @@ public void testGetJsonString() { Assert.assertEquals(expect, ret2); } -} \ No newline at end of file +} diff --git a/framework/src/test/java/org/tron/core/services/http/ValidateAddressServletTest.java b/framework/src/test/java/org/tron/core/services/http/ValidateAddressServletTest.java new file mode 100644 index 00000000000..dfc0542620c --- /dev/null +++ b/framework/src/test/java/org/tron/core/services/http/ValidateAddressServletTest.java @@ -0,0 +1,31 @@ +package org.tron.core.services.http; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; + +import org.junit.Before; +import org.junit.Test; +import org.springframework.mock.web.MockHttpServletRequest; +import org.springframework.mock.web.MockHttpServletResponse; + +public class ValidateAddressServletTest { + + private ValidateAddressServlet servlet; + + @Before + public void setUp() { + servlet = new ValidateAddressServlet(); + } + + @Test + public void testValidateAddressGet() throws Exception { + MockHttpServletRequest request = new MockHttpServletRequest(); + request.setMethod("GET"); + request.addParameter("address", "4199357684BC659F5166046B56C95A0E99F1265CD1"); + + MockHttpServletResponse response = new MockHttpServletResponse(); + servlet.doGet(request, response); + assertEquals(200, response.getStatus()); + assertNotNull(response.getContentAsString()); + } +} diff --git a/framework/src/test/java/org/tron/core/services/http/VoteWitnessAccountServletTest.java b/framework/src/test/java/org/tron/core/services/http/VoteWitnessAccountServletTest.java new file mode 100644 index 00000000000..e3087611810 --- /dev/null +++ b/framework/src/test/java/org/tron/core/services/http/VoteWitnessAccountServletTest.java @@ -0,0 +1,61 @@ +package org.tron.core.services.http; + +import static java.nio.charset.StandardCharsets.UTF_8; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.when; + +import java.lang.reflect.Field; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +import org.springframework.mock.web.MockHttpServletRequest; +import org.springframework.mock.web.MockHttpServletResponse; +import org.tron.core.Wallet; +import org.tron.core.capsule.TransactionCapsule; +import org.tron.protos.Protocol.Transaction; + +public class VoteWitnessAccountServletTest { + + private VoteWitnessAccountServlet servlet; + @Mock + private Wallet wallet; + private AutoCloseable closeable; + + @Before + public void setUp() throws Exception { + closeable = MockitoAnnotations.openMocks(this); + servlet = new VoteWitnessAccountServlet(); + Field f = VoteWitnessAccountServlet.class.getDeclaredField("wallet"); + f.setAccessible(true); + f.set(servlet, wallet); + when(wallet.createTransactionCapsule(any(), any())) + .thenReturn(new TransactionCapsule(Transaction.getDefaultInstance())); + } + + @After + public void clearMocks() throws Exception { + closeable.close(); + } + + @Test + public void testVoteWitnessAccount() throws Exception { + String jsonParam = "{" + + "\"owner_address\": \"4199357684BC659F5166046B56C95A0E99F1265CD1\"," + + "\"votes\": [{\"vote_address\": \"41B4750E2CD76E19DCA331BF5D089B71C3C2798548\"," + + "\"vote_count\": 1}]" + + "}"; + MockHttpServletRequest request = new MockHttpServletRequest(); + request.setMethod("POST"); + request.setContentType("application/json"); + request.setContent(jsonParam.getBytes(UTF_8)); + + MockHttpServletResponse response = new MockHttpServletResponse(); + servlet.doPost(request, response); + assertEquals(200, response.getStatus()); + assertNotNull(response.getContentAsString()); + } +} diff --git a/framework/src/test/java/org/tron/core/services/http/WithdrawBalanceServletTest.java b/framework/src/test/java/org/tron/core/services/http/WithdrawBalanceServletTest.java new file mode 100644 index 00000000000..84b1812333c --- /dev/null +++ b/framework/src/test/java/org/tron/core/services/http/WithdrawBalanceServletTest.java @@ -0,0 +1,57 @@ +package org.tron.core.services.http; + +import static java.nio.charset.StandardCharsets.UTF_8; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.when; + +import java.lang.reflect.Field; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +import org.springframework.mock.web.MockHttpServletRequest; +import org.springframework.mock.web.MockHttpServletResponse; +import org.tron.core.Wallet; +import org.tron.core.capsule.TransactionCapsule; +import org.tron.protos.Protocol.Transaction; + +public class WithdrawBalanceServletTest { + + private WithdrawBalanceServlet servlet; + @Mock + private Wallet wallet; + private AutoCloseable closeable; + + @Before + public void setUp() throws Exception { + closeable = MockitoAnnotations.openMocks(this); + servlet = new WithdrawBalanceServlet(); + Field f = WithdrawBalanceServlet.class.getDeclaredField("wallet"); + f.setAccessible(true); + f.set(servlet, wallet); + when(wallet.createTransactionCapsule(any(), any())) + .thenReturn(new TransactionCapsule(Transaction.getDefaultInstance())); + } + + @After + public void clearMocks() throws Exception { + closeable.close(); + } + + @Test + public void testWithdrawBalance() throws Exception { + String jsonParam = "{\"owner_address\": \"4199357684BC659F5166046B56C95A0E99F1265CD1\"}"; + MockHttpServletRequest request = new MockHttpServletRequest(); + request.setMethod("POST"); + request.setContentType("application/json"); + request.setContent(jsonParam.getBytes(UTF_8)); + + MockHttpServletResponse response = new MockHttpServletResponse(); + servlet.doPost(request, response); + assertEquals(200, response.getStatus()); + assertNotNull(response.getContentAsString()); + } +} diff --git a/framework/src/test/java/org/tron/core/services/http/WithdrawExpireUnfreezeServletTest.java b/framework/src/test/java/org/tron/core/services/http/WithdrawExpireUnfreezeServletTest.java new file mode 100644 index 00000000000..08881e5473d --- /dev/null +++ b/framework/src/test/java/org/tron/core/services/http/WithdrawExpireUnfreezeServletTest.java @@ -0,0 +1,57 @@ +package org.tron.core.services.http; + +import static java.nio.charset.StandardCharsets.UTF_8; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.when; + +import java.lang.reflect.Field; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +import org.springframework.mock.web.MockHttpServletRequest; +import org.springframework.mock.web.MockHttpServletResponse; +import org.tron.core.Wallet; +import org.tron.core.capsule.TransactionCapsule; +import org.tron.protos.Protocol.Transaction; + +public class WithdrawExpireUnfreezeServletTest { + + private WithdrawExpireUnfreezeServlet servlet; + @Mock + private Wallet wallet; + private AutoCloseable closeable; + + @Before + public void setUp() throws Exception { + closeable = MockitoAnnotations.openMocks(this); + servlet = new WithdrawExpireUnfreezeServlet(); + Field f = WithdrawExpireUnfreezeServlet.class.getDeclaredField("wallet"); + f.setAccessible(true); + f.set(servlet, wallet); + when(wallet.createTransactionCapsule(any(), any())) + .thenReturn(new TransactionCapsule(Transaction.getDefaultInstance())); + } + + @After + public void clearMocks() throws Exception { + closeable.close(); + } + + @Test + public void testWithdrawExpireUnfreeze() throws Exception { + String jsonParam = "{\"owner_address\": \"4199357684BC659F5166046B56C95A0E99F1265CD1\"}"; + MockHttpServletRequest request = new MockHttpServletRequest(); + request.setMethod("POST"); + request.setContentType("application/json"); + request.setContent(jsonParam.getBytes(UTF_8)); + + MockHttpServletResponse response = new MockHttpServletResponse(); + servlet.doPost(request, response); + assertEquals(200, response.getStatus()); + assertNotNull(response.getContentAsString()); + } +} diff --git a/framework/src/test/java/org/tron/core/services/interfaceOnPBFT/http/GetBandwidthPricesOnPBFTServletTest.java b/framework/src/test/java/org/tron/core/services/interfaceOnPBFT/http/GetBandwidthPricesOnPBFTServletTest.java index 5f6558e0bd3..b37a792bc45 100644 --- a/framework/src/test/java/org/tron/core/services/interfaceOnPBFT/http/GetBandwidthPricesOnPBFTServletTest.java +++ b/framework/src/test/java/org/tron/core/services/interfaceOnPBFT/http/GetBandwidthPricesOnPBFTServletTest.java @@ -4,7 +4,6 @@ import static org.junit.Assert.fail; import static org.tron.common.utils.client.utils.HttpMethed.createRequest; -import com.alibaba.fastjson.JSONObject; import java.io.UnsupportedEncodingException; import javax.annotation.Resource; import org.apache.http.client.methods.HttpGet; @@ -16,6 +15,7 @@ import org.tron.common.BaseTest; import org.tron.common.TestConstants; import org.tron.core.config.args.Args; +import org.tron.json.JSONObject; public class GetBandwidthPricesOnPBFTServletTest extends BaseTest { diff --git a/framework/src/test/java/org/tron/core/services/interfaceOnPBFT/http/GetEnergyPricesOnPBFTServletTest.java b/framework/src/test/java/org/tron/core/services/interfaceOnPBFT/http/GetEnergyPricesOnPBFTServletTest.java index a2774095d94..71d7e7e4b0b 100644 --- a/framework/src/test/java/org/tron/core/services/interfaceOnPBFT/http/GetEnergyPricesOnPBFTServletTest.java +++ b/framework/src/test/java/org/tron/core/services/interfaceOnPBFT/http/GetEnergyPricesOnPBFTServletTest.java @@ -4,7 +4,6 @@ import static org.junit.Assert.fail; import static org.tron.common.utils.client.utils.HttpMethed.createRequest; -import com.alibaba.fastjson.JSONObject; import java.io.UnsupportedEncodingException; import javax.annotation.Resource; import org.apache.http.client.methods.HttpGet; @@ -16,6 +15,7 @@ import org.tron.common.BaseTest; import org.tron.common.TestConstants; import org.tron.core.config.args.Args; +import org.tron.json.JSONObject; public class GetEnergyPricesOnPBFTServletTest extends BaseTest { diff --git a/framework/src/test/java/org/tron/core/services/interfaceOnSolidity/http/GetBandwidthPricesOnSolidityServletTest.java b/framework/src/test/java/org/tron/core/services/interfaceOnSolidity/http/GetBandwidthPricesOnSolidityServletTest.java index d1f2e33410f..890528b72e4 100644 --- a/framework/src/test/java/org/tron/core/services/interfaceOnSolidity/http/GetBandwidthPricesOnSolidityServletTest.java +++ b/framework/src/test/java/org/tron/core/services/interfaceOnSolidity/http/GetBandwidthPricesOnSolidityServletTest.java @@ -4,7 +4,6 @@ import static org.junit.Assert.fail; import static org.tron.common.utils.client.utils.HttpMethed.createRequest; -import com.alibaba.fastjson.JSONObject; import java.io.UnsupportedEncodingException; import javax.annotation.Resource; import org.apache.http.client.methods.HttpGet; @@ -16,6 +15,7 @@ import org.tron.common.BaseTest; import org.tron.common.TestConstants; import org.tron.core.config.args.Args; +import org.tron.json.JSONObject; public class GetBandwidthPricesOnSolidityServletTest extends BaseTest { diff --git a/framework/src/test/java/org/tron/core/services/interfaceOnSolidity/http/GetEnergyPricesOnSolidityServletTest.java b/framework/src/test/java/org/tron/core/services/interfaceOnSolidity/http/GetEnergyPricesOnSolidityServletTest.java index 133a4b5cde5..b7310d065f3 100644 --- a/framework/src/test/java/org/tron/core/services/interfaceOnSolidity/http/GetEnergyPricesOnSolidityServletTest.java +++ b/framework/src/test/java/org/tron/core/services/interfaceOnSolidity/http/GetEnergyPricesOnSolidityServletTest.java @@ -4,7 +4,6 @@ import static org.junit.Assert.fail; import static org.tron.common.utils.client.utils.HttpMethed.createRequest; -import com.alibaba.fastjson.JSONObject; import java.io.UnsupportedEncodingException; import javax.annotation.Resource; import org.apache.http.client.methods.HttpGet; @@ -16,6 +15,7 @@ import org.tron.common.BaseTest; import org.tron.common.TestConstants; import org.tron.core.config.args.Args; +import org.tron.json.JSONObject; public class GetEnergyPricesOnSolidityServletTest extends BaseTest { diff --git a/framework/src/test/java/org/tron/core/zksnark/MerkleTreeTest.java b/framework/src/test/java/org/tron/core/zksnark/MerkleTreeTest.java index faea3780135..033617ea252 100644 --- a/framework/src/test/java/org/tron/core/zksnark/MerkleTreeTest.java +++ b/framework/src/test/java/org/tron/core/zksnark/MerkleTreeTest.java @@ -1,6 +1,5 @@ package org.tron.core.zksnark; -import com.alibaba.fastjson.JSONArray; import com.google.common.base.Charsets; import com.google.common.collect.Lists; import com.google.common.io.Files; @@ -21,6 +20,7 @@ import org.tron.core.capsule.IncrementalMerkleVoucherCapsule; import org.tron.core.capsule.PedersenHashCapsule; import org.tron.core.config.args.Args; +import org.tron.json.JSONArray; import org.tron.protos.contract.ShieldContract.PedersenHash; public class MerkleTreeTest extends BaseTest { @@ -63,8 +63,7 @@ private JSONArray readFile(String fileName) throws Exception { List readLines = Files.readLines(new File(file1), Charsets.UTF_8); - return JSONArray - .parseArray(readLines.stream().reduce((s, s2) -> s + s2).get()); + return JSONArray.parseArray(readLines.stream().reduce((s, s2) -> s + s2).get()); } private String PedersenHash2String(PedersenHash hash) { diff --git a/framework/src/test/java/org/tron/core/zksnark/SendCoinShieldTest.java b/framework/src/test/java/org/tron/core/zksnark/SendCoinShieldTest.java index e7dfa06d094..8693bf0716d 100644 --- a/framework/src/test/java/org/tron/core/zksnark/SendCoinShieldTest.java +++ b/framework/src/test/java/org/tron/core/zksnark/SendCoinShieldTest.java @@ -2,7 +2,6 @@ import static org.tron.core.capsule.TransactionCapsule.getShieldTransactionHashIgnoreTypeException; -import com.alibaba.fastjson.JSONArray; import com.google.common.base.Charsets; import com.google.common.collect.Lists; import com.google.common.io.Files; @@ -80,6 +79,7 @@ import org.tron.core.zen.note.NoteEncryption; import org.tron.core.zen.note.NoteEncryption.Encryption; import org.tron.core.zen.note.OutgoingPlaintext; +import org.tron.json.JSONArray; import org.tron.protos.Protocol; import org.tron.protos.Protocol.AccountType; import org.tron.protos.Protocol.Transaction.Contract.ContractType; diff --git a/framework/src/test/java/org/tron/json/JsonCompatibilityFuzzTest.java b/framework/src/test/java/org/tron/json/JsonCompatibilityFuzzTest.java new file mode 100644 index 00000000000..4b8cdf3cede --- /dev/null +++ b/framework/src/test/java/org/tron/json/JsonCompatibilityFuzzTest.java @@ -0,0 +1,496 @@ +package org.tron.json; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; + +import java.math.BigDecimal; +import java.math.BigInteger; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Random; +import org.junit.Test; + +/** + * Fuzz test for JSON/JSONObject/JSONArray wrappers. + * Verifies Fastjson-compatible behaviour under randomized input, + * covering edge cases such as BigDecimal/BigInteger, nested structures, + * special characters, unicode, deeply nested objects, and boundary values. + */ +public class JsonCompatibilityFuzzTest { + + private static final int FUZZ_ROUNDS = 500; + private static final Random RNG = new Random(42); // fixed seed for reproducibility + + // ------------------------------------------------------------------------- + // 1. JSON.parse — must throw on invalid JSON, return non-null on valid + // ------------------------------------------------------------------------- + + @Test + public void testParseValidJsonNeverReturnsNull() { + String[] validInputs = { + "{}", "[]", "\"hello\"", "123", "true", "false", "null", + "{\"a\":1}", "[1,2,3]", "0.5", "-1", "1e10", + "{\"nested\":{\"deep\":[1,2,{\"x\":true}]}}", + "\"unicode: \\u4e2d\\u6587\"", + String.valueOf(Long.MAX_VALUE), + new BigDecimal("1234567890.123456789012345678901234567890").toPlainString(), + }; + for (String input : validInputs) { + assertNotNull("parse should succeed for: " + input, JSON.parse(input)); + } + } + + @Test + public void testParseNullAndEmptyReturnsNull() { + assertNull(JSON.parse(null)); + assertNull(JSON.parse("")); + } + + @Test + public void testParseInvalidJsonThrows() { + String[] invalidInputs = { + "not json", "{key: }", "a=1&b=2", "", "{{", + "{\"unterminated", "[,,,]", "'''", "\0\0\0", + }; + for (String input : invalidInputs) { + try { + JSON.parse(input); + // some of these might be parsed by Jackson's lenient mode, that's OK + } catch (JSONException e) { + // expected for truly invalid input + } + } + } + + // ------------------------------------------------------------------------- + // 2. JSON.parseObject — null/empty → null, valid → JSONObject + // ------------------------------------------------------------------------- + + @Test + public void testParseObjectNullAndEmptyReturnsNull() { + assertNull(JSON.parseObject(null)); + assertNull(JSON.parseObject("")); + assertNull(JSON.parseObject(" ")); + assertNull(JSON.parseObject("\t\n")); + } + + @Test + public void testParseObjectValidJson() { + JSONObject obj = JSON.parseObject("{\"a\":1}"); + assertNotNull(obj); + assertEquals(Integer.valueOf(1), obj.getInteger("a")); + } + + @Test(expected = JSONException.class) + public void testParseObjectInvalidJsonThrows() { + JSON.parseObject("not a json object"); + } + + // ------------------------------------------------------------------------- + // 3. JSONObject.getString — object/array → JSON text, scalar → text + // ------------------------------------------------------------------------- + + @Test + public void testGetStringReturnsJsonTextForObjects() { + JSONObject obj = JSON.parseObject("{\"nested\":{\"x\":1},\"arr\":[1,2]}"); + String nestedStr = obj.getString("nested"); + assertTrue("Should be JSON text, got: " + nestedStr, nestedStr.contains("\"x\"")); + String arrStr = obj.getString("arr"); + assertTrue("Should be JSON text, got: " + arrStr, arrStr.startsWith("[")); + } + + @Test + public void testGetStringReturnsNullForMissing() { + JSONObject obj = JSON.parseObject("{\"a\":1}"); + assertNull(obj.getString("nonexistent")); + } + + @Test + public void testGetStringReturnsNullForJsonNull() { + JSONObject obj = JSON.parseObject("{\"a\":null}"); + assertNull(obj.getString("a")); + } + + @Test + public void testGetStringScalarValues() { + JSONObject obj = JSON.parseObject("{\"s\":\"hello\",\"n\":42,\"b\":true}"); + assertEquals("hello", obj.getString("s")); + assertEquals("42", obj.getString("n")); + assertEquals("true", obj.getString("b")); + } + + // ------------------------------------------------------------------------- + // 4. JSONObject.getInteger — must reject non-numeric text + // ------------------------------------------------------------------------- + + @Test + public void testGetIntegerValidValues() { + JSONObject obj = JSON.parseObject("{\"a\":1,\"b\":\"42\",\"c\":0,\"d\":-1}"); + assertEquals(Integer.valueOf(1), obj.getInteger("a")); + assertEquals(Integer.valueOf(42), obj.getInteger("b")); + assertEquals(Integer.valueOf(0), obj.getInteger("c")); + assertEquals(Integer.valueOf(-1), obj.getInteger("d")); + } + + @Test + public void testGetIntegerNullForMissing() { + JSONObject obj = JSON.parseObject("{\"a\":1}"); + assertNull(obj.getInteger("nonexistent")); + assertNull(obj.getInteger("x")); + } + + @Test(expected = JSONException.class) + public void testGetIntegerThrowsOnNonNumericText() { + JSONObject obj = JSON.parseObject("{\"bad\":\"abc\"}"); + obj.getInteger("bad"); + } + + @Test(expected = JSONException.class) + public void testGetIntegerThrowsOnBooleanNode() { + JSONObject obj = JSON.parseObject("{\"b\":true}"); + obj.getInteger("b"); + } + + // ------------------------------------------------------------------------- + // 5. JSONObject.get / convertNode — BigDecimal & BigInteger support + // ------------------------------------------------------------------------- + + @Test + public void testGetReturnsBigDecimalForFloats() { + JSONObject obj = JSON.parseObject("{\"val\":1234567890.123456789012345678901234567890}"); + Object val = obj.get("val"); + assertTrue("Expected BigDecimal, got " + val.getClass().getSimpleName(), + val instanceof BigDecimal); + } + + @Test + public void testGetReturnsBigIntegerForHugeInts() { + String huge = new BigInteger("99999999999999999999999999999999999999").toString(); + JSONObject obj = JSON.parseObject("{\"big\":" + huge + "}"); + Object val = obj.get("big"); + assertTrue("Expected BigInteger, got " + val.getClass().getSimpleName(), + val instanceof BigInteger); + } + + @Test + public void testGetReturnsIntegerForSmallInts() { + JSONObject obj = JSON.parseObject("{\"i\":42}"); + Object val = obj.get("i"); + assertTrue("Expected Integer, got " + val.getClass().getSimpleName(), + val instanceof Integer); + } + + @Test + public void testGetReturnsLongForLargeInts() { + JSONObject obj = JSON.parseObject("{\"l\":" + ((long) Integer.MAX_VALUE + 1) + "}"); + Object val = obj.get("l"); + assertTrue("Expected Long, got " + val.getClass().getSimpleName(), + val instanceof Long); + } + + @Test + public void testGetReturnsWrappersForStructured() { + JSONObject obj = JSON.parseObject("{\"o\":{\"x\":1},\"a\":[1]}"); + assertTrue(obj.get("o") instanceof JSONObject); + assertTrue(obj.get("a") instanceof JSONArray); + } + + // ------------------------------------------------------------------------- + // 6. JSONObject.remove — returns converted value + // ------------------------------------------------------------------------- + + @Test + public void testRemoveReturnsConvertedValue() { + JSONObject obj = JSON.parseObject("{\"a\":\"hello\",\"b\":42,\"c\":{\"x\":1}}"); + assertEquals("hello", obj.remove("a")); + assertEquals(42, obj.remove("b")); + assertTrue(obj.remove("c") instanceof JSONObject); + assertNull(obj.remove("nonexistent")); + } + + // ------------------------------------------------------------------------- + // 7. JSONObject.put(key, List) — null list → JSON null + // ------------------------------------------------------------------------- + + @Test + public void testPutNullListStoresJsonNull() { + JSONObject obj = new JSONObject(); + obj.put("list", (List) null); + assertNull(obj.get("list")); + } + + @Test + public void testPutNonNullListStoresArray() { + JSONObject obj = new JSONObject(); + obj.put("list", Arrays.asList("a", "b")); + Object val = obj.get("list"); + assertTrue(val instanceof JSONArray); + assertEquals(2, ((JSONArray) val).size()); + } + + // ------------------------------------------------------------------------- + // 8. JSONArray.get — BigDecimal/BigInteger + type consistency + // ------------------------------------------------------------------------- + + @Test + public void testArrayGetTypeConsistency() { + JSONArray arr = JSON.parseArray( + "[42, 9999999999999999999999, 3.14, \"text\", true, null, {\"k\":1}, [1]]"); + assertTrue(arr.get(0) instanceof Integer); + assertTrue("Expected BigInteger", arr.get(1) instanceof BigInteger); + assertTrue("Expected BigDecimal", arr.get(2) instanceof BigDecimal); + assertEquals("text", arr.get(3)); + assertEquals(true, arr.get(4)); + assertNull(arr.get(5)); + assertTrue(arr.get(6) instanceof JSONObject); + assertTrue(arr.get(7) instanceof JSONArray); + } + + // ------------------------------------------------------------------------- + // 9. JSONArray.iterator — returns converted values, not raw JsonNode + // ------------------------------------------------------------------------- + + @Test + public void testIteratorReturnsConvertedValues() { + JSONArray arr = JSON.parseArray("[\"a\", 1, {\"x\":2}, [3], true]"); + List items = new ArrayList<>(); + for (Object item : arr) { + items.add(item); + } + assertEquals(5, items.size()); + assertEquals("a", items.get(0)); + assertTrue(items.get(1) instanceof Integer); + assertTrue(items.get(2) instanceof JSONObject); + assertTrue(items.get(3) instanceof JSONArray); + assertEquals(true, items.get(4)); + } + + @Test + public void testIteratorMatchesIndexedAccess() { + JSONArray arr = JSON.parseArray("[1, \"two\", {\"k\":3}, [4], true, null]"); + int i = 0; + for (Object item : arr) { + Object indexed = arr.get(i); + if (item == null) { + assertNull("Index " + i + " mismatch", indexed); + } else { + assertEquals("Index " + i + " type mismatch", + item.getClass(), indexed.getClass()); + assertEquals("Index " + i + " value mismatch", + String.valueOf(item), String.valueOf(indexed)); + } + i++; + } + } + + // ------------------------------------------------------------------------- + // 10. Round-trip fuzz: random JSON → parse → serialize → re-parse → equal + // ------------------------------------------------------------------------- + + @Test + public void testRoundTripFuzz() { + for (int round = 0; round < FUZZ_ROUNDS; round++) { + String json = randomJsonObject(RNG, 3); + try { + JSONObject obj1 = JSON.parseObject(json); + assertNotNull("Round " + round + " parse failed for: " + json, obj1); + String serialized = obj1.toJSONString(); + JSONObject obj2 = JSON.parseObject(serialized); + assertNotNull("Round " + round + " re-parse failed", obj2); + assertEquals("Round " + round + " round-trip mismatch", + obj1.toString(), obj2.toString()); + } catch (JSONException e) { + fail("Round " + round + " unexpected JSONException for: " + json + " → " + e.getMessage()); + } + } + } + + // ------------------------------------------------------------------------- + // 11. Random invalid input fuzz: should either parse or throw, never NPE + // ------------------------------------------------------------------------- + + @Test + public void testInvalidInputNeverCausesNPE() { + for (int round = 0; round < FUZZ_ROUNDS; round++) { + String garbage = randomGarbage(RNG); + try { + JSON.parse(garbage); + // OK — some garbage might be valid JSON (e.g. a number or string) + } catch (JSONException e) { + // expected for invalid JSON + } catch (Exception e) { + fail("Round " + round + " unexpected exception type " + + e.getClass().getSimpleName() + " for: " + garbage); + } + } + } + + // ------------------------------------------------------------------------- + // 12. Deep nesting stress test + // ------------------------------------------------------------------------- + + @Test + public void testDeepNesting() { + StringBuilder sb = new StringBuilder(); + int depth = 50; + for (int i = 0; i < depth; i++) { + sb.append("{\"d\":"); + } + sb.append("42"); + for (int i = 0; i < depth; i++) { + sb.append("}"); + } + JSONObject obj = JSON.parseObject(sb.toString()); + assertNotNull(obj); + // Navigate to the deepest level + JSONObject current = obj; + for (int i = 0; i < depth - 1; i++) { + current = current.getJSONObject("d"); + assertNotNull("Null at depth " + i, current); + } + assertEquals(Integer.valueOf(42), current.getInteger("d")); + } + + // ------------------------------------------------------------------------- + // 13. Special character / unicode fuzz + // ------------------------------------------------------------------------- + + @Test + public void testUnicodeAndSpecialChars() { + String[] specialValues = { + "中文测试", "emoji: 😀", "tab:\there", + "newline:\nhere", "quote:\"here\"", "backslash:\\\\", + "null char: \\u0000", "path: /a/b/c", + "html: ", + "", " ", " \t ", + }; + for (String val : specialValues) { + JSONObject obj = new JSONObject(); + obj.put("key", val); + String json = obj.toJSONString(); + JSONObject parsed = JSON.parseObject(json); + assertNotNull("Failed to re-parse with special value", parsed); + assertEquals(val, parsed.getString("key")); + } + } + + // ------------------------------------------------------------------------- + // 14. Numeric boundary values + // ------------------------------------------------------------------------- + + @Test + public void testNumericBoundaries() { + JSONObject obj = JSON.parseObject(String.format( + "{\"intMax\":%d,\"intMin\":%d,\"longMax\":%d,\"longMin\":%d,\"zero\":0,\"negZero\":-0}", + Integer.MAX_VALUE, Integer.MIN_VALUE, Long.MAX_VALUE, Long.MIN_VALUE)); + assertEquals(Integer.valueOf(Integer.MAX_VALUE), obj.getInteger("intMax")); + assertEquals(Integer.valueOf(Integer.MIN_VALUE), obj.getInteger("intMin")); + assertEquals(Long.valueOf(Long.MAX_VALUE), obj.getLong("longMax")); + assertEquals(Long.valueOf(Long.MIN_VALUE), obj.getLong("longMin")); + assertEquals(Integer.valueOf(0), obj.getInteger("zero")); + } + + // ------------------------------------------------------------------------- + // 15. Fuzz: random put → get consistency + // ------------------------------------------------------------------------- + + @Test + public void testRandomPutGetConsistency() { + for (int round = 0; round < FUZZ_ROUNDS; round++) { + JSONObject obj = new JSONObject(); + String key = "k" + round; + int type = RNG.nextInt(5); + switch (type) { + case 0: // String + String s = "val_" + RNG.nextInt(10000); + obj.put(key, s); + assertEquals(s, obj.getString(key)); + break; + case 1: // Integer + int i = RNG.nextInt(); + obj.put(key, i); + assertEquals(Integer.valueOf(i), obj.getInteger(key)); + break; + case 2: // Long + long l = RNG.nextLong(); + obj.put(key, l); + assertEquals(Long.valueOf(l), obj.getLong(key)); + break; + case 3: // Boolean + boolean b = RNG.nextBoolean(); + obj.put(key, b); + assertEquals(b, obj.getBoolean(key)); + break; + case 4: // Nested object + JSONObject nested = new JSONObject(); + nested.put("inner", RNG.nextInt(100)); + obj.put(key, nested); + assertNotNull(obj.getJSONObject(key)); + assertEquals(nested.toString(), obj.getJSONObject(key).toString()); + break; + default: + break; + } + } + } + + // ========================================================================= + // Helper: random JSON object generator + // ========================================================================= + + private static String randomJsonObject(Random rng, int maxDepth) { + StringBuilder sb = new StringBuilder("{"); + int fieldCount = rng.nextInt(6) + 1; + for (int i = 0; i < fieldCount; i++) { + if (i > 0) { + sb.append(","); + } + sb.append("\"f").append(i).append("\":"); + sb.append(randomJsonValue(rng, maxDepth)); + } + sb.append("}"); + return sb.toString(); + } + + private static String randomJsonValue(Random rng, int depth) { + int type = (depth <= 0) ? rng.nextInt(5) : rng.nextInt(7); + switch (type) { + case 0: return String.valueOf(rng.nextInt(100000)); + case 1: return "\"" + escapeJson("str_" + rng.nextInt(10000)) + "\""; + case 2: return rng.nextBoolean() ? "true" : "false"; + case 3: return "null"; + case 4: return String.valueOf(rng.nextDouble() * 1000); + case 5: return randomJsonObject(rng, depth - 1); + case 6: + int arrLen = rng.nextInt(4); + StringBuilder arr = new StringBuilder("["); + for (int i = 0; i < arrLen; i++) { + if (i > 0) { + arr.append(","); + } + arr.append(randomJsonValue(rng, depth - 1)); + } + arr.append("]"); + return arr.toString(); + default: return "0"; + } + } + + private static String escapeJson(String s) { + return s.replace("\\", "\\\\").replace("\"", "\\\""); + } + + private static String randomGarbage(Random rng) { + int len = rng.nextInt(50) + 1; + char[] chars = new char[len]; + String pool = "{}[]\":,0123456789abcdefghijklmnop \t\n\\/<>&=+!@#$%^*()"; + for (int i = 0; i < len; i++) { + chars[i] = pool.charAt(rng.nextInt(pool.length())); + } + return new String(chars); + } +} diff --git a/gradle/verification-metadata.xml b/gradle/verification-metadata.xml index 4d0bf1013d6..9a78d20c85c 100644 --- a/gradle/verification-metadata.xml +++ b/gradle/verification-metadata.xml @@ -164,9 +164,9 @@ - - - + + + @@ -174,9 +174,9 @@ - - - + + + @@ -184,9 +184,9 @@ - - - + + + @@ -194,9 +194,9 @@ - - - + + + @@ -204,15 +204,15 @@ - - - + + + - - + + - - + + @@ -220,15 +220,15 @@ - - - + + + - - + + - - + + @@ -236,15 +236,15 @@ - - - + + + - - + + - - + + @@ -2013,6 +2013,14 @@ + + + + + + + +