private TimeBucketMetadata getTimeBucket(double timestamp) { timeBucketsRWLock.readLock().lock(); try { double bucket = getBucketMapping(timestamp); if (!timeBucketsMap.containsKey(bucket)) { if (null == timeBucketsMap.putIfAbsent(bucket, new TimeBucketMetadata(bucket, bucket + timeBucketIntervalSec))) { timeBucketCount.incrementAndGet(); } } return timeBucketsMap.get(bucket); } finally { timeBucketsRWLock.readLock().unlock(); } }
@Test public void testTrackOnce() throws Exception { messageTracker.track(testTimestampInSec); ConcurrentMap<Double, TimeBucketMetadata> buckets = messageTracker.getTimeBucketsMap(); assertEquals(1, buckets.get(messageTracker.getBucketMapping(testTimestampInSec)).msgCount.get()); }
@Test public void testTrackMultiple() throws Exception { long totalMessages = 10; for (int i = 1; i <= totalMessages; i++) { messageTracker.track(testTimestampInSec + i); } ConcurrentMap<Double, TimeBucketMetadata> buckets = messageTracker.getTimeBucketsMap(); assertEquals(totalMessages, buckets.get(messageTracker.getBucketMapping(testTimestampInSec)).msgCount.get()); }
@Test public void testLastSeen() throws Exception { messageTracker.track(testTimestampInSec); ConcurrentMap<Double, TimeBucketMetadata> buckets = messageTracker.getTimeBucketsMap(); assertEquals(testTimestampInSec, buckets.get(messageTracker.getBucketMapping(testTimestampInSec)).lastMessageTimestampSeenInSec, 0.001); }
@Test public void testTrackReport() throws Exception { messageTracker.track(testTimestampInSec); ConcurrentMap<Double, TimeBucketMetadata> buckets = messageTracker.getTimeBucketsMap(); assertEquals(1, buckets.get(messageTracker.getBucketMapping(testTimestampInSec)).msgCount.get()); messageTracker.report(); buckets = messageTracker.getTimeBucketsMap(); assertEquals(0, buckets.size()); }