tempDir.getAbsolutePath());
InMemoryStorageEngine<ByteArray, byte[], byte[]> inMemoryEngine = new InMemoryStorageEngine<ByteArray, byte[], byte[]>("inMemoryBackingStore");
QuotaLimitStats quotaStats = new QuotaLimitStats(null, 1000);
StatTrackingStore statTrackingStore = new StatTrackingStore(inMemoryEngine, null);
QuotaLimitingStore quotaLimitingStore = new QuotaLimitingStore(statTrackingStore,
statTrackingStore.getStats(),
quotaStats,
quotaStore);
int targetRate = 50;
// provide a quota of 100 gets/sec
quotaStore.put(new ByteArray(QuotaUtils.makeQuotaKey(statTrackingStore.getName(),
QuotaType.GET_THROUGHPUT).getBytes()),
new Versioned<byte[]>("100.0".getBytes()),
null);
long testIntervalMs = 5000;
long timeToSleepMs = 1000 / targetRate;
long startMs = System.currentTimeMillis();
ByteArray key = new ByteArray("some key".getBytes());
while((System.currentTimeMillis() - startMs) <= testIntervalMs) {
quotaLimitingStore.get(key, null);
Thread.sleep(timeToSleepMs);
}
assertEquals("No get operations should be throttled", 0, quotaStats.getRateLimitedGets());
assertEquals("Put usage should be 0", 0, quotaStats.getQuotaPctUsedPut());