| | |
| | | package com.zy.core.thread.support; |
| | | |
| | | import com.zy.common.utils.RedisUtil; |
| | | import org.junit.jupiter.api.Test; |
| | | |
| | | import java.util.concurrent.atomic.AtomicLong; |
| | | |
| | | import static org.junit.jupiter.api.Assertions.assertFalse; |
| | | import static org.junit.jupiter.api.Assertions.assertTrue; |
| | | import static org.mockito.ArgumentMatchers.eq; |
| | | import static org.mockito.Mockito.mock; |
| | | import static org.mockito.Mockito.verify; |
| | | import static org.mockito.Mockito.when; |
| | | |
| | | class RecentStationArrivalTrackerTest { |
| | | |
| | | @Test |
| | | void hasRecentArrival_returnsTrueOnlyWithinRetentionWindow() { |
| | | AtomicLong now = new AtomicLong(1_000L); |
| | | RecentStationArrivalTracker tracker = new RecentStationArrivalTracker(1_000L, now::get); |
| | | void observe_writesRedisKeyOnlyOnFirstSightingOfLoadedTask() { |
| | | RedisUtil redisUtil = mock(RedisUtil.class); |
| | | RecentStationArrivalTracker tracker = new RecentStationArrivalTracker(redisUtil, 10_000L); |
| | | |
| | | tracker.record(12, 1001); |
| | | tracker.observe(12, 1001, true); |
| | | tracker.observe(12, 1001, true); |
| | | |
| | | verify(redisUtil).set(eq("station_recent_arrival_12_1001"), eq("1"), eq(10L)); |
| | | } |
| | | |
| | | @Test |
| | | void hasRecentArrival_returnsFalseAfterRedisKeyExpires() { |
| | | RedisUtil redisUtil = mock(RedisUtil.class); |
| | | RecentStationArrivalTracker tracker = new RecentStationArrivalTracker(redisUtil, 10_000L); |
| | | |
| | | when(redisUtil.get("station_recent_arrival_12_1001")).thenReturn(null); |
| | | assertFalse(tracker.hasRecentArrival(12, 1001)); |
| | | } |
| | | |
| | | @Test |
| | | void hasRecentArrival_returnsTrueWhenRedisKeyExists() { |
| | | RedisUtil redisUtil = mock(RedisUtil.class); |
| | | RecentStationArrivalTracker tracker = new RecentStationArrivalTracker(redisUtil, 10_000L); |
| | | |
| | | when(redisUtil.get("station_recent_arrival_12_1001")).thenReturn("1"); |
| | | |
| | | assertTrue(tracker.hasRecentArrival(12, 1001)); |
| | | |
| | | now.addAndGet(1_001L); |
| | | |
| | | assertFalse(tracker.hasRecentArrival(12, 1001)); |
| | | } |
| | | } |