1 // Copyright (c) 2011-present, Facebook, Inc. All rights reserved.
2 // This source code is licensed under both the GPLv2 (found in the
3 // COPYING file in the root directory) and Apache 2.0 License
4 // (found in the LICENSE.Apache file in the root directory).
8 import java
.util
.Arrays
;
9 import java
.util
.Random
;
11 import org
.junit
.ClassRule
;
12 import org
.junit
.Rule
;
13 import org
.junit
.Test
;
14 import org
.junit
.rules
.ExpectedException
;
16 import static org
.assertj
.core
.api
.Assertions
.assertThat
;
18 public class ReadOptionsTest
{
21 public static final RocksMemoryResource rocksMemoryResource
=
22 new RocksMemoryResource();
25 public ExpectedException exception
= ExpectedException
.none();
28 public void altConstructor() {
29 try (final ReadOptions opt
= new ReadOptions(true, true)) {
30 assertThat(opt
.verifyChecksums()).isTrue();
31 assertThat(opt
.fillCache()).isTrue();
36 public void copyConstructor() {
37 try (final ReadOptions opt
= new ReadOptions()) {
38 opt
.setVerifyChecksums(false);
39 opt
.setFillCache(false);
40 opt
.setIterateUpperBound(buildRandomSlice());
41 opt
.setIterateLowerBound(buildRandomSlice());
42 try (final ReadOptions other
= new ReadOptions(opt
)) {
43 assertThat(opt
.verifyChecksums()).isEqualTo(other
.verifyChecksums());
44 assertThat(opt
.fillCache()).isEqualTo(other
.fillCache());
45 assertThat(Arrays
.equals(opt
.iterateUpperBound().data(), other
.iterateUpperBound().data())).isTrue();
46 assertThat(Arrays
.equals(opt
.iterateLowerBound().data(), other
.iterateLowerBound().data())).isTrue();
52 public void verifyChecksum() {
53 try (final ReadOptions opt
= new ReadOptions()) {
54 final Random rand
= new Random();
55 final boolean boolValue
= rand
.nextBoolean();
56 opt
.setVerifyChecksums(boolValue
);
57 assertThat(opt
.verifyChecksums()).isEqualTo(boolValue
);
62 public void fillCache() {
63 try (final ReadOptions opt
= new ReadOptions()) {
64 final Random rand
= new Random();
65 final boolean boolValue
= rand
.nextBoolean();
66 opt
.setFillCache(boolValue
);
67 assertThat(opt
.fillCache()).isEqualTo(boolValue
);
72 public void tailing() {
73 try (final ReadOptions opt
= new ReadOptions()) {
74 final Random rand
= new Random();
75 final boolean boolValue
= rand
.nextBoolean();
76 opt
.setTailing(boolValue
);
77 assertThat(opt
.tailing()).isEqualTo(boolValue
);
82 public void snapshot() {
83 try (final ReadOptions opt
= new ReadOptions()) {
84 opt
.setSnapshot(null);
85 assertThat(opt
.snapshot()).isNull();
90 public void readTier() {
91 try (final ReadOptions opt
= new ReadOptions()) {
92 opt
.setReadTier(ReadTier
.BLOCK_CACHE_TIER
);
93 assertThat(opt
.readTier()).isEqualTo(ReadTier
.BLOCK_CACHE_TIER
);
98 public void managed() {
99 try (final ReadOptions opt
= new ReadOptions()) {
100 opt
.setManaged(true);
101 assertThat(opt
.managed()).isTrue();
106 public void totalOrderSeek() {
107 try (final ReadOptions opt
= new ReadOptions()) {
108 opt
.setTotalOrderSeek(true);
109 assertThat(opt
.totalOrderSeek()).isTrue();
114 public void prefixSameAsStart() {
115 try (final ReadOptions opt
= new ReadOptions()) {
116 opt
.setPrefixSameAsStart(true);
117 assertThat(opt
.prefixSameAsStart()).isTrue();
122 public void pinData() {
123 try (final ReadOptions opt
= new ReadOptions()) {
124 opt
.setPinData(true);
125 assertThat(opt
.pinData()).isTrue();
130 public void backgroundPurgeOnIteratorCleanup() {
131 try (final ReadOptions opt
= new ReadOptions()) {
132 opt
.setBackgroundPurgeOnIteratorCleanup(true);
133 assertThat(opt
.backgroundPurgeOnIteratorCleanup()).isTrue();
138 public void readaheadSize() {
139 try (final ReadOptions opt
= new ReadOptions()) {
140 final Random rand
= new Random();
141 final long longValue
= rand
.nextLong();
142 opt
.setReadaheadSize(longValue
);
143 assertThat(opt
.readaheadSize()).isEqualTo(longValue
);
148 public void ignoreRangeDeletions() {
149 try (final ReadOptions opt
= new ReadOptions()) {
150 opt
.setIgnoreRangeDeletions(true);
151 assertThat(opt
.ignoreRangeDeletions()).isTrue();
156 public void iterateUpperBound() {
157 try (final ReadOptions opt
= new ReadOptions()) {
158 Slice upperBound
= buildRandomSlice();
159 opt
.setIterateUpperBound(upperBound
);
160 assertThat(Arrays
.equals(upperBound
.data(), opt
.iterateUpperBound().data())).isTrue();
165 public void iterateUpperBoundNull() {
166 try (final ReadOptions opt
= new ReadOptions()) {
167 assertThat(opt
.iterateUpperBound()).isNull();
172 public void iterateLowerBound() {
173 try (final ReadOptions opt
= new ReadOptions()) {
174 Slice lowerBound
= buildRandomSlice();
175 opt
.setIterateLowerBound(lowerBound
);
176 assertThat(Arrays
.equals(lowerBound
.data(), opt
.iterateLowerBound().data())).isTrue();
181 public void iterateLowerBoundNull() {
182 try (final ReadOptions opt
= new ReadOptions()) {
183 assertThat(opt
.iterateLowerBound()).isNull();
188 public void tableFilter() {
189 try (final ReadOptions opt
= new ReadOptions();
190 final AbstractTableFilter allTablesFilter
= new AllTablesFilter()) {
191 opt
.setTableFilter(allTablesFilter
);
196 public void iterStartSeqnum() {
197 try (final ReadOptions opt
= new ReadOptions()) {
198 assertThat(opt
.iterStartSeqnum()).isEqualTo(0);
200 opt
.setIterStartSeqnum(10);
201 assertThat(opt
.iterStartSeqnum()).isEqualTo(10);
206 public void failSetVerifyChecksumUninitialized() {
207 try (final ReadOptions readOptions
=
208 setupUninitializedReadOptions(exception
)) {
209 readOptions
.setVerifyChecksums(true);
214 public void failVerifyChecksumUninitialized() {
215 try (final ReadOptions readOptions
=
216 setupUninitializedReadOptions(exception
)) {
217 readOptions
.verifyChecksums();
222 public void failSetFillCacheUninitialized() {
223 try (final ReadOptions readOptions
=
224 setupUninitializedReadOptions(exception
)) {
225 readOptions
.setFillCache(true);
230 public void failFillCacheUninitialized() {
231 try (final ReadOptions readOptions
=
232 setupUninitializedReadOptions(exception
)) {
233 readOptions
.fillCache();
238 public void failSetTailingUninitialized() {
239 try (final ReadOptions readOptions
=
240 setupUninitializedReadOptions(exception
)) {
241 readOptions
.setTailing(true);
246 public void failTailingUninitialized() {
247 try (final ReadOptions readOptions
=
248 setupUninitializedReadOptions(exception
)) {
249 readOptions
.tailing();
254 public void failSetSnapshotUninitialized() {
255 try (final ReadOptions readOptions
=
256 setupUninitializedReadOptions(exception
)) {
257 readOptions
.setSnapshot(null);
262 public void failSnapshotUninitialized() {
263 try (final ReadOptions readOptions
=
264 setupUninitializedReadOptions(exception
)) {
265 readOptions
.snapshot();
270 public void failSetIterateUpperBoundUninitialized() {
271 try (final ReadOptions readOptions
=
272 setupUninitializedReadOptions(exception
)) {
273 readOptions
.setIterateUpperBound(null);
278 public void failIterateUpperBoundUninitialized() {
279 try (final ReadOptions readOptions
=
280 setupUninitializedReadOptions(exception
)) {
281 readOptions
.iterateUpperBound();
286 public void failSetIterateLowerBoundUninitialized() {
287 try (final ReadOptions readOptions
=
288 setupUninitializedReadOptions(exception
)) {
289 readOptions
.setIterateLowerBound(null);
294 public void failIterateLowerBoundUninitialized() {
295 try (final ReadOptions readOptions
=
296 setupUninitializedReadOptions(exception
)) {
297 readOptions
.iterateLowerBound();
301 private ReadOptions
setupUninitializedReadOptions(
302 ExpectedException exception
) {
303 final ReadOptions readOptions
= new ReadOptions();
305 exception
.expect(AssertionError
.class);
309 private Slice
buildRandomSlice() {
310 final Random rand
= new Random();
311 byte[] sliceBytes
= new byte[rand
.nextInt(100) + 1];
312 rand
.nextBytes(sliceBytes
);
313 return new Slice(sliceBytes
);
316 private static class AllTablesFilter
extends AbstractTableFilter
{
318 public boolean filter(final TableProperties tableProperties
) {