blob: 50887ac7ae4c3bcb66dfa9cac3eafb296a14d9a0 [file] [log] [blame]
/*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.bookkeeper.clients.impl.kv;
import static java.nio.charset.StandardCharsets.UTF_8;
import static org.apache.bookkeeper.clients.impl.kv.KvUtils.newDeleteRequest;
import static org.apache.bookkeeper.clients.impl.kv.KvUtils.newIncrementRequest;
import static org.apache.bookkeeper.clients.impl.kv.KvUtils.newPutRequest;
import static org.apache.bookkeeper.clients.impl.kv.KvUtils.newRangeRequest;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import com.google.protobuf.ByteString;
import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;
import org.apache.bookkeeper.api.kv.impl.options.OptionFactoryImpl;
import org.apache.bookkeeper.api.kv.options.DeleteOption;
import org.apache.bookkeeper.api.kv.options.IncrementOption;
import org.apache.bookkeeper.api.kv.options.OptionFactory;
import org.apache.bookkeeper.api.kv.options.Options;
import org.apache.bookkeeper.api.kv.options.PutOption;
import org.apache.bookkeeper.api.kv.options.RangeOption;
import org.apache.bookkeeper.stream.proto.kv.rpc.DeleteRangeRequest;
import org.apache.bookkeeper.stream.proto.kv.rpc.IncrementRequest;
import org.apache.bookkeeper.stream.proto.kv.rpc.PutRequest;
import org.apache.bookkeeper.stream.proto.kv.rpc.RangeRequest;
import org.junit.Test;
/**
* Unit test for {@link KvUtils}.
*/
public class TestKvUtils {
private static final long scId = System.currentTimeMillis();
private static final ByteString routingKey = ByteString.copyFrom("test-routing-key", UTF_8);
private static final ByteBuf key = Unpooled.wrappedBuffer("test-key".getBytes(UTF_8));
private static final ByteBuf value = Unpooled.wrappedBuffer("test-value".getBytes(UTF_8));
private static final ByteString keyBs = ByteString.copyFrom("test-key".getBytes(UTF_8));
private static final ByteString valueBs = ByteString.copyFrom("test-value".getBytes(UTF_8));
private final OptionFactory<ByteBuf> optionFactory = new OptionFactoryImpl<>();
@Test
public void testNewRangeRequest() {
try (RangeOption<ByteBuf> rangeOption = optionFactory.newRangeOption()
.endKey(key.retainedDuplicate())
.countOnly(true)
.keysOnly(true)
.limit(10)
.maxCreateRev(1234L)
.minCreateRev(234L)
.maxModRev(2345L)
.minModRev(1235L)
.build()) {
RangeRequest rr = newRangeRequest(key, rangeOption).build();
assertEquals(keyBs, rr.getKey());
assertEquals(keyBs, rr.getRangeEnd());
assertTrue(rr.getCountOnly());
assertTrue(rr.getKeysOnly());
assertEquals(10, rr.getLimit());
assertEquals(1234L, rr.getMaxCreateRevision());
assertEquals(234L, rr.getMinCreateRevision());
assertEquals(2345L, rr.getMaxModRevision());
assertEquals(1235L, rr.getMinModRevision());
assertFalse(rr.hasHeader());
}
}
@Test
public void testNewPutRequest() {
try (PutOption<ByteBuf> option = Options.putAndGet()) {
PutRequest rr = newPutRequest(key, value, option).build();
assertEquals(keyBs, rr.getKey());
assertEquals(valueBs, rr.getValue());
assertTrue(rr.getPrevKv());
assertFalse(rr.hasHeader());
}
}
@Test
public void testNewIncrementRequest() {
try (IncrementOption<ByteBuf> option = Options.incrementAndGet()) {
IncrementRequest rr = newIncrementRequest(key, 100L, option).build();
assertEquals(keyBs, rr.getKey());
assertEquals(100L, rr.getAmount());
assertTrue(rr.getGetTotal());
assertFalse(rr.hasHeader());
}
}
@Test
public void testNewDeleteRequest() {
try (DeleteOption<ByteBuf> option = optionFactory.newDeleteOption()
.endKey(key.retainedDuplicate())
.prevKv(true)
.build()) {
DeleteRangeRequest rr = newDeleteRequest(key, option).build();
assertEquals(keyBs, rr.getKey());
assertEquals(keyBs, rr.getRangeEnd());
assertTrue(rr.getPrevKv());
assertFalse(rr.hasHeader());
}
}
}