Browse Source

Added blackbox tests for provisioning

pull/7665/head
zbeacon 4 years ago
parent
commit
09e98d1680
  1. 29
      msa/black-box-tests/src/test/java/org/thingsboard/server/msa/TestRestClient.java
  2. 126
      msa/black-box-tests/src/test/java/org/thingsboard/server/msa/connectivity/MqttClientTest.java

29
msa/black-box-tests/src/test/java/org/thingsboard/server/msa/TestRestClient.java

@ -27,7 +27,9 @@ import io.restassured.path.json.JsonPath;
import io.restassured.response.ValidatableResponse;
import io.restassured.specification.RequestSpecification;
import org.thingsboard.server.common.data.Device;
import org.thingsboard.server.common.data.DeviceProfile;
import org.thingsboard.server.common.data.id.DeviceId;
import org.thingsboard.server.common.data.id.DeviceProfileId;
import org.thingsboard.server.common.data.id.EntityId;
import org.thingsboard.server.common.data.id.RuleChainId;
import org.thingsboard.server.common.data.page.PageData;
@ -93,6 +95,15 @@ public class TestRestClient {
.as(Device.class);
}
public Device getDeviceByName(String deviceName) {
return given().spec(requestSpec).pathParam("deviceName", deviceName)
.get("/api/tenant/devices{deviceName}")
.then()
.statusCode(HTTP_OK)
.extract()
.as(Device.class);
}
public ValidatableResponse getDeviceById(DeviceId deviceId, int statusCode) {
return given().spec(requestSpec)
.pathParams("deviceId", deviceId.getId())
@ -252,6 +263,24 @@ public class TestRestClient {
.as(JsonNode.class);
}
public DeviceProfile getDeviceProfileById(DeviceProfileId deviceProfileId) {
return given().spec(requestSpec).get("/api/deviceProfile/{deviceProfileId}", deviceProfileId.getId())
.then()
.assertThat()
.statusCode(HTTP_OK)
.extract()
.as(DeviceProfile.class);
}
public DeviceProfile postDeviceProfile(DeviceProfile deviceProfile) {
return given().spec(requestSpec).body(deviceProfile)
.post("/api/deviceProfile")
.then()
.statusCode(HTTP_OK)
.extract()
.as(DeviceProfile.class);
}
public String getToken() {
return token;
}

126
msa/black-box-tests/src/test/java/org/thingsboard/server/msa/connectivity/MqttClientTest.java

@ -34,7 +34,14 @@ import org.thingsboard.mqtt.MqttClientConfig;
import org.thingsboard.mqtt.MqttHandler;
import org.thingsboard.server.common.data.DataConstants;
import org.thingsboard.server.common.data.Device;
import org.thingsboard.server.common.data.DeviceProfile;
import org.thingsboard.server.common.data.DeviceProfileProvisionType;
import org.thingsboard.server.common.data.StringUtils;
import org.thingsboard.server.common.data.device.profile.AllowCreateNewDevicesDeviceProfileProvisionConfiguration;
import org.thingsboard.server.common.data.device.profile.CheckPreProvisionedDevicesDeviceProfileProvisionConfiguration;
import org.thingsboard.server.common.data.device.profile.DeviceProfileData;
import org.thingsboard.server.common.data.device.profile.DeviceProfileProvisionConfiguration;
import org.thingsboard.server.common.data.device.profile.DisabledDeviceProfileProvisionConfiguration;
import org.thingsboard.server.common.data.id.RuleChainId;
import org.thingsboard.server.common.data.page.PageData;
import org.thingsboard.server.common.data.page.PageLink;
@ -69,6 +76,9 @@ import static org.thingsboard.server.msa.prototypes.DevicePrototypes.defaultDevi
@Slf4j
public class MqttClientTest extends AbstractContainerTest {
private final static String TEST_PROVISION_DEVICE_KEY = "test_provision_key";
private final static String TEST_PROVISION_DEVICE_SECRET = "test_provision_secret";
private Device device;
@BeforeMethod
public void setUp() throws Exception {
@ -322,6 +332,116 @@ public class MqttClientTest extends AbstractContainerTest {
assertThat(mqttClient.isConnected()).isFalse();
}
@Test
public void provisionRequestForDeviceWithPreProvisionedStrategy() throws Exception {
String testProvisionDeviceKey = "test_provision_key";
String testProvisionDeviceSecret = "test_provision_secret";
DeviceProfile deviceProfile = testRestClient.getDeviceProfileById(device.getDeviceProfileId());
deviceProfile = updateDeviceProfileWithProvisioningStrategy(deviceProfile, DeviceProfileProvisionType.CHECK_PRE_PROVISIONED_DEVICES);
DeviceCredentials expectedDeviceCredentials = testRestClient.getDeviceCredentialsByDeviceId(device.getId());
MqttMessageListener listener = new MqttMessageListener();
MqttClient mqttClient = getMqttClient("provision", listener);
JsonObject provisionRequest = new JsonObject();
provisionRequest.addProperty("provisionDeviceKey", testProvisionDeviceKey);
provisionRequest.addProperty("provisionDeviceSecret", testProvisionDeviceSecret);
provisionRequest.addProperty("deviceName", device.getName());
mqttClient.publish("/provision/request", Unpooled.wrappedBuffer(provisionRequest.toString().getBytes())).get();
//Wait for response
TimeUnit.SECONDS.sleep(3 * timeoutMultiplier);
MqttEvent provisionResponseMsg = listener.getEvents().poll(timeoutMultiplier, TimeUnit.SECONDS);
assertThat(provisionResponseMsg).isNotNull();
JsonNode provisionResponse = mapper.readTree(provisionResponseMsg.getMessage());
assertThat(provisionResponse.get("credentialsType").asText()).isEqualTo(expectedDeviceCredentials.getCredentialsType().name());
assertThat(provisionResponse.get("credentialsValue").asText()).isEqualTo(expectedDeviceCredentials.getCredentialsId());
assertThat(provisionResponse.get("status").asText()).isEqualTo("SUCCESS");
updateDeviceProfileWithProvisioningStrategy(deviceProfile, DeviceProfileProvisionType.DISABLED);
}
@Test
public void provisionRequestForDeviceWithAllowToCreateNewDevicesStrategy() throws Exception {
String testDeviceName = "test_provision_device";
DeviceProfile deviceProfile = testRestClient.getDeviceProfileById(device.getDeviceProfileId());
deviceProfile = updateDeviceProfileWithProvisioningStrategy(deviceProfile, DeviceProfileProvisionType.ALLOW_CREATE_NEW_DEVICES);
MqttMessageListener listener = new MqttMessageListener();
MqttClient mqttClient = getMqttClient("provision", listener);
JsonObject provisionRequest = new JsonObject();
provisionRequest.addProperty("provisionDeviceKey", TEST_PROVISION_DEVICE_KEY);
provisionRequest.addProperty("provisionDeviceSecret", TEST_PROVISION_DEVICE_SECRET);
provisionRequest.addProperty("deviceName", testDeviceName);
mqttClient.publish("/provision/request", Unpooled.wrappedBuffer(provisionRequest.toString().getBytes())).get();
//Wait for response
TimeUnit.SECONDS.sleep(3 * timeoutMultiplier);
MqttEvent provisionResponseMsg = listener.getEvents().poll(timeoutMultiplier, TimeUnit.SECONDS);
assertThat(provisionResponseMsg).isNotNull();
JsonNode provisionResponse = mapper.readTree(provisionResponseMsg.getMessage());
testRestClient.deleteDeviceIfExists(device.getId());
device = testRestClient.getDeviceByName(testDeviceName);
DeviceCredentials expectedDeviceCredentials = testRestClient.getDeviceCredentialsByDeviceId(device.getId());
assertThat(provisionResponse.get("credentialsType").asText()).isEqualTo(expectedDeviceCredentials.getCredentialsType().name());
assertThat(provisionResponse.get("credentialsValue").asText()).isEqualTo(expectedDeviceCredentials.getCredentialsId());
assertThat(provisionResponse.get("status").asText()).isEqualTo("SUCCESS");
updateDeviceProfileWithProvisioningStrategy(deviceProfile, DeviceProfileProvisionType.DISABLED);
}
private DeviceProfile updateDeviceProfileWithProvisioningStrategy(DeviceProfile deviceProfile, DeviceProfileProvisionType provisionType) {
DeviceProfileProvisionConfiguration provisionConfiguration;
String testProvisionDeviceKey;
switch(provisionType) {
case ALLOW_CREATE_NEW_DEVICES:
testProvisionDeviceKey = TEST_PROVISION_DEVICE_KEY;
provisionConfiguration = new AllowCreateNewDevicesDeviceProfileProvisionConfiguration(TEST_PROVISION_DEVICE_SECRET);
deviceProfile.setProvisionType(DeviceProfileProvisionType.ALLOW_CREATE_NEW_DEVICES);
break;
case CHECK_PRE_PROVISIONED_DEVICES:
testProvisionDeviceKey = TEST_PROVISION_DEVICE_KEY;
provisionConfiguration = new CheckPreProvisionedDevicesDeviceProfileProvisionConfiguration(TEST_PROVISION_DEVICE_SECRET);
deviceProfile.setProvisionType(DeviceProfileProvisionType.CHECK_PRE_PROVISIONED_DEVICES);
break;
default:
case DISABLED:
testProvisionDeviceKey = null;
provisionConfiguration = new DisabledDeviceProfileProvisionConfiguration(null);
deviceProfile.setProvisionType(DeviceProfileProvisionType.DISABLED);
break;
}
DeviceProfileData deviceProfileData = deviceProfile.getProfileData();
deviceProfileData.setProvisionConfiguration(provisionConfiguration);
deviceProfile.setProfileData(deviceProfileData);
deviceProfile.setProvisionDeviceKey(testProvisionDeviceKey);
return testRestClient.postDeviceProfile(deviceProfile);
}
private RuleChainId createRootRuleChainForRpcResponse() throws Exception {
RuleChain newRuleChain = new RuleChain();
newRuleChain.setName("testRuleChain");
@ -356,9 +476,13 @@ public class MqttClientTest extends AbstractContainerTest {
}
private MqttClient getMqttClient(DeviceCredentials deviceCredentials, MqttMessageListener listener) throws InterruptedException, ExecutionException {
return getMqttClient(deviceCredentials.getCredentialsId(), listener);
}
private MqttClient getMqttClient(String username, MqttMessageListener listener) throws InterruptedException, ExecutionException {
MqttClientConfig clientConfig = new MqttClientConfig();
clientConfig.setClientId("MQTT client from test");
clientConfig.setUsername(deviceCredentials.getCredentialsId());
clientConfig.setUsername(username);
MqttClient mqttClient = MqttClient.create(clientConfig, listener);
mqttClient.connect("localhost", 1883).get();
return mqttClient;

Loading…
Cancel
Save