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.Test;
9 
10 import org.rocksdb.Status.Code;
11 import org.rocksdb.Status.SubCode;
12 import static org.assertj.core.api.Assertions.assertThat;
13 import static org.junit.Assert.fail;
14 
15 public class RocksDBExceptionTest {
16 
17   @Test
exception()18   public void exception() {
19     try {
20       raiseException();
21     } catch(final RocksDBException e) {
22       assertThat(e.getStatus()).isNull();
23       assertThat(e.getMessage()).isEqualTo("test message");
24       return;
25     }
26     fail();
27   }
28 
29   @Test
exceptionWithStatusCode()30   public void exceptionWithStatusCode() {
31     try {
32       raiseExceptionWithStatusCode();
33     } catch(final RocksDBException e) {
34       assertThat(e.getStatus()).isNotNull();
35       assertThat(e.getStatus().getCode()).isEqualTo(Code.NotSupported);
36       assertThat(e.getStatus().getSubCode()).isEqualTo(SubCode.None);
37       assertThat(e.getStatus().getState()).isNull();
38       assertThat(e.getMessage()).isEqualTo("test message");
39       return;
40     }
41     fail();
42   }
43 
44   @Test
exceptionNoMsgWithStatusCode()45   public void exceptionNoMsgWithStatusCode() {
46     try {
47       raiseExceptionNoMsgWithStatusCode();
48     } catch(final RocksDBException e) {
49       assertThat(e.getStatus()).isNotNull();
50       assertThat(e.getStatus().getCode()).isEqualTo(Code.NotSupported);
51       assertThat(e.getStatus().getSubCode()).isEqualTo(SubCode.None);
52       assertThat(e.getStatus().getState()).isNull();
53       assertThat(e.getMessage()).isEqualTo(Code.NotSupported.name());
54       return;
55     }
56     fail();
57   }
58 
59   @Test
exceptionWithStatusCodeSubCode()60   public void exceptionWithStatusCodeSubCode() {
61     try {
62       raiseExceptionWithStatusCodeSubCode();
63     } catch(final RocksDBException e) {
64       assertThat(e.getStatus()).isNotNull();
65       assertThat(e.getStatus().getCode()).isEqualTo(Code.TimedOut);
66       assertThat(e.getStatus().getSubCode())
67           .isEqualTo(Status.SubCode.LockTimeout);
68       assertThat(e.getStatus().getState()).isNull();
69       assertThat(e.getMessage()).isEqualTo("test message");
70       return;
71     }
72     fail();
73   }
74 
75   @Test
exceptionNoMsgWithStatusCodeSubCode()76   public void exceptionNoMsgWithStatusCodeSubCode() {
77     try {
78       raiseExceptionNoMsgWithStatusCodeSubCode();
79     } catch(final RocksDBException e) {
80       assertThat(e.getStatus()).isNotNull();
81       assertThat(e.getStatus().getCode()).isEqualTo(Code.TimedOut);
82       assertThat(e.getStatus().getSubCode()).isEqualTo(SubCode.LockTimeout);
83       assertThat(e.getStatus().getState()).isNull();
84       assertThat(e.getMessage()).isEqualTo(Code.TimedOut.name() +
85           "(" + SubCode.LockTimeout.name() + ")");
86       return;
87     }
88     fail();
89   }
90 
91   @Test
exceptionWithStatusCodeState()92   public void exceptionWithStatusCodeState() {
93     try {
94       raiseExceptionWithStatusCodeState();
95     } catch(final RocksDBException e) {
96       assertThat(e.getStatus()).isNotNull();
97       assertThat(e.getStatus().getCode()).isEqualTo(Code.NotSupported);
98       assertThat(e.getStatus().getSubCode()).isEqualTo(SubCode.None);
99       assertThat(e.getStatus().getState()).isNotNull();
100       assertThat(e.getMessage()).isEqualTo("test message");
101       return;
102     }
103     fail();
104   }
105 
raiseException()106   private native void raiseException() throws RocksDBException;
raiseExceptionWithStatusCode()107   private native void raiseExceptionWithStatusCode() throws RocksDBException;
raiseExceptionNoMsgWithStatusCode()108   private native void raiseExceptionNoMsgWithStatusCode() throws RocksDBException;
raiseExceptionWithStatusCodeSubCode()109   private native void raiseExceptionWithStatusCodeSubCode()
110       throws RocksDBException;
raiseExceptionNoMsgWithStatusCodeSubCode()111   private native void raiseExceptionNoMsgWithStatusCodeSubCode()
112       throws RocksDBException;
raiseExceptionWithStatusCodeState()113   private native void raiseExceptionWithStatusCodeState()
114       throws RocksDBException;
115 }
116