fixed tests
This commit is contained in:
parent
a15ec624d7
commit
977da8bc8a
@ -81,7 +81,7 @@ public class EntityRelationController extends BaseController {
|
||||
@PreAuthorize("hasAnyAuthority('SYS_ADMIN', 'TENANT_ADMIN', 'CUSTOMER_USER')")
|
||||
@RequestMapping(value = "/relation", method = RequestMethod.POST)
|
||||
@ResponseStatus(value = HttpStatus.OK)
|
||||
public void saveRelation(@Parameter(description = "A JSON value representing the relation.", required = true)
|
||||
public EntityRelation saveRelation(@Parameter(description = "A JSON value representing the relation.", required = true)
|
||||
@RequestBody EntityRelation relation) throws ThingsboardException {
|
||||
checkNotNull(relation);
|
||||
checkCanCreateRelation(relation.getFrom());
|
||||
@ -90,7 +90,7 @@ public class EntityRelationController extends BaseController {
|
||||
relation.setTypeGroup(RelationTypeGroup.COMMON);
|
||||
}
|
||||
|
||||
tbEntityRelationService.save(getTenantId(), getCurrentUser().getCustomerId(), relation, getCurrentUser());
|
||||
return tbEntityRelationService.save(getTenantId(), getCurrentUser().getCustomerId(), relation, getCurrentUser());
|
||||
}
|
||||
|
||||
@ApiOperation(value = "Delete Relation (deleteRelation)",
|
||||
@ -98,7 +98,7 @@ public class EntityRelationController extends BaseController {
|
||||
@PreAuthorize("hasAnyAuthority('SYS_ADMIN', 'TENANT_ADMIN', 'CUSTOMER_USER')")
|
||||
@RequestMapping(value = "/relation", method = RequestMethod.DELETE, params = {FROM_ID, FROM_TYPE, RELATION_TYPE, TO_ID, TO_TYPE})
|
||||
@ResponseStatus(value = HttpStatus.OK)
|
||||
public void deleteRelation(@Parameter(description = ENTITY_ID_PARAM_DESCRIPTION, required = true) @RequestParam(FROM_ID) String strFromId,
|
||||
public EntityRelation deleteRelation(@Parameter(description = ENTITY_ID_PARAM_DESCRIPTION, required = true) @RequestParam(FROM_ID) String strFromId,
|
||||
@Parameter(description = ENTITY_TYPE_PARAM_DESCRIPTION, required = true) @RequestParam(FROM_TYPE) String strFromType,
|
||||
@Parameter(description = RELATION_TYPE_PARAM_DESCRIPTION, required = true) @RequestParam(RELATION_TYPE) String strRelationType,
|
||||
@Parameter(description = RELATION_TYPE_GROUP_PARAM_DESCRIPTION) @RequestParam(value = "relationTypeGroup", required = false) String strRelationTypeGroup,
|
||||
@ -116,7 +116,7 @@ public class EntityRelationController extends BaseController {
|
||||
|
||||
RelationTypeGroup relationTypeGroup = parseRelationTypeGroup(strRelationTypeGroup, RelationTypeGroup.COMMON);
|
||||
EntityRelation relation = new EntityRelation(fromId, toId, strRelationType, relationTypeGroup);
|
||||
tbEntityRelationService.delete(getTenantId(), getCurrentUser().getCustomerId(), relation, getCurrentUser());
|
||||
return tbEntityRelationService.delete(getTenantId(), getCurrentUser().getCustomerId(), relation, getCurrentUser());
|
||||
}
|
||||
|
||||
@ApiOperation(value = "Delete common relations (deleteCommonRelations)",
|
||||
|
||||
@ -39,12 +39,13 @@ public class DefaultTbEntityRelationService extends AbstractTbEntityService impl
|
||||
private final RelationService relationService;
|
||||
|
||||
@Override
|
||||
public void save(TenantId tenantId, CustomerId customerId, EntityRelation relation, User user) throws ThingsboardException {
|
||||
public EntityRelation save(TenantId tenantId, CustomerId customerId, EntityRelation relation, User user) throws ThingsboardException {
|
||||
ActionType actionType = ActionType.RELATION_ADD_OR_UPDATE;
|
||||
try {
|
||||
relationService.saveRelation(tenantId, relation);
|
||||
var savedRelation = relationService.saveRelation(tenantId, relation);
|
||||
logEntityActionService.logEntityRelationAction(tenantId, customerId,
|
||||
relation, user, actionType, null, relation);
|
||||
savedRelation, user, actionType, null, savedRelation);
|
||||
return savedRelation;
|
||||
} catch (Exception e) {
|
||||
logEntityActionService.logEntityRelationAction(tenantId, customerId,
|
||||
relation, user, actionType, e, relation);
|
||||
@ -53,14 +54,15 @@ public class DefaultTbEntityRelationService extends AbstractTbEntityService impl
|
||||
}
|
||||
|
||||
@Override
|
||||
public void delete(TenantId tenantId, CustomerId customerId, EntityRelation relation, User user) throws ThingsboardException {
|
||||
public EntityRelation delete(TenantId tenantId, CustomerId customerId, EntityRelation relation, User user) throws ThingsboardException {
|
||||
ActionType actionType = ActionType.RELATION_DELETED;
|
||||
try {
|
||||
boolean found = relationService.deleteRelation(tenantId, relation.getFrom(), relation.getTo(), relation.getType(), relation.getTypeGroup());
|
||||
if (!found) {
|
||||
var found = relationService.deleteRelation(tenantId, relation.getFrom(), relation.getTo(), relation.getType(), relation.getTypeGroup());
|
||||
if (found == null) {
|
||||
throw new ThingsboardException("Requested item wasn't found!", ThingsboardErrorCode.ITEM_NOT_FOUND);
|
||||
}
|
||||
logEntityActionService.logEntityRelationAction(tenantId, customerId, relation, user, actionType, null, relation);
|
||||
logEntityActionService.logEntityRelationAction(tenantId, customerId, found, user, actionType, null, found);
|
||||
return found;
|
||||
} catch (Exception e) {
|
||||
logEntityActionService.logEntityRelationAction(tenantId, customerId,
|
||||
relation, user, actionType, e, relation);
|
||||
|
||||
@ -24,9 +24,9 @@ import org.thingsboard.server.common.data.relation.EntityRelation;
|
||||
|
||||
public interface TbEntityRelationService {
|
||||
|
||||
void save(TenantId tenantId, CustomerId customerId, EntityRelation entity, User user) throws ThingsboardException;
|
||||
EntityRelation save(TenantId tenantId, CustomerId customerId, EntityRelation entity, User user) throws ThingsboardException;
|
||||
|
||||
void delete(TenantId tenantId, CustomerId customerId, EntityRelation entity, User user) throws ThingsboardException;
|
||||
EntityRelation delete(TenantId tenantId, CustomerId customerId, EntityRelation entity, User user) throws ThingsboardException;
|
||||
|
||||
void deleteCommonRelations(TenantId tenantId, CustomerId customerId, EntityId entityId, User user) throws ThingsboardException;
|
||||
|
||||
|
||||
@ -103,7 +103,7 @@ public class EntityRelationControllerTest extends AbstractControllerTest {
|
||||
|
||||
Mockito.reset(tbClusterService, auditLogService);
|
||||
|
||||
doPost("/api/relation", relation).andExpect(status().isOk());
|
||||
relation = doPost("/api/relation", relation, EntityRelation.class);
|
||||
|
||||
String url = String.format("/api/relation?fromId=%s&fromType=%s&relationType=%s&toId=%s&toType=%s",
|
||||
mainDevice.getUuidId(), EntityType.DEVICE,
|
||||
@ -315,7 +315,7 @@ public class EntityRelationControllerTest extends AbstractControllerTest {
|
||||
Device device = buildSimpleDevice("Test device 1");
|
||||
|
||||
EntityRelation relation = createFromRelation(mainDevice, device, "CONTAINS");
|
||||
doPost("/api/relation", relation).andExpect(status().isOk());
|
||||
relation = doPost("/api/relation", relation, EntityRelation.class);
|
||||
|
||||
String url = String.format("/api/relation?fromId=%s&fromType=%s&relationType=%s&toId=%s&toType=%s",
|
||||
mainDevice.getUuidId(), EntityType.DEVICE,
|
||||
@ -329,11 +329,11 @@ public class EntityRelationControllerTest extends AbstractControllerTest {
|
||||
|
||||
Mockito.reset(tbClusterService, auditLogService);
|
||||
|
||||
doDelete(url).andExpect(status().isOk());
|
||||
var deletedRelation = doDelete(url, EntityRelation.class);
|
||||
|
||||
testNotifyEntityAllOneTimeRelation(foundRelation,
|
||||
testNotifyEntityAllOneTimeRelation(deletedRelation,
|
||||
savedTenant.getId(), tenantAdmin.getCustomerId(), tenantAdmin.getId(), tenantAdmin.getEmail(),
|
||||
ActionType.RELATION_DELETED, foundRelation);
|
||||
ActionType.RELATION_DELETED, deletedRelation);
|
||||
|
||||
doGet(url).andExpect(status().is4xxClientError());
|
||||
}
|
||||
@ -523,7 +523,7 @@ public class EntityRelationControllerTest extends AbstractControllerTest {
|
||||
@Test
|
||||
public void testCreateRelationFromTenantToDevice() throws Exception {
|
||||
EntityRelation relation = new EntityRelation(tenantAdmin.getTenantId(), mainDevice.getId(), "CONTAINS");
|
||||
doPost("/api/relation", relation).andExpect(status().isOk());
|
||||
relation = doPost("/api/relation", relation, EntityRelation.class);
|
||||
|
||||
String url = String.format("/api/relation?fromId=%s&fromType=%s&relationType=%s&toId=%s&toType=%s",
|
||||
tenantAdmin.getTenantId(), EntityType.TENANT,
|
||||
@ -539,7 +539,7 @@ public class EntityRelationControllerTest extends AbstractControllerTest {
|
||||
@Test
|
||||
public void testCreateRelationFromDeviceToTenant() throws Exception {
|
||||
EntityRelation relation = new EntityRelation(mainDevice.getId(), tenantAdmin.getTenantId(), "CONTAINS");
|
||||
doPost("/api/relation", relation).andExpect(status().isOk());
|
||||
relation = doPost("/api/relation", relation, EntityRelation.class);
|
||||
|
||||
String url = String.format("/api/relation?fromId=%s&fromType=%s&relationType=%s&toId=%s&toType=%s",
|
||||
mainDevice.getUuidId(), EntityType.DEVICE,
|
||||
|
||||
@ -48,7 +48,7 @@ public class RelationEdgeTest extends AbstractEdgeTest {
|
||||
relation.setTo(asset.getId());
|
||||
relation.setTypeGroup(RelationTypeGroup.COMMON);
|
||||
edgeImitator.expectMessageAmount(1);
|
||||
doPost("/api/relation", relation);
|
||||
relation = doPost("/api/relation", relation, EntityRelation.class);
|
||||
Assert.assertTrue(edgeImitator.waitForMessages());
|
||||
AbstractMessage latestMessage = edgeImitator.getLatestMessage();
|
||||
Assert.assertTrue(latestMessage instanceof RelationUpdateMsg);
|
||||
@ -60,21 +60,20 @@ public class RelationEdgeTest extends AbstractEdgeTest {
|
||||
|
||||
// delete relation
|
||||
edgeImitator.expectMessageAmount(1);
|
||||
doDelete("/api/relation?" +
|
||||
var deletedRelation = doDelete("/api/relation?" +
|
||||
"fromId=" + relation.getFrom().getId().toString() +
|
||||
"&fromType=" + relation.getFrom().getEntityType().name() +
|
||||
"&relationType=" + relation.getType() +
|
||||
"&relationTypeGroup=" + relation.getTypeGroup().name() +
|
||||
"&toId=" + relation.getTo().getId().toString() +
|
||||
"&toType=" + relation.getTo().getEntityType().name())
|
||||
.andExpect(status().isOk());
|
||||
"&toType=" + relation.getTo().getEntityType().name(), EntityRelation.class);
|
||||
Assert.assertTrue(edgeImitator.waitForMessages());
|
||||
latestMessage = edgeImitator.getLatestMessage();
|
||||
Assert.assertTrue(latestMessage instanceof RelationUpdateMsg);
|
||||
relationUpdateMsg = (RelationUpdateMsg) latestMessage;
|
||||
entityRelation = JacksonUtil.fromString(relationUpdateMsg.getEntity(), EntityRelation.class, true);
|
||||
Assert.assertNotNull(entityRelation);
|
||||
Assert.assertEquals(relation, entityRelation);
|
||||
Assert.assertEquals(deletedRelation, entityRelation);
|
||||
Assert.assertEquals(UpdateMsgType.ENTITY_DELETED_RPC_MESSAGE, relationUpdateMsg.getMsgType());
|
||||
}
|
||||
|
||||
@ -119,7 +118,7 @@ public class RelationEdgeTest extends AbstractEdgeTest {
|
||||
deviceToAssetRelation.setTypeGroup(RelationTypeGroup.COMMON);
|
||||
|
||||
edgeImitator.expectMessageAmount(1);
|
||||
doPost("/api/relation", deviceToAssetRelation);
|
||||
deviceToAssetRelation = doPost("/api/relation", deviceToAssetRelation, EntityRelation.class);
|
||||
Assert.assertTrue(edgeImitator.waitForMessages());
|
||||
|
||||
EntityRelation assetToTenantRelation = new EntityRelation();
|
||||
|
||||
@ -937,8 +937,7 @@ public class VersionControlTest extends AbstractControllerTest {
|
||||
relation.setType(EntityRelation.MANAGES_TYPE);
|
||||
relation.setAdditionalInfo(JacksonUtil.newObjectNode().set("a", new TextNode("b")));
|
||||
relation.setTypeGroup(RelationTypeGroup.COMMON);
|
||||
doPost("/api/relation", relation).andExpect(status().isOk());
|
||||
return relation;
|
||||
return doPost("/api/relation", relation, EntityRelation.class);
|
||||
}
|
||||
|
||||
protected void checkImportedRuleChainData(RuleChain initialRuleChain, RuleChainMetaData initialMetaData, RuleChain importedRuleChain, RuleChainMetaData importedMetaData) {
|
||||
|
||||
@ -47,7 +47,7 @@ public interface RelationService {
|
||||
|
||||
ListenableFuture<Boolean> deleteRelationAsync(TenantId tenantId, EntityRelation relation);
|
||||
|
||||
boolean deleteRelation(TenantId tenantId, EntityId from, EntityId to, String relationType, RelationTypeGroup typeGroup);
|
||||
EntityRelation deleteRelation(TenantId tenantId, EntityId from, EntityId to, String relationType, RelationTypeGroup typeGroup);
|
||||
|
||||
ListenableFuture<Boolean> deleteRelationAsync(TenantId tenantId, EntityId from, EntityId to, String relationType, RelationTypeGroup typeGroup);
|
||||
|
||||
|
||||
@ -18,7 +18,10 @@ package org.thingsboard.server.common.data.relation;
|
||||
import com.fasterxml.jackson.annotation.JsonIgnore;
|
||||
import com.fasterxml.jackson.databind.JsonNode;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
import lombok.ToString;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.thingsboard.server.common.data.BaseDataWithAdditionalInfo;
|
||||
import org.thingsboard.server.common.data.HasVersion;
|
||||
@ -29,7 +32,8 @@ import java.io.Serializable;
|
||||
|
||||
@Slf4j
|
||||
@Schema
|
||||
@Data
|
||||
@EqualsAndHashCode(exclude = "additionalInfoBytes")
|
||||
@ToString(exclude = {"additionalInfoBytes"})
|
||||
public class EntityRelation implements HasVersion, Serializable {
|
||||
|
||||
private static final long serialVersionUID = 2807343040519543363L;
|
||||
@ -38,11 +42,17 @@ public class EntityRelation implements HasVersion, Serializable {
|
||||
public static final String CONTAINS_TYPE = "Contains";
|
||||
public static final String MANAGES_TYPE = "Manages";
|
||||
|
||||
@Setter
|
||||
private EntityId from;
|
||||
@Setter
|
||||
private EntityId to;
|
||||
@Setter
|
||||
@Length(fieldName = "type")
|
||||
private String type;
|
||||
@Setter
|
||||
private RelationTypeGroup typeGroup;
|
||||
@Getter
|
||||
@Setter
|
||||
private Long version;
|
||||
private transient JsonNode additionalInfo;
|
||||
@JsonIgnore
|
||||
@ -97,11 +107,6 @@ public class EntityRelation implements HasVersion, Serializable {
|
||||
return typeGroup;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Long getVersion() {
|
||||
return version;
|
||||
}
|
||||
|
||||
@Schema(description = "Additional parameters of the relation",implementation = com.fasterxml.jackson.databind.JsonNode.class)
|
||||
public JsonNode getAdditionalInfo() {
|
||||
return BaseDataWithAdditionalInfo.getJson(() -> additionalInfo, () -> additionalInfoBytes);
|
||||
|
||||
@ -156,8 +156,8 @@ public class BaseRelationService implements RelationService {
|
||||
log.trace("Executing saveRelation [{}]", relation);
|
||||
validate(relation);
|
||||
var result = relationDao.saveRelation(tenantId, relation);
|
||||
publishEvictEvent(EntityRelationEvent.from(relation));
|
||||
eventPublisher.publishEvent(new RelationActionEvent(tenantId, relation, ActionType.RELATION_ADD_OR_UPDATE));
|
||||
publishEvictEvent(EntityRelationEvent.from(result));
|
||||
eventPublisher.publishEvent(new RelationActionEvent(tenantId, result, ActionType.RELATION_ADD_OR_UPDATE));
|
||||
return result;
|
||||
}
|
||||
|
||||
@ -167,10 +167,11 @@ public class BaseRelationService implements RelationService {
|
||||
for (EntityRelation relation : relations) {
|
||||
validate(relation);
|
||||
}
|
||||
List<EntityRelation> savedRelations = new ArrayList<>(relations.size());
|
||||
for (List<EntityRelation> partition : Lists.partition(relations, 1024)) {
|
||||
relationDao.saveRelations(tenantId, partition);
|
||||
savedRelations.addAll(relationDao.saveRelations(tenantId, partition));
|
||||
}
|
||||
for (EntityRelation relation : relations) {
|
||||
for (EntityRelation relation : savedRelations) {
|
||||
publishEvictEvent(EntityRelationEvent.from(relation));
|
||||
eventPublisher.publishEvent(new RelationActionEvent(tenantId, relation, ActionType.RELATION_ADD_OR_UPDATE));
|
||||
}
|
||||
@ -182,8 +183,10 @@ public class BaseRelationService implements RelationService {
|
||||
validate(relation);
|
||||
var future = relationDao.saveRelationAsync(tenantId, relation);
|
||||
return Futures.transform(future, savedRelation -> {
|
||||
handleEvictEvent(EntityRelationEvent.from(relation));
|
||||
eventPublisher.publishEvent(new RelationActionEvent(tenantId, relation, ActionType.RELATION_ADD_OR_UPDATE));
|
||||
if (savedRelation != null) {
|
||||
handleEvictEvent(EntityRelationEvent.from(savedRelation));
|
||||
eventPublisher.publishEvent(new RelationActionEvent(tenantId, savedRelation, ActionType.RELATION_ADD_OR_UPDATE));
|
||||
}
|
||||
return savedRelation != null;
|
||||
}, MoreExecutors.directExecutor());
|
||||
}
|
||||
@ -194,8 +197,8 @@ public class BaseRelationService implements RelationService {
|
||||
validate(relation);
|
||||
var result = relationDao.deleteRelation(tenantId, relation);
|
||||
if (result != null) {
|
||||
publishEvictEvent(EntityRelationEvent.from(relation));
|
||||
eventPublisher.publishEvent(new RelationActionEvent(tenantId, relation, ActionType.RELATION_DELETED));
|
||||
publishEvictEvent(EntityRelationEvent.from(result));
|
||||
eventPublisher.publishEvent(new RelationActionEvent(tenantId, result, ActionType.RELATION_DELETED));
|
||||
}
|
||||
return result != null;
|
||||
}
|
||||
@ -207,15 +210,15 @@ public class BaseRelationService implements RelationService {
|
||||
var future = relationDao.deleteRelationAsync(tenantId, relation);
|
||||
return Futures.transform(future, deletedRelation -> {
|
||||
if (deletedRelation != null) {
|
||||
handleEvictEvent(EntityRelationEvent.from(relation));
|
||||
eventPublisher.publishEvent(new RelationActionEvent(tenantId, relation, ActionType.RELATION_DELETED));
|
||||
handleEvictEvent(EntityRelationEvent.from(deletedRelation));
|
||||
eventPublisher.publishEvent(new RelationActionEvent(tenantId, deletedRelation, ActionType.RELATION_DELETED));
|
||||
}
|
||||
return deletedRelation != null;
|
||||
}, MoreExecutors.directExecutor());
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean deleteRelation(TenantId tenantId, EntityId from, EntityId to, String relationType, RelationTypeGroup typeGroup) {
|
||||
public EntityRelation deleteRelation(TenantId tenantId, EntityId from, EntityId to, String relationType, RelationTypeGroup typeGroup) {
|
||||
log.trace("Executing deleteRelation [{}][{}][{}][{}]", from, to, relationType, typeGroup);
|
||||
validate(from, to, relationType, typeGroup);
|
||||
var result = relationDao.deleteRelation(tenantId, from, to, relationType, typeGroup);
|
||||
@ -223,7 +226,7 @@ public class BaseRelationService implements RelationService {
|
||||
publishEvictEvent(EntityRelationEvent.from(result));
|
||||
eventPublisher.publishEvent(new RelationActionEvent(tenantId, result, ActionType.RELATION_DELETED));
|
||||
}
|
||||
return result != null;
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user