/ tests / test_backup.nim
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