|
|
|
@ -15,21 +15,27 @@ |
|
|
|
*/ |
|
|
|
package org.thingsboard.server.edge; |
|
|
|
|
|
|
|
import com.datastax.oss.driver.api.core.uuid.Uuids; |
|
|
|
import com.fasterxml.jackson.core.type.TypeReference; |
|
|
|
import com.google.protobuf.AbstractMessage; |
|
|
|
import com.fasterxml.jackson.databind.node.TextNode; |
|
|
|
import org.junit.Assert; |
|
|
|
import org.junit.Test; |
|
|
|
import org.thingsboard.common.util.JacksonUtil; |
|
|
|
import org.thingsboard.server.common.data.Device; |
|
|
|
import org.thingsboard.server.common.data.alarm.Alarm; |
|
|
|
import org.thingsboard.server.common.data.alarm.AlarmComment; |
|
|
|
import org.thingsboard.server.common.data.alarm.AlarmCommentInfo; |
|
|
|
import org.thingsboard.server.common.data.alarm.AlarmCommentType; |
|
|
|
import org.thingsboard.server.common.data.alarm.AlarmInfo; |
|
|
|
import org.thingsboard.server.common.data.alarm.AlarmSeverity; |
|
|
|
import org.thingsboard.server.common.data.alarm.AlarmStatus; |
|
|
|
import org.thingsboard.server.common.data.id.AlarmCommentId; |
|
|
|
import org.thingsboard.server.common.data.id.AlarmId; |
|
|
|
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.dao.service.DaoSqlTest; |
|
|
|
import org.thingsboard.server.gen.edge.v1.AlarmCommentUpdateMsg; |
|
|
|
import org.thingsboard.server.gen.edge.v1.AlarmUpdateMsg; |
|
|
|
import org.thingsboard.server.gen.edge.v1.UpdateMsgType; |
|
|
|
import org.thingsboard.server.gen.edge.v1.UplinkMsg; |
|
|
|
@ -38,8 +44,6 @@ import java.util.List; |
|
|
|
import java.util.Optional; |
|
|
|
import java.util.UUID; |
|
|
|
|
|
|
|
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; |
|
|
|
|
|
|
|
@DaoSqlTest |
|
|
|
public class AlarmEdgeTest extends AbstractEdgeTest { |
|
|
|
|
|
|
|
@ -77,66 +81,48 @@ public class AlarmEdgeTest extends AbstractEdgeTest { |
|
|
|
} |
|
|
|
|
|
|
|
@Test |
|
|
|
public void testAlarms() throws Exception { |
|
|
|
// create alarm
|
|
|
|
Device device = findDeviceByName("Edge Device 1"); |
|
|
|
Alarm alarm = new Alarm(); |
|
|
|
alarm.setOriginator(device.getId()); |
|
|
|
alarm.setType("alarm"); |
|
|
|
alarm.setSeverity(AlarmSeverity.CRITICAL); |
|
|
|
edgeImitator.expectMessageAmount(1); |
|
|
|
Alarm savedAlarm = doPost("/api/alarm", alarm, Alarm.class); |
|
|
|
Assert.assertTrue(edgeImitator.waitForMessages()); |
|
|
|
AbstractMessage latestMessage = edgeImitator.getLatestMessage(); |
|
|
|
Assert.assertTrue(latestMessage instanceof AlarmUpdateMsg); |
|
|
|
AlarmUpdateMsg alarmUpdateMsg = (AlarmUpdateMsg) latestMessage; |
|
|
|
Alarm alarmMsg = JacksonUtil.fromString(alarmUpdateMsg.getEntity(), Alarm.class, true); |
|
|
|
Assert.assertNotNull(alarmMsg); |
|
|
|
Assert.assertEquals(savedAlarm, alarmMsg); |
|
|
|
Assert.assertEquals(UpdateMsgType.ENTITY_CREATED_RPC_MESSAGE, alarmUpdateMsg.getMsgType()); |
|
|
|
|
|
|
|
// ack alarm
|
|
|
|
edgeImitator.expectMessageAmount(1); |
|
|
|
doPost("/api/alarm/" + savedAlarm.getUuidId() + "/ack"); |
|
|
|
Assert.assertTrue(edgeImitator.waitForMessages()); |
|
|
|
latestMessage = edgeImitator.getLatestMessage(); |
|
|
|
Assert.assertTrue(latestMessage instanceof AlarmUpdateMsg); |
|
|
|
alarmUpdateMsg = (AlarmUpdateMsg) latestMessage; |
|
|
|
Assert.assertEquals(UpdateMsgType.ALARM_ACK_RPC_MESSAGE, alarmUpdateMsg.getMsgType()); |
|
|
|
alarmMsg = JacksonUtil.fromString(alarmUpdateMsg.getEntity(), Alarm.class, true); |
|
|
|
Assert.assertNotNull(alarmMsg); |
|
|
|
Assert.assertEquals(savedAlarm.getType(), alarmMsg.getType()); |
|
|
|
Assert.assertEquals(savedAlarm.getName(), alarmMsg.getName()); |
|
|
|
Assert.assertEquals(AlarmStatus.ACTIVE_ACK, alarmMsg.getStatus()); |
|
|
|
|
|
|
|
// clear alarm
|
|
|
|
edgeImitator.expectMessageAmount(1); |
|
|
|
doPost("/api/alarm/" + savedAlarm.getUuidId() + "/clear"); |
|
|
|
Assert.assertTrue(edgeImitator.waitForMessages()); |
|
|
|
latestMessage = edgeImitator.getLatestMessage(); |
|
|
|
Assert.assertTrue(latestMessage instanceof AlarmUpdateMsg); |
|
|
|
alarmUpdateMsg = (AlarmUpdateMsg) latestMessage; |
|
|
|
Assert.assertEquals(UpdateMsgType.ALARM_CLEAR_RPC_MESSAGE, alarmUpdateMsg.getMsgType()); |
|
|
|
alarmMsg = JacksonUtil.fromString(alarmUpdateMsg.getEntity(), Alarm.class, true); |
|
|
|
Assert.assertNotNull(alarmMsg); |
|
|
|
Assert.assertEquals(savedAlarm.getType(), alarmMsg.getType()); |
|
|
|
Assert.assertEquals(savedAlarm.getName(), alarmMsg.getName()); |
|
|
|
Assert.assertEquals(AlarmStatus.CLEARED_ACK, alarmMsg.getStatus()); |
|
|
|
|
|
|
|
// delete alarm
|
|
|
|
edgeImitator.expectMessageAmount(1); |
|
|
|
doDelete("/api/alarm/" + savedAlarm.getUuidId()) |
|
|
|
.andExpect(status().isOk()); |
|
|
|
Assert.assertTrue(edgeImitator.waitForMessages()); |
|
|
|
latestMessage = edgeImitator.getLatestMessage(); |
|
|
|
Assert.assertTrue(latestMessage instanceof AlarmUpdateMsg); |
|
|
|
alarmUpdateMsg = (AlarmUpdateMsg) latestMessage; |
|
|
|
Assert.assertEquals(UpdateMsgType.ENTITY_DELETED_RPC_MESSAGE, alarmUpdateMsg.getMsgType()); |
|
|
|
alarmMsg = JacksonUtil.fromString(alarmUpdateMsg.getEntity(), Alarm.class, true); |
|
|
|
Assert.assertNotNull(alarmMsg); |
|
|
|
Assert.assertEquals(savedAlarm.getType(), alarmMsg.getType()); |
|
|
|
Assert.assertEquals(savedAlarm.getName(), alarmMsg.getName()); |
|
|
|
Assert.assertEquals(AlarmStatus.CLEARED_ACK, alarmMsg.getStatus()); |
|
|
|
public void testSendAlarmCommentToCloud() throws Exception { |
|
|
|
Device device = saveDeviceOnCloudAndVerifyDeliveryToEdge(); |
|
|
|
|
|
|
|
Alarm alarm = buildAlarmForUplinkMsg(device.getId()); |
|
|
|
|
|
|
|
UplinkMsg.Builder uplinkMsgBuilder = UplinkMsg.newBuilder(); |
|
|
|
AlarmUpdateMsg.Builder alarmUpdateMgBuilder = AlarmUpdateMsg.newBuilder(); |
|
|
|
alarmUpdateMgBuilder.setIdMSB(alarm.getUuidId().getMostSignificantBits()); |
|
|
|
alarmUpdateMgBuilder.setIdLSB(alarm.getUuidId().getLeastSignificantBits()); |
|
|
|
alarmUpdateMgBuilder.setEntity(JacksonUtil.toString(alarm)); |
|
|
|
testAutoGeneratedCodeByProtobuf(alarmUpdateMgBuilder); |
|
|
|
uplinkMsgBuilder.addAlarmUpdateMsg(alarmUpdateMgBuilder.build()); |
|
|
|
|
|
|
|
testAutoGeneratedCodeByProtobuf(uplinkMsgBuilder); |
|
|
|
|
|
|
|
edgeImitator.expectResponsesAmount(1); |
|
|
|
edgeImitator.sendUplinkMsg(uplinkMsgBuilder.build()); |
|
|
|
Assert.assertTrue(edgeImitator.waitForResponses()); |
|
|
|
|
|
|
|
AlarmComment alarmComment = buildAlarmCommentForUplinkMsg(alarm.getId()); |
|
|
|
|
|
|
|
uplinkMsgBuilder = UplinkMsg.newBuilder(); |
|
|
|
AlarmCommentUpdateMsg.Builder alarmCommentUpdateMgBuilder = AlarmCommentUpdateMsg.newBuilder(); |
|
|
|
alarmCommentUpdateMgBuilder.setEntity(JacksonUtil.toString(alarmComment)); |
|
|
|
alarmCommentUpdateMgBuilder.setMsgType(UpdateMsgType.ENTITY_CREATED_RPC_MESSAGE); |
|
|
|
testAutoGeneratedCodeByProtobuf(alarmCommentUpdateMgBuilder); |
|
|
|
uplinkMsgBuilder.addAlarmCommentUpdateMsg(alarmCommentUpdateMgBuilder.build()); |
|
|
|
|
|
|
|
testAutoGeneratedCodeByProtobuf(uplinkMsgBuilder); |
|
|
|
|
|
|
|
edgeImitator.expectResponsesAmount(1); |
|
|
|
edgeImitator.sendUplinkMsg(uplinkMsgBuilder.build()); |
|
|
|
Assert.assertTrue(edgeImitator.waitForResponses()); |
|
|
|
|
|
|
|
PageData<AlarmCommentInfo> pageData = doGetTyped("/api/alarm/" + alarmComment.getAlarmId().getId() + "/comment" + "?page=0&pageSize=1", new TypeReference<>() {}); |
|
|
|
Assert.assertNotNull("Found pageData is null", pageData); |
|
|
|
Assert.assertNotEquals("Expected alarms are not found!", 0, pageData.getTotalElements()); |
|
|
|
|
|
|
|
Assert.assertNotNull(pageData.getData().get(0)); |
|
|
|
AlarmCommentInfo alarmInfo = pageData.getData().get(0); |
|
|
|
Assert.assertEquals(alarm.getId(), alarmInfo.getAlarmId()); |
|
|
|
Assert.assertEquals(alarmComment.getAlarmId(), alarmInfo.getAlarmId()); |
|
|
|
} |
|
|
|
|
|
|
|
private Alarm buildAlarmForUplinkMsg(DeviceId deviceId) { |
|
|
|
@ -148,4 +134,16 @@ public class AlarmEdgeTest extends AbstractEdgeTest { |
|
|
|
alarm.setSeverity(AlarmSeverity.CRITICAL); |
|
|
|
return alarm; |
|
|
|
} |
|
|
|
|
|
|
|
private AlarmComment buildAlarmCommentForUplinkMsg(AlarmId alarmId) { |
|
|
|
UUID uuid = Uuids.timeBased(); |
|
|
|
AlarmComment alarmComment = new AlarmComment(); |
|
|
|
alarmComment.setAlarmId(alarmId); |
|
|
|
alarmComment.setType(AlarmCommentType.OTHER); |
|
|
|
alarmComment.setUserId(tenantAdminUserId); |
|
|
|
alarmComment.setId(new AlarmCommentId(uuid)); |
|
|
|
alarmComment.setComment(new TextNode("AlarmComment")); |
|
|
|
alarmComment.setCreatedTime(Uuids.unixTimestamp(uuid)); |
|
|
|
return alarmComment; |
|
|
|
} |
|
|
|
} |
|
|
|
|