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 org.junit.Rule;
9 import org.junit.Test;
10 import org.junit.rules.TemporaryFolder;
11 
12 import java.util.ArrayList;
13 import java.util.Arrays;
14 import java.util.List;
15 
16 import static org.assertj.core.api.Assertions.assertThat;
17 
18 public class OptimisticTransactionDBTest {
19 
20   @Rule
21   public TemporaryFolder dbFolder = new TemporaryFolder();
22 
23   @Test
open()24   public void open() throws RocksDBException {
25     try (final Options options = new Options().setCreateIfMissing(true);
26          final OptimisticTransactionDB otdb = OptimisticTransactionDB.open(options,
27                  dbFolder.getRoot().getAbsolutePath())) {
28       assertThat(otdb).isNotNull();
29     }
30   }
31 
32   @Test
open_columnFamilies()33   public void open_columnFamilies() throws RocksDBException {
34     try(final DBOptions dbOptions = new DBOptions().setCreateIfMissing(true)
35           .setCreateMissingColumnFamilies(true);
36         final ColumnFamilyOptions myCfOpts = new ColumnFamilyOptions()) {
37 
38       final List<ColumnFamilyDescriptor> columnFamilyDescriptors =
39           Arrays.asList(
40               new ColumnFamilyDescriptor(RocksDB.DEFAULT_COLUMN_FAMILY),
41               new ColumnFamilyDescriptor("myCf".getBytes(), myCfOpts));
42 
43       final List<ColumnFamilyHandle> columnFamilyHandles = new ArrayList<>();
44 
45       try (final OptimisticTransactionDB otdb = OptimisticTransactionDB.open(dbOptions,
46                dbFolder.getRoot().getAbsolutePath(),
47                columnFamilyDescriptors, columnFamilyHandles)) {
48         try {
49           assertThat(otdb).isNotNull();
50         } finally {
51           for (final ColumnFamilyHandle handle : columnFamilyHandles) {
52             handle.close();
53           }
54         }
55       }
56     }
57   }
58 
59   @Test
beginTransaction()60   public void beginTransaction() throws RocksDBException {
61     try (final Options options = new Options().setCreateIfMissing(true);
62          final OptimisticTransactionDB otdb = OptimisticTransactionDB.open(
63              options, dbFolder.getRoot().getAbsolutePath());
64         final WriteOptions writeOptions = new WriteOptions()) {
65 
66       try(final Transaction txn = otdb.beginTransaction(writeOptions)) {
67         assertThat(txn).isNotNull();
68       }
69     }
70   }
71 
72   @Test
beginTransaction_transactionOptions()73   public void beginTransaction_transactionOptions() throws RocksDBException {
74     try (final Options options = new Options().setCreateIfMissing(true);
75          final OptimisticTransactionDB otdb = OptimisticTransactionDB.open(
76              options, dbFolder.getRoot().getAbsolutePath());
77          final WriteOptions writeOptions = new WriteOptions();
78          final OptimisticTransactionOptions optimisticTxnOptions =
79              new OptimisticTransactionOptions()) {
80 
81       try(final Transaction txn = otdb.beginTransaction(writeOptions,
82           optimisticTxnOptions)) {
83         assertThat(txn).isNotNull();
84       }
85     }
86   }
87 
88   @Test
beginTransaction_withOld()89   public void beginTransaction_withOld() throws RocksDBException {
90     try (final Options options = new Options().setCreateIfMissing(true);
91          final OptimisticTransactionDB otdb = OptimisticTransactionDB.open(
92              options, dbFolder.getRoot().getAbsolutePath());
93          final WriteOptions writeOptions = new WriteOptions()) {
94 
95       try(final Transaction txn = otdb.beginTransaction(writeOptions)) {
96         final Transaction txnReused = otdb.beginTransaction(writeOptions, txn);
97         assertThat(txnReused).isSameAs(txn);
98       }
99     }
100   }
101 
102   @Test
beginTransaction_withOld_transactionOptions()103   public void beginTransaction_withOld_transactionOptions()
104       throws RocksDBException {
105     try (final Options options = new Options().setCreateIfMissing(true);
106          final OptimisticTransactionDB otdb = OptimisticTransactionDB.open(
107              options, dbFolder.getRoot().getAbsolutePath());
108          final WriteOptions writeOptions = new WriteOptions();
109          final OptimisticTransactionOptions optimisticTxnOptions =
110              new OptimisticTransactionOptions()) {
111 
112       try(final Transaction txn = otdb.beginTransaction(writeOptions)) {
113         final Transaction txnReused = otdb.beginTransaction(writeOptions,
114             optimisticTxnOptions, txn);
115         assertThat(txnReused).isSameAs(txn);
116       }
117     }
118   }
119 
120   @Test
baseDB()121   public void baseDB() throws RocksDBException {
122     try (final Options options = new Options().setCreateIfMissing(true);
123          final OptimisticTransactionDB otdb = OptimisticTransactionDB.open(options,
124              dbFolder.getRoot().getAbsolutePath())) {
125       assertThat(otdb).isNotNull();
126       final RocksDB db = otdb.getBaseDB();
127       assertThat(db).isNotNull();
128       assertThat(db.isOwningHandle()).isFalse();
129     }
130   }
131 }
132