test_backup.nim
1 # Nim-RocksDB 2 # Copyright 2024 Status Research & Development GmbH 3 # Licensed under either of 4 # 5 # * Apache License, version 2.0, ([LICENSE-APACHE](LICENSE-APACHE) or http://www.apache.org/licenses/LICENSE-2.0) 6 # * GPL license, version 2.0, ([LICENSE-GPLv2](LICENSE-GPLv2) or https://www.gnu.org/licenses/old-licenses/gpl-2.0.en.html) 7 # 8 # at your option. This file may not be copied, modified, or distributed except according to those terms. 9 10 {.used.} 11 12 import std/os, tempfile, unittest2, ../rocksdb/backup, ./test_helper 13 14 suite "BackupEngineRef Tests": 15 let 16 key = @[byte(1), 2, 3, 4, 5] 17 val = @[byte(1), 2, 3, 4, 5] 18 19 setup: 20 let 21 dbPath = mkdtemp() / "data" 22 dbBackupPath = mkdtemp() / "backup" 23 dbRestorePath = mkdtemp() / "restore" 24 db = initReadWriteDb(dbPath) 25 26 teardown: 27 db.close() 28 removeDir($dbPath) 29 removeDir($dbBackupPath) 30 removeDir($dbRestorePath) 31 32 test "Test backup": 33 let engine = initBackupEngine(dbBackupPath) 34 35 check: 36 db.put(key, val).isOk() 37 db.keyExists(key).value() 38 39 check engine.createNewBackup(db).isOk() 40 41 check: 42 db.delete(key).isOk() 43 not db.keyExists(key).value() 44 45 check engine.restoreDbFromLatestBackup(dbRestorePath).isOk() 46 47 let db2 = initReadWriteDb(dbRestorePath) 48 check db2.keyExists(key).value() 49 db2.close() 50 51 engine.close() 52 53 test "Test close": 54 let engine = openBackupEngine(dbPath).get() 55 56 check not engine.isClosed() 57 engine.close() 58 check engine.isClosed() 59 engine.close() 60 check engine.isClosed() 61 62 test "Test auto close enabled": 63 let 64 backupOpts = defaultBackupEngineOptions(dbPath, autoClose = true) 65 backupEngine = openBackupEngine(dbPath, backupOpts).get() 66 67 check: 68 backupOpts.isClosed() == false 69 backupEngine.isClosed() == false 70 71 backupEngine.close() 72 73 check: 74 backupOpts.isClosed() == true 75 backupEngine.isClosed() == true 76 77 test "Test auto close disabled": 78 let 79 backupOpts = defaultBackupEngineOptions(dbPath, autoClose = false) 80 backupEngine = openBackupEngine(dbPath, backupOpts).get() 81 82 check: 83 backupOpts.isClosed() == false 84 backupEngine.isClosed() == false 85 86 backupEngine.close() 87 88 check: 89 backupOpts.isClosed() == false 90 backupEngine.isClosed() == true