|
|
|
@ -15,74 +15,79 @@ |
|
|
|
*/ |
|
|
|
package org.thingsboard.server.controller; |
|
|
|
|
|
|
|
import static org.hamcrest.Matchers.containsString; |
|
|
|
import static org.thingsboard.server.dao.model.ModelConstants.NULL_UUID; |
|
|
|
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; |
|
|
|
|
|
|
|
import java.util.ArrayList; |
|
|
|
import java.util.Collections; |
|
|
|
import java.util.List; |
|
|
|
|
|
|
|
import com.datastax.oss.driver.api.core.uuid.Uuids; |
|
|
|
import com.fasterxml.jackson.core.type.TypeReference; |
|
|
|
import org.apache.commons.lang3.RandomStringUtils; |
|
|
|
import org.thingsboard.server.common.data.*; |
|
|
|
import org.junit.After; |
|
|
|
import org.junit.Assert; |
|
|
|
import org.junit.Before; |
|
|
|
import org.junit.Test; |
|
|
|
import org.thingsboard.server.common.data.Customer; |
|
|
|
import org.thingsboard.server.common.data.Device; |
|
|
|
import org.thingsboard.server.common.data.EntitySubtype; |
|
|
|
import org.thingsboard.server.common.data.Tenant; |
|
|
|
import org.thingsboard.server.common.data.User; |
|
|
|
import org.thingsboard.server.common.data.id.CustomerId; |
|
|
|
import org.thingsboard.server.common.data.id.DeviceCredentialsId; |
|
|
|
import org.thingsboard.server.common.data.id.DeviceId; |
|
|
|
import org.thingsboard.server.common.data.page.PageData; |
|
|
|
import org.thingsboard.server.common.data.page.PageLink; |
|
|
|
import org.thingsboard.server.common.data.relation.EntityRelation; |
|
|
|
import org.thingsboard.server.common.data.relation.RelationTypeGroup; |
|
|
|
import org.thingsboard.server.common.data.security.Authority; |
|
|
|
import org.thingsboard.server.common.data.security.DeviceCredentials; |
|
|
|
import org.thingsboard.server.common.data.security.DeviceCredentialsType; |
|
|
|
import org.thingsboard.server.dao.model.ModelConstants; |
|
|
|
import org.junit.After; |
|
|
|
import org.junit.Assert; |
|
|
|
import org.junit.Before; |
|
|
|
import org.junit.Test; |
|
|
|
|
|
|
|
import com.fasterxml.jackson.core.type.TypeReference; |
|
|
|
import java.util.ArrayList; |
|
|
|
import java.util.Collections; |
|
|
|
import java.util.List; |
|
|
|
|
|
|
|
import static org.hamcrest.Matchers.containsString; |
|
|
|
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; |
|
|
|
import static org.thingsboard.server.dao.model.ModelConstants.NULL_UUID; |
|
|
|
|
|
|
|
public abstract class BaseDeviceControllerTest extends AbstractControllerTest { |
|
|
|
|
|
|
|
|
|
|
|
private IdComparator<Device> idComparator = new IdComparator<>(); |
|
|
|
|
|
|
|
|
|
|
|
private Tenant savedTenant; |
|
|
|
private User tenantAdmin; |
|
|
|
|
|
|
|
|
|
|
|
@Before |
|
|
|
public void beforeTest() throws Exception { |
|
|
|
loginSysAdmin(); |
|
|
|
|
|
|
|
|
|
|
|
Tenant tenant = new Tenant(); |
|
|
|
tenant.setTitle("My tenant"); |
|
|
|
savedTenant = doPost("/api/tenant", tenant, Tenant.class); |
|
|
|
Assert.assertNotNull(savedTenant); |
|
|
|
|
|
|
|
|
|
|
|
tenantAdmin = new User(); |
|
|
|
tenantAdmin.setAuthority(Authority.TENANT_ADMIN); |
|
|
|
tenantAdmin.setTenantId(savedTenant.getId()); |
|
|
|
tenantAdmin.setEmail("tenant2@thingsboard.org"); |
|
|
|
tenantAdmin.setFirstName("Joe"); |
|
|
|
tenantAdmin.setLastName("Downs"); |
|
|
|
|
|
|
|
|
|
|
|
tenantAdmin = createUserAndLogin(tenantAdmin, "testPassword1"); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@After |
|
|
|
public void afterTest() throws Exception { |
|
|
|
loginSysAdmin(); |
|
|
|
|
|
|
|
doDelete("/api/tenant/"+savedTenant.getId().getId().toString()) |
|
|
|
.andExpect(status().isOk()); |
|
|
|
|
|
|
|
doDelete("/api/tenant/" + savedTenant.getId().getId().toString()) |
|
|
|
.andExpect(status().isOk()); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@Test |
|
|
|
public void testSaveDevice() throws Exception { |
|
|
|
Device device = new Device(); |
|
|
|
device.setName("My device"); |
|
|
|
device.setType("default"); |
|
|
|
Device savedDevice = doPost("/api/device", device, Device.class); |
|
|
|
|
|
|
|
|
|
|
|
Assert.assertNotNull(savedDevice); |
|
|
|
Assert.assertNotNull(savedDevice.getId()); |
|
|
|
Assert.assertTrue(savedDevice.getCreatedTime() > 0); |
|
|
|
@ -90,9 +95,9 @@ public abstract class BaseDeviceControllerTest extends AbstractControllerTest { |
|
|
|
Assert.assertNotNull(savedDevice.getCustomerId()); |
|
|
|
Assert.assertEquals(NULL_UUID, savedDevice.getCustomerId().getId()); |
|
|
|
Assert.assertEquals(device.getName(), savedDevice.getName()); |
|
|
|
|
|
|
|
DeviceCredentials deviceCredentials = |
|
|
|
doGet("/api/device/" + savedDevice.getId().getId().toString() + "/credentials", DeviceCredentials.class); |
|
|
|
|
|
|
|
DeviceCredentials deviceCredentials = |
|
|
|
doGet("/api/device/" + savedDevice.getId().getId().toString() + "/credentials", DeviceCredentials.class); |
|
|
|
|
|
|
|
Assert.assertNotNull(deviceCredentials); |
|
|
|
Assert.assertNotNull(deviceCredentials.getId()); |
|
|
|
@ -100,10 +105,10 @@ public abstract class BaseDeviceControllerTest extends AbstractControllerTest { |
|
|
|
Assert.assertEquals(DeviceCredentialsType.ACCESS_TOKEN, deviceCredentials.getCredentialsType()); |
|
|
|
Assert.assertNotNull(deviceCredentials.getCredentialsId()); |
|
|
|
Assert.assertEquals(20, deviceCredentials.getCredentialsId().length()); |
|
|
|
|
|
|
|
|
|
|
|
savedDevice.setName("My new device"); |
|
|
|
doPost("/api/device", savedDevice, Device.class); |
|
|
|
|
|
|
|
|
|
|
|
Device foundDevice = doGet("/api/device/" + savedDevice.getId().getId().toString(), Device.class); |
|
|
|
Assert.assertEquals(foundDevice.getName(), savedDevice.getName()); |
|
|
|
} |
|
|
|
@ -115,10 +120,10 @@ public abstract class BaseDeviceControllerTest extends AbstractControllerTest { |
|
|
|
device.setType("default"); |
|
|
|
Device savedDevice = doPost("/api/device", device, Device.class); |
|
|
|
loginDifferentTenant(); |
|
|
|
doPost("/api/device", savedDevice, Device.class, status().isForbidden()); |
|
|
|
doPost("/api/device", savedDevice, Device.class, status().isNotFound()); |
|
|
|
deleteDifferentTenant(); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@Test |
|
|
|
public void testFindDeviceById() throws Exception { |
|
|
|
Device device = new Device(); |
|
|
|
@ -133,26 +138,27 @@ public abstract class BaseDeviceControllerTest extends AbstractControllerTest { |
|
|
|
@Test |
|
|
|
public void testFindDeviceTypesByTenantId() throws Exception { |
|
|
|
List<Device> devices = new ArrayList<>(); |
|
|
|
for (int i=0;i<3;i++) { |
|
|
|
for (int i = 0; i < 3; i++) { |
|
|
|
Device device = new Device(); |
|
|
|
device.setName("My device B"+i); |
|
|
|
device.setName("My device B" + i); |
|
|
|
device.setType("typeB"); |
|
|
|
devices.add(doPost("/api/device", device, Device.class)); |
|
|
|
} |
|
|
|
for (int i=0;i<7;i++) { |
|
|
|
for (int i = 0; i < 7; i++) { |
|
|
|
Device device = new Device(); |
|
|
|
device.setName("My device C"+i); |
|
|
|
device.setName("My device C" + i); |
|
|
|
device.setType("typeC"); |
|
|
|
devices.add(doPost("/api/device", device, Device.class)); |
|
|
|
} |
|
|
|
for (int i=0;i<9;i++) { |
|
|
|
for (int i = 0; i < 9; i++) { |
|
|
|
Device device = new Device(); |
|
|
|
device.setName("My device A"+i); |
|
|
|
device.setName("My device A" + i); |
|
|
|
device.setType("typeA"); |
|
|
|
devices.add(doPost("/api/device", device, Device.class)); |
|
|
|
} |
|
|
|
List<EntitySubtype> deviceTypes = doGetTyped("/api/device/types", |
|
|
|
new TypeReference<List<EntitySubtype>>(){}); |
|
|
|
new TypeReference<List<EntitySubtype>>() { |
|
|
|
}); |
|
|
|
|
|
|
|
Assert.assertNotNull(deviceTypes); |
|
|
|
Assert.assertEquals(3, deviceTypes.size()); |
|
|
|
@ -160,19 +166,19 @@ public abstract class BaseDeviceControllerTest extends AbstractControllerTest { |
|
|
|
Assert.assertEquals("typeB", deviceTypes.get(1).getType()); |
|
|
|
Assert.assertEquals("typeC", deviceTypes.get(2).getType()); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@Test |
|
|
|
public void testDeleteDevice() throws Exception { |
|
|
|
Device device = new Device(); |
|
|
|
device.setName("My device"); |
|
|
|
device.setType("default"); |
|
|
|
Device savedDevice = doPost("/api/device", device, Device.class); |
|
|
|
|
|
|
|
doDelete("/api/device/"+savedDevice.getId().getId().toString()) |
|
|
|
.andExpect(status().isOk()); |
|
|
|
|
|
|
|
doGet("/api/device/"+savedDevice.getId().getId().toString()) |
|
|
|
.andExpect(status().isNotFound()); |
|
|
|
doDelete("/api/device/" + savedDevice.getId().getId().toString()) |
|
|
|
.andExpect(status().isOk()); |
|
|
|
|
|
|
|
doGet("/api/device/" + savedDevice.getId().getId().toString()) |
|
|
|
.andExpect(status().isNotFound()); |
|
|
|
} |
|
|
|
|
|
|
|
@Test |
|
|
|
@ -189,52 +195,51 @@ public abstract class BaseDeviceControllerTest extends AbstractControllerTest { |
|
|
|
Device device = new Device(); |
|
|
|
device.setType("default"); |
|
|
|
doPost("/api/device", device) |
|
|
|
.andExpect(status().isBadRequest()) |
|
|
|
.andExpect(statusReason(containsString("Device name should be specified"))); |
|
|
|
.andExpect(status().isBadRequest()) |
|
|
|
.andExpect(statusReason(containsString("Device name should be specified"))); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@Test |
|
|
|
public void testAssignUnassignDeviceToCustomer() throws Exception { |
|
|
|
Device device = new Device(); |
|
|
|
device.setName("My device"); |
|
|
|
device.setType("default"); |
|
|
|
Device savedDevice = doPost("/api/device", device, Device.class); |
|
|
|
|
|
|
|
|
|
|
|
Customer customer = new Customer(); |
|
|
|
customer.setTitle("My customer"); |
|
|
|
Customer savedCustomer = doPost("/api/customer", customer, Customer.class); |
|
|
|
|
|
|
|
Device assignedDevice = doPost("/api/customer/" + savedCustomer.getId().getId().toString() |
|
|
|
|
|
|
|
Device assignedDevice = doPost("/api/customer/" + savedCustomer.getId().getId().toString() |
|
|
|
+ "/device/" + savedDevice.getId().getId().toString(), Device.class); |
|
|
|
Assert.assertEquals(savedCustomer.getId(), assignedDevice.getCustomerId()); |
|
|
|
|
|
|
|
|
|
|
|
Device foundDevice = doGet("/api/device/" + savedDevice.getId().getId().toString(), Device.class); |
|
|
|
Assert.assertEquals(savedCustomer.getId(), foundDevice.getCustomerId()); |
|
|
|
|
|
|
|
Device unassignedDevice = |
|
|
|
Device unassignedDevice = |
|
|
|
doDelete("/api/customer/device/" + savedDevice.getId().getId().toString(), Device.class); |
|
|
|
Assert.assertEquals(ModelConstants.NULL_UUID, unassignedDevice.getCustomerId().getId()); |
|
|
|
|
|
|
|
|
|
|
|
foundDevice = doGet("/api/device/" + savedDevice.getId().getId().toString(), Device.class); |
|
|
|
Assert.assertEquals(ModelConstants.NULL_UUID, foundDevice.getCustomerId().getId()); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@Test |
|
|
|
public void testAssignDeviceToNonExistentCustomer() throws Exception { |
|
|
|
Device device = new Device(); |
|
|
|
device.setName("My device"); |
|
|
|
device.setType("default"); |
|
|
|
Device savedDevice = doPost("/api/device", device, Device.class); |
|
|
|
|
|
|
|
doPost("/api/customer/" + Uuids.timeBased().toString() |
|
|
|
+ "/device/" + savedDevice.getId().getId().toString()) |
|
|
|
.andExpect(status().isNotFound()); |
|
|
|
.andExpect(status().isNotFound()); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@Test |
|
|
|
public void testAssignDeviceToCustomerFromDifferentTenant() throws Exception { |
|
|
|
loginSysAdmin(); |
|
|
|
|
|
|
|
|
|
|
|
Tenant tenant2 = new Tenant(); |
|
|
|
tenant2.setTitle("Different tenant"); |
|
|
|
Tenant savedTenant2 = doPost("/api/tenant", tenant2, Tenant.class); |
|
|
|
@ -246,103 +251,103 @@ public abstract class BaseDeviceControllerTest extends AbstractControllerTest { |
|
|
|
tenantAdmin2.setEmail("tenant3@thingsboard.org"); |
|
|
|
tenantAdmin2.setFirstName("Joe"); |
|
|
|
tenantAdmin2.setLastName("Downs"); |
|
|
|
|
|
|
|
|
|
|
|
tenantAdmin2 = createUserAndLogin(tenantAdmin2, "testPassword1"); |
|
|
|
|
|
|
|
|
|
|
|
Customer customer = new Customer(); |
|
|
|
customer.setTitle("Different customer"); |
|
|
|
Customer savedCustomer = doPost("/api/customer", customer, Customer.class); |
|
|
|
|
|
|
|
login(tenantAdmin.getEmail(), "testPassword1"); |
|
|
|
|
|
|
|
|
|
|
|
Device device = new Device(); |
|
|
|
device.setName("My device"); |
|
|
|
device.setType("default"); |
|
|
|
Device savedDevice = doPost("/api/device", device, Device.class); |
|
|
|
|
|
|
|
|
|
|
|
doPost("/api/customer/" + savedCustomer.getId().getId().toString() |
|
|
|
+ "/device/" + savedDevice.getId().getId().toString()) |
|
|
|
.andExpect(status().isForbidden()); |
|
|
|
|
|
|
|
.andExpect(status().isForbidden()); |
|
|
|
|
|
|
|
loginSysAdmin(); |
|
|
|
|
|
|
|
doDelete("/api/tenant/"+savedTenant2.getId().getId().toString()) |
|
|
|
.andExpect(status().isOk()); |
|
|
|
|
|
|
|
doDelete("/api/tenant/" + savedTenant2.getId().getId().toString()) |
|
|
|
.andExpect(status().isOk()); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@Test |
|
|
|
public void testFindDeviceCredentialsByDeviceId() throws Exception { |
|
|
|
Device device = new Device(); |
|
|
|
device.setName("My device"); |
|
|
|
device.setType("default"); |
|
|
|
Device savedDevice = doPost("/api/device", device, Device.class); |
|
|
|
DeviceCredentials deviceCredentials = |
|
|
|
doGet("/api/device/" + savedDevice.getId().getId().toString() + "/credentials", DeviceCredentials.class); |
|
|
|
DeviceCredentials deviceCredentials = |
|
|
|
doGet("/api/device/" + savedDevice.getId().getId().toString() + "/credentials", DeviceCredentials.class); |
|
|
|
Assert.assertEquals(savedDevice.getId(), deviceCredentials.getDeviceId()); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@Test |
|
|
|
public void testSaveDeviceCredentials() throws Exception { |
|
|
|
Device device = new Device(); |
|
|
|
device.setName("My device"); |
|
|
|
device.setType("default"); |
|
|
|
Device savedDevice = doPost("/api/device", device, Device.class); |
|
|
|
DeviceCredentials deviceCredentials = |
|
|
|
doGet("/api/device/" + savedDevice.getId().getId().toString() + "/credentials", DeviceCredentials.class); |
|
|
|
DeviceCredentials deviceCredentials = |
|
|
|
doGet("/api/device/" + savedDevice.getId().getId().toString() + "/credentials", DeviceCredentials.class); |
|
|
|
Assert.assertEquals(savedDevice.getId(), deviceCredentials.getDeviceId()); |
|
|
|
deviceCredentials.setCredentialsType(DeviceCredentialsType.ACCESS_TOKEN); |
|
|
|
deviceCredentials.setCredentialsId("access_token"); |
|
|
|
doPost("/api/device/credentials", deviceCredentials) |
|
|
|
.andExpect(status().isOk()); |
|
|
|
|
|
|
|
DeviceCredentials foundDeviceCredentials = |
|
|
|
.andExpect(status().isOk()); |
|
|
|
|
|
|
|
DeviceCredentials foundDeviceCredentials = |
|
|
|
doGet("/api/device/" + savedDevice.getId().getId().toString() + "/credentials", DeviceCredentials.class); |
|
|
|
|
|
|
|
|
|
|
|
Assert.assertEquals(deviceCredentials, foundDeviceCredentials); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@Test |
|
|
|
public void testSaveDeviceCredentialsWithEmptyDevice() throws Exception { |
|
|
|
DeviceCredentials deviceCredentials = new DeviceCredentials(); |
|
|
|
doPost("/api/device/credentials", deviceCredentials) |
|
|
|
.andExpect(status().isBadRequest()); |
|
|
|
.andExpect(status().isBadRequest()); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@Test |
|
|
|
public void testSaveDeviceCredentialsWithEmptyCredentialsType() throws Exception { |
|
|
|
Device device = new Device(); |
|
|
|
device.setName("My device"); |
|
|
|
device.setType("default"); |
|
|
|
Device savedDevice = doPost("/api/device", device, Device.class); |
|
|
|
DeviceCredentials deviceCredentials = |
|
|
|
DeviceCredentials deviceCredentials = |
|
|
|
doGet("/api/device/" + savedDevice.getId().getId().toString() + "/credentials", DeviceCredentials.class); |
|
|
|
deviceCredentials.setCredentialsType(null); |
|
|
|
doPost("/api/device/credentials", deviceCredentials) |
|
|
|
.andExpect(status().isBadRequest()) |
|
|
|
.andExpect(statusReason(containsString("Device credentials type should be specified"))); |
|
|
|
.andExpect(status().isBadRequest()) |
|
|
|
.andExpect(statusReason(containsString("Device credentials type should be specified"))); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@Test |
|
|
|
public void testSaveDeviceCredentialsWithEmptyCredentialsId() throws Exception { |
|
|
|
Device device = new Device(); |
|
|
|
device.setName("My device"); |
|
|
|
device.setType("default"); |
|
|
|
Device savedDevice = doPost("/api/device", device, Device.class); |
|
|
|
DeviceCredentials deviceCredentials = |
|
|
|
DeviceCredentials deviceCredentials = |
|
|
|
doGet("/api/device/" + savedDevice.getId().getId().toString() + "/credentials", DeviceCredentials.class); |
|
|
|
deviceCredentials.setCredentialsId(null); |
|
|
|
doPost("/api/device/credentials", deviceCredentials) |
|
|
|
.andExpect(status().isBadRequest()) |
|
|
|
.andExpect(statusReason(containsString("Device credentials id should be specified"))); |
|
|
|
.andExpect(status().isBadRequest()) |
|
|
|
.andExpect(statusReason(containsString("Device credentials id should be specified"))); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@Test |
|
|
|
public void testSaveNonExistentDeviceCredentials() throws Exception { |
|
|
|
Device device = new Device(); |
|
|
|
device.setName("My device"); |
|
|
|
device.setType("default"); |
|
|
|
Device savedDevice = doPost("/api/device", device, Device.class); |
|
|
|
DeviceCredentials deviceCredentials = |
|
|
|
DeviceCredentials deviceCredentials = |
|
|
|
doGet("/api/device/" + savedDevice.getId().getId().toString() + "/credentials", DeviceCredentials.class); |
|
|
|
DeviceCredentials newDeviceCredentials = new DeviceCredentials(new DeviceCredentialsId(Uuids.timeBased())); |
|
|
|
newDeviceCredentials.setCreatedTime(deviceCredentials.getCreatedTime()); |
|
|
|
@ -350,29 +355,29 @@ public abstract class BaseDeviceControllerTest extends AbstractControllerTest { |
|
|
|
newDeviceCredentials.setCredentialsType(deviceCredentials.getCredentialsType()); |
|
|
|
newDeviceCredentials.setCredentialsId(deviceCredentials.getCredentialsId()); |
|
|
|
doPost("/api/device/credentials", newDeviceCredentials) |
|
|
|
.andExpect(status().isBadRequest()) |
|
|
|
.andExpect(statusReason(containsString("Unable to update non-existent device credentials"))); |
|
|
|
.andExpect(status().isBadRequest()) |
|
|
|
.andExpect(statusReason(containsString("Unable to update non-existent device credentials"))); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@Test |
|
|
|
public void testSaveDeviceCredentialsWithNonExistentDevice() throws Exception { |
|
|
|
Device device = new Device(); |
|
|
|
device.setName("My device"); |
|
|
|
device.setType("default"); |
|
|
|
Device savedDevice = doPost("/api/device", device, Device.class); |
|
|
|
DeviceCredentials deviceCredentials = |
|
|
|
DeviceCredentials deviceCredentials = |
|
|
|
doGet("/api/device/" + savedDevice.getId().getId().toString() + "/credentials", DeviceCredentials.class); |
|
|
|
deviceCredentials.setDeviceId(new DeviceId(Uuids.timeBased())); |
|
|
|
doPost("/api/device/credentials", deviceCredentials) |
|
|
|
.andExpect(status().isNotFound()); |
|
|
|
.andExpect(status().isNotFound()); |
|
|
|
} |
|
|
|
|
|
|
|
@Test |
|
|
|
public void testFindTenantDevices() throws Exception { |
|
|
|
List<Device> devices = new ArrayList<>(); |
|
|
|
for (int i=0;i<178;i++) { |
|
|
|
for (int i = 0; i < 178; i++) { |
|
|
|
Device device = new Device(); |
|
|
|
device.setName("Device"+i); |
|
|
|
device.setName("Device" + i); |
|
|
|
device.setType("default"); |
|
|
|
devices.add(doPost("/api/device", device, Device.class)); |
|
|
|
} |
|
|
|
@ -380,28 +385,29 @@ public abstract class BaseDeviceControllerTest extends AbstractControllerTest { |
|
|
|
PageLink pageLink = new PageLink(23); |
|
|
|
PageData<Device> pageData = null; |
|
|
|
do { |
|
|
|
pageData = doGetTypedWithPageLink("/api/tenant/devices?", |
|
|
|
pageData = doGetTypedWithPageLink("/api/tenant/devices?", |
|
|
|
new TypeReference<PageData<Device>>(){}, pageLink); |
|
|
|
|
|
|
|
loadedDevices.addAll(pageData.getData()); |
|
|
|
if (pageData.hasNext()) { |
|
|
|
pageLink = pageLink.nextPageLink(); |
|
|
|
} |
|
|
|
} while (pageData.hasNext()); |
|
|
|
|
|
|
|
|
|
|
|
Collections.sort(devices, idComparator); |
|
|
|
Collections.sort(loadedDevices, idComparator); |
|
|
|
|
|
|
|
|
|
|
|
Assert.assertEquals(devices, loadedDevices); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@Test |
|
|
|
public void testFindTenantDevicesByName() throws Exception { |
|
|
|
String title1 = "Device title 1"; |
|
|
|
List<Device> devicesTitle1 = new ArrayList<>(); |
|
|
|
for (int i=0;i<143;i++) { |
|
|
|
for (int i = 0; i < 143; i++) { |
|
|
|
Device device = new Device(); |
|
|
|
String suffix = RandomStringUtils.randomAlphanumeric(15); |
|
|
|
String name = title1+suffix; |
|
|
|
String name = title1 + suffix; |
|
|
|
name = i % 2 == 0 ? name.toLowerCase() : name.toUpperCase(); |
|
|
|
device.setName(name); |
|
|
|
device.setType("default"); |
|
|
|
@ -409,37 +415,37 @@ public abstract class BaseDeviceControllerTest extends AbstractControllerTest { |
|
|
|
} |
|
|
|
String title2 = "Device title 2"; |
|
|
|
List<Device> devicesTitle2 = new ArrayList<>(); |
|
|
|
for (int i=0;i<75;i++) { |
|
|
|
for (int i = 0; i < 75; i++) { |
|
|
|
Device device = new Device(); |
|
|
|
String suffix = RandomStringUtils.randomAlphanumeric(15); |
|
|
|
String name = title2+suffix; |
|
|
|
String name = title2 + suffix; |
|
|
|
name = i % 2 == 0 ? name.toLowerCase() : name.toUpperCase(); |
|
|
|
device.setName(name); |
|
|
|
device.setType("default"); |
|
|
|
devicesTitle2.add(doPost("/api/device", device, Device.class)); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
List<Device> loadedDevicesTitle1 = new ArrayList<>(); |
|
|
|
PageLink pageLink = new PageLink(15, 0, title1); |
|
|
|
PageData<Device> pageData = null; |
|
|
|
do { |
|
|
|
pageData = doGetTypedWithPageLink("/api/tenant/devices?", |
|
|
|
pageData = doGetTypedWithPageLink("/api/tenant/devices?", |
|
|
|
new TypeReference<PageData<Device>>(){}, pageLink); |
|
|
|
loadedDevicesTitle1.addAll(pageData.getData()); |
|
|
|
if (pageData.hasNext()) { |
|
|
|
pageLink = pageLink.nextPageLink(); |
|
|
|
} |
|
|
|
} while (pageData.hasNext()); |
|
|
|
|
|
|
|
|
|
|
|
Collections.sort(devicesTitle1, idComparator); |
|
|
|
Collections.sort(loadedDevicesTitle1, idComparator); |
|
|
|
|
|
|
|
|
|
|
|
Assert.assertEquals(devicesTitle1, loadedDevicesTitle1); |
|
|
|
|
|
|
|
|
|
|
|
List<Device> loadedDevicesTitle2 = new ArrayList<>(); |
|
|
|
pageLink = new PageLink(4, 0, title2); |
|
|
|
do { |
|
|
|
pageData = doGetTypedWithPageLink("/api/tenant/devices?", |
|
|
|
pageData = doGetTypedWithPageLink("/api/tenant/devices?", |
|
|
|
new TypeReference<PageData<Device>>(){}, pageLink); |
|
|
|
loadedDevicesTitle2.addAll(pageData.getData()); |
|
|
|
if (pageData.hasNext()) { |
|
|
|
@ -449,25 +455,23 @@ public abstract class BaseDeviceControllerTest extends AbstractControllerTest { |
|
|
|
|
|
|
|
Collections.sort(devicesTitle2, idComparator); |
|
|
|
Collections.sort(loadedDevicesTitle2, idComparator); |
|
|
|
|
|
|
|
|
|
|
|
Assert.assertEquals(devicesTitle2, loadedDevicesTitle2); |
|
|
|
|
|
|
|
|
|
|
|
for (Device device : loadedDevicesTitle1) { |
|
|
|
doDelete("/api/device/"+device.getId().getId().toString()) |
|
|
|
.andExpect(status().isOk()); |
|
|
|
doDelete("/api/device/" + device.getId().getId().toString()) |
|
|
|
.andExpect(status().isOk()); |
|
|
|
} |
|
|
|
|
|
|
|
pageLink = new PageLink(4, 0, title1); |
|
|
|
pageData = doGetTypedWithPageLink("/api/tenant/devices?", |
|
|
|
new TypeReference<PageData<Device>>(){}, pageLink); |
|
|
|
Assert.assertFalse(pageData.hasNext()); |
|
|
|
Assert.assertEquals(0, pageData.getData().size()); |
|
|
|
|
|
|
|
|
|
|
|
for (Device device : loadedDevicesTitle2) { |
|
|
|
doDelete("/api/device/"+device.getId().getId().toString()) |
|
|
|
.andExpect(status().isOk()); |
|
|
|
doDelete("/api/device/" + device.getId().getId().toString()) |
|
|
|
.andExpect(status().isOk()); |
|
|
|
} |
|
|
|
|
|
|
|
pageLink = new PageLink(4, 0, title2); |
|
|
|
pageData = doGetTypedWithPageLink("/api/tenant/devices?", |
|
|
|
new TypeReference<PageData<Device>>(){}, pageLink); |
|
|
|
@ -480,10 +484,10 @@ public abstract class BaseDeviceControllerTest extends AbstractControllerTest { |
|
|
|
String title1 = "Device title 1"; |
|
|
|
String type1 = "typeA"; |
|
|
|
List<Device> devicesType1 = new ArrayList<>(); |
|
|
|
for (int i=0;i<143;i++) { |
|
|
|
for (int i = 0; i < 143; i++) { |
|
|
|
Device device = new Device(); |
|
|
|
String suffix = RandomStringUtils.randomAlphanumeric(15); |
|
|
|
String name = title1+suffix; |
|
|
|
String name = title1 + suffix; |
|
|
|
name = i % 2 == 0 ? name.toLowerCase() : name.toUpperCase(); |
|
|
|
device.setName(name); |
|
|
|
device.setType(type1); |
|
|
|
@ -492,10 +496,10 @@ public abstract class BaseDeviceControllerTest extends AbstractControllerTest { |
|
|
|
String title2 = "Device title 2"; |
|
|
|
String type2 = "typeB"; |
|
|
|
List<Device> devicesType2 = new ArrayList<>(); |
|
|
|
for (int i=0;i<75;i++) { |
|
|
|
for (int i = 0; i < 75; i++) { |
|
|
|
Device device = new Device(); |
|
|
|
String suffix = RandomStringUtils.randomAlphanumeric(15); |
|
|
|
String name = title2+suffix; |
|
|
|
String name = title2 + suffix; |
|
|
|
name = i % 2 == 0 ? name.toLowerCase() : name.toUpperCase(); |
|
|
|
device.setName(name); |
|
|
|
device.setType(type2); |
|
|
|
@ -536,7 +540,7 @@ public abstract class BaseDeviceControllerTest extends AbstractControllerTest { |
|
|
|
Assert.assertEquals(devicesType2, loadedDevicesType2); |
|
|
|
|
|
|
|
for (Device device : loadedDevicesType1) { |
|
|
|
doDelete("/api/device/"+device.getId().getId().toString()) |
|
|
|
doDelete("/api/device/" + device.getId().getId().toString()) |
|
|
|
.andExpect(status().isOk()); |
|
|
|
} |
|
|
|
|
|
|
|
@ -547,7 +551,7 @@ public abstract class BaseDeviceControllerTest extends AbstractControllerTest { |
|
|
|
Assert.assertEquals(0, pageData.getData().size()); |
|
|
|
|
|
|
|
for (Device device : loadedDevicesType2) { |
|
|
|
doDelete("/api/device/"+device.getId().getId().toString()) |
|
|
|
doDelete("/api/device/" + device.getId().getId().toString()) |
|
|
|
.andExpect(status().isOk()); |
|
|
|
} |
|
|
|
|
|
|
|
@ -557,42 +561,42 @@ public abstract class BaseDeviceControllerTest extends AbstractControllerTest { |
|
|
|
Assert.assertFalse(pageData.hasNext()); |
|
|
|
Assert.assertEquals(0, pageData.getData().size()); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@Test |
|
|
|
public void testFindCustomerDevices() throws Exception { |
|
|
|
Customer customer = new Customer(); |
|
|
|
customer.setTitle("Test customer"); |
|
|
|
customer = doPost("/api/customer", customer, Customer.class); |
|
|
|
CustomerId customerId = customer.getId(); |
|
|
|
|
|
|
|
|
|
|
|
List<Device> devices = new ArrayList<>(); |
|
|
|
for (int i=0;i<128;i++) { |
|
|
|
for (int i = 0; i < 128; i++) { |
|
|
|
Device device = new Device(); |
|
|
|
device.setName("Device"+i); |
|
|
|
device.setName("Device" + i); |
|
|
|
device.setType("default"); |
|
|
|
device = doPost("/api/device", device, Device.class); |
|
|
|
devices.add(doPost("/api/customer/" + customerId.getId().toString() |
|
|
|
+ "/device/" + device.getId().getId().toString(), Device.class)); |
|
|
|
devices.add(doPost("/api/customer/" + customerId.getId().toString() |
|
|
|
+ "/device/" + device.getId().getId().toString(), Device.class)); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
List<Device> loadedDevices = new ArrayList<>(); |
|
|
|
PageLink pageLink = new PageLink(23); |
|
|
|
PageData<Device> pageData = null; |
|
|
|
do { |
|
|
|
pageData = doGetTypedWithPageLink("/api/customer/" + customerId.getId().toString() + "/devices?", |
|
|
|
pageData = doGetTypedWithPageLink("/api/customer/" + customerId.getId().toString() + "/devices?", |
|
|
|
new TypeReference<PageData<Device>>(){}, pageLink); |
|
|
|
loadedDevices.addAll(pageData.getData()); |
|
|
|
if (pageData.hasNext()) { |
|
|
|
pageLink = pageLink.nextPageLink(); |
|
|
|
} |
|
|
|
} while (pageData.hasNext()); |
|
|
|
|
|
|
|
|
|
|
|
Collections.sort(devices, idComparator); |
|
|
|
Collections.sort(loadedDevices, idComparator); |
|
|
|
|
|
|
|
|
|
|
|
Assert.assertEquals(devices, loadedDevices); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@Test |
|
|
|
public void testFindCustomerDevicesByName() throws Exception { |
|
|
|
Customer customer = new Customer(); |
|
|
|
@ -602,52 +606,52 @@ public abstract class BaseDeviceControllerTest extends AbstractControllerTest { |
|
|
|
|
|
|
|
String title1 = "Device title 1"; |
|
|
|
List<Device> devicesTitle1 = new ArrayList<>(); |
|
|
|
for (int i=0;i<125;i++) { |
|
|
|
for (int i = 0; i < 125; i++) { |
|
|
|
Device device = new Device(); |
|
|
|
String suffix = RandomStringUtils.randomAlphanumeric(15); |
|
|
|
String name = title1+suffix; |
|
|
|
String name = title1 + suffix; |
|
|
|
name = i % 2 == 0 ? name.toLowerCase() : name.toUpperCase(); |
|
|
|
device.setName(name); |
|
|
|
device.setType("default"); |
|
|
|
device = doPost("/api/device", device, Device.class); |
|
|
|
devicesTitle1.add(doPost("/api/customer/" + customerId.getId().toString() |
|
|
|
devicesTitle1.add(doPost("/api/customer/" + customerId.getId().toString() |
|
|
|
+ "/device/" + device.getId().getId().toString(), Device.class)); |
|
|
|
} |
|
|
|
String title2 = "Device title 2"; |
|
|
|
List<Device> devicesTitle2 = new ArrayList<>(); |
|
|
|
for (int i=0;i<143;i++) { |
|
|
|
for (int i = 0; i < 143; i++) { |
|
|
|
Device device = new Device(); |
|
|
|
String suffix = RandomStringUtils.randomAlphanumeric(15); |
|
|
|
String name = title2+suffix; |
|
|
|
String name = title2 + suffix; |
|
|
|
name = i % 2 == 0 ? name.toLowerCase() : name.toUpperCase(); |
|
|
|
device.setName(name); |
|
|
|
device.setType("default"); |
|
|
|
device = doPost("/api/device", device, Device.class); |
|
|
|
devicesTitle2.add(doPost("/api/customer/" + customerId.getId().toString() |
|
|
|
devicesTitle2.add(doPost("/api/customer/" + customerId.getId().toString() |
|
|
|
+ "/device/" + device.getId().getId().toString(), Device.class)); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
List<Device> loadedDevicesTitle1 = new ArrayList<>(); |
|
|
|
PageLink pageLink = new PageLink(15, 0, title1); |
|
|
|
PageData<Device> pageData = null; |
|
|
|
do { |
|
|
|
pageData = doGetTypedWithPageLink("/api/customer/" + customerId.getId().toString() + "/devices?", |
|
|
|
pageData = doGetTypedWithPageLink("/api/customer/" + customerId.getId().toString() + "/devices?", |
|
|
|
new TypeReference<PageData<Device>>(){}, pageLink); |
|
|
|
loadedDevicesTitle1.addAll(pageData.getData()); |
|
|
|
if (pageData.hasNext()) { |
|
|
|
pageLink = pageLink.nextPageLink(); |
|
|
|
} |
|
|
|
} while (pageData.hasNext()); |
|
|
|
|
|
|
|
|
|
|
|
Collections.sort(devicesTitle1, idComparator); |
|
|
|
Collections.sort(loadedDevicesTitle1, idComparator); |
|
|
|
|
|
|
|
|
|
|
|
Assert.assertEquals(devicesTitle1, loadedDevicesTitle1); |
|
|
|
|
|
|
|
|
|
|
|
List<Device> loadedDevicesTitle2 = new ArrayList<>(); |
|
|
|
pageLink = new PageLink(4, 0, title2); |
|
|
|
do { |
|
|
|
pageData = doGetTypedWithPageLink("/api/customer/" + customerId.getId().toString() + "/devices?", |
|
|
|
pageData = doGetTypedWithPageLink("/api/customer/" + customerId.getId().toString() + "/devices?", |
|
|
|
new TypeReference<PageData<Device>>(){}, pageLink); |
|
|
|
loadedDevicesTitle2.addAll(pageData.getData()); |
|
|
|
if (pageData.hasNext()) { |
|
|
|
@ -657,25 +661,23 @@ public abstract class BaseDeviceControllerTest extends AbstractControllerTest { |
|
|
|
|
|
|
|
Collections.sort(devicesTitle2, idComparator); |
|
|
|
Collections.sort(loadedDevicesTitle2, idComparator); |
|
|
|
|
|
|
|
|
|
|
|
Assert.assertEquals(devicesTitle2, loadedDevicesTitle2); |
|
|
|
|
|
|
|
|
|
|
|
for (Device device : loadedDevicesTitle1) { |
|
|
|
doDelete("/api/customer/device/" + device.getId().getId().toString()) |
|
|
|
.andExpect(status().isOk()); |
|
|
|
.andExpect(status().isOk()); |
|
|
|
} |
|
|
|
|
|
|
|
pageLink = new PageLink(4, 0, title1); |
|
|
|
pageData = doGetTypedWithPageLink("/api/customer/" + customerId.getId().toString() + "/devices?", |
|
|
|
new TypeReference<PageData<Device>>(){}, pageLink); |
|
|
|
Assert.assertFalse(pageData.hasNext()); |
|
|
|
Assert.assertEquals(0, pageData.getData().size()); |
|
|
|
|
|
|
|
|
|
|
|
for (Device device : loadedDevicesTitle2) { |
|
|
|
doDelete("/api/customer/device/" + device.getId().getId().toString()) |
|
|
|
.andExpect(status().isOk()); |
|
|
|
.andExpect(status().isOk()); |
|
|
|
} |
|
|
|
|
|
|
|
pageLink = new PageLink(4, 0, title2); |
|
|
|
pageData = doGetTypedWithPageLink("/api/customer/" + customerId.getId().toString() + "/devices?", |
|
|
|
new TypeReference<PageData<Device>>(){}, pageLink); |
|
|
|
@ -693,10 +695,10 @@ public abstract class BaseDeviceControllerTest extends AbstractControllerTest { |
|
|
|
String title1 = "Device title 1"; |
|
|
|
String type1 = "typeC"; |
|
|
|
List<Device> devicesType1 = new ArrayList<>(); |
|
|
|
for (int i=0;i<125;i++) { |
|
|
|
for (int i = 0; i < 125; i++) { |
|
|
|
Device device = new Device(); |
|
|
|
String suffix = RandomStringUtils.randomAlphanumeric(15); |
|
|
|
String name = title1+suffix; |
|
|
|
String name = title1 + suffix; |
|
|
|
name = i % 2 == 0 ? name.toLowerCase() : name.toUpperCase(); |
|
|
|
device.setName(name); |
|
|
|
device.setType(type1); |
|
|
|
@ -707,10 +709,10 @@ public abstract class BaseDeviceControllerTest extends AbstractControllerTest { |
|
|
|
String title2 = "Device title 2"; |
|
|
|
String type2 = "typeD"; |
|
|
|
List<Device> devicesType2 = new ArrayList<>(); |
|
|
|
for (int i=0;i<143;i++) { |
|
|
|
for (int i = 0; i < 143; i++) { |
|
|
|
Device device = new Device(); |
|
|
|
String suffix = RandomStringUtils.randomAlphanumeric(15); |
|
|
|
String name = title2+suffix; |
|
|
|
String name = title2 + suffix; |
|
|
|
name = i % 2 == 0 ? name.toLowerCase() : name.toUpperCase(); |
|
|
|
device.setName(name); |
|
|
|
device.setType(type2); |
|
|
|
@ -775,4 +777,54 @@ public abstract class BaseDeviceControllerTest extends AbstractControllerTest { |
|
|
|
Assert.assertEquals(0, pageData.getData().size()); |
|
|
|
} |
|
|
|
|
|
|
|
@Test |
|
|
|
public void testAssignDeviceToTenant() throws Exception { |
|
|
|
Device device = new Device(); |
|
|
|
device.setName("My device"); |
|
|
|
device.setType("default"); |
|
|
|
Device savedDevice = doPost("/api/device", device, Device.class); |
|
|
|
|
|
|
|
Device anotherDevice = new Device(); |
|
|
|
anotherDevice.setName("My device1"); |
|
|
|
anotherDevice.setType("default"); |
|
|
|
Device savedAnotherDevice = doPost("/api/device", anotherDevice, Device.class); |
|
|
|
|
|
|
|
EntityRelation relation = new EntityRelation(); |
|
|
|
relation.setFrom(savedDevice.getId()); |
|
|
|
relation.setTo(savedAnotherDevice.getId()); |
|
|
|
relation.setTypeGroup(RelationTypeGroup.COMMON); |
|
|
|
relation.setType("Contains"); |
|
|
|
doPost("/api/relation", relation).andExpect(status().isOk()); |
|
|
|
|
|
|
|
loginSysAdmin(); |
|
|
|
Tenant tenant = new Tenant(); |
|
|
|
tenant.setTitle("Different tenant"); |
|
|
|
Tenant savedDifferentTenant = doPost("/api/tenant", tenant, Tenant.class); |
|
|
|
Assert.assertNotNull(savedDifferentTenant); |
|
|
|
|
|
|
|
User user = new User(); |
|
|
|
user.setAuthority(Authority.TENANT_ADMIN); |
|
|
|
user.setTenantId(savedDifferentTenant.getId()); |
|
|
|
user.setEmail("tenant9@thingsboard.org"); |
|
|
|
user.setFirstName("Sam"); |
|
|
|
user.setLastName("Downs"); |
|
|
|
|
|
|
|
createUserAndLogin(user, "testPassword1"); |
|
|
|
|
|
|
|
login("tenant2@thingsboard.org", "testPassword1"); |
|
|
|
Device assignedDevice = doPost("/api/tenant/" + savedDifferentTenant.getId().getId() + "/device/" + savedDevice.getId().getId(), Device.class); |
|
|
|
|
|
|
|
doGet("/api/device/" + assignedDevice.getId().getId().toString(), Device.class, status().isNotFound()); |
|
|
|
|
|
|
|
login("tenant9@thingsboard.org", "testPassword1"); |
|
|
|
|
|
|
|
Device foundDevice1 = doGet("/api/device/" + assignedDevice.getId().getId().toString(), Device.class); |
|
|
|
Assert.assertNotNull(foundDevice1); |
|
|
|
|
|
|
|
doGet("/api/relation?fromId=" + savedDevice.getId().getId() + "&fromType=DEVICE&relationType=Contains&toId=" + savedAnotherDevice.getId().getId() + "&toType=DEVICE", EntityRelation.class, status().isNotFound()); |
|
|
|
|
|
|
|
loginSysAdmin(); |
|
|
|
doDelete("/api/tenant/" + savedDifferentTenant.getId().getId().toString()) |
|
|
|
.andExpect(status().isOk()); |
|
|
|
} |
|
|
|
} |
|
|
|
|