package redis; import java.io.ByteArrayOutputStream; import java.io.IOException; import com.google.common.base.Charsets; import org.jboss.netty.buffer.ChannelBuffer; import org.jboss.netty.buffer.ChannelBuffers; import org.junit.Test; import redis.netty.BulkReply; import redis.netty.MultiBulkReply; import redis.netty.RedisDecoder; import redis.netty.Reply; import static junit.framework.Assert.assertEquals; import static redis.util.Encoding.numToBytes; /** * Some low level tests */ public class CommandTest { @Test public void testNumToBytes() { assertEquals("-12345678", new String(numToBytes(-12345678, false))); assertEquals("-1", new String(numToBytes(-1, false))); assertEquals("0", new String(numToBytes(0, false))); assertEquals("10", new String(numToBytes(10, false))); assertEquals("12345678", new String(numToBytes(12345678, false))); assertEquals("-1\r\n", new String(numToBytes(-1, true))); assertEquals("10\r\n", new String(numToBytes(10, true))); assertEquals("12345678\r\n", new String(numToBytes(12345678, true))); } @Test public void benchmark() { if (System.getenv().containsKey("CI") || System.getProperty("CI") != null) return; long diff; long total; { // Warm them up for (int i = 0; i < 10000000; i++) { Long.toString(i).getBytes(Charsets.UTF_8); numToBytes(i, true); } } { long start = System.currentTimeMillis(); for (int i = 0; i < 10000000; i++) { Long.toString(i).getBytes(Charsets.UTF_8); } total = diff = System.currentTimeMillis() - start; } { long start = System.currentTimeMillis(); for (int i = 0; i < 10000000; i++) { numToBytes(i, true); } diff -= System.currentTimeMillis() - start; } System.out.println(total + ", " + diff); } @Test public void freelsBench() throws IOException { if (System.getenv().containsKey("CI") || System.getProperty("CI") != null) return; ByteArrayOutputStream baos = new ByteArrayOutputStream(); baos.write(MultiBulkReply.MARKER); baos.write("100\r\n".getBytes()); for (int i = 0; i < 100; i++) { baos.write(BulkReply.MARKER); baos.write("6\r\n".getBytes()); baos.write("foobar\r\n".getBytes()); } byte[] multiBulkReply = baos.toByteArray(); long start = System.currentTimeMillis(); RedisDecoder redisDecoder = new RedisDecoder(); ChannelBuffer cb = ChannelBuffers.wrappedBuffer(multiBulkReply); for (int i = 0; i < 10; i++) { for (int j = 0; j < 100000; j++) { Reply receive = redisDecoder.receive(cb); cb.resetReaderIndex(); } long end = System.currentTimeMillis(); long diff = end - start; System.out.println(diff + " " + ((double)diff)/100000); start = end; } } }