4 changed files with 228 additions and 46 deletions
@ -0,0 +1,141 @@ |
|||
/** |
|||
* Copyright © 2016-2024 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.dao.audit; |
|||
|
|||
import org.junit.jupiter.api.Test; |
|||
import org.junit.jupiter.api.extension.ExtendWith; |
|||
import org.mockito.ArgumentCaptor; |
|||
import org.mockito.InjectMocks; |
|||
import org.mockito.Mock; |
|||
import org.mockito.junit.jupiter.MockitoExtension; |
|||
import org.thingsboard.common.util.JacksonUtil; |
|||
import org.thingsboard.server.common.data.alarm.Alarm; |
|||
import org.thingsboard.server.common.data.alarm.AlarmComment; |
|||
import org.thingsboard.server.common.data.alarm.AlarmInfo; |
|||
import org.thingsboard.server.common.data.audit.ActionType; |
|||
import org.thingsboard.server.common.data.audit.AuditLog; |
|||
import org.thingsboard.server.common.data.id.AlarmId; |
|||
import org.thingsboard.server.common.data.id.CustomerId; |
|||
import org.thingsboard.server.common.data.id.DeviceId; |
|||
import org.thingsboard.server.common.data.id.TenantId; |
|||
import org.thingsboard.server.common.data.id.UserId; |
|||
import org.thingsboard.server.dao.audit.sink.AuditLogSink; |
|||
import org.thingsboard.server.dao.entity.EntityService; |
|||
import org.thingsboard.server.dao.service.validator.AuditLogDataValidator; |
|||
import org.thingsboard.server.dao.sql.JpaExecutorService; |
|||
|
|||
import java.util.UUID; |
|||
import java.util.concurrent.Callable; |
|||
|
|||
import static org.assertj.core.api.Assertions.assertThat; |
|||
import static org.mockito.ArgumentMatchers.any; |
|||
import static org.mockito.ArgumentMatchers.eq; |
|||
import static org.mockito.BDDMockito.given; |
|||
import static org.mockito.BDDMockito.never; |
|||
import static org.mockito.BDDMockito.then; |
|||
|
|||
@ExtendWith(MockitoExtension.class) |
|||
public class AuditLogServiceImplTest { |
|||
|
|||
private final TenantId TENANT_ID = TenantId.fromUUID(UUID.fromString("9114e9ac-6c28-4019-a2a7-b948cb9500d5")); |
|||
private final CustomerId CUSTOMER_ID = new CustomerId(UUID.fromString("d15822ef-09eb-49a6-9068-21b9c8ae3356")); |
|||
private final UserId USER_ID = new UserId(UUID.fromString("47a2c904-3a47-4530-91bb-51068a4610a7")); |
|||
private final DeviceId DEVICE_ID = new DeviceId(UUID.fromString("b913c12a-9942-4cbd-9481-c42dad4831b0")); |
|||
|
|||
private final String USER_NAME = "Test User"; |
|||
|
|||
@InjectMocks |
|||
private AuditLogServiceImpl auditLogService; |
|||
@Mock |
|||
private EntityService entityService; |
|||
@Mock |
|||
private AuditLogLevelFilter auditLogLevelFilter; |
|||
@Mock |
|||
private AuditLogDataValidator auditLogDataValidator; |
|||
@Mock |
|||
private JpaExecutorService executor; |
|||
@Mock |
|||
private AuditLogDao auditLogDao; |
|||
@Mock |
|||
private AuditLogSink auditLogSink; |
|||
|
|||
@Test |
|||
public void givenEntityIsNull_whenLogEntityAction_thenShouldFetchEntityName() { |
|||
// GIVEN
|
|||
given(auditLogLevelFilter.logEnabled(any(), any())).willReturn(true); |
|||
|
|||
// WHEN
|
|||
auditLogService.logEntityAction(TENANT_ID, CUSTOMER_ID, USER_ID, USER_NAME, DEVICE_ID, null, ActionType.ADDED, null); |
|||
|
|||
// THEN
|
|||
then(entityService).should().fetchEntityName(TENANT_ID, DEVICE_ID); |
|||
} |
|||
|
|||
@Test |
|||
public void givenActionTypeIsAlarmActionAndEntityIsAlarm_whenLogEntityAction_thenShouldGetEntityName() throws Exception { |
|||
// GIVEN
|
|||
given(auditLogLevelFilter.logEnabled(any(), any())).willReturn(true); |
|||
Alarm alarm = new Alarm(new AlarmId(UUID.fromString("55f577b3-6ef5-4b99-92dc-70eb78b2a970"))); |
|||
alarm.setType("Test Alarm"); |
|||
AlarmComment comment = new AlarmComment(); |
|||
comment.setComment(JacksonUtil.toJsonNode("{\"comment\": \"test\"}")); |
|||
|
|||
// WHEN
|
|||
auditLogService.logEntityAction(TENANT_ID, CUSTOMER_ID, USER_ID, USER_NAME, alarm.getId(), alarm, ActionType.ADDED_COMMENT, null, comment); |
|||
|
|||
// THEN
|
|||
then(entityService).should(never()).fetchEntityName(any(), any()); |
|||
ArgumentCaptor<Callable> submitTask = ArgumentCaptor.forClass(Callable.class); |
|||
then(executor).should().submit(submitTask.capture()); |
|||
submitTask.getValue().call(); |
|||
ArgumentCaptor<AuditLog> auditLogEntry = ArgumentCaptor.forClass(AuditLog.class); |
|||
then(auditLogDao).should().save(eq(TENANT_ID), auditLogEntry.capture()); |
|||
assertThat(auditLogEntry.getValue().getEntityName()).isEqualTo("Test Alarm"); |
|||
} |
|||
|
|||
@Test |
|||
public void givenActionTypeIsAlarmActionAndEntityIsAlarmInfo_whenLogEntityAction_thenShouldGetEntityOriginatorName() throws Exception { |
|||
// GIVEN
|
|||
given(auditLogLevelFilter.logEnabled(any(), any())).willReturn(true); |
|||
AlarmInfo alarmInfo = new AlarmInfo(); |
|||
alarmInfo.setOriginatorName("Test Device"); |
|||
|
|||
// WHEN
|
|||
auditLogService.logEntityAction(TENANT_ID, CUSTOMER_ID, USER_ID, USER_NAME, DEVICE_ID, alarmInfo, ActionType.ALARM_ASSIGNED, null); |
|||
|
|||
// THEN
|
|||
then(entityService).should(never()).fetchEntityName(any(), any()); |
|||
ArgumentCaptor<Callable> submitTask = ArgumentCaptor.forClass(Callable.class); |
|||
then(executor).should().submit(submitTask.capture()); |
|||
submitTask.getValue().call(); |
|||
ArgumentCaptor<AuditLog> auditLogEntry = ArgumentCaptor.forClass(AuditLog.class); |
|||
then(auditLogDao).should().save(eq(TENANT_ID), auditLogEntry.capture()); |
|||
assertThat(auditLogEntry.getValue().getEntityName()).isEqualTo("Test Device"); |
|||
} |
|||
|
|||
@Test |
|||
public void givenActionTypeIsAlarmActionAndEntityIsAlarm_whenLogEntityAction_thenShouldFetchEntityName() { |
|||
// GIVEN
|
|||
given(auditLogLevelFilter.logEnabled(any(), any())).willReturn(true); |
|||
|
|||
// WHEN
|
|||
auditLogService.logEntityAction(TENANT_ID, CUSTOMER_ID, USER_ID, USER_NAME, DEVICE_ID, new Alarm(), ActionType.ALARM_DELETE, null); |
|||
|
|||
// THEN
|
|||
then(entityService).should().fetchEntityName(TENANT_ID, DEVICE_ID); |
|||
} |
|||
|
|||
} |
|||
Loading…
Reference in new issue