diff --git a/.github/workflows/gradle.yml b/.github/workflows/gradle.yml index 51b5ce69..63d6054c 100644 --- a/.github/workflows/gradle.yml +++ b/.github/workflows/gradle.yml @@ -10,18 +10,17 @@ jobs: build: runs-on: ubuntu-latest permissions: + checks: write contents: write pull-requests: write steps: - uses: actions/checkout@v4 - - - name: Set up JDK 21 - uses: actions/setup-java@v4 + - name: Set up JDK 25 + uses: actions/setup-java@v5 with: - java-version: '21' + java-version: '25' distribution: 'temurin' - - name: Setup Gradle uses: gradle/actions/setup-gradle@af1da67850ed9a4cedd57bfd976089dd991e2582 # v4.0.0 @@ -31,6 +30,31 @@ jobs: - name: Run tests for all modules run: ./gradlew test + - name: Generate test report + uses: mikepenz/action-junit-report@v5 + if: success() || failure() # always run even if the previous step fails + with: + report_paths: '**/build/test-results/test/TEST-*.xml' + summary: true + detailed_summary: true + require_passed_tests: true + include_passed: true + + - name: Generate jacoco reports + run: ./gradlew jacocoTestReport + + - name: Generate aggregated jacoco report + run: ./gradlew test-coverage:testCodeCoverageReport + + - name: Add coverage to PR + id: jacoco + uses: madrapps/jacoco-report@v1.7.2 + with: + paths: ${{ github.workspace }}/test-coverage/build/reports/jacoco/testCodeCoverageReport/testCodeCoverageReport.xml + token: ${{ secrets.GITHUB_TOKEN }} + min-coverage-overall: 40 + min-coverage-changed-files: 60 + dependency-submission: runs-on: ubuntu-latest permissions: @@ -38,10 +62,10 @@ jobs: steps: - uses: actions/checkout@v4 - - name: Set up JDK 21 - uses: actions/setup-java@v4 + - name: Set up JDK 25 + uses: actions/setup-java@v5 with: - java-version: '21' + java-version: '25' distribution: 'temurin' - name: Generate and submit dependency graph diff --git a/application/src/test/groovy/javasabr/mqtt/broker/application/service/DisabledFeaturesSubscribtionServiceTest.groovy b/application/src/test/groovy/javasabr/mqtt/broker/application/service/DisabledFeaturesSubscribtionServiceTest.groovy index 4b4ba715..1f071cda 100644 --- a/application/src/test/groovy/javasabr/mqtt/broker/application/service/DisabledFeaturesSubscribtionServiceTest.groovy +++ b/application/src/test/groovy/javasabr/mqtt/broker/application/service/DisabledFeaturesSubscribtionServiceTest.groovy @@ -31,7 +31,7 @@ class DisabledFeaturesSubscribtionServiceTest extends IntegrationSpecification { .send() .join() then: - Thread.sleep(10) + Thread.sleep(50) subscriber.state == MqttClientState.DISCONNECTED def ex = thrown CompletionException if (ex.cause != null) { diff --git a/base/build.gradle b/base/build.gradle index 0be7c8c9..c2252a7e 100644 --- a/base/build.gradle +++ b/base/build.gradle @@ -1,10 +1,12 @@ plugins { id("java-library") id("configure-java") + id("groovy") } dependencies { - api libs.gson + api libs.jackson.core + api libs.jackson.databind api libs.project.reactor.core api libs.rlib.collections testImplementation projects.testSupport diff --git a/base/src/main/java/javasabr/mqtt/base/util/DebugUtils.java b/base/src/main/java/javasabr/mqtt/base/util/DebugUtils.java new file mode 100644 index 00000000..9d7e821a --- /dev/null +++ b/base/src/main/java/javasabr/mqtt/base/util/DebugUtils.java @@ -0,0 +1,136 @@ +package javasabr.mqtt.base.util; + +import com.fasterxml.jackson.annotation.JsonAutoDetect; +import com.fasterxml.jackson.annotation.JsonFilter; +import java.lang.StackWalker.Option; +import java.util.Set; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ConcurrentMap; +import javasabr.rlib.collections.array.Array; +import tools.jackson.core.JacksonException; +import tools.jackson.core.JsonGenerator; +import tools.jackson.databind.SerializationContext; +import tools.jackson.databind.SerializationFeature; +import tools.jackson.databind.introspect.AnnotatedMember; +import tools.jackson.databind.json.JsonMapper; +import tools.jackson.databind.jsonFormatVisitors.JsonObjectFormatVisitor; +import tools.jackson.databind.module.SimpleModule; +import tools.jackson.databind.ser.PropertyFilter; +import tools.jackson.databind.ser.PropertyWriter; +import tools.jackson.databind.ser.std.SimpleFilterProvider; +import tools.jackson.databind.ser.std.StdSerializer; + +public class DebugUtils { + + @JsonFilter("debugFieldsFilter") + public static class DebugFieldsFilterMixIn {} + + private static final ConcurrentMap, Set> INCLUDED_DEBUG_PROPERTIES = + new ConcurrentHashMap<>(); + + + private static class IncludeDebugFieldsPropertyFilter implements PropertyFilter { + + @Override + public void serializeAsProperty( + Object pojo, + JsonGenerator jsonGenerator, + SerializationContext context, + PropertyWriter writer) + throws Exception { + + AnnotatedMember member = writer.getMember(); + String name = member.getName(); + Class declaringClass = member.getDeclaringClass(); + Set fields = INCLUDED_DEBUG_PROPERTIES.get(declaringClass); + + while (declaringClass != Object.class && fields == null) { + declaringClass = declaringClass.getSuperclass(); + fields = INCLUDED_DEBUG_PROPERTIES.get(declaringClass); + } + + if (fields == null || fields.contains(name)) { + writer.serializeAsProperty(pojo, jsonGenerator, context); + } + } + + @Override + public void serializeAsElement( + Object elementValue, + JsonGenerator jsonGenerator, + SerializationContext context, + PropertyWriter writer) throws Exception { + writer.serializeAsElement(elementValue, jsonGenerator, context); + } + + @Override + public void depositSchemaProperty( + PropertyWriter writer, + JsonObjectFormatVisitor objectFormatVisitor, + SerializationContext context) { + writer.depositSchemaProperty(objectFormatVisitor, context); + } + + @Override + public PropertyFilter snapshot() { + return this; + } + } + + public static class ArraySerializer extends StdSerializer> { + + public ArraySerializer() { + super(Array.class); + } + + @Override + public void serialize( + Array value, + JsonGenerator gen, + SerializationContext provider) throws JacksonException { + gen.writeStartArray(); + for (Object element : value) { + gen.writePOJO(element); + } + gen.writeEndArray(); + } + } + + private static final SimpleFilterProvider DEBUG_FIELDS_FILTER = new SimpleFilterProvider(); + private static final IncludeDebugFieldsPropertyFilter INCLUDE_DEBUG_FIELDS_PROPERTY_FILTER = + new IncludeDebugFieldsPropertyFilter(); + + static { + DEBUG_FIELDS_FILTER.addFilter("debugFieldsFilter", INCLUDE_DEBUG_FIELDS_PROPERTY_FILTER); + } + + private static final JsonMapper DEBUG_OBJECT_MAPPER = JsonMapper + .builder() + .enable(SerializationFeature.INDENT_OUTPUT) + .changeDefaultVisibility(visibilityChecker -> visibilityChecker + .withFieldVisibility(JsonAutoDetect.Visibility.ANY) + .withGetterVisibility(JsonAutoDetect.Visibility.NONE) + .withIsGetterVisibility(JsonAutoDetect.Visibility.NONE)) + .addMixIn(Object.class, DebugFieldsFilterMixIn.class) + .addModule(new SimpleModule() + .addSerializer(new ArraySerializer())) + .filterProvider(DEBUG_FIELDS_FILTER) + .build(); + + public static void registerIncludedFields(String... fieldNames) { + + Class callerClass = StackWalker + .getInstance(Option.RETAIN_CLASS_REFERENCE) + .getCallerClass(); + + INCLUDED_DEBUG_PROPERTIES.put(callerClass, Set.of(fieldNames)); + } + + public static void registerIncludedFields(Class callerClass, String... fieldNames) { + INCLUDED_DEBUG_PROPERTIES.put(callerClass, Set.of(fieldNames)); + } + + public static String toJsonString(Object object) { + return DEBUG_OBJECT_MAPPER.writeValueAsString(object); + } +} diff --git a/base/src/main/java/javasabr/mqtt/base/utils/ReactorUtils.java b/base/src/main/java/javasabr/mqtt/base/util/ReactorUtils.java similarity index 97% rename from base/src/main/java/javasabr/mqtt/base/utils/ReactorUtils.java rename to base/src/main/java/javasabr/mqtt/base/util/ReactorUtils.java index 875e1e9a..5fcc54b3 100644 --- a/base/src/main/java/javasabr/mqtt/base/utils/ReactorUtils.java +++ b/base/src/main/java/javasabr/mqtt/base/util/ReactorUtils.java @@ -1,4 +1,4 @@ -package javasabr.mqtt.base.utils; +package javasabr.mqtt.base.util; import java.util.function.BiFunction; import java.util.function.Consumer; diff --git a/base/src/main/java/javasabr/mqtt/base/utils/DebugUtils.java b/base/src/main/java/javasabr/mqtt/base/utils/DebugUtils.java deleted file mode 100644 index 1cb77151..00000000 --- a/base/src/main/java/javasabr/mqtt/base/utils/DebugUtils.java +++ /dev/null @@ -1,98 +0,0 @@ -package javasabr.mqtt.base.utils; - -import com.google.gson.ExclusionStrategy; -import com.google.gson.FieldAttributes; -import com.google.gson.Gson; -import com.google.gson.GsonBuilder; -import java.lang.StackWalker.Option; -import java.lang.reflect.Field; -import java.util.Collection; -import java.util.Set; -import javasabr.rlib.collections.array.ArrayFactory; -import javasabr.rlib.collections.array.MutableArray; -import javasabr.rlib.common.util.ArrayUtils; -import javasabr.rlib.common.util.ReflectionUtils; - -public class DebugUtils { - - public static class PrintOnlyProvidedFields implements ExclusionStrategy { - - private final Class type; - private final Set fieldNames; - - public PrintOnlyProvidedFields(Class type, String... fieldNames) { - this.type = type; - this.fieldNames = Set.of(fieldNames); - } - - @Override - public boolean shouldSkipField(FieldAttributes attributes) { - Class declaringClass = attributes.getDeclaringClass(); - if (declaringClass != type) { - return false; - } else { - return !fieldNames.contains(attributes.getName()); - } - } - - @Override - public boolean shouldSkipClass(Class clazz) { - return false; - } - } - - private static final MutableArray ADDITIONAL_EXCLUDE_STRATEGIES = ArrayFactory.copyOnModifyArray( - ExclusionStrategy.class); - - private static class ExclusionStrategyContainer implements ExclusionStrategy { - - @Override - public boolean shouldSkipField(FieldAttributes attributes) { - return ADDITIONAL_EXCLUDE_STRATEGIES - .iterations() - .anyMatch(attributes, ExclusionStrategy::shouldSkipField); - } - - @Override - public boolean shouldSkipClass(Class clazz) { - return ADDITIONAL_EXCLUDE_STRATEGIES - .iterations() - .anyMatch(clazz, ExclusionStrategy::shouldSkipClass); - } - } - - private static final ExclusionStrategy[] EXCLUSION_STRATEGIES = ArrayUtils.array(new ExclusionStrategyContainer()); - - private static final Gson GSON = new GsonBuilder() - .setPrettyPrinting() - .setExclusionStrategies(EXCLUSION_STRATEGIES) - .create(); - - public static void registerIncludedFields(String... fieldNames) { - - Class callerClass = StackWalker - .getInstance(Option.RETAIN_CLASS_REFERENCE) - .getCallerClass(); - - Collection allFields = ReflectionUtils.getAllDeclaredFields(callerClass); - - for (String fieldName : fieldNames) { - - boolean anyMatch = allFields - .stream() - .anyMatch(field -> field - .getName() - .equals(fieldName)); - - if (!anyMatch) { - throw new RuntimeException("Not found field " + fieldName + " in type " + callerClass); - } - } - - ADDITIONAL_EXCLUDE_STRATEGIES.add(new PrintOnlyProvidedFields(callerClass, fieldNames)); - } - - public static String toJsonString(Object object) { - return GSON.toJson(object); - } -} diff --git a/base/src/test/groovy/javasabr/mqtt/base/util/DebugUtilsTest.groovy b/base/src/test/groovy/javasabr/mqtt/base/util/DebugUtilsTest.groovy new file mode 100644 index 00000000..c42ed10a --- /dev/null +++ b/base/src/test/groovy/javasabr/mqtt/base/util/DebugUtilsTest.groovy @@ -0,0 +1,48 @@ +package javasabr.mqtt.base.util + +import javasabr.mqtt.test.support.UnitSpecification +import javasabr.rlib.collections.array.Array +import javasabr.rlib.collections.array.ArrayFactory +import javasabr.rlib.collections.array.MutableArray + +class DebugUtilsTest extends UnitSpecification { + + class TestData { + String name = "testData" + String ignored = "ignored" + MutableArray mutableValues = ArrayFactory.mutableArray(String) + Array values = ArrayFactory.mutableArray(String) + Iterable emptyArray = Array.empty(String) + + TestData() { + def array = ArrayFactory.mutableArray(String) + array.add("First") + array.add("Second") + this.mutableValues = array; + this.values = Array.copyOf(array) + } + + static { + DebugUtils.registerIncludedFields(TestData, + "name", "mutableValues", "values", "emptyArray") + } + + String toString() { + return DebugUtils.toJsonString(this) + } + } + + def "should correctly write class to json"() { + given: + def data = new TestData() + when: + def json = data.toString() + then: + json == """{ + "emptyArray" : [ ], + "mutableValues" : [ "First", "Second" ], + "name" : "testData", + "values" : [ "First", "Second" ] +}""" + } +} diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 730049e8..2297629a 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,8 +1,6 @@ [versions] # https://gitlab.com/JavaSaBr/maven-repo/-/packages rlib = "10.0.alpha5" -# https://mvnrepository.com/artifact/org.jetbrains/annotations -jetbrains-annotations = "26.0.2" # https://mvnrepository.com/artifact/org.projectlombok/lombok lombok = "1.18.38" # https://mvnrepository.com/artifact/org.jspecify/jspecify @@ -15,8 +13,6 @@ junit-jupiter = "5.13.4" junit-platform-launcher = "1.13.4" # https://mvnrepository.com/artifact/io.projectreactor/reactor-core project-reactor = "3.7.8" -# https://mvnrepository.com/artifact/com.google.code.gson/gson -gson = "2.13.1" # https://mvnrepository.com/artifact/org.spockframework/spock-core spock = "2.4-M6-groovy-4.0" # https://mvnrepository.com/artifact/org.apache.groovy/groovy-all @@ -33,6 +29,8 @@ objenesis = "3.4" hivemq-mqtt-client = "1.3.10" # https://mvnrepository.com/artifact/io.moquette/moquette-broker moquette-broker = "0.17" +# https://mvnrepository.com/artifact/tools.jackson.core/jackson-core +jackson = "3.0.1" [libraries] rlib-network = { module = "javasabr.rlib:rlib-network", version.ref = "rlib" } @@ -43,9 +41,9 @@ rlib-collections = { module = "javasabr.rlib:rlib-collections", version.ref = "r springboot-starter-core = { module = "org.springframework.boot:spring-boot-starter", version.ref = "springboot" } springboot-starter-log4j2 = { module = "org.springframework.boot:spring-boot-starter-log4j2", version.ref = "springboot" } project-reactor-core = { module = "io.projectreactor:reactor-core", version.ref = "project-reactor" } -gson = { module = "com.google.code.gson:gson", version.ref = "gson" } +jackson-core = { module = "tools.jackson.core:jackson-core", version.ref = "jackson" } +jackson-databind = { module = "tools.jackson.core:jackson-databind", version.ref = "jackson" } -jetbrains-annotations = { module = "org.jetbrains:annotations", version.ref = "jetbrains-annotations" } jspecify = { module = "org.jspecify:jspecify", version.ref = "jspecify" } lombok = { module = "org.projectlombok:lombok", version.ref = "lombok" } diff --git a/model/src/main/java/javasabr/mqtt/model/data/type/StringPair.java b/model/src/main/java/javasabr/mqtt/model/data/type/StringPair.java index 4cb4483d..cf0777a2 100644 --- a/model/src/main/java/javasabr/mqtt/model/data/type/StringPair.java +++ b/model/src/main/java/javasabr/mqtt/model/data/type/StringPair.java @@ -1,16 +1,15 @@ package javasabr.mqtt.model.data.type; -import lombok.EqualsAndHashCode; -import lombok.Getter; -import lombok.RequiredArgsConstructor; -import lombok.ToString; +import javasabr.mqtt.base.util.DebugUtils; -@Getter -@ToString -@EqualsAndHashCode -@RequiredArgsConstructor -public class StringPair { +public record StringPair(String name, String value) { - private final String name; - private final String value; + static { + DebugUtils.registerIncludedFields("name", "value"); + } + + @Override + public String toString() { + return DebugUtils.toJsonString(this); + } } diff --git a/model/src/main/java/javasabr/mqtt/model/topic/AbstractTopic.java b/model/src/main/java/javasabr/mqtt/model/topic/AbstractTopic.java index 9c4b40df..8356f7e7 100644 --- a/model/src/main/java/javasabr/mqtt/model/topic/AbstractTopic.java +++ b/model/src/main/java/javasabr/mqtt/model/topic/AbstractTopic.java @@ -1,6 +1,6 @@ package javasabr.mqtt.model.topic; -import javasabr.mqtt.base.utils.DebugUtils; +import javasabr.mqtt.base.util.DebugUtils; import javasabr.mqtt.model.util.TopicUtils; import lombok.EqualsAndHashCode; import lombok.Getter; diff --git a/network/src/main/java/javasabr/mqtt/network/impl/AbstractMqttClient.java b/network/src/main/java/javasabr/mqtt/network/impl/AbstractMqttClient.java index 63481ecf..55fe238c 100644 --- a/network/src/main/java/javasabr/mqtt/network/impl/AbstractMqttClient.java +++ b/network/src/main/java/javasabr/mqtt/network/impl/AbstractMqttClient.java @@ -2,7 +2,7 @@ import java.util.concurrent.CompletableFuture; import java.util.concurrent.atomic.AtomicBoolean; -import javasabr.mqtt.base.utils.DebugUtils; +import javasabr.mqtt.base.util.DebugUtils; import javasabr.mqtt.model.MqttClientConnectionConfig; import javasabr.mqtt.network.MqttClient.UnsafeMqttClient; import javasabr.mqtt.network.MqttConnection; diff --git a/network/src/main/java/javasabr/mqtt/network/impl/ExternalMqttClient.java b/network/src/main/java/javasabr/mqtt/network/impl/ExternalMqttClient.java index 41a9400c..202136eb 100644 --- a/network/src/main/java/javasabr/mqtt/network/impl/ExternalMqttClient.java +++ b/network/src/main/java/javasabr/mqtt/network/impl/ExternalMqttClient.java @@ -1,6 +1,6 @@ package javasabr.mqtt.network.impl; -import javasabr.mqtt.base.utils.DebugUtils; +import javasabr.mqtt.base.util.DebugUtils; import javasabr.mqtt.network.MqttConnection; import javasabr.mqtt.network.handler.MqttClientReleaseHandler; diff --git a/network/src/main/java/javasabr/mqtt/network/impl/InternalMqttClient.java b/network/src/main/java/javasabr/mqtt/network/impl/InternalMqttClient.java index b9aba103..bc901e64 100644 --- a/network/src/main/java/javasabr/mqtt/network/impl/InternalMqttClient.java +++ b/network/src/main/java/javasabr/mqtt/network/impl/InternalMqttClient.java @@ -1,6 +1,6 @@ package javasabr.mqtt.network.impl; -import javasabr.mqtt.base.utils.DebugUtils; +import javasabr.mqtt.base.util.DebugUtils; import javasabr.mqtt.network.MqttConnection; import javasabr.mqtt.network.handler.MqttClientReleaseHandler; diff --git a/network/src/main/java/javasabr/mqtt/network/message/in/ConnectMqttInMessage.java b/network/src/main/java/javasabr/mqtt/network/message/in/ConnectMqttInMessage.java index e8117ccb..33d1c62e 100644 --- a/network/src/main/java/javasabr/mqtt/network/message/in/ConnectMqttInMessage.java +++ b/network/src/main/java/javasabr/mqtt/network/message/in/ConnectMqttInMessage.java @@ -3,7 +3,7 @@ import java.nio.ByteBuffer; import java.util.EnumSet; import java.util.Set; -import javasabr.mqtt.base.utils.DebugUtils; +import javasabr.mqtt.base.util.DebugUtils; import javasabr.mqtt.model.MqttProperties; import javasabr.mqtt.model.MqttVersion; import javasabr.mqtt.model.PacketProperty; diff --git a/network/src/main/java/javasabr/mqtt/network/message/in/DisconnectMqttInMessage.java b/network/src/main/java/javasabr/mqtt/network/message/in/DisconnectMqttInMessage.java index 91b11220..c30bdcb4 100644 --- a/network/src/main/java/javasabr/mqtt/network/message/in/DisconnectMqttInMessage.java +++ b/network/src/main/java/javasabr/mqtt/network/message/in/DisconnectMqttInMessage.java @@ -3,7 +3,7 @@ import java.nio.ByteBuffer; import java.util.EnumSet; import java.util.Set; -import javasabr.mqtt.base.utils.DebugUtils; +import javasabr.mqtt.base.util.DebugUtils; import javasabr.mqtt.model.MqttProperties; import javasabr.mqtt.model.MqttVersion; import javasabr.mqtt.model.PacketProperty; diff --git a/network/src/main/java/javasabr/mqtt/network/message/in/MqttInMessage.java b/network/src/main/java/javasabr/mqtt/network/message/in/MqttInMessage.java index f1e4fd31..9bd35e59 100644 --- a/network/src/main/java/javasabr/mqtt/network/message/in/MqttInMessage.java +++ b/network/src/main/java/javasabr/mqtt/network/message/in/MqttInMessage.java @@ -8,7 +8,7 @@ import java.nio.charset.StandardCharsets; import java.util.Collections; import java.util.Set; -import javasabr.mqtt.base.utils.DebugUtils; +import javasabr.mqtt.base.util.DebugUtils; import javasabr.mqtt.model.MqttServerConnectionConfig; import javasabr.mqtt.model.MqttVersion; import javasabr.mqtt.model.PacketProperty; diff --git a/network/src/main/java/javasabr/mqtt/network/message/in/PublishAckMqttInMessage.java b/network/src/main/java/javasabr/mqtt/network/message/in/PublishAckMqttInMessage.java index 72bc28ec..0222bdb9 100644 --- a/network/src/main/java/javasabr/mqtt/network/message/in/PublishAckMqttInMessage.java +++ b/network/src/main/java/javasabr/mqtt/network/message/in/PublishAckMqttInMessage.java @@ -3,7 +3,7 @@ import java.nio.ByteBuffer; import java.util.EnumSet; import java.util.Set; -import javasabr.mqtt.base.utils.DebugUtils; +import javasabr.mqtt.base.util.DebugUtils; import javasabr.mqtt.model.MqttVersion; import javasabr.mqtt.model.PacketProperty; import javasabr.mqtt.model.reason.code.PublishAckReasonCode; diff --git a/network/src/main/java/javasabr/mqtt/network/message/in/PublishCompleteMqttInMessage.java b/network/src/main/java/javasabr/mqtt/network/message/in/PublishCompleteMqttInMessage.java index f0dc0a63..1e746f29 100644 --- a/network/src/main/java/javasabr/mqtt/network/message/in/PublishCompleteMqttInMessage.java +++ b/network/src/main/java/javasabr/mqtt/network/message/in/PublishCompleteMqttInMessage.java @@ -3,7 +3,7 @@ import java.nio.ByteBuffer; import java.util.EnumSet; import java.util.Set; -import javasabr.mqtt.base.utils.DebugUtils; +import javasabr.mqtt.base.util.DebugUtils; import javasabr.mqtt.model.MqttVersion; import javasabr.mqtt.model.PacketProperty; import javasabr.mqtt.model.reason.code.PublishCompletedReasonCode; diff --git a/network/src/main/java/javasabr/mqtt/network/message/in/PublishMqttInMessage.java b/network/src/main/java/javasabr/mqtt/network/message/in/PublishMqttInMessage.java index 7e16a56e..df2af353 100644 --- a/network/src/main/java/javasabr/mqtt/network/message/in/PublishMqttInMessage.java +++ b/network/src/main/java/javasabr/mqtt/network/message/in/PublishMqttInMessage.java @@ -6,7 +6,7 @@ import java.nio.ByteBuffer; import java.util.EnumSet; import java.util.Set; -import javasabr.mqtt.base.utils.DebugUtils; +import javasabr.mqtt.base.util.DebugUtils; import javasabr.mqtt.model.MqttProperties; import javasabr.mqtt.model.PacketProperty; import javasabr.mqtt.model.QoS; diff --git a/network/src/main/java/javasabr/mqtt/network/message/in/PublishReceivedMqttInMessage.java b/network/src/main/java/javasabr/mqtt/network/message/in/PublishReceivedMqttInMessage.java index b4bbb54b..20d46176 100644 --- a/network/src/main/java/javasabr/mqtt/network/message/in/PublishReceivedMqttInMessage.java +++ b/network/src/main/java/javasabr/mqtt/network/message/in/PublishReceivedMqttInMessage.java @@ -3,7 +3,7 @@ import java.nio.ByteBuffer; import java.util.EnumSet; import java.util.Set; -import javasabr.mqtt.base.utils.DebugUtils; +import javasabr.mqtt.base.util.DebugUtils; import javasabr.mqtt.model.MqttVersion; import javasabr.mqtt.model.PacketProperty; import javasabr.mqtt.model.reason.code.PublishReceivedReasonCode; diff --git a/network/src/main/java/javasabr/mqtt/network/message/in/PublishReleaseMqttInMessage.java b/network/src/main/java/javasabr/mqtt/network/message/in/PublishReleaseMqttInMessage.java index 792db549..544498bb 100644 --- a/network/src/main/java/javasabr/mqtt/network/message/in/PublishReleaseMqttInMessage.java +++ b/network/src/main/java/javasabr/mqtt/network/message/in/PublishReleaseMqttInMessage.java @@ -3,7 +3,7 @@ import java.nio.ByteBuffer; import java.util.EnumSet; import java.util.Set; -import javasabr.mqtt.base.utils.DebugUtils; +import javasabr.mqtt.base.util.DebugUtils; import javasabr.mqtt.model.MqttVersion; import javasabr.mqtt.model.PacketProperty; import javasabr.mqtt.model.reason.code.PublishReleaseReasonCode; diff --git a/network/src/main/java/javasabr/mqtt/network/message/in/SubscribeMqttInMessage.java b/network/src/main/java/javasabr/mqtt/network/message/in/SubscribeMqttInMessage.java index da0599cd..d95c1fac 100644 --- a/network/src/main/java/javasabr/mqtt/network/message/in/SubscribeMqttInMessage.java +++ b/network/src/main/java/javasabr/mqtt/network/message/in/SubscribeMqttInMessage.java @@ -5,7 +5,7 @@ import java.nio.ByteBuffer; import java.util.EnumSet; import java.util.Set; -import javasabr.mqtt.base.utils.DebugUtils; +import javasabr.mqtt.base.util.DebugUtils; import javasabr.mqtt.model.MqttProperties; import javasabr.mqtt.model.MqttVersion; import javasabr.mqtt.model.PacketProperty; diff --git a/network/src/main/java/javasabr/mqtt/network/message/out/ConnectAckMqtt311OutMessage.java b/network/src/main/java/javasabr/mqtt/network/message/out/ConnectAckMqtt311OutMessage.java index c756da62..b8b16bb4 100644 --- a/network/src/main/java/javasabr/mqtt/network/message/out/ConnectAckMqtt311OutMessage.java +++ b/network/src/main/java/javasabr/mqtt/network/message/out/ConnectAckMqtt311OutMessage.java @@ -1,7 +1,7 @@ package javasabr.mqtt.network.message.out; import java.nio.ByteBuffer; -import javasabr.mqtt.base.utils.DebugUtils; +import javasabr.mqtt.base.util.DebugUtils; import javasabr.mqtt.model.reason.code.ConnectAckReasonCode; import javasabr.mqtt.network.MqttConnection; import javasabr.mqtt.network.message.MqttMessageType; diff --git a/network/src/main/java/javasabr/mqtt/network/message/out/ConnectAckMqtt5OutMessage.java b/network/src/main/java/javasabr/mqtt/network/message/out/ConnectAckMqtt5OutMessage.java index cc3d2cd6..9c295258 100644 --- a/network/src/main/java/javasabr/mqtt/network/message/out/ConnectAckMqtt5OutMessage.java +++ b/network/src/main/java/javasabr/mqtt/network/message/out/ConnectAckMqtt5OutMessage.java @@ -3,7 +3,7 @@ import java.nio.ByteBuffer; import java.util.EnumSet; import java.util.Set; -import javasabr.mqtt.base.utils.DebugUtils; +import javasabr.mqtt.base.util.DebugUtils; import javasabr.mqtt.model.MqttClientConnectionConfig; import javasabr.mqtt.model.MqttProperties; import javasabr.mqtt.model.PacketProperty; diff --git a/network/src/main/java/javasabr/mqtt/network/message/out/MqttOutMessage.java b/network/src/main/java/javasabr/mqtt/network/message/out/MqttOutMessage.java index ef34f7a8..0efafad5 100644 --- a/network/src/main/java/javasabr/mqtt/network/message/out/MqttOutMessage.java +++ b/network/src/main/java/javasabr/mqtt/network/message/out/MqttOutMessage.java @@ -2,7 +2,7 @@ import java.nio.ByteBuffer; import java.nio.charset.StandardCharsets; -import javasabr.mqtt.base.utils.DebugUtils; +import javasabr.mqtt.base.util.DebugUtils; import javasabr.mqtt.model.PacketProperty; import javasabr.mqtt.model.data.type.StringPair; import javasabr.mqtt.network.MqttConnection; @@ -114,8 +114,8 @@ public void writeProperty( public void writeProperty(ByteBuffer buffer, PacketProperty property, StringPair value) { buffer.put(property.id()); - writeString(buffer, value.getName()); - writeString(buffer, value.getValue()); + writeString(buffer, value.name()); + writeString(buffer, value.value()); } public void writeNotEmptyProperty(ByteBuffer buffer, PacketProperty property, String value) { @@ -158,8 +158,8 @@ public void writeString(ByteBuffer buffer, String string) { } public void writeStringPair(ByteBuffer buffer, StringPair pair) { - writeString(buffer, pair.getName()); - writeString(buffer, pair.getValue()); + writeString(buffer, pair.name()); + writeString(buffer, pair.value()); } public void writeMbi(ByteBuffer buffer, int value) { diff --git a/network/src/main/java/javasabr/mqtt/network/message/out/PublishMqtt311OutMessage.java b/network/src/main/java/javasabr/mqtt/network/message/out/PublishMqtt311OutMessage.java index 7f311372..a90ad07d 100644 --- a/network/src/main/java/javasabr/mqtt/network/message/out/PublishMqtt311OutMessage.java +++ b/network/src/main/java/javasabr/mqtt/network/message/out/PublishMqtt311OutMessage.java @@ -1,7 +1,7 @@ package javasabr.mqtt.network.message.out; import java.nio.ByteBuffer; -import javasabr.mqtt.base.utils.DebugUtils; +import javasabr.mqtt.base.util.DebugUtils; import javasabr.mqtt.model.QoS; import javasabr.mqtt.network.MqttConnection; import lombok.AccessLevel; diff --git a/network/src/main/java/javasabr/mqtt/network/message/out/PublishMqtt5OutMessage.java b/network/src/main/java/javasabr/mqtt/network/message/out/PublishMqtt5OutMessage.java index cde19cee..7fcebcb0 100644 --- a/network/src/main/java/javasabr/mqtt/network/message/out/PublishMqtt5OutMessage.java +++ b/network/src/main/java/javasabr/mqtt/network/message/out/PublishMqtt5OutMessage.java @@ -3,7 +3,7 @@ import java.nio.ByteBuffer; import java.util.EnumSet; import java.util.Set; -import javasabr.mqtt.base.utils.DebugUtils; +import javasabr.mqtt.base.util.DebugUtils; import javasabr.mqtt.model.MqttProperties; import javasabr.mqtt.model.PacketProperty; import javasabr.mqtt.model.QoS; diff --git a/network/src/main/java/javasabr/mqtt/network/message/out/SubscribeAckMqtt311OutMessage.java b/network/src/main/java/javasabr/mqtt/network/message/out/SubscribeAckMqtt311OutMessage.java index 312f5c8d..a008d20a 100644 --- a/network/src/main/java/javasabr/mqtt/network/message/out/SubscribeAckMqtt311OutMessage.java +++ b/network/src/main/java/javasabr/mqtt/network/message/out/SubscribeAckMqtt311OutMessage.java @@ -1,7 +1,7 @@ package javasabr.mqtt.network.message.out; import java.nio.ByteBuffer; -import javasabr.mqtt.base.utils.DebugUtils; +import javasabr.mqtt.base.util.DebugUtils; import javasabr.mqtt.model.reason.code.SubscribeAckReasonCode; import javasabr.mqtt.network.MqttConnection; import javasabr.mqtt.network.message.MqttMessageType; diff --git a/network/src/main/java/javasabr/mqtt/network/message/out/SubscribeAckMqtt5OutMessage.java b/network/src/main/java/javasabr/mqtt/network/message/out/SubscribeAckMqtt5OutMessage.java index cdf81ef8..62119bee 100644 --- a/network/src/main/java/javasabr/mqtt/network/message/out/SubscribeAckMqtt5OutMessage.java +++ b/network/src/main/java/javasabr/mqtt/network/message/out/SubscribeAckMqtt5OutMessage.java @@ -3,7 +3,7 @@ import java.nio.ByteBuffer; import java.util.EnumSet; import java.util.Set; -import javasabr.mqtt.base.utils.DebugUtils; +import javasabr.mqtt.base.util.DebugUtils; import javasabr.mqtt.model.PacketProperty; import javasabr.mqtt.model.data.type.StringPair; import javasabr.mqtt.model.reason.code.SubscribeAckReasonCode; diff --git a/service/src/main/java/javasabr/mqtt/service/message/handler/impl/ConnectInMqttInMessageHandler.java b/service/src/main/java/javasabr/mqtt/service/message/handler/impl/ConnectInMqttInMessageHandler.java index 60bc6a9b..3335ba51 100644 --- a/service/src/main/java/javasabr/mqtt/service/message/handler/impl/ConnectInMqttInMessageHandler.java +++ b/service/src/main/java/javasabr/mqtt/service/message/handler/impl/ConnectInMqttInMessageHandler.java @@ -1,6 +1,6 @@ package javasabr.mqtt.service.message.handler.impl; -import static javasabr.mqtt.base.utils.ReactorUtils.ifTrue; +import static javasabr.mqtt.base.util.ReactorUtils.ifTrue; import static javasabr.mqtt.model.MqttProperties.MAXIMUM_PACKET_SIZE_UNDEFINED; import static javasabr.mqtt.model.MqttProperties.RECEIVE_MAXIMUM_UNDEFINED; import static javasabr.mqtt.model.MqttProperties.SERVER_KEEP_ALIVE_DISABLED; diff --git a/settings.gradle b/settings.gradle index ddddae46..76a8ae3f 100644 --- a/settings.gradle +++ b/settings.gradle @@ -8,4 +8,5 @@ include(":network") include(":service") include(":application") include(":library") -include(":test-support") \ No newline at end of file +include(":test-support") +include(":test-coverage") \ No newline at end of file diff --git a/test-coverage/build.gradle b/test-coverage/build.gradle new file mode 100644 index 00000000..661cd943 --- /dev/null +++ b/test-coverage/build.gradle @@ -0,0 +1,12 @@ +plugins { + id("configure-java") + id("jacoco-report-aggregation") +} + +dependencies { + jacocoAggregation projects.base + jacocoAggregation projects.application + jacocoAggregation projects.model + jacocoAggregation projects.network + jacocoAggregation projects.service +}