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