@ -20,20 +20,25 @@ import org.junit.After;
import org.junit.Assert ;
import org.junit.Before ;
import org.junit.Test ;
import org.thingsboard.common.util.JacksonUtil ;
import org.thingsboard.server.common.data.Customer ;
import org.thingsboard.server.common.data.Device ;
import org.thingsboard.server.common.data.Tenant ;
import org.thingsboard.server.common.data.User ;
import org.thingsboard.server.common.data.alarm.Alarm ;
import org.thingsboard.server.common.data.alarm.AlarmCreateOrUpdateActiveRequest ;
import org.thingsboard.server.common.data.alarm.AlarmInfo ;
import org.thingsboard.server.common.data.alarm.AlarmPropagationInfo ;
import org.thingsboard.server.common.data.alarm.AlarmQuery ;
import org.thingsboard.server.common.data.alarm.AlarmSearchStatus ;
import org.thingsboard.server.common.data.alarm.AlarmSeverity ;
import org.thingsboard.server.common.data.alarm.AlarmStatus ;
import org.thingsboard.server.common.data.alarm.AlarmUpdateRequest ;
import org.thingsboard.server.common.data.asset.Asset ;
import org.thingsboard.server.common.data.id.AssetId ;
import org.thingsboard.server.common.data.id.CustomerId ;
import org.thingsboard.server.common.data.id.TenantId ;
import org.thingsboard.server.common.data.page.PageData ;
import org.thingsboard.server.common.data.page.PageLink ;
import org.thingsboard.server.common.data.page.SortOrder ;
import org.thingsboard.server.common.data.page.TimePageLink ;
import org.thingsboard.server.common.data.query.AlarmData ;
@ -45,8 +50,9 @@ import org.thingsboard.server.common.data.query.EntityKey;
import org.thingsboard.server.common.data.query.EntityKeyType ;
import org.thingsboard.server.common.data.relation.EntityRelation ;
import org.thingsboard.server.common.data.relation.RelationTypeGroup ;
import org.thingsboard.server.common.data.security.Authority ;
import org.thingsboard.server.dao.alarm.AlarmApiCallResult ;
import org.thingsboard.server.dao.alarm.AlarmOperationResult ;
import org.thingsboard.common.util.JacksonUtil ;
import java.util.Arrays ;
import java.util.Collections ;
@ -56,6 +62,11 @@ import java.util.concurrent.ExecutionException;
public abstract class BaseAlarmServiceTest extends AbstractServiceTest {
public static final String TEST_ALARM = "TEST_ALARM" ;
private static final String TEST_TENANT_EMAIL = "testtenant@thingsboard.org" ;
private static final String TEST_TENANT_FIRST_NAME = "testtenantfirstname" ;
private static final String TEST_TENANT_LAST_NAME = "testtenantlastname" ;
private TenantId tenantId ;
@Before
@ -83,12 +94,12 @@ public abstract class BaseAlarmServiceTest extends AbstractServiceTest {
Assert . assertTrue ( relationService . saveRelationAsync ( tenantId , relation ) . get ( ) ) ;
long ts = System . currentTimeMillis ( ) ;
Alarm alarm = Alarm . builder ( ) . tenantId ( tenantId ) . originator ( childId )
AlarmApiCallResult result = alarmService . createAlarm ( AlarmCreateOrUpdateActiveRequest . builder ( )
. tenantId ( tenantId )
. originator ( childId )
. type ( TEST_ALARM )
. severity ( AlarmSeverity . CRITICAL ) . status ( AlarmStatus . ACTIVE_UNACK )
. startTs ( ts ) . build ( ) ;
AlarmOperationResult result = alarmService . createOrUpdateAlarm ( alarm ) ;
. severity ( AlarmSeverity . CRITICAL )
. startTs ( ts ) . build ( ) ) ;
Alarm created = result . getAlarm ( ) ;
Assert . assertNotNull ( created ) ;
@ -107,7 +118,7 @@ public abstract class BaseAlarmServiceTest extends AbstractServiceTest {
Assert . assertEquals ( 0L , created . getAckTs ( ) ) ;
Assert . assertEquals ( 0L , created . getClearTs ( ) ) ;
Alarm fetched = alarmService . findAlarmByIdAsync ( tenantId , created . getId ( ) ) . get ( ) ;
Alarm fetched = alarmService . findAlarmInfo ById ( tenantId , created . getId ( ) ) ;
Assert . assertEquals ( created , fetched ) ;
}
@ -121,14 +132,13 @@ public abstract class BaseAlarmServiceTest extends AbstractServiceTest {
Assert . assertTrue ( relationService . saveRelationAsync ( tenantId , relation ) . get ( ) ) ;
long ts = System . currentTimeMillis ( ) ;
Alarm alarm = Alarm . builder ( ) . tenantId ( tenantId ) . originator ( childId )
AlarmApiCallResult result = alarmService . createAlarm ( AlarmCreateOrUpdateActiveRequest . builder ( )
. tenantId ( tenantId )
. originator ( childId )
. type ( TEST_ALARM )
. propagate ( false )
. severity ( AlarmSeverity . CRITICAL ) . status ( AlarmStatus . ACTIVE_UNACK )
. startTs ( ts ) . build ( ) ;
AlarmOperationResult result = alarmService . createOrUpdateAlarm ( alarm ) ;
Alarm created = result . getAlarm ( ) ;
. severity ( AlarmSeverity . CRITICAL )
. startTs ( ts ) . build ( ) ) ;
AlarmInfo created = result . getAlarm ( ) ;
// Check child relation
PageData < AlarmInfo > alarms = alarmService . findAlarms ( tenantId , AlarmQuery . builder ( )
@ -139,7 +149,7 @@ public abstract class BaseAlarmServiceTest extends AbstractServiceTest {
) . build ( ) ) . get ( ) ;
Assert . assertNotNull ( alarms . getData ( ) ) ;
Assert . assertEquals ( 1 , alarms . getData ( ) . size ( ) ) ;
Assert . assertEquals ( created , alarms . getData ( ) . get ( 0 ) ) ;
Assert . assertEquals ( created , new AlarmInfo ( alarms . getData ( ) . get ( 0 ) ) ) ;
// Check parent relation
alarms = alarmService . findAlarms ( tenantId , AlarmQuery . builder ( )
@ -152,7 +162,7 @@ public abstract class BaseAlarmServiceTest extends AbstractServiceTest {
Assert . assertEquals ( 0 , alarms . getData ( ) . size ( ) ) ;
created . setPropagate ( true ) ;
result = alarmService . createOrUpdate Alarm( created ) ;
result = alarmService . updateAlarm ( AlarmUpdateRequest . from Alarm( created ) ) ;
created = result . getAlarm ( ) ;
// Check child relation
@ -164,7 +174,7 @@ public abstract class BaseAlarmServiceTest extends AbstractServiceTest {
) . build ( ) ) . get ( ) ;
Assert . assertNotNull ( alarms . getData ( ) ) ;
Assert . assertEquals ( 1 , alarms . getData ( ) . size ( ) ) ;
Assert . assertEquals ( created , alarms . getData ( ) . get ( 0 ) ) ;
Assert . assertEquals ( created , new AlarmInfo ( alarms . getData ( ) . get ( 0 ) ) ) ;
// Check parent relation
alarms = alarmService . findAlarms ( tenantId , AlarmQuery . builder ( )
@ -175,10 +185,10 @@ public abstract class BaseAlarmServiceTest extends AbstractServiceTest {
) . build ( ) ) . get ( ) ;
Assert . assertNotNull ( alarms . getData ( ) ) ;
Assert . assertEquals ( 1 , alarms . getData ( ) . size ( ) ) ;
Assert . assertEquals ( created , alarms . getData ( ) . get ( 0 ) ) ;
Assert . assertEquals ( created , new AlarmInfo ( alarms . getData ( ) . get ( 0 ) ) ) ;
alarmService . ackAlarm ( tenantId , created . getId ( ) , System . currentTimeMillis ( ) ) . get ( ) ;
created = alarmService . findAlarmByIdAsync ( tenantId , created . getId ( ) ) . get ( ) ;
alarmService . acknowledge Alarm ( tenantId , created . getId ( ) , System . currentTimeMillis ( ) ) ;
created = alarmService . findAlarmInfo ById ( tenantId , created . getId ( ) ) ;
alarms = alarmService . findAlarms ( tenantId , AlarmQuery . builder ( )
. affectedEntityId ( childId )
@ -188,7 +198,7 @@ public abstract class BaseAlarmServiceTest extends AbstractServiceTest {
) . build ( ) ) . get ( ) ;
Assert . assertNotNull ( alarms . getData ( ) ) ;
Assert . assertEquals ( 1 , alarms . getData ( ) . size ( ) ) ;
Assert . assertEquals ( created , alarms . getData ( ) . get ( 0 ) ) ;
Assert . assertEquals ( created , new AlarmInfo ( alarms . getData ( ) . get ( 0 ) ) ) ;
// Check not existing relation
alarms = alarmService . findAlarms ( tenantId , AlarmQuery . builder ( )
@ -200,8 +210,8 @@ public abstract class BaseAlarmServiceTest extends AbstractServiceTest {
Assert . assertNotNull ( alarms . getData ( ) ) ;
Assert . assertEquals ( 0 , alarms . getData ( ) . size ( ) ) ;
alarmService . clearAlarm ( tenantId , created . getId ( ) , null , System . currentTimeMillis ( ) ) . get ( ) ;
created = alarmService . findAlarmByIdAsync ( tenantId , created . getId ( ) ) . get ( ) ;
alarmService . clearAlarm ( tenantId , created . getId ( ) , System . currentTimeMillis ( ) , null ) ;
created = alarmService . findAlarmInfo ById ( tenantId , created . getId ( ) ) ;
alarms = alarmService . findAlarms ( tenantId , AlarmQuery . builder ( )
. affectedEntityId ( childId )
@ -211,7 +221,77 @@ public abstract class BaseAlarmServiceTest extends AbstractServiceTest {
) . build ( ) ) . get ( ) ;
Assert . assertNotNull ( alarms . getData ( ) ) ;
Assert . assertEquals ( 1 , alarms . getData ( ) . size ( ) ) ;
Assert . assertEquals ( created , new AlarmInfo ( alarms . getData ( ) . get ( 0 ) ) ) ;
}
@Test
public void testFindAssignedAlarm ( ) throws ExecutionException , InterruptedException {
AssetId parentId = new AssetId ( Uuids . timeBased ( ) ) ;
AssetId childId = new AssetId ( Uuids . timeBased ( ) ) ;
EntityRelation relation = new EntityRelation ( parentId , childId , EntityRelation . CONTAINS_TYPE ) ;
Assert . assertTrue ( relationService . saveRelation ( tenantId , relation ) ) ;
long ts = System . currentTimeMillis ( ) ;
AlarmApiCallResult result = alarmService . createAlarm ( AlarmCreateOrUpdateActiveRequest . builder ( )
. tenantId ( tenantId )
. originator ( childId )
. type ( TEST_ALARM )
. severity ( AlarmSeverity . CRITICAL )
. startTs ( ts ) . build ( ) ) ;
AlarmInfo created = result . getAlarm ( ) ;
User tenantUser = new User ( ) ;
tenantUser . setTenantId ( tenantId ) ;
tenantUser . setAuthority ( Authority . TENANT_ADMIN ) ;
tenantUser . setEmail ( TEST_TENANT_EMAIL ) ;
tenantUser . setFirstName ( TEST_TENANT_FIRST_NAME ) ;
tenantUser . setLastName ( TEST_TENANT_LAST_NAME ) ;
tenantUser = userService . saveUser ( tenantUser ) ;
Assert . assertNotNull ( tenantUser ) ;
AlarmApiCallResult assignmentResult = alarmService . assignAlarm ( tenantId , created . getId ( ) , tenantUser . getId ( ) , ts ) ;
created = assignmentResult . getAlarm ( ) ;
PageData < AlarmInfo > alarms = alarmService . findAlarms ( tenantId , AlarmQuery . builder ( )
. assigneeId ( tenantUser . getId ( ) )
. fetchOriginator ( true )
. pageLink ( new TimePageLink ( 1 , 0 , "" ,
new SortOrder ( "createdTime" , SortOrder . Direction . DESC ) , 0L , System . currentTimeMillis ( ) )
) . build ( ) ) . get ( ) ;
Assert . assertNotNull ( alarms . getData ( ) ) ;
Assert . assertEquals ( 1 , alarms . getData ( ) . size ( ) ) ;
Assert . assertEquals ( created , alarms . getData ( ) . get ( 0 ) ) ;
AlarmDataPageLink pageLink = new AlarmDataPageLink ( ) ;
pageLink . setPage ( 0 ) ;
pageLink . setPageSize ( 10 ) ;
pageLink . setAssigneeId ( tenantUser . getId ( ) ) ;
PageData < AlarmData > assignedAlarms = alarmService . findAlarmDataByQueryForEntities ( tenantId , toQuery ( pageLink ) , Collections . singletonList ( created . getOriginator ( ) ) ) ;
Assert . assertNotNull ( assignedAlarms . getData ( ) ) ;
Assert . assertEquals ( 1 , assignedAlarms . getData ( ) . size ( ) ) ;
Assert . assertEquals ( created , new AlarmInfo ( assignedAlarms . getData ( ) . get ( 0 ) ) ) ;
User tenantUser2 = new User ( ) ;
tenantUser2 . setTenantId ( tenantId ) ;
tenantUser2 . setAuthority ( Authority . TENANT_ADMIN ) ;
tenantUser2 . setEmail ( 2 + TEST_TENANT_EMAIL ) ;
tenantUser2 . setFirstName ( TEST_TENANT_FIRST_NAME ) ;
tenantUser2 . setLastName ( TEST_TENANT_LAST_NAME ) ;
tenantUser2 = userService . saveUser ( tenantUser2 ) ;
Assert . assertNotNull ( tenantUser2 ) ;
pageLink . setAssigneeId ( tenantUser2 . getId ( ) ) ;
PageData < AlarmData > assignedToNonExistingUserAlarms = alarmService . findAlarmDataByQueryForEntities ( tenantId , toQuery ( pageLink ) , Collections . singletonList ( created . getOriginator ( ) ) ) ;
Assert . assertNotNull ( assignedToNonExistingUserAlarms . getData ( ) ) ;
Assert . assertTrue ( assignedToNonExistingUserAlarms . getData ( ) . isEmpty ( ) ) ;
}
@Test
@ -235,23 +315,23 @@ public abstract class BaseAlarmServiceTest extends AbstractServiceTest {
customerDevice = deviceService . saveDevice ( customerDevice ) ;
long ts = System . currentTimeMillis ( ) ;
Alarm tenantAlarm = Alarm . builder ( ) . tenantId ( tenantId )
AlarmApiCallResult result = alarmService . createAlarm ( AlarmCreateOrUpdateActiveRequest . builder ( )
. tenantId ( tenantId )
. originator ( tenantDevice . getId ( ) )
. type ( TEST_ALARM )
. propagate ( true )
. severity ( AlarmSeverity . CRITICAL ) . status ( AlarmStatus . ACTIVE_UNACK )
. startTs ( ts ) . build ( ) ;
AlarmOperationResult result = alarmService . createOrUpdateAlarm ( tenantAlarm ) ;
tenantAlarm = result . getAlarm ( ) ;
. severity ( AlarmSeverity . CRITICAL )
. propagation ( AlarmPropagationInfo . builder ( ) . propagate ( true ) . build ( ) )
. startTs ( ts ) . build ( ) ) ;
AlarmInfo tenantAlarm = result . getAlarm ( ) ;
Alarm deviceAlarm = Alarm . builder ( ) . tenantId ( tenantId )
result = alarmService . createAlarm ( AlarmCreateOrUpdateActiveRequest . builder ( )
. tenantId ( tenantId )
. originator ( customerDevice . getId ( ) )
. type ( TEST_ALARM )
. propagate ( true )
. severity ( AlarmSeverity . CRITICAL ) . status ( AlarmStatus . ACTIVE_UNACK )
. startTs ( ts ) . build ( ) ;
result = alarmService . createOrUpdateAlarm ( deviceAlarm ) ;
deviceAlarm = result . getAlarm ( ) ;
. severity ( AlarmSeverity . CRITICAL )
. propagation ( AlarmPropagationInfo . builder ( ) . propagate ( true ) . build ( ) )
. startTs ( ts ) . build ( ) ) ;
AlarmInfo deviceAlarm = result . getAlarm ( ) ;
AlarmDataPageLink pageLink = new AlarmDataPageLink ( ) ;
pageLink . setPage ( 0 ) ;
@ -269,7 +349,7 @@ public abstract class BaseAlarmServiceTest extends AbstractServiceTest {
PageData < AlarmData > customerAlarms = alarmService . findAlarmDataByQueryForEntities ( tenantId , toQuery ( pageLink ) , Collections . singletonList ( customerDevice . getId ( ) ) ) ;
Assert . assertEquals ( 1 , customerAlarms . getData ( ) . size ( ) ) ;
Assert . assertEquals ( deviceAlarm , customerAlarms . getData ( ) . get ( 0 ) ) ;
Assert . assertEquals ( deviceAlarm , new AlarmInfo ( customerAlarms . getData ( ) . get ( 0 ) ) ) ;
PageData < AlarmInfo > alarms = alarmService . findAlarms ( tenantId , AlarmQuery . builder ( )
. affectedEntityId ( tenantDevice . getId ( ) )
@ -279,7 +359,7 @@ public abstract class BaseAlarmServiceTest extends AbstractServiceTest {
) . build ( ) ) . get ( ) ;
Assert . assertNotNull ( alarms . getData ( ) ) ;
Assert . assertEquals ( 1 , alarms . getData ( ) . size ( ) ) ;
Assert . assertEquals ( tenantAlarm , alarms . getData ( ) . get ( 0 ) ) ;
Assert . assertEquals ( tenantAlarm , new AlarmInfo ( alarms . getData ( ) . get ( 0 ) ) ) ;
}
@Test
@ -311,23 +391,21 @@ public abstract class BaseAlarmServiceTest extends AbstractServiceTest {
relationService . saveRelation ( tenantId , relation ) ;
long ts = System . currentTimeMillis ( ) ;
Alarm tenantAlarm = Alarm . builder ( ) . tenantId ( tenantId )
alarmService . createAlarm ( AlarmCreateOrUpdateActiveRequest . builder ( )
. tenantId ( tenantId )
. originator ( tenantDevice . getId ( ) )
. type ( "Not Propagated" )
. propagate ( false )
. severity ( AlarmSeverity . CRITICAL ) . status ( AlarmStatus . ACTIVE_UNACK )
. startTs ( ts ) . build ( ) ;
AlarmOperationResult result = alarmService . createOrUpdateAlarm ( tenantAlarm ) ;
tenantAlarm = result . getAlarm ( ) ;
. severity ( AlarmSeverity . CRITICAL )
. startTs ( ts ) . build ( ) ) ;
Alarm customerAlarm = Alarm . builder ( ) . tenantId ( tenantId )
AlarmApiCallResult result = alarmService . createAlarm ( AlarmCreateOrUpdateActiveRequest . builder ( )
. tenantId ( tenantId )
. originator ( tenantDevice . getId ( ) )
. type ( "Propagated" )
. propagate ( true )
. severity ( AlarmSeverity . CRITICAL ) . status ( AlarmStatus . ACTIVE_UNACK )
. startTs ( ts ) . build ( ) ;
result = alarmService . createOrUpdateAlarm ( customerAlarm ) ;
customerAlarm = result . getAlarm ( ) ;
. severity ( AlarmSeverity . CRITICAL )
. propagation ( AlarmPropagationInfo . builder ( ) . propagate ( true ) . build ( ) )
. startTs ( ts ) . build ( ) ) ;
AlarmInfo customerAlarm = result . getAlarm ( ) ;
AlarmDataPageLink pageLink = new AlarmDataPageLink ( ) ;
pageLink . setPage ( 0 ) ;
@ -343,7 +421,7 @@ public abstract class BaseAlarmServiceTest extends AbstractServiceTest {
//TEST that propagated alarms are visible on the asset level.
PageData < AlarmData > customerAlarms = alarmService . findAlarmDataByQueryForEntities ( tenantId , toQuery ( pageLink ) , Collections . singletonList ( customerAsset . getId ( ) ) ) ;
Assert . assertEquals ( 1 , customerAlarms . getData ( ) . size ( ) ) ;
Assert . assertEquals ( customerAlarm , customerAlarms . getData ( ) . get ( 0 ) ) ;
Assert . assertEquals ( customerAlarm , new AlarmInfo ( customerAlarms . getData ( ) . get ( 0 ) ) ) ;
}
@Test
@ -361,24 +439,24 @@ public abstract class BaseAlarmServiceTest extends AbstractServiceTest {
device = deviceService . saveDevice ( device ) ;
long ts = System . currentTimeMillis ( ) ;
Alarm tenantAlarm = Alarm . builder ( ) . tenantId ( tenantId )
AlarmApiCallResult result = alarmService . createAlarm ( AlarmCreateOrUpdateActiveRequest . builder ( )
. tenantId ( tenantId )
. originator ( device . getId ( ) )
. type ( "Propagated To Tenant" )
. propagateToTenant ( true )
. severity ( AlarmSeverity . CRITICAL ) . status ( AlarmStatus . ACTIVE_UNACK )
. startTs ( ts ) . build ( ) ;
AlarmOperationResult result = alarmService . createOrUpdateAlarm ( tenantAlarm ) ;
tenantAlarm = result . getAlarm ( ) ;
. severity ( AlarmSeverity . CRITICAL )
. propagation ( AlarmPropagationInfo . builder ( ) . propagateToTenant ( true ) . build ( ) )
. startTs ( ts ) . build ( ) ) ;
AlarmInfo tenantAlarm = result . getAlarm ( ) ;
Alarm customerAlarm = Alarm . builder ( ) . tenantId ( tenantId )
result = alarmService . createAlarm ( AlarmCreateOrUpdateActiveRequest . builder ( )
. tenantId ( tenantId )
. originator ( device . getId ( ) )
. type ( "Propagated to Customer" )
. propagate ( false )
. propagateToOwner ( true )
. severity ( AlarmSeverity . CRITICAL ) . status ( AlarmStatus . ACTIVE_UNACK )
. startTs ( ts ) . build ( ) ;
result = alarmService . createOrUpdateAlarm ( customerAlarm ) ;
customerAlarm = result . getAlarm ( ) ;
. severity ( AlarmSeverity . CRITICAL )
. propagation ( AlarmPropagationInfo . builder ( ) . propagateToOwner ( true ) . build ( ) )
. startTs ( ts ) . build ( ) ) ;
AlarmInfo customerAlarm = result . getAlarm ( ) ;
AlarmDataPageLink pageLink = new AlarmDataPageLink ( ) ;
pageLink . setPage ( 0 ) ;
@ -389,24 +467,24 @@ public abstract class BaseAlarmServiceTest extends AbstractServiceTest {
pageLink . setEndTs ( System . currentTimeMillis ( ) ) ;
pageLink . setSearchPropagatedAlarms ( true ) ;
pageLink . setSeverityList ( Arrays . asList ( AlarmSeverity . CRITICAL , AlarmSeverity . WARNING ) ) ;
pageLink . setStatusList ( Arrays . as List( AlarmSearchStatus . ACTIVE ) ) ;
pageLink . setStatusList ( Collections . singleton List( AlarmSearchStatus . ACTIVE ) ) ;
//TEST that propagated alarms are visible on the asset level.
PageData < AlarmData > tenantAlarms = alarmService . findAlarmDataByQueryForEntities ( tenantId , toQuery ( pageLink ) , Collections . singletonList ( tenantId ) ) ;
Assert . assertEquals ( 1 , tenantAlarms . getData ( ) . size ( ) ) ;
Assert . assertEquals ( tenantAlarm , tenantAlarms . getData ( ) . get ( 0 ) ) ;
Assert . assertEquals ( tenantAlarm , new AlarmInfo ( tenantAlarms . getData ( ) . get ( 0 ) ) ) ;
//TEST that propagated alarms are visible on the asset level.
PageData < AlarmData > customerAlarms = alarmService . findAlarmDataByQueryForEntities ( tenantId , toQuery ( pageLink ) , Collections . singletonList ( customer . getId ( ) ) ) ;
Assert . assertEquals ( 1 , customerAlarms . getData ( ) . size ( ) ) ;
Assert . assertEquals ( customerAlarm , customerAlarms . getData ( ) . get ( 0 ) ) ;
Assert . assertEquals ( customerAlarm , new AlarmInfo ( customerAlarms . getData ( ) . get ( 0 ) ) ) ;
}
private AlarmDataQuery toQuery ( AlarmDataPageLink pageLink ) {
private AlarmDataQuery toQuery ( AlarmDataPageLink pageLink ) {
return toQuery ( pageLink , Collections . emptyList ( ) ) ;
}
private AlarmDataQuery toQuery ( AlarmDataPageLink pageLink , List < EntityKey > alarmFields ) {
private AlarmDataQuery toQuery ( AlarmDataPageLink pageLink , List < EntityKey > alarmFields ) {
return new AlarmDataQuery ( new DeviceTypeFilter ( ) , pageLink , null , null , null , alarmFields ) ;
}
@ -425,45 +503,41 @@ public abstract class BaseAlarmServiceTest extends AbstractServiceTest {
customerDevice = deviceService . saveDevice ( customerDevice ) ;
// no one alarms was created
Assert . assertNull ( alarmService . findHighestAlarmSeverity ( tenantId , customerDevice . getId ( ) , null , null ) ) ;
Assert . assertNull ( alarmService . findHighestAlarmSeverity ( tenantId , customerDevice . getId ( ) , null , null , null ) ) ;
Alarm alarm1 = Alarm . builder ( )
AlarmApiCallResult result = alarmService . createAlarm ( AlarmCreateOrUpdateActiveRequest . builder ( )
. tenantId ( tenantId )
. originator ( customerDevice . getId ( ) )
. type ( TEST_ALARM )
. severity ( AlarmSeverity . MAJOR )
. status ( AlarmStatus . ACTIVE_UNACK )
. startTs ( System . currentTimeMillis ( ) )
. build ( ) ;
alarm1 = alarmService . createOrUpdateAlarm ( alarm1 ) . getAlarm ( ) ;
alarmService . clearAlarm ( tenantId , alarm1 . getId ( ) , null , System . currentTimeMillis ( ) ) . get ( ) ;
. startTs ( System . currentTimeMillis ( ) ) . build ( ) ) ;
AlarmInfo alarm1 = result . getAlarm ( ) ;
alarmService . clearAlarm ( tenantId , alarm1 . getId ( ) , System . currentTimeMillis ( ) , null ) ;
Alarm alarm2 = Alarm . builder ( )
result = alarmService . createAlarm ( AlarmCreateOrUpdateActiveRequest . builder ( )
. tenantId ( tenantId )
. originator ( customerDevice . getId ( ) )
. type ( TEST_ALARM )
. severity ( AlarmSeverity . MINOR )
. status ( AlarmStatus . ACTIVE_ACK )
. startTs ( System . currentTimeMillis ( ) )
. build ( ) ;
alarm2 = alarmService . createOrUpdateAlarm ( alarm2 ) . getAlarm ( ) ;
alarmService . clearAlarm ( tenantId , alarm2 . getId ( ) , null , System . currentTimeMillis ( ) ) . get ( ) ;
. startTs ( System . currentTimeMillis ( ) ) . build ( ) ) ;
AlarmInfo alarm2 = result . getAlarm ( ) ;
alarmService . acknowledgeAlarm ( tenantId , alarm2 . getId ( ) , System . currentTimeMillis ( ) ) ;
alarmService . clearAlarm ( tenantId , alarm2 . getId ( ) , System . currentTimeMillis ( ) , null ) ;
Alarm alarm3 = Alarm . builder ( )
result = alarmService . createAlarm ( AlarmCreateOrUpdateActiveRequest . builder ( )
. tenantId ( tenantId )
. originator ( customerDevice . getId ( ) )
. type ( TEST_ALARM )
. severity ( AlarmSeverity . CRITICAL )
. status ( AlarmStatus . ACTIVE_ACK )
. startTs ( System . currentTimeMillis ( ) )
. build ( ) ;
alarm3 = alarmService . createOrUpdateAlarm ( alarm3 ) . getAlarm ( ) ;
Assert . assertEquals ( AlarmSeverity . MAJOR , alarmService . findHighestAlarmSeverity ( tenantId , customerDevice . getId ( ) , AlarmSearchStatus . UNACK , null ) ) ;
Assert . assertEquals ( AlarmSeverity . CRITICAL , alarmService . findHighestAlarmSeverity ( tenantId , customerDevice . getId ( ) , null , null ) ) ;
Assert . assertEquals ( AlarmSeverity . MAJOR , alarmService . findHighestAlarmSeverity ( tenantId , customerDevice . getId ( ) , null , AlarmStatus . CLEARED_UNACK ) ) ;
Assert . assertEquals ( AlarmSeverity . CRITICAL , alarmService . findHighestAlarmSeverity ( tenantId , customerDevice . getId ( ) , AlarmSearchStatus . ACTIVE , null ) ) ;
Assert . assertEquals ( AlarmSeverity . MINOR , alarmService . findHighestAlarmSeverity ( tenantId , customerDevice . getId ( ) , null , AlarmStatus . CLEARED_ACK ) ) ;
. startTs ( System . currentTimeMillis ( ) ) . build ( ) ) ;
AlarmInfo alarm3 = result . getAlarm ( ) ;
alarmService . acknowledgeAlarm ( tenantId , alarm3 . getId ( ) , System . currentTimeMillis ( ) ) ;
Assert . assertEquals ( AlarmSeverity . MAJOR , alarmService . findHighestAlarmSeverity ( tenantId , customerDevice . getId ( ) , AlarmSearchStatus . UNACK , null , null ) ) ;
Assert . assertEquals ( AlarmSeverity . CRITICAL , alarmService . findHighestAlarmSeverity ( tenantId , customerDevice . getId ( ) , null , null , null ) ) ;
Assert . assertEquals ( AlarmSeverity . MAJOR , alarmService . findHighestAlarmSeverity ( tenantId , customerDevice . getId ( ) , null , AlarmStatus . CLEARED_UNACK , null ) ) ;
Assert . assertEquals ( AlarmSeverity . CRITICAL , alarmService . findHighestAlarmSeverity ( tenantId , customerDevice . getId ( ) , AlarmSearchStatus . ACTIVE , null , null ) ) ;
Assert . assertEquals ( AlarmSeverity . MINOR , alarmService . findHighestAlarmSeverity ( tenantId , customerDevice . getId ( ) , null , AlarmStatus . CLEARED_ACK , null ) ) ;
}
@Test
@ -479,15 +553,13 @@ public abstract class BaseAlarmServiceTest extends AbstractServiceTest {
Assert . assertTrue ( relationService . saveRelationAsync ( tenantId , relation2 ) . get ( ) ) ;
long ts = System . currentTimeMillis ( ) ;
Alarm alarm = Alarm . builder ( ) . tenantId ( tenantId ) . originator ( childId )
AlarmApiCallResult result = alarmService . createAlarm ( AlarmCreateOrUpdateActiveRequest . builder ( )
. tenantId ( tenantId )
. originator ( childId )
. type ( TEST_ALARM )
. propagate ( false )
. severity ( AlarmSeverity . CRITICAL )
. status ( AlarmStatus . ACTIVE_UNACK )
. startTs ( ts ) . build ( ) ;
AlarmOperationResult result = alarmService . createOrUpdateAlarm ( alarm ) ;
Alarm created = result . getAlarm ( ) ;
. startTs ( ts ) . build ( ) ) ;
AlarmInfo created = result . getAlarm ( ) ;
AlarmDataPageLink pageLink = new AlarmDataPageLink ( ) ;
pageLink . setPage ( 0 ) ;
@ -504,7 +576,7 @@ public abstract class BaseAlarmServiceTest extends AbstractServiceTest {
Assert . assertNotNull ( alarms . getData ( ) ) ;
Assert . assertEquals ( 1 , alarms . getData ( ) . size ( ) ) ;
Assert . assertEquals ( created , alarms . getData ( ) . get ( 0 ) ) ;
Assert . assertEquals ( created , new AlarmInfo ( alarms . getData ( ) . get ( 0 ) ) ) ;
pageLink . setPage ( 0 ) ;
pageLink . setPageSize ( 10 ) ;
@ -519,17 +591,17 @@ public abstract class BaseAlarmServiceTest extends AbstractServiceTest {
alarms = alarmService . findAlarmDataByQueryForEntities ( tenantId , toQuery ( pageLink ) , Collections . singletonList ( childId ) ) ;
Assert . assertNotNull ( alarms . getData ( ) ) ;
Assert . assertEquals ( 1 , alarms . getData ( ) . size ( ) ) ;
Assert . assertEquals ( created , new Alarm ( alarms . getData ( ) . get ( 0 ) ) ) ;
Assert . assertEquals ( created , new AlarmInfo ( alarms . getData ( ) . get ( 0 ) ) ) ;
pageLink . setSearchPropagatedAlarms ( true ) ;
alarms = alarmService . findAlarmDataByQueryForEntities ( tenantId , toQuery ( pageLink ) , Collections . singletonList ( childId ) ) ;
Assert . assertNotNull ( alarms . getData ( ) ) ;
Assert . assertEquals ( 1 , alarms . getData ( ) . size ( ) ) ;
Assert . assertEquals ( created , new Alarm ( alarms . getData ( ) . get ( 0 ) ) ) ;
Assert . assertEquals ( created , new AlarmInfo ( alarms . getData ( ) . get ( 0 ) ) ) ;
// Check child relation
created . setPropagate ( true ) ;
result = alarmService . createOrUpdate Alarm( created ) ;
result = alarmService . updateAlarm ( AlarmUpdateRequest . from Alarm( created ) ) ;
created = result . getAlarm ( ) ;
// Check child relation
@ -546,7 +618,7 @@ public abstract class BaseAlarmServiceTest extends AbstractServiceTest {
alarms = alarmService . findAlarmDataByQueryForEntities ( tenantId , toQuery ( pageLink ) , Collections . singletonList ( childId ) ) ;
Assert . assertNotNull ( alarms . getData ( ) ) ;
Assert . assertEquals ( 1 , alarms . getData ( ) . size ( ) ) ;
Assert . assertEquals ( created , alarms . getData ( ) . get ( 0 ) ) ;
Assert . assertEquals ( created , new AlarmInfo ( alarms . getData ( ) . get ( 0 ) ) ) ;
// Check parent relation
pageLink . setPage ( 0 ) ;
@ -562,37 +634,40 @@ public abstract class BaseAlarmServiceTest extends AbstractServiceTest {
alarms = alarmService . findAlarmDataByQueryForEntities ( tenantId , toQuery ( pageLink ) , Collections . singletonList ( parentId ) ) ;
Assert . assertNotNull ( alarms . getData ( ) ) ;
Assert . assertEquals ( 1 , alarms . getData ( ) . size ( ) ) ;
Assert . assertEquals ( created , alarms . getData ( ) . get ( 0 ) ) ;
Assert . assertEquals ( created , new AlarmInfo ( alarms . getData ( ) . get ( 0 ) ) ) ;
PageData < AlarmInfo > alarmsInfoData = alarmService . findAlarms ( tenantId , AlarmQuery . builder ( )
. affectedEntityId ( childId )
. fetchOriginator ( true )
. status ( AlarmStatus . ACTIVE_UNACK ) . pageLink (
new TimePageLink ( 10 , 0 , "" ,
new SortOrder ( "createdTime" , SortOrder . Direction . DESC ) , 0L , System . currentTimeMillis ( ) )
) . build ( ) ) . get ( ) ;
Assert . assertNotNull ( alarmsInfoData . getData ( ) ) ;
Assert . assertEquals ( 1 , alarmsInfoData . getData ( ) . size ( ) ) ;
Assert . assertEquals ( created , alarmsInfoData . getData ( ) . get ( 0 ) ) ;
Assert . assertEquals ( created , new AlarmInfo ( alarmsInfoData . getData ( ) . get ( 0 ) ) ) ;
alarmsInfoData = alarmService . findAlarms ( tenantId , AlarmQuery . builder ( )
. affectedEntityId ( parentId )
. fetchOriginator ( true )
. status ( AlarmStatus . ACTIVE_UNACK ) . pageLink (
new TimePageLink ( 10 , 0 , "" ,
new SortOrder ( "createdTime" , SortOrder . Direction . DESC ) , 0L , System . currentTimeMillis ( ) )
) . build ( ) ) . get ( ) ;
Assert . assertNotNull ( alarmsInfoData . getData ( ) ) ;
Assert . assertEquals ( 1 , alarmsInfoData . getData ( ) . size ( ) ) ;
Assert . assertEquals ( created , alarmsInfoData . getData ( ) . get ( 0 ) ) ;
Assert . assertEquals ( created , new AlarmInfo ( alarmsInfoData . getData ( ) . get ( 0 ) ) ) ;
alarmsInfoData = alarmService . findAlarms ( tenantId , AlarmQuery . builder ( )
. affectedEntityId ( parentId2 )
. fetchOriginator ( true )
. status ( AlarmStatus . ACTIVE_UNACK ) . pageLink (
new TimePageLink ( 10 , 0 , "" ,
new SortOrder ( "createdTime" , SortOrder . Direction . DESC ) , 0L , System . currentTimeMillis ( ) )
) . build ( ) ) . get ( ) ;
Assert . assertNotNull ( alarmsInfoData . getData ( ) ) ;
Assert . assertEquals ( 1 , alarmsInfoData . getData ( ) . size ( ) ) ;
Assert . assertEquals ( created , alarmsInfoData . getData ( ) . get ( 0 ) ) ;
Assert . assertEquals ( created , new AlarmInfo ( alarmsInfoData . getData ( ) . get ( 0 ) ) ) ;
pageLink . setPage ( 0 ) ;
pageLink . setPageSize ( 10 ) ;
@ -607,10 +682,9 @@ public abstract class BaseAlarmServiceTest extends AbstractServiceTest {
alarms = alarmService . findAlarmDataByQueryForEntities ( tenantId , toQuery ( pageLink ) , Collections . singletonList ( parentId ) ) ;
Assert . assertNotNull ( alarms . getData ( ) ) ;
Assert . assertEquals ( 1 , alarms . getData ( ) . size ( ) ) ;
Assert . assertEquals ( created , alarms . getData ( ) . get ( 0 ) ) ;
Assert . assertEquals ( created , new AlarmInfo ( alarms . getData ( ) . get ( 0 ) ) ) ;
alarmService . ackAlarm ( tenantId , created . getId ( ) , System . currentTimeMillis ( ) ) . get ( ) ;
created = alarmService . findAlarmByIdAsync ( tenantId , created . getId ( ) ) . get ( ) ;
created = alarmService . acknowledgeAlarm ( tenantId , created . getId ( ) , System . currentTimeMillis ( ) ) . getAlarm ( ) ;
pageLink . setPage ( 0 ) ;
pageLink . setPageSize ( 10 ) ;
@ -625,7 +699,7 @@ public abstract class BaseAlarmServiceTest extends AbstractServiceTest {
alarms = alarmService . findAlarmDataByQueryForEntities ( tenantId , toQuery ( pageLink ) , Collections . singletonList ( childId ) ) ;
Assert . assertNotNull ( alarms . getData ( ) ) ;
Assert . assertEquals ( 1 , alarms . getData ( ) . size ( ) ) ;
Assert . assertEquals ( created , alarms . getData ( ) . get ( 0 ) ) ;
Assert . assertEquals ( created , new AlarmInfo ( alarms . getData ( ) . get ( 0 ) ) ) ;
}
@Test
@ -635,17 +709,17 @@ public abstract class BaseAlarmServiceTest extends AbstractServiceTest {
EntityRelation relation = new EntityRelation ( parentId , childId , EntityRelation . CONTAINS_TYPE ) ;
Assert . assertTrue ( relationService . saveRelationAsync ( tenantId , relation ) . get ( ) ) ;
Assert . assertTrue ( relationService . saveRelation ( tenantId , relation ) ) ;
long ts = System . currentTimeMillis ( ) ;
Alarm alarm = Alarm . builder ( ) . tenantId ( tenantId ) . originator ( childId )
AlarmApiCallResult result = alarmService . createAlarm ( AlarmCreateOrUpdateActiveRequest . builder ( )
. tenantId ( tenantId )
. originator ( childId )
. type ( TEST_ALARM )
. propagate ( true )
. severity ( AlarmSeverity . CRITICAL ) . status ( AlarmStatus . ACTIVE_UNACK )
. startTs ( ts ) . build ( ) ;
AlarmOperationResult result = alarmService . createOrUpdateAlarm ( alarm ) ;
Alarm created = result . getAlarm ( ) ;
. severity ( AlarmSeverity . CRITICAL )
. propagation ( AlarmPropagationInfo . builder ( ) . propagate ( true ) . build ( ) )
. startTs ( ts ) . build ( ) ) ;
AlarmInfo created = result . getAlarm ( ) ;
PageData < AlarmInfo > alarms = alarmService . findAlarms ( tenantId , AlarmQuery . builder ( )
. affectedEntityId ( childId )
@ -655,7 +729,7 @@ public abstract class BaseAlarmServiceTest extends AbstractServiceTest {
) . build ( ) ) . get ( ) ;
Assert . assertNotNull ( alarms . getData ( ) ) ;
Assert . assertEquals ( 1 , alarms . getData ( ) . size ( ) ) ;
Assert . assertEquals ( created , alarms . getData ( ) . get ( 0 ) ) ;
Assert . assertEquals ( created , new AlarmInfo ( alarms . getData ( ) . get ( 0 ) ) ) ;
// Check parent relation
alarms = alarmService . findAlarms ( tenantId , AlarmQuery . builder ( )
@ -666,7 +740,7 @@ public abstract class BaseAlarmServiceTest extends AbstractServiceTest {
) . build ( ) ) . get ( ) ;
Assert . assertNotNull ( alarms . getData ( ) ) ;
Assert . assertEquals ( 1 , alarms . getData ( ) . size ( ) ) ;
Assert . assertEquals ( created , alarms . getData ( ) . get ( 0 ) ) ;
Assert . assertEquals ( created , new AlarmInfo ( alarms . getData ( ) . get ( 0 ) ) ) ;
Assert . assertTrue ( "Alarm was not deleted when expected" , alarmService . deleteAlarm ( tenantId , created . getId ( ) ) . isSuccessful ( ) ) ;