@ -18,6 +18,7 @@ package org.thingsboard.server.edge;
import com.datastax.oss.driver.api.core.uuid.Uuids ;
import com.fasterxml.jackson.core.type.TypeReference ;
import com.fasterxml.jackson.databind.node.TextNode ;
import com.google.protobuf.AbstractMessage ;
import org.junit.Assert ;
import org.junit.Test ;
import org.thingsboard.common.util.JacksonUtil ;
@ -44,6 +45,8 @@ 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 {
@ -80,6 +83,60 @@ public class AlarmEdgeTest extends AbstractEdgeTest {
Assert . assertEquals ( AlarmSeverity . CRITICAL , alarmInfo . getSeverity ( ) ) ;
}
@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 ) ;
Alarm savedAlarm = doPost ( "/api/alarm" , alarm , Alarm . class ) ;
// ack alarm
edgeImitator . expectMessageAmount ( 1 ) ;
doPost ( "/api/alarm/" + savedAlarm . getUuidId ( ) + "/ack" ) ;
Assert . assertTrue ( edgeImitator . waitForMessages ( ) ) ;
AbstractMessage latestMessage = edgeImitator . getLatestMessage ( ) ;
Assert . assertTrue ( latestMessage instanceof AlarmUpdateMsg ) ;
AlarmUpdateMsg alarmUpdateMsg = ( AlarmUpdateMsg ) latestMessage ;
Assert . assertEquals ( UpdateMsgType . ALARM_ACK_RPC_MESSAGE , alarmUpdateMsg . getMsgType ( ) ) ;
Alarm 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 ( ) ) ;
}
@Test
public void testSendAlarmCommentToCloud ( ) throws Exception {
Device device = saveDeviceOnCloudAndVerifyDeliveryToEdge ( ) ;
@ -125,6 +182,53 @@ public class AlarmEdgeTest extends AbstractEdgeTest {
Assert . assertEquals ( alarmComment . getAlarmId ( ) , alarmInfo . getAlarmId ( ) ) ;
}
@Test
public void testAlarmComments ( ) throws Exception {
Device device = findDeviceByName ( "Edge Device 1" ) ;
Alarm alarm = new Alarm ( ) ;
alarm . setOriginator ( device . getId ( ) ) ;
alarm . setType ( "alarm" ) ;
alarm . setSeverity ( AlarmSeverity . MINOR ) ;
Alarm savedAlarm = doPost ( "/api/alarm" , alarm , Alarm . class ) ;
// create alarm comment
edgeImitator . expectMessageAmount ( 1 ) ;
AlarmComment alarmComment = new AlarmComment ( ) ;
alarmComment . setComment ( new TextNode ( "Test" ) ) ;
alarmComment . setAlarmId ( savedAlarm . getId ( ) ) ;
alarmComment = doPost ( "/api/alarm/" + savedAlarm . getUuidId ( ) + "/comment" , alarmComment , AlarmComment . class ) ;
Assert . assertTrue ( edgeImitator . waitForMessages ( ) ) ;
AbstractMessage latestMessage = edgeImitator . getLatestMessage ( ) ;
AlarmCommentUpdateMsg alarmCommentUpdateMsg = ( AlarmCommentUpdateMsg ) latestMessage ;
Assert . assertEquals ( UpdateMsgType . ENTITY_CREATED_RPC_MESSAGE , alarmCommentUpdateMsg . getMsgType ( ) ) ;
AlarmComment alarmCommentMsg = JacksonUtil . fromString ( alarmCommentUpdateMsg . getEntity ( ) , AlarmComment . class , true ) ;
Assert . assertNotNull ( alarmCommentMsg ) ;
Assert . assertEquals ( alarmComment , alarmCommentMsg ) ;
// update alarm comment
edgeImitator . expectMessageAmount ( 1 ) ;
alarmComment . setComment ( JacksonUtil . newObjectNode ( ) . set ( "text" , new TextNode ( "Updated comment" ) ) ) ;
alarmComment = doPost ( "/api/alarm/" + savedAlarm . getUuidId ( ) + "/comment" , alarmComment , AlarmComment . class ) ;
Assert . assertTrue ( edgeImitator . waitForMessages ( ) ) ;
latestMessage = edgeImitator . getLatestMessage ( ) ;
alarmCommentUpdateMsg = ( AlarmCommentUpdateMsg ) latestMessage ;
Assert . assertEquals ( UpdateMsgType . ENTITY_UPDATED_RPC_MESSAGE , alarmCommentUpdateMsg . getMsgType ( ) ) ;
alarmCommentMsg = JacksonUtil . fromString ( alarmCommentUpdateMsg . getEntity ( ) , AlarmComment . class , true ) ;
Assert . assertNotNull ( alarmCommentMsg ) ;
Assert . assertEquals ( alarmComment , alarmCommentMsg ) ;
// delete alarm
edgeImitator . expectMessageAmount ( 1 ) ;
doDelete ( "/api/alarm/" + savedAlarm . getUuidId ( ) + "/comment/" + alarmComment . getUuidId ( ) )
. andExpect ( status ( ) . isOk ( ) ) ;
Assert . assertTrue ( edgeImitator . waitForMessages ( ) ) ;
latestMessage = edgeImitator . getLatestMessage ( ) ;
alarmCommentUpdateMsg = ( AlarmCommentUpdateMsg ) latestMessage ;
Assert . assertEquals ( UpdateMsgType . ENTITY_DELETED_RPC_MESSAGE , alarmCommentUpdateMsg . getMsgType ( ) ) ;
alarmCommentMsg = JacksonUtil . fromString ( alarmCommentUpdateMsg . getEntity ( ) , AlarmComment . class , true ) ;
Assert . assertNotNull ( alarmCommentMsg ) ;
}
private Alarm buildAlarmForUplinkMsg ( DeviceId deviceId ) {
Alarm alarm = new Alarm ( ) ;
alarm . setId ( new AlarmId ( UUID . randomUUID ( ) ) ) ;