4 changed files with 198 additions and 69 deletions
@ -0,0 +1,116 @@ |
|||||
|
/** |
||||
|
* Copyright © 2016-2023 The Thingsboard Authors |
||||
|
* |
||||
|
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||
|
* you may not use this file except in compliance with the License. |
||||
|
* You may obtain a copy of the License at |
||||
|
* |
||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
* |
||||
|
* Unless required by applicable law or agreed to in writing, software |
||||
|
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
|
* See the License for the specific language governing permissions and |
||||
|
* limitations under the License. |
||||
|
*/ |
||||
|
package org.thingsboard.server.service.ttl; |
||||
|
|
||||
|
import org.junit.BeforeClass; |
||||
|
import org.junit.Test; |
||||
|
import org.mockito.Mockito; |
||||
|
import org.slf4j.Logger; |
||||
|
import org.slf4j.LoggerFactory; |
||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||
|
import org.springframework.boot.test.mock.mockito.SpyBean; |
||||
|
import org.springframework.test.context.TestPropertySource; |
||||
|
import org.thingsboard.server.common.data.Device; |
||||
|
import org.thingsboard.server.common.data.alarm.Alarm; |
||||
|
import org.thingsboard.server.common.data.alarm.AlarmSeverity; |
||||
|
import org.thingsboard.server.common.data.id.AlarmId; |
||||
|
import org.thingsboard.server.controller.AbstractControllerTest; |
||||
|
import org.thingsboard.server.dao.alarm.AlarmDao; |
||||
|
import org.thingsboard.server.dao.alarm.AlarmService; |
||||
|
import org.thingsboard.server.dao.service.DaoSqlTest; |
||||
|
|
||||
|
import java.util.ArrayList; |
||||
|
import java.util.List; |
||||
|
import java.util.UUID; |
||||
|
import java.util.concurrent.TimeUnit; |
||||
|
|
||||
|
import static org.mockito.ArgumentMatchers.any; |
||||
|
import static org.mockito.ArgumentMatchers.eq; |
||||
|
import static org.mockito.ArgumentMatchers.startsWith; |
||||
|
import static org.mockito.Mockito.never; |
||||
|
import static org.mockito.Mockito.verify; |
||||
|
|
||||
|
@DaoSqlTest |
||||
|
@TestPropertySource(properties = { |
||||
|
"sql.ttl.alarms.removal_batch_size=5" |
||||
|
}) |
||||
|
public class AlarmsCleanUpServiceTest extends AbstractControllerTest { |
||||
|
|
||||
|
@Autowired |
||||
|
private AlarmsCleanUpService alarmsCleanUpService; |
||||
|
@SpyBean |
||||
|
private AlarmService alarmService; |
||||
|
@Autowired |
||||
|
private AlarmDao alarmDao; |
||||
|
|
||||
|
private static Logger cleanUpServiceLogger; |
||||
|
|
||||
|
@BeforeClass |
||||
|
public static void before() throws Exception { |
||||
|
cleanUpServiceLogger = Mockito.spy(LoggerFactory.getLogger(AlarmsCleanUpService.class)); |
||||
|
setStaticFinalFieldValue(AlarmsCleanUpService.class, "log", cleanUpServiceLogger); |
||||
|
} |
||||
|
|
||||
|
@Test |
||||
|
public void testAlarmsCleanUp() throws Exception { |
||||
|
int ttlDays = 1; |
||||
|
updateDefaultTenantProfile(profileConfiguration -> { |
||||
|
profileConfiguration.setAlarmsTtlDays(ttlDays); |
||||
|
}); |
||||
|
|
||||
|
loginTenantAdmin(); |
||||
|
Device device = createDevice("device_0", "device_0"); |
||||
|
int count = 100; |
||||
|
long ts = System.currentTimeMillis() - TimeUnit.DAYS.toMillis(ttlDays) - TimeUnit.MINUTES.toMillis(10); |
||||
|
List<AlarmId> outdatedAlarms = new ArrayList<>(); |
||||
|
List<AlarmId> freshAlarms = new ArrayList<>(); |
||||
|
for (int i = 0; i < count; i++) { |
||||
|
Alarm alarm = Alarm.builder() |
||||
|
.tenantId(tenantId) |
||||
|
.originator(device.getId()) |
||||
|
.cleared(false) |
||||
|
.acknowledged(false) |
||||
|
.severity(AlarmSeverity.CRITICAL) |
||||
|
.type("outdated_alarm_" + i) |
||||
|
.startTs(ts) |
||||
|
.endTs(ts) |
||||
|
.build(); |
||||
|
alarm.setId(new AlarmId(UUID.randomUUID())); |
||||
|
alarm.setCreatedTime(ts); |
||||
|
|
||||
|
outdatedAlarms.add(alarmDao.save(tenantId, alarm).getId()); |
||||
|
|
||||
|
alarm.setType("fresh_alarm_" + i); |
||||
|
alarm.setStartTs(System.currentTimeMillis()); |
||||
|
alarm.setEndTs(alarm.getStartTs()); |
||||
|
alarm.setId(new AlarmId(UUID.randomUUID())); |
||||
|
alarm.setCreatedTime(alarm.getStartTs()); |
||||
|
freshAlarms.add(alarmDao.save(tenantId, alarm).getId()); |
||||
|
} |
||||
|
|
||||
|
alarmsCleanUpService.cleanUp(); |
||||
|
|
||||
|
for (AlarmId outdatedAlarm : outdatedAlarms) { |
||||
|
verify(alarmService).delAlarm(eq(tenantId), eq(outdatedAlarm)); |
||||
|
} |
||||
|
for (AlarmId freshAlarm : freshAlarms) { |
||||
|
verify(alarmService, never()).delAlarm(eq(tenantId), eq(freshAlarm)); |
||||
|
} |
||||
|
|
||||
|
verify(cleanUpServiceLogger).info(startsWith("Removed {} outdated alarm"), eq((long) count), eq(tenantId), any()); |
||||
|
} |
||||
|
|
||||
|
} |
||||
Loading…
Reference in new issue