Browse Source

Add test to check latest edge version & update edge latest version

pull/14955/head
Nikita Mazurenko 8 months ago
parent
commit
2e820e9b88
  1. 1
      application/pom.xml
  2. 47
      application/src/test/java/org/thingsboard/server/edge/EdgeLatestVersionTest.java
  3. 30
      common/edge-api/src/main/java/org/thingsboard/edge/rpc/EdgeGrpcClient.java
  4. 1
      common/edge-api/src/main/proto/edge.proto

1
application/pom.xml

@ -458,6 +458,7 @@
<configuration>
<systemPropertyVariables>
<spring.config.name>thingsboard</spring.config.name>
<project.version>${project.version}</project.version>
</systemPropertyVariables>
<excludes>
<exclude>**/nosql/*Test.java</exclude>

47
application/src/test/java/org/thingsboard/server/edge/EdgeLatestVersionTest.java

@ -0,0 +1,47 @@
/**
* Copyright © 2016-2026 The Thingsboard Authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.thingsboard.server.edge;
import org.junit.Assert;
import org.junit.Test;
import org.thingsboard.server.gen.edge.v1.EdgeVersion;
import java.util.Arrays;
import java.util.Comparator;
public class EdgeLatestVersionTest {
@Test
public void edgeLatestVersionIsSynchronizedTest() {
EdgeVersion currentHighestEdgeVersion = Arrays.stream(EdgeVersion.values())
.filter(v -> v != EdgeVersion.UNRECOGNIZED)
.filter(v -> v != EdgeVersion.V_LATEST)
.max(Comparator.comparingInt(EdgeVersion::getNumber))
.orElseThrow();
String projectVersion = EdgeLatestVersionTest.class.getPackage().getImplementationVersion();
if (projectVersion == null || projectVersion.isBlank()) {
projectVersion = System.getProperty("project.version", "UNKNOWN");
}
String projectVersionDigits = projectVersion.replaceAll("\\D", "");
String currentHighestEdgeVersionDigits = currentHighestEdgeVersion.name().replaceAll("\\D", "");
String msg = "EdgeVersion enum in edge.proto is out of sync. Please add respective " + projectVersionDigits + " to EdgeVersion";
Assert.assertEquals(msg, projectVersionDigits, currentHighestEdgeVersionDigits);
}
}

30
common/edge-api/src/main/java/org/thingsboard/edge/rpc/EdgeGrpcClient.java

@ -144,17 +144,45 @@ public class EdgeGrpcClient implements EdgeRpcClient {
public static EdgeVersion getNewestEdgeVersion() {
EdgeVersion newest = null;
int[] newestParts = null;
for (EdgeVersion v : EdgeVersion.values()) {
if (v == EdgeVersion.V_LATEST || v == EdgeVersion.UNRECOGNIZED) {
continue;
}
if (newest == null || v.getNumber() > newest.getNumber()) {
int[] parts = parseVersionParts(v);
if (newest == null || compareVersionParts(parts, newestParts) > 0) {
newest = v;
newestParts = parts;
}
}
return newest;
}
private static int[] parseVersionParts(EdgeVersion version) {
String name = version.name();
if (name.startsWith("V_")) {
name = name.substring(2);
}
String[] parts = name.split("_");
int[] result = new int[parts.length];
for (int i = 0; i < parts.length; i++) {
result[i] = Integer.parseInt(parts[i]);
}
return result;
}
private static int compareVersionParts(int[] a, int[] b) {
int maxLen = Math.max(a.length, b.length);
for (int i = 0; i < maxLen; i++) {
int partA = i < a.length ? a[i] : 0;
int partB = i < b.length ? b[i] : 0;
if (partA != partB) {
return Integer.compare(partA, partB);
}
}
return 0;
}
private StreamObserver<ResponseMsg> initOutputStream(String edgeKey,
Consumer<UplinkResponseMsg> onUplinkResponse,
Consumer<EdgeConfiguration> onEdgeUpdate,

1
common/edge-api/src/main/proto/edge.proto

@ -45,6 +45,7 @@ enum EdgeVersion {
V_4_1_0 = 11;
V_4_2_0 = 12;
V_4_3_0 = 13;
V_4_2_1_2 = 14;
V_LATEST = 999;
}

Loading…
Cancel
Save