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).
5 
6 package org.rocksdb;
7 
8 import static org.assertj.core.api.Assertions.assertThat;
9 import static org.junit.Assert.assertEquals;
10 
11 import java.io.IOException;
12 import java.nio.file.Files;
13 import java.nio.file.Paths;
14 import java.util.*;
15 import org.junit.ClassRule;
16 import org.junit.Test;
17 import org.rocksdb.test.RemoveEmptyValueCompactionFilterFactory;
18 
19 public class ColumnFamilyOptionsTest {
20 
21   @ClassRule
22   public static final RocksNativeLibraryResource ROCKS_NATIVE_LIBRARY_RESOURCE =
23       new RocksNativeLibraryResource();
24 
25   public static final Random rand = PlatformRandomHelper.
26       getPlatformSpecificRandomFactory();
27 
28   @Test
copyConstructor()29   public void copyConstructor() {
30     ColumnFamilyOptions origOpts = new ColumnFamilyOptions();
31     origOpts.setNumLevels(rand.nextInt(8));
32     origOpts.setTargetFileSizeMultiplier(rand.nextInt(100));
33     origOpts.setLevel0StopWritesTrigger(rand.nextInt(50));
34     ColumnFamilyOptions copyOpts = new ColumnFamilyOptions(origOpts);
35     assertThat(origOpts.numLevels()).isEqualTo(copyOpts.numLevels());
36     assertThat(origOpts.targetFileSizeMultiplier()).isEqualTo(copyOpts.targetFileSizeMultiplier());
37     assertThat(origOpts.level0StopWritesTrigger()).isEqualTo(copyOpts.level0StopWritesTrigger());
38   }
39 
40   @Test
getColumnFamilyOptionsFromProps()41   public void getColumnFamilyOptionsFromProps() {
42     Properties properties = new Properties();
43     properties.put("write_buffer_size", "112");
44     properties.put("max_write_buffer_number", "13");
45 
46     try (final ColumnFamilyOptions opt = ColumnFamilyOptions.
47         getColumnFamilyOptionsFromProps(properties)) {
48       // setup sample properties
49       assertThat(opt).isNotNull();
50       assertThat(String.valueOf(opt.writeBufferSize())).
51           isEqualTo(properties.get("write_buffer_size"));
52       assertThat(String.valueOf(opt.maxWriteBufferNumber())).
53           isEqualTo(properties.get("max_write_buffer_number"));
54     }
55   }
56 
57   @Test
getColumnFamilyOptionsFromPropsWithIgnoreIllegalValue()58   public void getColumnFamilyOptionsFromPropsWithIgnoreIllegalValue() {
59     // setup sample properties
60     final Properties properties = new Properties();
61     properties.put("tomato", "1024");
62     properties.put("burger", "2");
63     properties.put("write_buffer_size", "112");
64     properties.put("max_write_buffer_number", "13");
65 
66     try (final ConfigOptions cfgOpts = new ConfigOptions().setIgnoreUnknownOptions(true);
67          final ColumnFamilyOptions opt =
68              ColumnFamilyOptions.getColumnFamilyOptionsFromProps(cfgOpts, properties)) {
69       // setup sample properties
70       assertThat(opt).isNotNull();
71       assertThat(String.valueOf(opt.writeBufferSize()))
72           .isEqualTo(properties.get("write_buffer_size"));
73       assertThat(String.valueOf(opt.maxWriteBufferNumber()))
74           .isEqualTo(properties.get("max_write_buffer_number"));
75     }
76   }
77 
78   @Test
failColumnFamilyOptionsFromPropsWithIllegalValue()79   public void failColumnFamilyOptionsFromPropsWithIllegalValue() {
80     // setup sample properties
81     final Properties properties = new Properties();
82     properties.put("tomato", "1024");
83     properties.put("burger", "2");
84 
85     try (final ColumnFamilyOptions opt =
86              ColumnFamilyOptions.getColumnFamilyOptionsFromProps(properties)) {
87       assertThat(opt).isNull();
88     }
89   }
90 
91   @Test(expected = IllegalArgumentException.class)
failColumnFamilyOptionsFromPropsWithNullValue()92   public void failColumnFamilyOptionsFromPropsWithNullValue() {
93     try (final ColumnFamilyOptions opt =
94              ColumnFamilyOptions.getColumnFamilyOptionsFromProps(null)) {
95     }
96   }
97 
98   @Test(expected = IllegalArgumentException.class)
failColumnFamilyOptionsFromPropsWithEmptyProps()99   public void failColumnFamilyOptionsFromPropsWithEmptyProps() {
100     try (final ColumnFamilyOptions opt =
101              ColumnFamilyOptions.getColumnFamilyOptionsFromProps(
102                  new Properties())) {
103     }
104   }
105 
106   @Test
writeBufferSize()107   public void writeBufferSize() throws RocksDBException {
108     try (final ColumnFamilyOptions opt = new ColumnFamilyOptions()) {
109       final long longValue = rand.nextLong();
110       opt.setWriteBufferSize(longValue);
111       assertThat(opt.writeBufferSize()).isEqualTo(longValue);
112     }
113   }
114 
115   @Test
maxWriteBufferNumber()116   public void maxWriteBufferNumber() {
117     try (final ColumnFamilyOptions opt = new ColumnFamilyOptions()) {
118       final int intValue = rand.nextInt();
119       opt.setMaxWriteBufferNumber(intValue);
120       assertThat(opt.maxWriteBufferNumber()).isEqualTo(intValue);
121     }
122   }
123 
124   @Test
minWriteBufferNumberToMerge()125   public void minWriteBufferNumberToMerge() {
126     try (final ColumnFamilyOptions opt = new ColumnFamilyOptions()) {
127       final int intValue = rand.nextInt();
128       opt.setMinWriteBufferNumberToMerge(intValue);
129       assertThat(opt.minWriteBufferNumberToMerge()).isEqualTo(intValue);
130     }
131   }
132 
133   @Test
numLevels()134   public void numLevels() {
135     try (final ColumnFamilyOptions opt = new ColumnFamilyOptions()) {
136       final int intValue = rand.nextInt();
137       opt.setNumLevels(intValue);
138       assertThat(opt.numLevels()).isEqualTo(intValue);
139     }
140   }
141 
142   @Test
levelZeroFileNumCompactionTrigger()143   public void levelZeroFileNumCompactionTrigger() {
144     try (final ColumnFamilyOptions opt = new ColumnFamilyOptions()) {
145       final int intValue = rand.nextInt();
146       opt.setLevelZeroFileNumCompactionTrigger(intValue);
147       assertThat(opt.levelZeroFileNumCompactionTrigger()).isEqualTo(intValue);
148     }
149   }
150 
151   @Test
levelZeroSlowdownWritesTrigger()152   public void levelZeroSlowdownWritesTrigger() {
153     try (final ColumnFamilyOptions opt = new ColumnFamilyOptions()) {
154       final int intValue = rand.nextInt();
155       opt.setLevelZeroSlowdownWritesTrigger(intValue);
156       assertThat(opt.levelZeroSlowdownWritesTrigger()).isEqualTo(intValue);
157     }
158   }
159 
160   @Test
levelZeroStopWritesTrigger()161   public void levelZeroStopWritesTrigger() {
162     try (final ColumnFamilyOptions opt = new ColumnFamilyOptions()) {
163       final int intValue = rand.nextInt();
164       opt.setLevelZeroStopWritesTrigger(intValue);
165       assertThat(opt.levelZeroStopWritesTrigger()).isEqualTo(intValue);
166     }
167   }
168 
169   @Test
targetFileSizeBase()170   public void targetFileSizeBase() {
171     try (final ColumnFamilyOptions opt = new ColumnFamilyOptions()) {
172       final long longValue = rand.nextLong();
173       opt.setTargetFileSizeBase(longValue);
174       assertThat(opt.targetFileSizeBase()).isEqualTo(longValue);
175     }
176   }
177 
178   @Test
targetFileSizeMultiplier()179   public void targetFileSizeMultiplier() {
180     try (final ColumnFamilyOptions opt = new ColumnFamilyOptions()) {
181       final int intValue = rand.nextInt();
182       opt.setTargetFileSizeMultiplier(intValue);
183       assertThat(opt.targetFileSizeMultiplier()).isEqualTo(intValue);
184     }
185   }
186 
187   @Test
maxBytesForLevelBase()188   public void maxBytesForLevelBase() {
189     try (final ColumnFamilyOptions opt = new ColumnFamilyOptions()) {
190       final long longValue = rand.nextLong();
191       opt.setMaxBytesForLevelBase(longValue);
192       assertThat(opt.maxBytesForLevelBase()).isEqualTo(longValue);
193     }
194   }
195 
196   @Test
levelCompactionDynamicLevelBytes()197   public void levelCompactionDynamicLevelBytes() {
198     try (final ColumnFamilyOptions opt = new ColumnFamilyOptions()) {
199       final boolean boolValue = rand.nextBoolean();
200       opt.setLevelCompactionDynamicLevelBytes(boolValue);
201       assertThat(opt.levelCompactionDynamicLevelBytes())
202           .isEqualTo(boolValue);
203     }
204   }
205 
206   @Test
maxBytesForLevelMultiplier()207   public void maxBytesForLevelMultiplier() {
208     try (final ColumnFamilyOptions opt = new ColumnFamilyOptions()) {
209       final double doubleValue = rand.nextDouble();
210       opt.setMaxBytesForLevelMultiplier(doubleValue);
211       assertThat(opt.maxBytesForLevelMultiplier()).isEqualTo(doubleValue);
212     }
213   }
214 
215   @Test
maxBytesForLevelMultiplierAdditional()216   public void maxBytesForLevelMultiplierAdditional() {
217     try (final ColumnFamilyOptions opt = new ColumnFamilyOptions()) {
218       final int intValue1 = rand.nextInt();
219       final int intValue2 = rand.nextInt();
220       final int[] ints = new int[]{intValue1, intValue2};
221       opt.setMaxBytesForLevelMultiplierAdditional(ints);
222       assertThat(opt.maxBytesForLevelMultiplierAdditional()).isEqualTo(ints);
223     }
224   }
225 
226   @Test
maxCompactionBytes()227   public void maxCompactionBytes() {
228     try (final ColumnFamilyOptions opt = new ColumnFamilyOptions()) {
229       final long longValue = rand.nextLong();
230       opt.setMaxCompactionBytes(longValue);
231       assertThat(opt.maxCompactionBytes()).isEqualTo(longValue);
232     }
233   }
234 
235   @Test
softPendingCompactionBytesLimit()236   public void softPendingCompactionBytesLimit() {
237     try (final ColumnFamilyOptions opt = new ColumnFamilyOptions()) {
238       final long longValue = rand.nextLong();
239       opt.setSoftPendingCompactionBytesLimit(longValue);
240       assertThat(opt.softPendingCompactionBytesLimit()).isEqualTo(longValue);
241     }
242   }
243 
244   @Test
hardPendingCompactionBytesLimit()245   public void hardPendingCompactionBytesLimit() {
246     try (final ColumnFamilyOptions opt = new ColumnFamilyOptions()) {
247       final long longValue = rand.nextLong();
248       opt.setHardPendingCompactionBytesLimit(longValue);
249       assertThat(opt.hardPendingCompactionBytesLimit()).isEqualTo(longValue);
250     }
251   }
252 
253   @Test
level0FileNumCompactionTrigger()254   public void level0FileNumCompactionTrigger() {
255     try (final ColumnFamilyOptions opt = new ColumnFamilyOptions()) {
256       final int intValue = rand.nextInt();
257       opt.setLevel0FileNumCompactionTrigger(intValue);
258       assertThat(opt.level0FileNumCompactionTrigger()).isEqualTo(intValue);
259     }
260   }
261 
262   @Test
level0SlowdownWritesTrigger()263   public void level0SlowdownWritesTrigger() {
264     try (final ColumnFamilyOptions opt = new ColumnFamilyOptions()) {
265       final int intValue = rand.nextInt();
266       opt.setLevel0SlowdownWritesTrigger(intValue);
267       assertThat(opt.level0SlowdownWritesTrigger()).isEqualTo(intValue);
268     }
269   }
270 
271   @Test
level0StopWritesTrigger()272   public void level0StopWritesTrigger() {
273     try (final ColumnFamilyOptions opt = new ColumnFamilyOptions()) {
274       final int intValue = rand.nextInt();
275       opt.setLevel0StopWritesTrigger(intValue);
276       assertThat(opt.level0StopWritesTrigger()).isEqualTo(intValue);
277     }
278   }
279 
280   @Test
arenaBlockSize()281   public void arenaBlockSize() throws RocksDBException {
282     try (final ColumnFamilyOptions opt = new ColumnFamilyOptions()) {
283       final long longValue = rand.nextLong();
284       opt.setArenaBlockSize(longValue);
285       assertThat(opt.arenaBlockSize()).isEqualTo(longValue);
286     }
287   }
288 
289   @Test
disableAutoCompactions()290   public void disableAutoCompactions() {
291     try (final ColumnFamilyOptions opt = new ColumnFamilyOptions()) {
292       final boolean boolValue = rand.nextBoolean();
293       opt.setDisableAutoCompactions(boolValue);
294       assertThat(opt.disableAutoCompactions()).isEqualTo(boolValue);
295     }
296   }
297 
298   @Test
maxSequentialSkipInIterations()299   public void maxSequentialSkipInIterations() {
300     try (final ColumnFamilyOptions opt = new ColumnFamilyOptions()) {
301       final long longValue = rand.nextLong();
302       opt.setMaxSequentialSkipInIterations(longValue);
303       assertThat(opt.maxSequentialSkipInIterations()).isEqualTo(longValue);
304     }
305   }
306 
307   @Test
inplaceUpdateSupport()308   public void inplaceUpdateSupport() {
309     try (final ColumnFamilyOptions opt = new ColumnFamilyOptions()) {
310       final boolean boolValue = rand.nextBoolean();
311       opt.setInplaceUpdateSupport(boolValue);
312       assertThat(opt.inplaceUpdateSupport()).isEqualTo(boolValue);
313     }
314   }
315 
316   @Test
inplaceUpdateNumLocks()317   public void inplaceUpdateNumLocks() throws RocksDBException {
318     try (final ColumnFamilyOptions opt = new ColumnFamilyOptions()) {
319       final long longValue = rand.nextLong();
320       opt.setInplaceUpdateNumLocks(longValue);
321       assertThat(opt.inplaceUpdateNumLocks()).isEqualTo(longValue);
322     }
323   }
324 
325   @Test
memtablePrefixBloomSizeRatio()326   public void memtablePrefixBloomSizeRatio() {
327     try (final ColumnFamilyOptions opt = new ColumnFamilyOptions()) {
328       final double doubleValue = rand.nextDouble();
329       opt.setMemtablePrefixBloomSizeRatio(doubleValue);
330       assertThat(opt.memtablePrefixBloomSizeRatio()).isEqualTo(doubleValue);
331     }
332   }
333 
334   @Test
memtableHugePageSize()335   public void memtableHugePageSize() {
336     try (final ColumnFamilyOptions opt = new ColumnFamilyOptions()) {
337       final long longValue = rand.nextLong();
338       opt.setMemtableHugePageSize(longValue);
339       assertThat(opt.memtableHugePageSize()).isEqualTo(longValue);
340     }
341   }
342 
343   @Test
bloomLocality()344   public void bloomLocality() {
345     try (final ColumnFamilyOptions opt = new ColumnFamilyOptions()) {
346       final int intValue = rand.nextInt();
347       opt.setBloomLocality(intValue);
348       assertThat(opt.bloomLocality()).isEqualTo(intValue);
349     }
350   }
351 
352   @Test
maxSuccessiveMerges()353   public void maxSuccessiveMerges() throws RocksDBException {
354     try (final ColumnFamilyOptions opt = new ColumnFamilyOptions()) {
355       final long longValue = rand.nextLong();
356       opt.setMaxSuccessiveMerges(longValue);
357       assertThat(opt.maxSuccessiveMerges()).isEqualTo(longValue);
358     }
359   }
360 
361   @Test
optimizeFiltersForHits()362   public void optimizeFiltersForHits() {
363     try (final ColumnFamilyOptions opt = new ColumnFamilyOptions()) {
364       final boolean aBoolean = rand.nextBoolean();
365       opt.setOptimizeFiltersForHits(aBoolean);
366       assertThat(opt.optimizeFiltersForHits()).isEqualTo(aBoolean);
367     }
368   }
369 
370   @Test
memTable()371   public void memTable() throws RocksDBException {
372     try (final ColumnFamilyOptions opt = new ColumnFamilyOptions()) {
373       opt.setMemTableConfig(new HashLinkedListMemTableConfig());
374       assertThat(opt.memTableFactoryName()).
375           isEqualTo("HashLinkedListRepFactory");
376     }
377   }
378 
379   @Test
comparator()380   public void comparator() throws RocksDBException {
381     try (final ColumnFamilyOptions opt = new ColumnFamilyOptions()) {
382       opt.setComparator(BuiltinComparator.BYTEWISE_COMPARATOR);
383     }
384   }
385 
386   @Test
linkageOfPrepMethods()387   public void linkageOfPrepMethods() {
388     try (final ColumnFamilyOptions options = new ColumnFamilyOptions()) {
389       options.optimizeUniversalStyleCompaction();
390       options.optimizeUniversalStyleCompaction(4000);
391       options.optimizeLevelStyleCompaction();
392       options.optimizeLevelStyleCompaction(3000);
393       options.optimizeForPointLookup(10);
394       options.optimizeForSmallDb();
395     }
396   }
397 
398   @Test
shouldSetTestPrefixExtractor()399   public void shouldSetTestPrefixExtractor() {
400     try (final ColumnFamilyOptions options = new ColumnFamilyOptions()) {
401       options.useFixedLengthPrefixExtractor(100);
402       options.useFixedLengthPrefixExtractor(10);
403     }
404   }
405 
406   @Test
shouldSetTestCappedPrefixExtractor()407   public void shouldSetTestCappedPrefixExtractor() {
408     try (final ColumnFamilyOptions options = new ColumnFamilyOptions()) {
409       options.useCappedPrefixExtractor(100);
410       options.useCappedPrefixExtractor(10);
411     }
412   }
413 
414   @Test
compressionTypes()415   public void compressionTypes() {
416     try (final ColumnFamilyOptions columnFamilyOptions
417              = new ColumnFamilyOptions()) {
418       for (final CompressionType compressionType :
419           CompressionType.values()) {
420         columnFamilyOptions.setCompressionType(compressionType);
421         assertThat(columnFamilyOptions.compressionType()).
422             isEqualTo(compressionType);
423         assertThat(CompressionType.valueOf("NO_COMPRESSION")).
424             isEqualTo(CompressionType.NO_COMPRESSION);
425       }
426     }
427   }
428 
429   @Test
compressionPerLevel()430   public void compressionPerLevel() {
431     try (final ColumnFamilyOptions columnFamilyOptions
432              = new ColumnFamilyOptions()) {
433       assertThat(columnFamilyOptions.compressionPerLevel()).isEmpty();
434       List<CompressionType> compressionTypeList = new ArrayList<>();
435       for (int i = 0; i < columnFamilyOptions.numLevels(); i++) {
436         compressionTypeList.add(CompressionType.NO_COMPRESSION);
437       }
438       columnFamilyOptions.setCompressionPerLevel(compressionTypeList);
439       compressionTypeList = columnFamilyOptions.compressionPerLevel();
440       for (CompressionType compressionType : compressionTypeList) {
441         assertThat(compressionType).isEqualTo(
442             CompressionType.NO_COMPRESSION);
443       }
444     }
445   }
446 
447   @Test
differentCompressionsPerLevel()448   public void differentCompressionsPerLevel() {
449     try (final ColumnFamilyOptions columnFamilyOptions
450              = new ColumnFamilyOptions()) {
451       columnFamilyOptions.setNumLevels(3);
452 
453       assertThat(columnFamilyOptions.compressionPerLevel()).isEmpty();
454       List<CompressionType> compressionTypeList = new ArrayList<>();
455 
456       compressionTypeList.add(CompressionType.BZLIB2_COMPRESSION);
457       compressionTypeList.add(CompressionType.SNAPPY_COMPRESSION);
458       compressionTypeList.add(CompressionType.LZ4_COMPRESSION);
459 
460       columnFamilyOptions.setCompressionPerLevel(compressionTypeList);
461       compressionTypeList = columnFamilyOptions.compressionPerLevel();
462 
463       assertThat(compressionTypeList.size()).isEqualTo(3);
464       assertThat(compressionTypeList).
465           containsExactly(
466               CompressionType.BZLIB2_COMPRESSION,
467               CompressionType.SNAPPY_COMPRESSION,
468               CompressionType.LZ4_COMPRESSION);
469 
470     }
471   }
472 
473   @Test
bottommostCompressionType()474   public void bottommostCompressionType() {
475     try (final ColumnFamilyOptions columnFamilyOptions
476              = new ColumnFamilyOptions()) {
477       assertThat(columnFamilyOptions.bottommostCompressionType())
478           .isEqualTo(CompressionType.DISABLE_COMPRESSION_OPTION);
479 
480       for (final CompressionType compressionType : CompressionType.values()) {
481         columnFamilyOptions.setBottommostCompressionType(compressionType);
482         assertThat(columnFamilyOptions.bottommostCompressionType())
483             .isEqualTo(compressionType);
484       }
485     }
486   }
487 
488   @Test
bottommostCompressionOptions()489   public void bottommostCompressionOptions() {
490     try (final ColumnFamilyOptions columnFamilyOptions =
491              new ColumnFamilyOptions();
492          final CompressionOptions bottommostCompressionOptions =
493              new CompressionOptions()
494                  .setMaxDictBytes(123)) {
495 
496       columnFamilyOptions.setBottommostCompressionOptions(
497           bottommostCompressionOptions);
498       assertThat(columnFamilyOptions.bottommostCompressionOptions())
499           .isEqualTo(bottommostCompressionOptions);
500       assertThat(columnFamilyOptions.bottommostCompressionOptions()
501           .maxDictBytes()).isEqualTo(123);
502     }
503   }
504 
505   @Test
compressionOptions()506   public void compressionOptions() {
507     try (final ColumnFamilyOptions columnFamilyOptions
508              = new ColumnFamilyOptions();
509         final CompressionOptions compressionOptions = new CompressionOptions()
510           .setMaxDictBytes(123)) {
511 
512       columnFamilyOptions.setCompressionOptions(compressionOptions);
513       assertThat(columnFamilyOptions.compressionOptions())
514           .isEqualTo(compressionOptions);
515       assertThat(columnFamilyOptions.compressionOptions().maxDictBytes())
516           .isEqualTo(123);
517     }
518   }
519 
520   @Test
compactionStyles()521   public void compactionStyles() {
522     try (final ColumnFamilyOptions columnFamilyOptions
523              = new ColumnFamilyOptions()) {
524       for (final CompactionStyle compactionStyle :
525           CompactionStyle.values()) {
526         columnFamilyOptions.setCompactionStyle(compactionStyle);
527         assertThat(columnFamilyOptions.compactionStyle()).
528             isEqualTo(compactionStyle);
529         assertThat(CompactionStyle.valueOf("FIFO")).
530             isEqualTo(CompactionStyle.FIFO);
531       }
532     }
533   }
534 
535   @Test
maxTableFilesSizeFIFO()536   public void maxTableFilesSizeFIFO() {
537     try (final ColumnFamilyOptions opt = new ColumnFamilyOptions()) {
538       long longValue = rand.nextLong();
539       // Size has to be positive
540       longValue = (longValue < 0) ? -longValue : longValue;
541       longValue = (longValue == 0) ? longValue + 1 : longValue;
542       opt.setMaxTableFilesSizeFIFO(longValue);
543       assertThat(opt.maxTableFilesSizeFIFO()).
544           isEqualTo(longValue);
545     }
546   }
547 
548   @Test
maxWriteBufferNumberToMaintain()549   public void maxWriteBufferNumberToMaintain() {
550     try (final ColumnFamilyOptions opt = new ColumnFamilyOptions()) {
551       int intValue = rand.nextInt();
552       // Size has to be positive
553       intValue = (intValue < 0) ? -intValue : intValue;
554       intValue = (intValue == 0) ? intValue + 1 : intValue;
555       opt.setMaxWriteBufferNumberToMaintain(intValue);
556       assertThat(opt.maxWriteBufferNumberToMaintain()).
557           isEqualTo(intValue);
558     }
559   }
560 
561   @Test
compactionPriorities()562   public void compactionPriorities() {
563     try (final ColumnFamilyOptions opt = new ColumnFamilyOptions()) {
564       for (final CompactionPriority compactionPriority :
565           CompactionPriority.values()) {
566         opt.setCompactionPriority(compactionPriority);
567         assertThat(opt.compactionPriority()).
568             isEqualTo(compactionPriority);
569       }
570     }
571   }
572 
573   @Test
reportBgIoStats()574   public void reportBgIoStats() {
575     try (final ColumnFamilyOptions opt = new ColumnFamilyOptions()) {
576       final boolean booleanValue = true;
577       opt.setReportBgIoStats(booleanValue);
578       assertThat(opt.reportBgIoStats()).
579           isEqualTo(booleanValue);
580     }
581   }
582 
583   @Test
ttl()584   public void ttl() {
585     try (final ColumnFamilyOptions options = new ColumnFamilyOptions()) {
586       options.setTtl(1000 * 60);
587       assertThat(options.ttl()).
588           isEqualTo(1000 * 60);
589     }
590   }
591 
592   @Test
compactionOptionsUniversal()593   public void compactionOptionsUniversal() {
594     try (final ColumnFamilyOptions opt = new ColumnFamilyOptions();
595         final CompactionOptionsUniversal optUni = new CompactionOptionsUniversal()
596           .setCompressionSizePercent(7)) {
597       opt.setCompactionOptionsUniversal(optUni);
598       assertThat(opt.compactionOptionsUniversal()).
599           isEqualTo(optUni);
600       assertThat(opt.compactionOptionsUniversal().compressionSizePercent())
601           .isEqualTo(7);
602     }
603   }
604 
605   @Test
compactionOptionsFIFO()606   public void compactionOptionsFIFO() {
607     try (final ColumnFamilyOptions opt = new ColumnFamilyOptions();
608          final CompactionOptionsFIFO optFifo = new CompactionOptionsFIFO()
609              .setMaxTableFilesSize(2000)) {
610       opt.setCompactionOptionsFIFO(optFifo);
611       assertThat(opt.compactionOptionsFIFO()).
612           isEqualTo(optFifo);
613       assertThat(opt.compactionOptionsFIFO().maxTableFilesSize())
614           .isEqualTo(2000);
615     }
616   }
617 
618   @Test
forceConsistencyChecks()619   public void forceConsistencyChecks() {
620     try (final ColumnFamilyOptions opt = new ColumnFamilyOptions()) {
621       final boolean booleanValue = true;
622       opt.setForceConsistencyChecks(booleanValue);
623       assertThat(opt.forceConsistencyChecks()).
624           isEqualTo(booleanValue);
625     }
626   }
627 
628   @Test
compactionFilter()629   public void compactionFilter() {
630     try(final ColumnFamilyOptions options = new ColumnFamilyOptions();
631         final RemoveEmptyValueCompactionFilter cf = new RemoveEmptyValueCompactionFilter()) {
632       options.setCompactionFilter(cf);
633       assertThat(options.compactionFilter()).isEqualTo(cf);
634     }
635   }
636 
637   @Test
compactionFilterFactory()638   public void compactionFilterFactory() {
639     try(final ColumnFamilyOptions options = new ColumnFamilyOptions();
640         final RemoveEmptyValueCompactionFilterFactory cff = new RemoveEmptyValueCompactionFilterFactory()) {
641       options.setCompactionFilterFactory(cff);
642       assertThat(options.compactionFilterFactory()).isEqualTo(cff);
643     }
644   }
645 
646   @Test
compactionThreadLimiter()647   public void compactionThreadLimiter() {
648     try (final ColumnFamilyOptions options = new ColumnFamilyOptions();
649          final ConcurrentTaskLimiter compactionThreadLimiter =
650              new ConcurrentTaskLimiterImpl("name", 3)) {
651       options.setCompactionThreadLimiter(compactionThreadLimiter);
652       assertThat(options.compactionThreadLimiter()).isEqualTo(compactionThreadLimiter);
653     }
654   }
655 
656   @Test
oldDefaults()657   public void oldDefaults() {
658     try (final ColumnFamilyOptions options = new ColumnFamilyOptions()) {
659       options.oldDefaults(4, 6);
660       assertEquals(4 << 20, options.writeBufferSize());
661       assertThat(options.compactionPriority()).isEqualTo(CompactionPriority.ByCompensatedSize);
662       assertThat(options.targetFileSizeBase()).isEqualTo(2 * 1048576);
663       assertThat(options.maxBytesForLevelBase()).isEqualTo(10 * 1048576);
664       assertThat(options.softPendingCompactionBytesLimit()).isEqualTo(0);
665       assertThat(options.hardPendingCompactionBytesLimit()).isEqualTo(0);
666       assertThat(options.level0StopWritesTrigger()).isEqualTo(24);
667     }
668   }
669 
670   @Test
optimizeForSmallDbWithCache()671   public void optimizeForSmallDbWithCache() {
672     try (final ColumnFamilyOptions options = new ColumnFamilyOptions();
673          final Cache cache = new LRUCache(1024)) {
674       assertThat(options.optimizeForSmallDb(cache)).isEqualTo(options);
675     }
676   }
677 
678   @Test
cfPaths()679   public void cfPaths() throws IOException {
680     try (final ColumnFamilyOptions options = new ColumnFamilyOptions()) {
681       final List<DbPath> paths = Arrays.asList(
682           new DbPath(Paths.get("test1"), 2 << 25), new DbPath(Paths.get("/test2/path"), 2 << 25));
683       assertThat(options.cfPaths()).isEqualTo(Collections.emptyList());
684       assertThat(options.setCfPaths(paths)).isEqualTo(options);
685       assertThat(options.cfPaths()).isEqualTo(paths);
686     }
687   }
688 }
689