diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..2577e8e --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +ratelimiter/target/ +.vscode/ \ No newline at end of file diff --git a/ratelimiter/pom.xml b/ratelimiter/pom.xml new file mode 100644 index 0000000..f7b090f --- /dev/null +++ b/ratelimiter/pom.xml @@ -0,0 +1,25 @@ + + 4.0.0 + com.redislab.metering.ratelimiter + ratelimiter + jar + 1.0-SNAPSHOT + ratelimiter + http://maven.apache.org + + + junit + junit + 4.12 + test + + + redis.clients + jedis + 2.9.0 + jar + compile + + + diff --git a/src/com/redislabs/metering/ratelimiter/BurstyRateLimiter.java b/ratelimiter/src/main/java/com/redislab/metering/ratelimiter/BurstyRateLimiter.java similarity index 100% rename from src/com/redislabs/metering/ratelimiter/BurstyRateLimiter.java rename to ratelimiter/src/main/java/com/redislab/metering/ratelimiter/BurstyRateLimiter.java diff --git a/src/com/redislabs/metering/ratelimiter/RateLimiter.java b/ratelimiter/src/main/java/com/redislab/metering/ratelimiter/RateLimiter.java similarity index 100% rename from src/com/redislabs/metering/ratelimiter/RateLimiter.java rename to ratelimiter/src/main/java/com/redislab/metering/ratelimiter/RateLimiter.java diff --git a/src/com/redislabs/metering/ratelimiter/RateLimiterFactory.java b/ratelimiter/src/main/java/com/redislab/metering/ratelimiter/RateLimiterFactory.java similarity index 100% rename from src/com/redislabs/metering/ratelimiter/RateLimiterFactory.java rename to ratelimiter/src/main/java/com/redislab/metering/ratelimiter/RateLimiterFactory.java diff --git a/src/com/redislabs/metering/ratelimiter/RateLimiterMain.java b/ratelimiter/src/main/java/com/redislab/metering/ratelimiter/RateLimiterMain.java similarity index 100% rename from src/com/redislabs/metering/ratelimiter/RateLimiterMain.java rename to ratelimiter/src/main/java/com/redislab/metering/ratelimiter/RateLimiterMain.java diff --git a/src/com/redislabs/metering/ratelimiter/RedisConnection.java b/ratelimiter/src/main/java/com/redislab/metering/ratelimiter/RedisConnection.java similarity index 100% rename from src/com/redislabs/metering/ratelimiter/RedisConnection.java rename to ratelimiter/src/main/java/com/redislab/metering/ratelimiter/RedisConnection.java diff --git a/src/com/redislabs/metering/ratelimiter/SimpleCellRateLimiter.java b/ratelimiter/src/main/java/com/redislab/metering/ratelimiter/SimpleCellRateLimiter.java similarity index 100% rename from src/com/redislabs/metering/ratelimiter/SimpleCellRateLimiter.java rename to ratelimiter/src/main/java/com/redislab/metering/ratelimiter/SimpleCellRateLimiter.java diff --git a/src/com/redislabs/metering/ratelimiter/UniformRateLimiter.java b/ratelimiter/src/main/java/com/redislab/metering/ratelimiter/UniformRateLimiter.java similarity index 100% rename from src/com/redislabs/metering/ratelimiter/UniformRateLimiter.java rename to ratelimiter/src/main/java/com/redislab/metering/ratelimiter/UniformRateLimiter.java diff --git a/ratelimiter/src/test/java/com/redislab/metering/ratelimiter/RateLimiterTest.java b/ratelimiter/src/test/java/com/redislab/metering/ratelimiter/RateLimiterTest.java new file mode 100644 index 0000000..61bd555 --- /dev/null +++ b/ratelimiter/src/test/java/com/redislab/metering/ratelimiter/RateLimiterTest.java @@ -0,0 +1,87 @@ +package com.redislab.metering.ratelimiter; + +import java.util.Properties; + +import com.redislabs.metering.ratelimiter.RateLimiter; +import com.redislabs.metering.ratelimiter.RateLimiterFactory; + +import org.junit.Test; + +/** + * Unit test for simple App. + */ +public class RateLimiterTest { + @Test + public void genericCellRateLimiterTest() throws Exception { + Properties props = new Properties(); + + props.setProperty("type", "genericcell"); + props.setProperty("window", "3600"); + props.setProperty("actions", "3600"); + + RateLimiter rateLimiter = RateLimiterFactory.getRateLimiter(props); + + rateLimiter.arrival("test 1"); + rateLimiter.arrival("test 2"); + rateLimiter.arrival("test 3"); + rateLimiter.arrival("test 4"); + rateLimiter.arrival("test 5"); + rateLimiter.arrival("test 6"); + rateLimiter.arrival("test 7"); + rateLimiter.arrival("test 8"); + rateLimiter.arrival("test 9"); + rateLimiter.arrival("test 10"); + + } + + @Test + public void uniformRateLimiterTest() throws Exception { + Properties props = new Properties(); + + props.setProperty("type", "uniform"); + props.setProperty("window", "5"); + props.setProperty("actions", "2"); + + RateLimiter rateLimiter = RateLimiterFactory.getRateLimiter(props); + + boolean a = rateLimiter.arrival("test 1"); + System.out.println("Result 1: "+a); + + boolean b = rateLimiter.arrival("test 2"); + System.out.println("Result 2: "+b); + + boolean c = rateLimiter.arrival("test 3"); + System.out.println("Result 3: "+c); + + Thread.sleep(5000); + + boolean d = rateLimiter.arrival("test 4"); + System.out.println("Result 4: "+d); + + } + + @Test + public void burstyRateLimiterTest() throws Exception { + Properties props = new Properties(); + + props.setProperty("type", "allow_burst_traffic"); + props.setProperty("window", "5"); + props.setProperty("actions", "2"); + + RateLimiter rateLimiter = RateLimiterFactory.getRateLimiter(props); + + boolean a = rateLimiter.arrival("test 1"); + System.out.println("Result 1: "+a); + + boolean b = rateLimiter.arrival("test 2"); + System.out.println("Result 2: "+b); + + boolean c = rateLimiter.arrival("test 3"); + System.out.println("Result 3: "+c); + + Thread.sleep(5000); + + boolean d = rateLimiter.arrival("test 4"); + System.out.println("Result 4: "+d); + } +}