Browse Source

add test for tenant deletion method

add corresponding test to make sure all related entities are also deleted when tenant is deleted
pull/5873/head
desoliture 5 years ago
parent
commit
3d45039455
  1. 4
      dao/src/test/java/org/thingsboard/server/dao/service/AbstractServiceTest.java
  2. 289
      dao/src/test/java/org/thingsboard/server/dao/service/BaseTenantServiceTest.java

4
dao/src/test/java/org/thingsboard/server/dao/service/AbstractServiceTest.java

@ -59,6 +59,7 @@ import org.thingsboard.server.dao.event.EventService;
import org.thingsboard.server.dao.ota.OtaPackageService; import org.thingsboard.server.dao.ota.OtaPackageService;
import org.thingsboard.server.dao.relation.RelationService; import org.thingsboard.server.dao.relation.RelationService;
import org.thingsboard.server.dao.resource.ResourceService; import org.thingsboard.server.dao.resource.ResourceService;
import org.thingsboard.server.dao.rpc.RpcService;
import org.thingsboard.server.dao.rule.RuleChainService; import org.thingsboard.server.dao.rule.RuleChainService;
import org.thingsboard.server.dao.settings.AdminSettingsService; import org.thingsboard.server.dao.settings.AdminSettingsService;
import org.thingsboard.server.dao.tenant.TenantProfileService; import org.thingsboard.server.dao.tenant.TenantProfileService;
@ -163,6 +164,9 @@ public abstract class AbstractServiceTest {
@Autowired @Autowired
protected OtaPackageService otaPackageService; protected OtaPackageService otaPackageService;
@Autowired
protected RpcService rpcService;
public class IdComparator<D extends HasId> implements Comparator<D> { public class IdComparator<D extends HasId> implements Comparator<D> {
@Override @Override
public int compare(D o1, D o2) { public int compare(D o1, D o2) {

289
dao/src/test/java/org/thingsboard/server/dao/service/BaseTenantServiceTest.java

@ -23,28 +23,70 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.mock.mockito.SpyBean; import org.springframework.boot.test.mock.mockito.SpyBean;
import org.springframework.cache.Cache; import org.springframework.cache.Cache;
import org.springframework.cache.CacheManager; import org.springframework.cache.CacheManager;
import org.thingsboard.common.util.JacksonUtil;
import org.thingsboard.server.common.data.ApiUsageState;
import org.thingsboard.server.common.data.CacheConstants; import org.thingsboard.server.common.data.CacheConstants;
import org.thingsboard.server.common.data.Customer;
import org.thingsboard.server.common.data.Dashboard;
import org.thingsboard.server.common.data.DashboardInfo;
import org.thingsboard.server.common.data.Device;
import org.thingsboard.server.common.data.DeviceProfile;
import org.thingsboard.server.common.data.DeviceProfileType;
import org.thingsboard.server.common.data.DeviceTransportType;
import org.thingsboard.server.common.data.EntityView;
import org.thingsboard.server.common.data.OtaPackage;
import org.thingsboard.server.common.data.OtaPackageInfo;
import org.thingsboard.server.common.data.ResourceType;
import org.thingsboard.server.common.data.TbResource;
import org.thingsboard.server.common.data.TbResourceInfo;
import org.thingsboard.server.common.data.Tenant; import org.thingsboard.server.common.data.Tenant;
import org.thingsboard.server.common.data.TenantInfo; import org.thingsboard.server.common.data.TenantInfo;
import org.thingsboard.server.common.data.TenantProfile; import org.thingsboard.server.common.data.TenantProfile;
import org.thingsboard.server.common.data.User;
import org.thingsboard.server.common.data.asset.Asset;
import org.thingsboard.server.common.data.device.profile.DeviceProfileData;
import org.thingsboard.server.common.data.device.profile.MqttDeviceProfileTransportConfiguration;
import org.thingsboard.server.common.data.edge.Edge;
import org.thingsboard.server.common.data.id.DeviceProfileId;
import org.thingsboard.server.common.data.id.TenantId; import org.thingsboard.server.common.data.id.TenantId;
import org.thingsboard.server.common.data.ota.ChecksumAlgorithm;
import org.thingsboard.server.common.data.page.PageData; import org.thingsboard.server.common.data.page.PageData;
import org.thingsboard.server.common.data.page.PageLink; import org.thingsboard.server.common.data.page.PageLink;
import org.thingsboard.server.common.data.rpc.Rpc;
import org.thingsboard.server.common.data.rpc.RpcStatus;
import org.thingsboard.server.common.data.rule.RuleChain;
import org.thingsboard.server.common.data.rule.RuleChainType;
import org.thingsboard.server.common.data.security.Authority;
import org.thingsboard.server.common.data.tenant.profile.DefaultTenantProfileConfiguration; import org.thingsboard.server.common.data.tenant.profile.DefaultTenantProfileConfiguration;
import org.thingsboard.server.common.data.tenant.profile.TenantProfileData; import org.thingsboard.server.common.data.tenant.profile.TenantProfileData;
import org.thingsboard.server.common.data.widget.WidgetsBundle;
import org.thingsboard.server.dao.exception.DataValidationException; import org.thingsboard.server.dao.exception.DataValidationException;
import org.thingsboard.server.dao.tenant.TenantDao; import org.thingsboard.server.dao.tenant.TenantDao;
import java.nio.ByteBuffer;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.Objects; import java.util.Objects;
import java.util.Set;
import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.eq; import static org.mockito.ArgumentMatchers.eq;
import static org.thingsboard.server.common.data.ota.OtaPackageType.FIRMWARE;
public abstract class BaseTenantServiceTest extends AbstractServiceTest { public abstract class BaseTenantServiceTest extends AbstractServiceTest {
public static final String TITLE = "My firmware";
private static final String FILE_NAME = "filename.txt";
private static final String VERSION = "v1.0";
private static final String CONTENT_TYPE = "text/plain";
private static final ChecksumAlgorithm CHECKSUM_ALGORITHM = ChecksumAlgorithm.SHA256;
private static final String CHECKSUM = "4bf5122f344554c53bde2ebb8cd2b7e3d1600ad631c385a5d7cce23c7785459a";
private static final long DATA_SIZE = 1L;
private static final ByteBuffer DATA = ByteBuffer.wrap(new byte[]{(int) DATA_SIZE});
private static final String URL = "http://firmware.test.org";
private IdComparator<Tenant> idComparator = new IdComparator<>(); private IdComparator<Tenant> idComparator = new IdComparator<>();
@SpyBean @SpyBean
@ -356,4 +398,249 @@ public abstract class BaseTenantServiceTest extends AbstractServiceTest {
cachedTenant = Objects.requireNonNull(cacheManager.getCache(CacheConstants.TENANTS_CACHE), "Cache manager is null!").get(savedTenant.getId()); cachedTenant = Objects.requireNonNull(cacheManager.getCache(CacheConstants.TENANTS_CACHE), "Cache manager is null!").get(savedTenant.getId());
Assert.assertNull("Removing a Tenant doesn't evict the cache!", cachedTenant); Assert.assertNull("Removing a Tenant doesn't evict the cache!", cachedTenant);
} }
@Test
public void testDeleteTenantDeletingAllRelatedEntities() throws Exception {
TenantProfile tenantProfile = new TenantProfile();
tenantProfile.setName("Test tenant profile");
TenantProfile savedProfile = tenantProfileService.saveTenantProfile(TenantId.SYS_TENANT_ID, tenantProfile);
Tenant tenant = new Tenant();
tenant.setTitle("My tenant");
tenant.setTenantProfileId(savedProfile.getId());
Tenant savedTenant = tenantService.saveTenant(tenant);
User user = new User();
user.setAuthority(Authority.TENANT_ADMIN);
user.setEmail("tenantAdmin@test.com");
user.setFirstName("tenantAdmin");
user.setLastName("tenantAdmin");
user.setTenantId(savedTenant.getId());
User savedUser = userService.saveUser(user);
Customer customer = new Customer();
customer.setTitle("Test customer");
customer.setTenantId(savedTenant.getId());
customer.setEmail("testCustomer@test.com");
Customer savedCustomer = customerService.saveCustomer(customer);
WidgetsBundle widgetsBundle = new WidgetsBundle();
widgetsBundle.setTenantId(savedTenant.getId());
widgetsBundle.setTitle("Test widgets bundle");
widgetsBundle.setAlias("TestWidgetsBundle");
widgetsBundle.setDescription("Just a simple widgets bundle");
WidgetsBundle savedWidgetsBundle = widgetsBundleService.saveWidgetsBundle(widgetsBundle);
DeviceProfile deviceProfile = new DeviceProfile();
deviceProfile.setTenantId(savedTenant.getId());
deviceProfile.setTransportType(DeviceTransportType.MQTT);
deviceProfile.setName("Test device profile");
deviceProfile.setType(DeviceProfileType.DEFAULT);
DeviceProfileData profileData = new DeviceProfileData();
profileData.setTransportConfiguration(new MqttDeviceProfileTransportConfiguration());
deviceProfile.setProfileData(profileData);
DeviceProfile savedDeviceProfile = deviceProfileService.saveDeviceProfile(deviceProfile);
Device device = new Device();
device.setCustomerId(savedCustomer.getId());
device.setTenantId(savedTenant.getId());
device.setType("Test type");
device.setName("TestType");
device.setLabel("Test type");
device.setDeviceProfileId(savedDeviceProfile.getId());
Device savedDevice = deviceService.saveDevice(device);
EntityView entityView = new EntityView();
entityView.setEntityId(savedDevice.getId());
entityView.setTenantId(savedTenant.getId());
entityView.setCustomerId(savedCustomer.getId());
entityView.setType("Test type");
entityView.setName("Test entity view");
entityView.setStartTimeMs(0);
entityView.setEndTimeMs(840000);
EntityView savedEntityView = entityViewService.saveEntityView(entityView);
Asset asset = new Asset();
asset.setTenantId(savedTenant.getId());
asset.setCustomerId(savedCustomer.getId());
asset.setType("Test asset type");
asset.setName("Test asset type");
asset.setLabel("Test asset type");
Asset savedAsset = assetService.saveAsset(asset);
Dashboard dashboard = new Dashboard();
dashboard.setTenantId(savedTenant.getId());
dashboard.setTitle("Test dashboard");
dashboard.setAssignedCustomers(Set.of(savedCustomer.toShortCustomerInfo()));
Dashboard savedDashboard = dashboardService.saveDashboard(dashboard);
RuleChain ruleChain = new RuleChain();
ruleChain.setTenantId(savedTenant.getId());
ruleChain.setName("Test rule chain");
ruleChain.setType(RuleChainType.CORE);
RuleChain savedRuleChain = ruleChainService.saveRuleChain(ruleChain);
Edge edge = constructEdge(savedTenant.getId(), "Test edge", "Simple");
Edge savedEdge = edgeService.saveEdge(edge, false);
OtaPackage otaPackage = createFirmware(savedTenant.getId(), "1", savedDeviceProfile.getId());
OtaPackage savedOtaPackage = otaPackageService.saveOtaPackage(otaPackage);
TbResource resource = new TbResource();
resource.setTenantId(savedTenant.getId());
resource.setTitle("Test resource");
resource.setResourceType(ResourceType.LWM2M_MODEL);
resource.setFileName(FILE_NAME);
resource.setResourceKey("Test resource key");
resource.setData("Some super test data");
TbResource savedResource = resourceService.saveResource(resource);
ApiUsageState defaultApiUsageState = apiUsageStateService
.createDefaultApiUsageState(savedTenant.getId(), savedCustomer.getId());
Rpc rpc = new Rpc();
rpc.setTenantId(savedTenant.getId());
rpc.setDeviceId(savedDevice.getId());
rpc.setStatus(RpcStatus.QUEUED);
rpc.setRequest(JacksonUtil.toJsonNode("{}"));
Rpc savedRpc = rpcService.save(rpc);
tenantService.deleteTenant(savedTenant.getId());
Assert.assertNull(tenantService.findTenantById(savedTenant.getId()));
Assert.assertNull(tenantService.findTenantById(savedTenant.getId()));
Assert.assertNull(customerService.findCustomerById(savedTenant.getId(), savedCustomer.getId()));
PageLink pageLinkCustomer = new PageLink(1000);
PageData<Customer> pageDataCustomer = customerService
.findCustomersByTenantId(savedTenant.getId(), pageLinkCustomer);
Assert.assertFalse(pageDataCustomer.hasNext());
Assert.assertEquals(0, pageDataCustomer.getTotalElements());
Assert.assertNull(
widgetsBundleService.findWidgetsBundleById(savedTenant.getId(), savedWidgetsBundle.getId())
);
List<WidgetsBundle> widgetsBundlesByTenantId =
widgetsBundleService.findAllTenantWidgetsBundlesByTenantId(savedTenant.getId());
Assert.assertTrue(widgetsBundlesByTenantId.isEmpty());
Assert.assertNull(entityViewService.findEntityViewById(
savedTenant.getId(), savedEntityView.getId()
));
List<EntityView> entityViews =
entityViewService.findEntityViewsByTenantIdAndEntityId(
savedTenant.getId(), savedDevice.getId());
Assert.assertTrue(entityViews.isEmpty());
Assert.assertNull(assetService.findAssetById(
savedTenant.getId(), savedAsset.getId()
));
PageLink pageLinkAssets = new PageLink(1000);
PageData<Asset> assets =
assetService.findAssetsByTenantId(savedTenant.getId(), pageLinkAssets);
Assert.assertFalse(assets.hasNext());
Assert.assertEquals(0, assets.getTotalElements());
Assert.assertNull(deviceService.findDeviceById(
savedTenant.getId(), savedDevice.getId()
));
PageLink pageLinkDevices = new PageLink(1000);
PageData<Device> devices =
deviceService.findDevicesByTenantId(savedTenant.getId(), pageLinkDevices);
Assert.assertFalse(devices.hasNext());
Assert.assertEquals(0, devices.getTotalElements());
Assert.assertNull(deviceProfileService.findDeviceProfileById(
savedTenant.getId(), savedDeviceProfile.getId()
));
PageLink pageLinkDeviceProfiles = new PageLink(1000);
PageData<DeviceProfile> profiles =
deviceProfileService.findDeviceProfiles(savedTenant.getId(), pageLinkDeviceProfiles);
Assert.assertFalse(profiles.hasNext());
Assert.assertEquals(0, profiles.getTotalElements());
Assert.assertNull(dashboardService.findDashboardById(
savedTenant.getId(), savedDashboard.getId()
));
PageLink pageLinkDashboards = new PageLink(1000);
PageData<DashboardInfo> dashboards =
dashboardService.findDashboardsByTenantId(savedTenant.getId(), pageLinkDashboards);
Assert.assertFalse(dashboards.hasNext());
Assert.assertEquals(0, dashboards.getTotalElements());
Assert.assertNull(edgeService.findEdgeById(savedTenant.getId(), savedEdge.getId()));
PageLink pageLinkEdges = new PageLink(1000);
PageData<Edge> edges = edgeService.findEdgesByTenantId(savedTenant.getId(), pageLinkEdges);
Assert.assertFalse(edges.hasNext());
Assert.assertEquals(0, edges.getTotalElements());
PageLink pageLinkTenantAdmins = new PageLink(1000);
PageData<User> tenantAdmins =
userService.findTenantAdmins(savedTenant.getId(), pageLinkTenantAdmins);
Assert.assertFalse(tenantAdmins.hasNext());
Assert.assertEquals(0, tenantAdmins.getTotalElements());
Assert.assertNull(userService.findUserById(savedTenant.getId(), savedUser.getId()));
PageLink pageLinkUsers = new PageLink(1000);
PageData<User> users =
userService.findUsersByTenantId(savedTenant.getId(), pageLinkUsers);
Assert.assertFalse(users.hasNext());
Assert.assertEquals(0, users.getTotalElements());
Assert.assertNull(ruleChainService.findRuleChainById(savedTenant.getId(), savedRuleChain.getId()));
Assert.assertNull(apiUsageStateService.findTenantApiUsageState(savedTenant.getId()));
Assert.assertNull(resourceService.findResourceById(savedTenant.getId(), savedResource.getId()));
PageLink pageLinkResources = new PageLink(1000);
PageData<TbResourceInfo> tenantResources =
resourceService.findAllTenantResourcesByTenantId(savedTenant.getId(), pageLinkResources);
Assert.assertFalse(tenantResources.hasNext());
Assert.assertEquals(0, tenantResources.getTotalElements());
Assert.assertNull(
otaPackageService.findOtaPackageById(
savedTenant.getId(), savedOtaPackage.getId()
)
);
PageLink pageLinkOta = new PageLink(1000);
PageData<OtaPackageInfo> pageDataOta = otaPackageService.findTenantOtaPackagesByTenantId(savedTenant.getId(), pageLinkOta);
Assert.assertFalse(pageDataOta.hasNext());
Assert.assertEquals(0, pageDataOta.getTotalElements());
Assert.assertNull(rpcService.findById(savedTenant.getId(), savedRpc.getId()));
}
private OtaPackage createFirmware(TenantId tenantId, String version, DeviceProfileId deviceProfileId) {
OtaPackage firmware = new OtaPackage();
firmware.setTenantId(tenantId);
firmware.setDeviceProfileId(deviceProfileId);
firmware.setType(FIRMWARE);
firmware.setTitle(TITLE);
firmware.setVersion(version);
firmware.setFileName(FILE_NAME);
firmware.setContentType(CONTENT_TYPE);
firmware.setChecksumAlgorithm(CHECKSUM_ALGORITHM);
firmware.setChecksum(CHECKSUM);
firmware.setData(DATA);
firmware.setDataSize(DATA_SIZE);
return otaPackageService.saveOtaPackage(firmware);
}
} }

Loading…
Cancel
Save