Delete customers last on tenant deletion; tests fixes
This commit is contained in:
parent
6f9e9305bd
commit
a80d4650ea
@ -53,9 +53,8 @@ import java.util.Collections;
|
|||||||
import java.util.Comparator;
|
import java.util.Comparator;
|
||||||
import java.util.LinkedList;
|
import java.util.LinkedList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.stream.Collectors;
|
|
||||||
import java.util.Objects;
|
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
import static org.hamcrest.Matchers.containsString;
|
import static org.hamcrest.Matchers.containsString;
|
||||||
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
|
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
|
||||||
@ -584,7 +583,7 @@ public class AlarmControllerTest extends AbstractControllerTest {
|
|||||||
Assert.assertEquals(savedUser.getId(), foundAlarm.getAssigneeId());
|
Assert.assertEquals(savedUser.getId(), foundAlarm.getAssigneeId());
|
||||||
Assert.assertTrue(foundAlarm.getAssignTs() >= beforeAssignmentTs);
|
Assert.assertTrue(foundAlarm.getAssignTs() >= beforeAssignmentTs);
|
||||||
|
|
||||||
beforeAssignmentTs = System.currentTimeMillis();
|
long afterAssignmentTs = System.currentTimeMillis();
|
||||||
|
|
||||||
loginSysAdmin();
|
loginSysAdmin();
|
||||||
|
|
||||||
@ -592,12 +591,12 @@ public class AlarmControllerTest extends AbstractControllerTest {
|
|||||||
|
|
||||||
loginDifferentTenant();
|
loginDifferentTenant();
|
||||||
|
|
||||||
foundAlarm = Awaitility.await().atMost(TIMEOUT, TimeUnit.SECONDS)
|
Awaitility.await().atMost(TIMEOUT, TimeUnit.SECONDS).untilAsserted(() -> {
|
||||||
.until(() -> doGet("/api/alarm/info/" + alarmId.getId(), AlarmInfo.class), Objects::nonNull);
|
AlarmInfo alarmInfo = doGet("/api/alarm/info/" + alarmId.getId(), AlarmInfo.class);
|
||||||
|
Assert.assertNotNull(alarmInfo);
|
||||||
Assert.assertNotNull(foundAlarm);
|
Assert.assertNull(alarmInfo.getAssigneeId());
|
||||||
Assert.assertNull(foundAlarm.getAssigneeId());
|
Assert.assertTrue(alarmInfo.getAssignTs() >= afterAssignmentTs);
|
||||||
Assert.assertTrue(foundAlarm.getAssignTs() >= beforeAssignmentTs);
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@ -631,16 +630,16 @@ public class AlarmControllerTest extends AbstractControllerTest {
|
|||||||
Assert.assertEquals(savedUser.getId(), foundAlarm.getAssigneeId());
|
Assert.assertEquals(savedUser.getId(), foundAlarm.getAssigneeId());
|
||||||
Assert.assertTrue(foundAlarm.getAssignTs() >= beforeAssignmentTs);
|
Assert.assertTrue(foundAlarm.getAssignTs() >= beforeAssignmentTs);
|
||||||
|
|
||||||
beforeAssignmentTs = System.currentTimeMillis();
|
long afterAssignmentTs = System.currentTimeMillis();
|
||||||
|
|
||||||
doDelete("/api/user/" + savedUser.getId().getId()).andExpect(status().isOk());
|
doDelete("/api/user/" + savedUser.getId().getId()).andExpect(status().isOk());
|
||||||
|
|
||||||
foundAlarm = Awaitility.await().atMost(TIMEOUT, TimeUnit.SECONDS)
|
Awaitility.await().atMost(TIMEOUT, TimeUnit.SECONDS).untilAsserted(() -> {
|
||||||
.until(() -> doGet("/api/alarm/info/" + alarmId.getId(), AlarmInfo.class), Objects::nonNull);
|
AlarmInfo alarmInfo = doGet("/api/alarm/info/" + alarmId.getId(), AlarmInfo.class);
|
||||||
|
Assert.assertNotNull(alarmInfo);
|
||||||
Assert.assertNotNull(foundAlarm);
|
Assert.assertNull(alarmInfo.getAssigneeId());
|
||||||
Assert.assertNull(foundAlarm.getAssigneeId());
|
Assert.assertTrue(alarmInfo.getAssignTs() >= afterAssignmentTs);
|
||||||
Assert.assertTrue(foundAlarm.getAssignTs() >= beforeAssignmentTs);
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@ -684,18 +683,18 @@ public class AlarmControllerTest extends AbstractControllerTest {
|
|||||||
Assert.assertEquals(savedUser.getId(), foundAlarm.getAssigneeId());
|
Assert.assertEquals(savedUser.getId(), foundAlarm.getAssigneeId());
|
||||||
Assert.assertTrue(foundAlarm.getAssignTs() >= beforeAssignmentTs);
|
Assert.assertTrue(foundAlarm.getAssignTs() >= beforeAssignmentTs);
|
||||||
|
|
||||||
beforeAssignmentTs = System.currentTimeMillis();
|
long afterAssignmentTs = System.currentTimeMillis();
|
||||||
|
|
||||||
Mockito.reset(tbClusterService, auditLogService);
|
Mockito.reset(tbClusterService, auditLogService);
|
||||||
|
|
||||||
doDelete("/api/customer/" + differentTenantCustomerId.getId()).andExpect(status().isOk());
|
doDelete("/api/customer/" + differentTenantCustomerId.getId()).andExpect(status().isOk());
|
||||||
|
|
||||||
foundAlarm = Awaitility.await().atMost(TIMEOUT, TimeUnit.SECONDS)
|
Awaitility.await().atMost(TIMEOUT, TimeUnit.SECONDS).untilAsserted(() -> {
|
||||||
.until(() -> doGet("/api/alarm/info/" + alarmId.getId(), AlarmInfo.class), Objects::nonNull);
|
AlarmInfo alarmInfo = doGet("/api/alarm/info/" + alarmId.getId(), AlarmInfo.class);
|
||||||
|
Assert.assertNotNull(alarmInfo);
|
||||||
Assert.assertNotNull(foundAlarm);
|
Assert.assertNull(alarmInfo.getAssigneeId());
|
||||||
Assert.assertNull(foundAlarm.getAssigneeId());
|
Assert.assertTrue(alarmInfo.getAssignTs() >= afterAssignmentTs);
|
||||||
Assert.assertTrue(foundAlarm.getAssignTs() >= beforeAssignmentTs);
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@ -1003,27 +1002,20 @@ public class AlarmControllerTest extends AbstractControllerTest {
|
|||||||
types.remove(0);
|
types.remove(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
foundTypes = doGetTyped("/api/alarm/types?pageSize=1024&page=0", new TypeReference<PageData<EntitySubtype>>() {
|
Awaitility.await().atMost(TIMEOUT, TimeUnit.SECONDS).untilAsserted(() -> {
|
||||||
})
|
List<String> actualTypes = doGetTyped("/api/alarm/types?pageSize=1024&page=0", new TypeReference<PageData<EntitySubtype>>() {})
|
||||||
.getData()
|
.getData().stream().map(EntitySubtype::getType).toList();
|
||||||
.stream()
|
Assert.assertEquals(types.size(), actualTypes.size());
|
||||||
.map(EntitySubtype::getType)
|
Assert.assertEquals(types, actualTypes);
|
||||||
.collect(Collectors.toList());
|
});
|
||||||
|
|
||||||
Assert.assertEquals(types.size(), foundTypes.size());
|
|
||||||
Assert.assertEquals(types, foundTypes);
|
|
||||||
|
|
||||||
doDelete("/api/device/" + devices.get(0).getId()).andExpect(status().isOk());
|
doDelete("/api/device/" + devices.get(0).getId()).andExpect(status().isOk());
|
||||||
|
|
||||||
foundTypes = doGetTyped("/api/alarm/types?pageSize=1024&page=0", new TypeReference<PageData<EntitySubtype>>() {
|
Awaitility.await().atMost(TIMEOUT, TimeUnit.SECONDS).untilAsserted(() -> {
|
||||||
})
|
List<String> actualTypes = doGetTyped("/api/alarm/types?pageSize=1024&page=0", new TypeReference<PageData<EntitySubtype>>() {})
|
||||||
.getData()
|
.getData().stream().map(EntitySubtype::getType).sorted().toList();
|
||||||
.stream()
|
Assert.assertTrue(actualTypes.isEmpty());
|
||||||
.map(EntitySubtype::getType)
|
});
|
||||||
.sorted()
|
|
||||||
.collect(Collectors.toList());
|
|
||||||
|
|
||||||
Assert.assertTrue(foundTypes.isEmpty());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -42,6 +42,7 @@ import org.thingsboard.server.common.data.asset.Asset;
|
|||||||
import org.thingsboard.server.common.data.asset.AssetProfile;
|
import org.thingsboard.server.common.data.asset.AssetProfile;
|
||||||
import org.thingsboard.server.common.data.audit.ActionType;
|
import org.thingsboard.server.common.data.audit.ActionType;
|
||||||
import org.thingsboard.server.common.data.edge.Edge;
|
import org.thingsboard.server.common.data.edge.Edge;
|
||||||
|
import org.thingsboard.server.common.data.id.AlarmId;
|
||||||
import org.thingsboard.server.common.data.id.AssetId;
|
import org.thingsboard.server.common.data.id.AssetId;
|
||||||
import org.thingsboard.server.common.data.id.CustomerId;
|
import org.thingsboard.server.common.data.id.CustomerId;
|
||||||
import org.thingsboard.server.common.data.page.PageData;
|
import org.thingsboard.server.common.data.page.PageData;
|
||||||
@ -55,8 +56,10 @@ import org.thingsboard.server.dao.service.DaoSqlTest;
|
|||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
import static org.assertj.core.api.Assertions.assertThat;
|
import static org.assertj.core.api.Assertions.assertThat;
|
||||||
|
import static org.awaitility.Awaitility.await;
|
||||||
import static org.hamcrest.Matchers.containsString;
|
import static org.hamcrest.Matchers.containsString;
|
||||||
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
|
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
|
||||||
import static org.thingsboard.server.dao.model.ModelConstants.NULL_UUID;
|
import static org.thingsboard.server.dao.model.ModelConstants.NULL_UUID;
|
||||||
@ -312,8 +315,9 @@ public class AssetControllerTest extends AbstractControllerTest {
|
|||||||
|
|
||||||
alarm = doPost("/api/alarm", alarm, Alarm.class);
|
alarm = doPost("/api/alarm", alarm, Alarm.class);
|
||||||
Assert.assertNotNull(alarm);
|
Assert.assertNotNull(alarm);
|
||||||
|
AlarmId alarmId = alarm.getId();
|
||||||
|
|
||||||
AlarmInfo foundAlarm = doGet("/api/alarm/info/" + alarm.getId(), AlarmInfo.class);
|
AlarmInfo foundAlarm = doGet("/api/alarm/info/" + alarmId, AlarmInfo.class);
|
||||||
Assert.assertNotNull(foundAlarm);
|
Assert.assertNotNull(foundAlarm);
|
||||||
|
|
||||||
doDelete("/api/asset/" + savedAsset.getId().getId().toString())
|
doDelete("/api/asset/" + savedAsset.getId().getId().toString())
|
||||||
@ -324,9 +328,11 @@ public class AssetControllerTest extends AbstractControllerTest {
|
|||||||
.andExpect(status().isNotFound())
|
.andExpect(status().isNotFound())
|
||||||
.andExpect(statusReason(containsString(msgErrorNoFound("Asset", assetIdStr))));
|
.andExpect(statusReason(containsString(msgErrorNoFound("Asset", assetIdStr))));
|
||||||
|
|
||||||
doGet("/api/alarm/info/" + alarm.getId())
|
await().atMost(30, TimeUnit.SECONDS).untilAsserted(() -> {
|
||||||
.andExpect(status().isNotFound())
|
doGet("/api/alarm/info/" + alarmId)
|
||||||
.andExpect(statusReason(containsString(msgErrorNoFound("Alarm", alarm.getId().getId().toString()))));
|
.andExpect(status().isNotFound())
|
||||||
|
.andExpect(statusReason(containsString(msgErrorNoFound("Alarm", alarmId.getId().toString()))));
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|||||||
@ -150,7 +150,6 @@ public class TenantServiceImpl extends AbstractCachedEntityService<TenantId, Ten
|
|||||||
return savedTenant;
|
return savedTenant;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Transactional
|
|
||||||
@Override
|
@Override
|
||||||
public void deleteTenant(TenantId tenantId) {
|
public void deleteTenant(TenantId tenantId) {
|
||||||
log.trace("Executing deleteTenant [{}]", tenantId);
|
log.trace("Executing deleteTenant [{}]", tenantId);
|
||||||
@ -162,17 +161,17 @@ public class TenantServiceImpl extends AbstractCachedEntityService<TenantId, Ten
|
|||||||
notificationSettingsService.deleteNotificationSettings(tenantId);
|
notificationSettingsService.deleteNotificationSettings(tenantId);
|
||||||
tenantDao.removeById(tenantId, tenantId.getId());
|
tenantDao.removeById(tenantId, tenantId.getId());
|
||||||
|
|
||||||
cleanUpService.removeTenantEntities(tenantId, // don't forget to implement deleteByTenantId from EntityDaoService when adding entity type to this list
|
|
||||||
EntityType.ENTITY_VIEW, EntityType.WIDGETS_BUNDLE, EntityType.WIDGET_TYPE,
|
|
||||||
EntityType.ASSET, EntityType.ASSET_PROFILE, EntityType.DEVICE, EntityType.DEVICE_PROFILE,
|
|
||||||
EntityType.DASHBOARD, EntityType.CUSTOMER, EntityType.EDGE, EntityType.RULE_CHAIN,
|
|
||||||
EntityType.API_USAGE_STATE, EntityType.TB_RESOURCE, EntityType.OTA_PACKAGE, EntityType.RPC,
|
|
||||||
EntityType.QUEUE, EntityType.NOTIFICATION_REQUEST, EntityType.NOTIFICATION_RULE,
|
|
||||||
EntityType.NOTIFICATION_TEMPLATE, EntityType.NOTIFICATION_TARGET, EntityType.QUEUE_STATS
|
|
||||||
);
|
|
||||||
|
|
||||||
publishEvictEvent(new TenantEvictEvent(tenantId, true));
|
publishEvictEvent(new TenantEvictEvent(tenantId, true));
|
||||||
eventPublisher.publishEvent(DeleteEntityEvent.builder().tenantId(tenantId).entityId(tenantId).entity(tenant).build());
|
eventPublisher.publishEvent(DeleteEntityEvent.builder().tenantId(tenantId).entityId(tenantId).entity(tenant).build());
|
||||||
|
|
||||||
|
cleanUpService.removeTenantEntities(tenantId, // don't forget to implement deleteEntity from EntityDaoService when adding entity type to this list
|
||||||
|
EntityType.ENTITY_VIEW, EntityType.WIDGETS_BUNDLE, EntityType.WIDGET_TYPE,
|
||||||
|
EntityType.ASSET, EntityType.ASSET_PROFILE, EntityType.DEVICE, EntityType.DEVICE_PROFILE,
|
||||||
|
EntityType.DASHBOARD, EntityType.EDGE, EntityType.RULE_CHAIN, EntityType.API_USAGE_STATE,
|
||||||
|
EntityType.TB_RESOURCE, EntityType.OTA_PACKAGE, EntityType.RPC, EntityType.QUEUE,
|
||||||
|
EntityType.NOTIFICATION_REQUEST, EntityType.NOTIFICATION_RULE, EntityType.NOTIFICATION_TEMPLATE,
|
||||||
|
EntityType.NOTIFICATION_TARGET, EntityType.QUEUE_STATS, EntityType.CUSTOMER
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user