|
|
|
@ -17,22 +17,27 @@ package org.thingsboard.server.actors.device; |
|
|
|
|
|
|
|
import org.junit.Before; |
|
|
|
import org.junit.Test; |
|
|
|
import org.mockito.Mockito; |
|
|
|
import org.thingsboard.common.util.LinkedHashMapRemoveEldest; |
|
|
|
import org.thingsboard.server.actors.ActorSystemContext; |
|
|
|
import org.thingsboard.server.common.data.id.DeviceId; |
|
|
|
import org.thingsboard.server.common.data.id.TenantId; |
|
|
|
import org.thingsboard.server.dao.device.DeviceService; |
|
|
|
import org.thingsboard.server.service.transport.TbCoreToTransportService; |
|
|
|
|
|
|
|
import java.util.UUID; |
|
|
|
|
|
|
|
import static org.hamcrest.CoreMatchers.instanceOf; |
|
|
|
import static org.hamcrest.CoreMatchers.is; |
|
|
|
import static org.hamcrest.CoreMatchers.notNullValue; |
|
|
|
import static org.hamcrest.MatcherAssert.assertThat; |
|
|
|
import static org.mockito.BDDMockito.willReturn; |
|
|
|
import static org.mockito.Mockito.RETURNS_DEEP_STUBS; |
|
|
|
import static org.mockito.Mockito.mock; |
|
|
|
|
|
|
|
public class DeviceActorMessageProcessorTest { |
|
|
|
|
|
|
|
public static final long MAX_CONCURRENT_SESSIONS_PER_DEVICE = 10L; |
|
|
|
public static final int MAX_CONCURRENT_SESSIONS_PER_DEVICE = 10; |
|
|
|
ActorSystemContext systemContext; |
|
|
|
DeviceService deviceService; |
|
|
|
TenantId tenantId = TenantId.SYS_TENANT_ID; |
|
|
|
@ -44,15 +49,38 @@ public class DeviceActorMessageProcessorTest { |
|
|
|
public void setUp() { |
|
|
|
systemContext = mock(ActorSystemContext.class); |
|
|
|
deviceService = mock(DeviceService.class); |
|
|
|
willReturn(MAX_CONCURRENT_SESSIONS_PER_DEVICE).given(systemContext).getMaxConcurrentSessionsPerDevice(); |
|
|
|
willReturn((long)MAX_CONCURRENT_SESSIONS_PER_DEVICE).given(systemContext).getMaxConcurrentSessionsPerDevice(); |
|
|
|
willReturn(deviceService).given(systemContext).getDeviceService(); |
|
|
|
processor = new DeviceActorMessageProcessor(systemContext, tenantId, deviceId); |
|
|
|
willReturn(mock(TbCoreToTransportService.class)).given(systemContext).getTbCoreToTransportService(); |
|
|
|
} |
|
|
|
|
|
|
|
@Test |
|
|
|
public void givenSystemContext_whenNewInstance_thenVerifySessionMapMaxSize() { |
|
|
|
assertThat(processor.sessions, instanceOf(LinkedHashMapRemoveEldest.class)); |
|
|
|
assertThat(processor.sessions.getMaxEntries(), is(MAX_CONCURRENT_SESSIONS_PER_DEVICE)); |
|
|
|
assertThat(processor.sessions.getMaxEntries(), is((long)MAX_CONCURRENT_SESSIONS_PER_DEVICE)); |
|
|
|
assertThat(processor.sessions.getRemovalConsumer(), notNullValue()); |
|
|
|
} |
|
|
|
|
|
|
|
@Test |
|
|
|
public void givenFullSessionMap_whenSessionOverflow_thenShouldDeleteAttributeAndRPCSubscriptions() { |
|
|
|
//givenFullSessionMap
|
|
|
|
for (int i = 0; i < MAX_CONCURRENT_SESSIONS_PER_DEVICE; i++) { |
|
|
|
UUID sessionID = UUID.randomUUID(); |
|
|
|
processor.sessions.put(sessionID, Mockito.mock(SessionInfoMetaData.class, RETURNS_DEEP_STUBS)); |
|
|
|
processor.attributeSubscriptions.put(sessionID, Mockito.mock(SessionInfo.class)); |
|
|
|
processor.rpcSubscriptions.put(sessionID, Mockito.mock(SessionInfo.class)); |
|
|
|
} |
|
|
|
assertThat(processor.sessions.size(), is(MAX_CONCURRENT_SESSIONS_PER_DEVICE)); |
|
|
|
assertThat(processor.attributeSubscriptions.size(), is(MAX_CONCURRENT_SESSIONS_PER_DEVICE)); |
|
|
|
assertThat(processor.rpcSubscriptions.size(), is(MAX_CONCURRENT_SESSIONS_PER_DEVICE)); |
|
|
|
|
|
|
|
//add one more
|
|
|
|
processor.sessions.put(UUID.randomUUID(), Mockito.mock(SessionInfoMetaData.class)); |
|
|
|
|
|
|
|
assertThat(processor.sessions.size(), is(MAX_CONCURRENT_SESSIONS_PER_DEVICE)); |
|
|
|
assertThat(processor.attributeSubscriptions.size(), is(MAX_CONCURRENT_SESSIONS_PER_DEVICE-1)); |
|
|
|
assertThat(processor.rpcSubscriptions.size(), is(MAX_CONCURRENT_SESSIONS_PER_DEVICE-1)); |
|
|
|
|
|
|
|
} |
|
|
|
} |