committed by
Andrew Shvayka
2 changed files with 51 additions and 0 deletions
@ -0,0 +1,46 @@ |
|||
package org.thingsboard.server.transport.mqtt.session; |
|||
|
|||
import org.junit.Test; |
|||
|
|||
import java.util.WeakHashMap; |
|||
import java.util.concurrent.ConcurrentMap; |
|||
import java.util.concurrent.TimeUnit; |
|||
import java.util.concurrent.locks.Lock; |
|||
import java.util.concurrent.locks.ReentrantLock; |
|||
|
|||
import static org.awaitility.Awaitility.await; |
|||
import static org.junit.Assert.assertTrue; |
|||
import static org.mockito.BDDMockito.willCallRealMethod; |
|||
import static org.mockito.Mockito.mock; |
|||
|
|||
public class GatewaySessionHandlerTest { |
|||
|
|||
@Test |
|||
public void givenWeakHashMap_WhenGC_thenMapIsEmpty() { |
|||
WeakHashMap<String, Lock> map = new WeakHashMap<>(); |
|||
|
|||
String deviceName = new String("device"); //constants are static and doesn't affected by GC, so use new instead
|
|||
map.put(deviceName, new ReentrantLock()); |
|||
assertTrue(map.containsKey(deviceName)); |
|||
|
|||
deviceName = null; |
|||
System.gc(); |
|||
|
|||
await().atMost(10, TimeUnit.SECONDS).until(() -> !map.containsKey("device")); |
|||
} |
|||
|
|||
@Test |
|||
public void givenConcurrentReferenceHashMap_WhenGC_thenMapIsEmpty() { |
|||
GatewaySessionHandler gsh = mock(GatewaySessionHandler.class); |
|||
willCallRealMethod().given(gsh).createWeakMap(); |
|||
|
|||
ConcurrentMap<String, Lock> map = gsh.createWeakMap(); |
|||
map.put("device", new ReentrantLock()); |
|||
assertTrue(map.containsKey("device")); |
|||
|
|||
System.gc(); |
|||
|
|||
await().atMost(10, TimeUnit.SECONDS).until(() -> !map.containsKey("device")); |
|||
} |
|||
|
|||
} |
|||
Loading…
Reference in new issue