Merge pull request #9587 from dashevchenko/dockerCommandFix
Fixed device connectivity docker command for localhost
This commit is contained in:
commit
bca383eb4c
@ -24,7 +24,6 @@ import org.junit.After;
|
||||
import org.junit.Assert;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.junit.jupiter.api.BeforeAll;
|
||||
import org.mockito.AdditionalAnswers;
|
||||
import org.mockito.Mockito;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
@ -100,8 +99,6 @@ public class DeviceConnectivityControllerTest extends AbstractControllerTest {
|
||||
"C3swkUdrR3pezg==\n" +
|
||||
"-----END PRIVATE KEY-----\n";
|
||||
|
||||
ListeningExecutorService executor;
|
||||
|
||||
private Tenant savedTenant;
|
||||
private User tenantAdmin;
|
||||
private DeviceProfileId mqttDeviceProfileId;
|
||||
@ -117,8 +114,6 @@ public class DeviceConnectivityControllerTest extends AbstractControllerTest {
|
||||
|
||||
@Before
|
||||
public void beforeTest() throws Exception {
|
||||
executor = MoreExecutors.listeningDecorator(ThingsBoardExecutors.newWorkStealingPool(8, getClass()));
|
||||
|
||||
loginSysAdmin();
|
||||
|
||||
ObjectNode config = JacksonUtil.newObjectNode();
|
||||
@ -208,8 +203,6 @@ public class DeviceConnectivityControllerTest extends AbstractControllerTest {
|
||||
|
||||
@After
|
||||
public void afterTest() throws Exception {
|
||||
executor.shutdownNow();
|
||||
|
||||
loginSysAdmin();
|
||||
|
||||
doDelete("/api/tenant/" + savedTenant.getId().getId())
|
||||
@ -248,10 +241,10 @@ public class DeviceConnectivityControllerTest extends AbstractControllerTest {
|
||||
"-t v1/devices/me/telemetry -u \"%s\" -m \"{temperature:25}\"", credentials.getCredentialsId()));
|
||||
|
||||
JsonNode dockerMqttCommands = commands.get(MQTT).get(DOCKER);
|
||||
assertThat(dockerMqttCommands.get(MQTT).asText()).isEqualTo(String.format("docker run --rm -it thingsboard/mosquitto-clients mosquitto_pub -d -q 1 -h localhost" +
|
||||
assertThat(dockerMqttCommands.get(MQTT).asText()).isEqualTo(String.format("docker run --rm -it --network=host thingsboard/mosquitto-clients mosquitto_pub -d -q 1 -h localhost" +
|
||||
" -p 1883 -t v1/devices/me/telemetry -u \"%s\" -m \"{temperature:25}\"",
|
||||
credentials.getCredentialsId()));
|
||||
assertThat(dockerMqttCommands.get(MQTTS).asText()).isEqualTo(String.format("docker run --rm -it thingsboard/mosquitto-clients " +
|
||||
assertThat(dockerMqttCommands.get(MQTTS).asText()).isEqualTo(String.format("docker run --rm -it --network=host thingsboard/mosquitto-clients " +
|
||||
"/bin/sh -c \"curl -f -S -o ca-root.pem http://localhost:80/api/device-connectivity/mqtts/certificate/download && " +
|
||||
"mosquitto_pub -d -q 1 --cafile ca-root.pem -h localhost -p 8883 -t v1/devices/me/telemetry -u \"%s\" -m \"{temperature:25}\"\"",
|
||||
credentials.getCredentialsId()));
|
||||
@ -261,6 +254,12 @@ public class DeviceConnectivityControllerTest extends AbstractControllerTest {
|
||||
"-t json -e \"{temperature:25}\"", credentials.getCredentialsId()));
|
||||
assertThat(linuxCoapCommands.get(COAPS).asText()).isEqualTo(String.format("coap-client-openssl -m POST coaps://localhost:5684/api/v1/%s/telemetry" +
|
||||
" -t json -e \"{temperature:25}\"", credentials.getCredentialsId()));
|
||||
|
||||
JsonNode dockerCoapCommands = commands.get(COAP).get(DOCKER);
|
||||
assertThat(dockerCoapCommands.get(COAP).asText()).isEqualTo(String.format("docker run --rm -it --network=host" +
|
||||
" thingsboard/coap-clients coap-client -m POST coap://localhost:5683/api/v1/%s/telemetry -t json -e \"{temperature:25}\"", credentials.getCredentialsId()));
|
||||
assertThat(dockerCoapCommands.get(COAPS).asText()).isEqualTo(String.format("docker run --rm -it --network=host" +
|
||||
" thingsboard/coap-clients coap-client-openssl -m POST coaps://localhost:5684/api/v1/%s/telemetry -t json -e \"{temperature:25}\"", credentials.getCredentialsId()));
|
||||
}
|
||||
|
||||
@Test
|
||||
@ -286,10 +285,10 @@ public class DeviceConnectivityControllerTest extends AbstractControllerTest {
|
||||
"-t %s -u \"%s\" -m \"{temperature:25}\"", DEVICE_TELEMETRY_TOPIC, credentials.getCredentialsId()));
|
||||
|
||||
JsonNode dockerMqttCommands = commands.get(MQTT).get(DOCKER);
|
||||
assertThat(dockerMqttCommands.get(MQTT).asText()).isEqualTo(String.format("docker run --rm -it thingsboard/mosquitto-clients mosquitto_pub -d -q 1 -h localhost" +
|
||||
assertThat(dockerMqttCommands.get(MQTT).asText()).isEqualTo(String.format("docker run --rm -it --network=host thingsboard/mosquitto-clients mosquitto_pub -d -q 1 -h localhost" +
|
||||
" -p 1883 -t %s -u \"%s\" -m \"{temperature:25}\"",
|
||||
DEVICE_TELEMETRY_TOPIC, credentials.getCredentialsId()));
|
||||
assertThat(dockerMqttCommands.get(MQTTS).asText()).isEqualTo(String.format("docker run --rm -it thingsboard/mosquitto-clients " +
|
||||
assertThat(dockerMqttCommands.get(MQTTS).asText()).isEqualTo(String.format("docker run --rm -it --network=host thingsboard/mosquitto-clients " +
|
||||
"/bin/sh -c \"curl -f -S -o ca-root.pem http://localhost:80/api/device-connectivity/mqtts/certificate/download && " +
|
||||
"mosquitto_pub -d -q 1 --cafile ca-root.pem -h localhost -p 8883 -t %s -u \"%s\" -m \"{temperature:25}\"\"",
|
||||
DEVICE_TELEMETRY_TOPIC, credentials.getCredentialsId()));
|
||||
@ -330,10 +329,10 @@ public class DeviceConnectivityControllerTest extends AbstractControllerTest {
|
||||
"-t %s -i \"%s\" -u \"%s\" -P \"%s\" -m \"{temperature:25}\"", DEVICE_TELEMETRY_TOPIC, clientId, userName, password));
|
||||
|
||||
JsonNode dockerMqttCommands = commands.get(MQTT).get(DOCKER);
|
||||
assertThat(dockerMqttCommands.get(MQTT).asText()).isEqualTo(String.format("docker run --rm -it thingsboard/mosquitto-clients mosquitto_pub -d -q 1 -h localhost" +
|
||||
assertThat(dockerMqttCommands.get(MQTT).asText()).isEqualTo(String.format("docker run --rm -it --network=host thingsboard/mosquitto-clients mosquitto_pub -d -q 1 -h localhost" +
|
||||
" -p 1883 -t %s -i \"%s\" -u \"%s\" -P \"%s\" -m \"{temperature:25}\"",
|
||||
DEVICE_TELEMETRY_TOPIC, clientId, userName, password));
|
||||
assertThat(dockerMqttCommands.get(MQTTS).asText()).isEqualTo(String.format("docker run --rm -it thingsboard/mosquitto-clients " +
|
||||
assertThat(dockerMqttCommands.get(MQTTS).asText()).isEqualTo(String.format("docker run --rm -it --network=host thingsboard/mosquitto-clients " +
|
||||
"/bin/sh -c \"curl -f -S -o ca-root.pem http://localhost:80/api/device-connectivity/mqtts/certificate/download && " +
|
||||
"mosquitto_pub -d -q 1 --cafile ca-root.pem -h localhost -p 8883 -t %s -i \"%s\" -u \"%s\" -P \"%s\" -m \"{temperature:25}\"\"",
|
||||
DEVICE_TELEMETRY_TOPIC, clientId, userName, password));
|
||||
@ -445,4 +444,172 @@ public class DeviceConnectivityControllerTest extends AbstractControllerTest {
|
||||
public void testDownloadCertWithUnknownProtocol() throws Exception {
|
||||
doGet("/api/device-connectivity/unknownProtocol/certificate/download").andExpect(status().isNotFound());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testFetchPublishTelemetryCommandsForDefaultDeviceIfPortsSetToDefault() throws Exception {
|
||||
loginSysAdmin();
|
||||
|
||||
ObjectNode config = JacksonUtil.newObjectNode();
|
||||
|
||||
ObjectNode http = JacksonUtil.newObjectNode();
|
||||
http.put("enabled", true);
|
||||
http.put("host", "");
|
||||
http.put("port", 80);
|
||||
config.set("http", http);
|
||||
|
||||
ObjectNode https = JacksonUtil.newObjectNode();
|
||||
https.put("enabled", true);
|
||||
https.put("host", "");
|
||||
https.put("port", 443);
|
||||
config.set("https", https);
|
||||
|
||||
ObjectNode mqtt = JacksonUtil.newObjectNode();
|
||||
mqtt.put("enabled", false);
|
||||
mqtt.put("host", "");
|
||||
mqtt.put("port", 1883);
|
||||
config.set("mqtt", mqtt);
|
||||
|
||||
ObjectNode mqtts = JacksonUtil.newObjectNode();
|
||||
mqtts.put("enabled", false);
|
||||
mqtts.put("host", "");
|
||||
mqtts.put("port", 8883);
|
||||
config.set("mqtts", mqtts);
|
||||
|
||||
ObjectNode coap = JacksonUtil.newObjectNode();
|
||||
coap.put("enabled", false);
|
||||
coap.put("host", "");
|
||||
coap.put("port", 5683);
|
||||
config.set("coap", coap);
|
||||
|
||||
ObjectNode coaps = JacksonUtil.newObjectNode();
|
||||
coaps.put("enabled", false);
|
||||
coaps.put("host", "");
|
||||
coaps.put("port", 5684);
|
||||
config.set("coaps", coaps);
|
||||
|
||||
AdminSettings adminSettings = doGet("/api/admin/settings/connectivity", AdminSettings.class);
|
||||
adminSettings.setJsonValue(config);
|
||||
doPost("/api/admin/settings", adminSettings).andExpect(status().isOk());
|
||||
|
||||
login("tenant2@thingsboard.org", "testPassword1");
|
||||
|
||||
Device device = new Device();
|
||||
device.setName("My device");
|
||||
device.setType("default");
|
||||
Device savedDevice = doPost("/api/device", device, Device.class);
|
||||
JsonNode commands =
|
||||
doGetTyped("/api/device-connectivity/" + savedDevice.getId().getId(), new TypeReference<>() {
|
||||
});
|
||||
|
||||
DeviceCredentials credentials =
|
||||
doGet("/api/device/" + savedDevice.getId().getId() + "/credentials", DeviceCredentials.class);
|
||||
|
||||
assertThat(commands).hasSize(1);
|
||||
JsonNode httpCommands = commands.get(HTTP);
|
||||
assertThat(httpCommands.get(HTTP).asText()).isEqualTo(String.format("curl -v -X POST http://localhost/api/v1/%s/telemetry " +
|
||||
"--header Content-Type:application/json --data \"{temperature:25}\"",
|
||||
credentials.getCredentialsId()));
|
||||
assertThat(httpCommands.get(HTTPS).asText()).isEqualTo(String.format("curl -v -X POST https://localhost/api/v1/%s/telemetry " +
|
||||
"--header Content-Type:application/json --data \"{temperature:25}\"",
|
||||
credentials.getCredentialsId()));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testFetchPublishTelemetryCommandsForDefaultDeviceIfHostIsNotLocalhost() throws Exception {
|
||||
loginSysAdmin();
|
||||
|
||||
ObjectNode config = JacksonUtil.newObjectNode();
|
||||
|
||||
ObjectNode http = JacksonUtil.newObjectNode();
|
||||
http.put("enabled", true);
|
||||
http.put("host", "test.domain");
|
||||
http.put("port", 8080);
|
||||
config.set("http", http);
|
||||
|
||||
ObjectNode https = JacksonUtil.newObjectNode();
|
||||
https.put("enabled", true);
|
||||
https.put("host", "test.domain");
|
||||
https.put("port", 443);
|
||||
config.set("https", https);
|
||||
|
||||
ObjectNode mqtt = JacksonUtil.newObjectNode();
|
||||
mqtt.put("enabled", true);
|
||||
mqtt.put("host", "test.domain");
|
||||
mqtt.put("port", 1883);
|
||||
config.set("mqtt", mqtt);
|
||||
|
||||
ObjectNode mqtts = JacksonUtil.newObjectNode();
|
||||
mqtts.put("enabled", true);
|
||||
mqtts.put("host", "test.domain");
|
||||
mqtts.put("port", 8883);
|
||||
config.set("mqtts", mqtts);
|
||||
|
||||
ObjectNode coap = JacksonUtil.newObjectNode();
|
||||
coap.put("enabled", true);
|
||||
coap.put("host", "test.domain");
|
||||
coap.put("port", 5683);
|
||||
config.set("coap", coap);
|
||||
|
||||
ObjectNode coaps = JacksonUtil.newObjectNode();
|
||||
coaps.put("enabled", true);
|
||||
coaps.put("host", "test.domain");
|
||||
coaps.put("port", 5684);
|
||||
config.set("coaps", coaps);
|
||||
|
||||
AdminSettings adminSettings = doGet("/api/admin/settings/connectivity", AdminSettings.class);
|
||||
adminSettings.setJsonValue(config);
|
||||
doPost("/api/admin/settings", adminSettings).andExpect(status().isOk());
|
||||
|
||||
login("tenant2@thingsboard.org", "testPassword1");
|
||||
|
||||
Device device = new Device();
|
||||
device.setName("My device");
|
||||
device.setType("default");
|
||||
Device savedDevice = doPost("/api/device", device, Device.class);
|
||||
JsonNode commands =
|
||||
doGetTyped("/api/device-connectivity/" + savedDevice.getId().getId(), new TypeReference<>() {
|
||||
});
|
||||
|
||||
DeviceCredentials credentials =
|
||||
doGet("/api/device/" + savedDevice.getId().getId() + "/credentials", DeviceCredentials.class);
|
||||
|
||||
assertThat(commands).hasSize(3);
|
||||
JsonNode httpCommands = commands.get(HTTP);
|
||||
assertThat(httpCommands.get(HTTP).asText()).isEqualTo(String.format("curl -v -X POST http://test.domain:8080/api/v1/%s/telemetry " +
|
||||
"--header Content-Type:application/json --data \"{temperature:25}\"",
|
||||
credentials.getCredentialsId()));
|
||||
assertThat(httpCommands.get(HTTPS).asText()).isEqualTo(String.format("curl -v -X POST https://test.domain/api/v1/%s/telemetry " +
|
||||
"--header Content-Type:application/json --data \"{temperature:25}\"",
|
||||
credentials.getCredentialsId()));
|
||||
|
||||
|
||||
JsonNode mqttCommands = commands.get(MQTT);
|
||||
assertThat(mqttCommands.get(MQTT).asText()).isEqualTo(String.format("mosquitto_pub -d -q 1 -h test.domain -p 1883 -t v1/devices/me/telemetry " +
|
||||
"-u \"%s\" -m \"{temperature:25}\"",
|
||||
credentials.getCredentialsId()));
|
||||
assertThat(mqttCommands.get(MQTTS).get(0).asText()).isEqualTo("curl -f -S -o ca-root.pem http://localhost:80/api/device-connectivity/mqtts/certificate/download");
|
||||
assertThat(mqttCommands.get(MQTTS).get(1).asText()).isEqualTo(String.format("mosquitto_pub -d -q 1 --cafile ca-root.pem -h test.domain -p 8883 " +
|
||||
"-t v1/devices/me/telemetry -u \"%s\" -m \"{temperature:25}\"", credentials.getCredentialsId()));
|
||||
|
||||
JsonNode dockerMqttCommands = commands.get(MQTT).get(DOCKER);
|
||||
assertThat(dockerMqttCommands.get(MQTT).asText()).isEqualTo(String.format("docker run --rm -it thingsboard/mosquitto-clients mosquitto_pub -d -q 1 -h test.domain" +
|
||||
" -p 1883 -t v1/devices/me/telemetry -u \"%s\" -m \"{temperature:25}\"",
|
||||
credentials.getCredentialsId()));
|
||||
assertThat(dockerMqttCommands.get(MQTTS).asText()).isEqualTo(String.format("docker run --rm -it thingsboard/mosquitto-clients " +
|
||||
"/bin/sh -c \"curl -f -S -o ca-root.pem http://localhost:80/api/device-connectivity/mqtts/certificate/download && " +
|
||||
"mosquitto_pub -d -q 1 --cafile ca-root.pem -h test.domain -p 8883 -t v1/devices/me/telemetry -u \"%s\" -m \"{temperature:25}\"\"",
|
||||
credentials.getCredentialsId()));
|
||||
|
||||
JsonNode linuxCoapCommands = commands.get(COAP);
|
||||
assertThat(linuxCoapCommands.get(COAP).asText()).isEqualTo(String.format("coap-client -m POST coap://test.domain:5683/api/v1/%s/telemetry " +
|
||||
"-t json -e \"{temperature:25}\"", credentials.getCredentialsId()));
|
||||
assertThat(linuxCoapCommands.get(COAPS).asText()).isEqualTo(String.format("coap-client-openssl -m POST coaps://test.domain:5684/api/v1/%s/telemetry" +
|
||||
" -t json -e \"{temperature:25}\"", credentials.getCredentialsId()));
|
||||
|
||||
JsonNode dockerCoapCommands = commands.get(COAP).get(DOCKER);
|
||||
assertThat(dockerCoapCommands.get(COAP).asText()).isEqualTo(String.format("docker run --rm -it " +
|
||||
"thingsboard/coap-clients coap-client -m POST coap://test.domain:5683/api/v1/%s/telemetry -t json -e \"{temperature:25}\"", credentials.getCredentialsId()));
|
||||
assertThat(dockerCoapCommands.get(COAPS).asText()).isEqualTo(String.format("docker run --rm -it " +
|
||||
"thingsboard/coap-clients coap-client-openssl -m POST coaps://test.domain:5684/api/v1/%s/telemetry -t json -e \"{temperature:25}\"", credentials.getCredentialsId()));
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,159 +0,0 @@
|
||||
/**
|
||||
* Copyright © 2016-2023 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.controller;
|
||||
|
||||
import com.fasterxml.jackson.core.type.TypeReference;
|
||||
import com.fasterxml.jackson.databind.JsonNode;
|
||||
import com.fasterxml.jackson.databind.node.ObjectNode;
|
||||
import com.google.common.util.concurrent.ListeningExecutorService;
|
||||
import com.google.common.util.concurrent.MoreExecutors;
|
||||
import org.junit.After;
|
||||
import org.junit.Assert;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.mockito.AdditionalAnswers;
|
||||
import org.mockito.Mockito;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Primary;
|
||||
import org.springframework.test.context.ContextConfiguration;
|
||||
import org.thingsboard.common.util.JacksonUtil;
|
||||
import org.thingsboard.common.util.ThingsBoardExecutors;
|
||||
import org.thingsboard.server.common.data.AdminSettings;
|
||||
import org.thingsboard.server.common.data.Device;
|
||||
import org.thingsboard.server.common.data.Tenant;
|
||||
import org.thingsboard.server.common.data.User;
|
||||
import org.thingsboard.server.common.data.security.Authority;
|
||||
import org.thingsboard.server.common.data.security.DeviceCredentials;
|
||||
import org.thingsboard.server.dao.device.DeviceDao;
|
||||
import org.thingsboard.server.dao.service.DaoSqlTest;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
|
||||
import static org.thingsboard.server.dao.util.DeviceConnectivityUtil.HTTP;
|
||||
import static org.thingsboard.server.dao.util.DeviceConnectivityUtil.HTTPS;
|
||||
|
||||
@ContextConfiguration(classes = {DeviceConnectivityControllerWithDefaultPortTest.Config.class})
|
||||
@DaoSqlTest
|
||||
public class DeviceConnectivityControllerWithDefaultPortTest extends AbstractControllerTest {
|
||||
|
||||
ListeningExecutorService executor;
|
||||
|
||||
private Tenant savedTenant;
|
||||
|
||||
static class Config {
|
||||
@Bean
|
||||
@Primary
|
||||
public DeviceDao deviceDao(DeviceDao deviceDao) {
|
||||
return Mockito.mock(DeviceDao.class, AdditionalAnswers.delegatesTo(deviceDao));
|
||||
}
|
||||
}
|
||||
|
||||
@Before
|
||||
public void beforeTest() throws Exception {
|
||||
executor = MoreExecutors.listeningDecorator(ThingsBoardExecutors.newWorkStealingPool(8, getClass()));
|
||||
|
||||
loginSysAdmin();
|
||||
|
||||
ObjectNode config = JacksonUtil.newObjectNode();
|
||||
|
||||
ObjectNode http = JacksonUtil.newObjectNode();
|
||||
http.put("enabled", true);
|
||||
http.put("host", "");
|
||||
http.put("port", 80);
|
||||
config.set("http", http);
|
||||
|
||||
ObjectNode https = JacksonUtil.newObjectNode();
|
||||
https.put("enabled", true);
|
||||
https.put("host", "");
|
||||
https.put("port", 443);
|
||||
config.set("https", https);
|
||||
|
||||
ObjectNode mqtt = JacksonUtil.newObjectNode();
|
||||
mqtt.put("enabled", false);
|
||||
mqtt.put("host", "");
|
||||
mqtt.put("port", 1883);
|
||||
config.set("mqtt", mqtt);
|
||||
|
||||
ObjectNode mqtts = JacksonUtil.newObjectNode();
|
||||
mqtts.put("enabled", false);
|
||||
mqtts.put("host", "");
|
||||
mqtts.put("port", 8883);
|
||||
config.set("mqtts", mqtts);
|
||||
|
||||
ObjectNode coap = JacksonUtil.newObjectNode();
|
||||
coap.put("enabled", false);
|
||||
coap.put("host", "");
|
||||
coap.put("port", 5683);
|
||||
config.set("coap", coap);
|
||||
|
||||
ObjectNode coaps = JacksonUtil.newObjectNode();
|
||||
coaps.put("enabled", false);
|
||||
coaps.put("host", "");
|
||||
coaps.put("port", 5684);
|
||||
config.set("coaps", coaps);
|
||||
|
||||
AdminSettings adminSettings = doGet("/api/admin/settings/connectivity", AdminSettings.class);
|
||||
adminSettings.setJsonValue(config);
|
||||
doPost("/api/admin/settings", adminSettings).andExpect(status().isOk());
|
||||
|
||||
Tenant tenant = new Tenant();
|
||||
tenant.setTitle("My tenant");
|
||||
savedTenant = doPost("/api/tenant", tenant, Tenant.class);
|
||||
Assert.assertNotNull(savedTenant);
|
||||
|
||||
User tenantAdmin = new User();
|
||||
tenantAdmin.setAuthority(Authority.TENANT_ADMIN);
|
||||
tenantAdmin.setTenantId(savedTenant.getId());
|
||||
tenantAdmin.setEmail("tenant2@thingsboard.org");
|
||||
tenantAdmin.setFirstName("Joe");
|
||||
tenantAdmin.setLastName("Downs");
|
||||
|
||||
createUserAndLogin(tenantAdmin, "testPassword1");
|
||||
}
|
||||
|
||||
@After
|
||||
public void afterTest() throws Exception {
|
||||
executor.shutdownNow();
|
||||
|
||||
loginSysAdmin();
|
||||
|
||||
doDelete("/api/tenant/" + savedTenant.getId().getId())
|
||||
.andExpect(status().isOk());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testFetchPublishTelemetryCommandsForDefaultDevice() throws Exception {
|
||||
Device device = new Device();
|
||||
device.setName("My device");
|
||||
device.setType("default");
|
||||
Device savedDevice = doPost("/api/device", device, Device.class);
|
||||
JsonNode commands =
|
||||
doGetTyped("/api/device-connectivity/" + savedDevice.getId().getId(), new TypeReference<>() {
|
||||
});
|
||||
|
||||
DeviceCredentials credentials =
|
||||
doGet("/api/device/" + savedDevice.getId().getId() + "/credentials", DeviceCredentials.class);
|
||||
|
||||
assertThat(commands).hasSize(1);
|
||||
JsonNode httpCommands = commands.get(HTTP);
|
||||
assertThat(httpCommands.get(HTTP).asText()).isEqualTo(String.format("curl -v -X POST http://localhost/api/v1/%s/telemetry " +
|
||||
"--header Content-Type:application/json --data \"{temperature:25}\"",
|
||||
credentials.getCredentialsId()));
|
||||
assertThat(httpCommands.get(HTTPS).asText()).isEqualTo(String.format("curl -v -X POST https://localhost/api/v1/%s/telemetry " +
|
||||
"--header Content-Type:application/json --data \"{temperature:25}\"",
|
||||
credentials.getCredentialsId()));
|
||||
}
|
||||
}
|
||||
@ -20,6 +20,9 @@ import org.thingsboard.common.util.JacksonUtil;
|
||||
import org.thingsboard.server.common.data.device.credentials.BasicMqttCredentials;
|
||||
import org.thingsboard.server.common.data.security.DeviceCredentials;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
public class DeviceConnectivityUtil {
|
||||
|
||||
public static final String HTTP = "http";
|
||||
@ -38,6 +41,7 @@ public class DeviceConnectivityUtil {
|
||||
public static final String GATEWAY_DOCKER_RUN = "docker run -it ";
|
||||
public static final String MQTT_IMAGE = "thingsboard/mosquitto-clients ";
|
||||
public static final String COAP_IMAGE = "thingsboard/coap-clients ";
|
||||
public static final List<String> LOCAL_HOSTS = Arrays.asList("localhost", "127.0.0.1");
|
||||
|
||||
public static String getHttpPublishCommand(String protocol, String host, String port, DeviceCredentials deviceCredentials) {
|
||||
return String.format("curl -v -X POST %s://%s%s/api/v1/%s/telemetry --header Content-Type:application/json --data " + JSON_EXAMPLE_PAYLOAD,
|
||||
@ -135,7 +139,7 @@ public class DeviceConnectivityUtil {
|
||||
}
|
||||
|
||||
StringBuilder mqttDockerCommand = new StringBuilder();
|
||||
mqttDockerCommand.append(DOCKER_RUN).append(MQTT_IMAGE);
|
||||
mqttDockerCommand.append(DOCKER_RUN).append(LOCAL_HOSTS.contains(host) ? "--network=host ":"").append(MQTT_IMAGE);
|
||||
|
||||
if (MQTTS.equals(protocol)) {
|
||||
mqttDockerCommand.append("/bin/sh -c \"")
|
||||
@ -167,6 +171,6 @@ public class DeviceConnectivityUtil {
|
||||
|
||||
public static String getDockerCoapPublishCommand(String protocol, String host, String port, DeviceCredentials deviceCredentials) {
|
||||
String coapCommand = getCoapPublishCommand(protocol, host, port, deviceCredentials);
|
||||
return coapCommand != null ? String.format("%s%s%s", DOCKER_RUN, COAP_IMAGE, coapCommand) : null;
|
||||
return coapCommand != null ? String.format("%s%s%s", DOCKER_RUN + (LOCAL_HOSTS.contains(host) ? "--network=host ":""), COAP_IMAGE, coapCommand) : null;
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user