package com.lambdaworks.redis.protocol; import static org.assertj.core.api.Assertions.assertThat; import java.nio.ByteBuffer; import java.util.Arrays; import com.lambdaworks.redis.codec.ByteArrayCodec; import org.junit.Test; import com.lambdaworks.redis.codec.Utf8StringCodec; import io.netty.buffer.ByteBuf; import io.netty.buffer.Unpooled; /** * @author Mark Paluch */ public class CommandArgsTest { private Utf8StringCodec codec = new Utf8StringCodec(); @Test public void getFirstIntegerShouldReturnNull() throws Exception { CommandArgs<String, String> args = new CommandArgs<>(codec); assertThat(args.getFirstInteger()).isNull(); } @Test public void getFirstIntegerShouldReturnFirstInteger() throws Exception { CommandArgs<String, String> args = new CommandArgs<>(codec).add(1L).add(127).add(128).add(129).add(0).add(-1); assertThat(args.getFirstInteger()).isEqualTo(1L); } @Test public void getFirstStringShouldReturnNull() throws Exception { CommandArgs<String, String> args = new CommandArgs<>(codec); assertThat(args.getFirstString()).isNull(); } @Test public void getFirstStringShouldReturnFirstString() throws Exception { CommandArgs<String, String> args = new CommandArgs<>(codec).add("one").add("two"); assertThat(args.getFirstString()).isEqualTo("one"); } @Test public void getFirstEncodedKeyShouldReturnNull() throws Exception { CommandArgs<String, String> args = new CommandArgs<>(codec); assertThat(args.getFirstString()).isNull(); } @Test public void getFirstEncodedKeyShouldReturnFirstKey() throws Exception { CommandArgs<String, String> args = new CommandArgs<>(codec).addKey("one").addKey("two"); assertThat(args.getFirstEncodedKey()).isEqualTo(ByteBuffer.wrap("one".getBytes())); } @Test public void addValues() throws Exception { CommandArgs<String, String> args = new CommandArgs<>(codec).addValues(Arrays.asList("1", "2")); ByteBuf buffer = Unpooled.buffer(); args.encode(buffer); ByteBuf expected = Unpooled.buffer(); expected.writeBytes(("$1\r\n" + "1\r\n" + "$1\r\n" + "2\r\n").getBytes()); assertThat(buffer.toString(LettuceCharsets.ASCII)).isEqualTo(expected.toString(LettuceCharsets.ASCII)); } @Test public void addByte() throws Exception { CommandArgs<String, String> args = new CommandArgs<>(codec).add("one".getBytes()); ByteBuf buffer = Unpooled.buffer(); args.encode(buffer); ByteBuf expected = Unpooled.buffer(); expected.writeBytes(("$3\r\n" + "one\r\n").getBytes()); assertThat(buffer.toString(LettuceCharsets.ASCII)).isEqualTo(expected.toString(LettuceCharsets.ASCII)); } @Test public void addByteUsingDirectByteCodec() throws Exception { CommandArgs<byte[], byte[]> args = new CommandArgs<>(CommandArgs.ExperimentalByteArrayCodec.INSTANCE) .add("one".getBytes()); ByteBuf buffer = Unpooled.buffer(); args.encode(buffer); ByteBuf expected = Unpooled.buffer(); expected.writeBytes(("$3\r\n" + "one\r\n").getBytes()); assertThat(buffer.toString(LettuceCharsets.ASCII)).isEqualTo(expected.toString(LettuceCharsets.ASCII)); } @Test public void addValueUsingDirectByteCodec() throws Exception { CommandArgs<byte[], byte[]> args = new CommandArgs<>(CommandArgs.ExperimentalByteArrayCodec.INSTANCE) .addValue("one".getBytes()); ByteBuf buffer = Unpooled.buffer(); args.encode(buffer); ByteBuf expected = Unpooled.buffer(); expected.writeBytes(("$3\r\n" + "one\r\n").getBytes()); assertThat(buffer.toString(LettuceCharsets.ASCII)).isEqualTo(expected.toString(LettuceCharsets.ASCII)); } @Test public void addKeyUsingDirectByteCodec() throws Exception { CommandArgs<byte[], byte[]> args = new CommandArgs<>(CommandArgs.ExperimentalByteArrayCodec.INSTANCE) .addValue("one".getBytes()); ByteBuf buffer = Unpooled.buffer(); args.encode(buffer); ByteBuf expected = Unpooled.buffer(); expected.writeBytes(("$3\r\n" + "one\r\n").getBytes()); assertThat(buffer.toString(LettuceCharsets.ASCII)).isEqualTo(expected.toString(LettuceCharsets.ASCII)); } @Test public void addByteUsingByteCodec() throws Exception { CommandArgs<byte[], byte[]> args = new CommandArgs<>(ByteArrayCodec.INSTANCE) .add("one".getBytes()); ByteBuf buffer = Unpooled.buffer(); args.encode(buffer); ByteBuf expected = Unpooled.buffer(); expected.writeBytes(("$3\r\n" + "one\r\n").getBytes()); assertThat(buffer.toString(LettuceCharsets.ASCII)).isEqualTo(expected.toString(LettuceCharsets.ASCII)); } @Test public void addValueUsingByteCodec() throws Exception { CommandArgs<byte[], byte[]> args = new CommandArgs<>(ByteArrayCodec.INSTANCE) .addValue("one".getBytes()); ByteBuf buffer = Unpooled.buffer(); args.encode(buffer); ByteBuf expected = Unpooled.buffer(); expected.writeBytes(("$3\r\n" + "one\r\n").getBytes()); assertThat(buffer.toString(LettuceCharsets.ASCII)).isEqualTo(expected.toString(LettuceCharsets.ASCII)); } @Test public void addKeyUsingByteCodec() throws Exception { CommandArgs<byte[], byte[]> args = new CommandArgs<>(ByteArrayCodec.INSTANCE) .addValue("one".getBytes()); ByteBuf buffer = Unpooled.buffer(); args.encode(buffer); ByteBuf expected = Unpooled.buffer(); expected.writeBytes(("$3\r\n" + "one\r\n").getBytes()); assertThat(buffer.toString(LettuceCharsets.ASCII)).isEqualTo(expected.toString(LettuceCharsets.ASCII)); } }