annotate tests/test_storage.nim @ 987:49d73ed5a1ec

add: tests and did some simplification of code
author sam <sam@basx.dev>
date Sun, 07 Apr 2024 01:17:40 +0700
parents 5db7721395fc
children 46778940c1d7
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
986
5db7721395fc add: final (for now) storage API
sam <sam@basx.dev>
parents:
diff changeset
1 import std/os
987
49d73ed5a1ec add: tests and did some simplification of code
sam <sam@basx.dev>
parents: 986
diff changeset
2 import std/strformat
986
5db7721395fc add: final (for now) storage API
sam <sam@basx.dev>
parents:
diff changeset
3
5db7721395fc add: final (for now) storage API
sam <sam@basx.dev>
parents:
diff changeset
4 import semicongine
5db7721395fc add: final (for now) storage API
sam <sam@basx.dev>
parents:
diff changeset
5
5db7721395fc add: final (for now) storage API
sam <sam@basx.dev>
parents:
diff changeset
6 proc testSimple(storage: StorageType) =
5db7721395fc add: final (for now) storage API
sam <sam@basx.dev>
parents:
diff changeset
7 const TEST_VALUE = 42
5db7721395fc add: final (for now) storage API
sam <sam@basx.dev>
parents:
diff changeset
8 const KEY = "test"
5db7721395fc add: final (for now) storage API
sam <sam@basx.dev>
parents:
diff changeset
9
5db7721395fc add: final (for now) storage API
sam <sam@basx.dev>
parents:
diff changeset
10 # get default
987
49d73ed5a1ec add: tests and did some simplification of code
sam <sam@basx.dev>
parents: 986
diff changeset
11 var future1 = load[int](storage, KEY)
49d73ed5a1ec add: tests and did some simplification of code
sam <sam@basx.dev>
parents: 986
diff changeset
12 assert future1.awaitResult() == default(type(TEST_VALUE))
986
5db7721395fc add: final (for now) storage API
sam <sam@basx.dev>
parents:
diff changeset
13
5db7721395fc add: final (for now) storage API
sam <sam@basx.dev>
parents:
diff changeset
14 # save and load custom
987
49d73ed5a1ec add: tests and did some simplification of code
sam <sam@basx.dev>
parents: 986
diff changeset
15 var future2 = store(storage, KEY, TEST_VALUE)
49d73ed5a1ec add: tests and did some simplification of code
sam <sam@basx.dev>
parents: 986
diff changeset
16 future2.awaitStored()
49d73ed5a1ec add: tests and did some simplification of code
sam <sam@basx.dev>
parents: 986
diff changeset
17 future1 = load[int](storage, KEY)
49d73ed5a1ec add: tests and did some simplification of code
sam <sam@basx.dev>
parents: 986
diff changeset
18 assert future1.awaitResult() == TEST_VALUE
986
5db7721395fc add: final (for now) storage API
sam <sam@basx.dev>
parents:
diff changeset
19
5db7721395fc add: final (for now) storage API
sam <sam@basx.dev>
parents:
diff changeset
20 proc testBusyWait(storage: StorageType) =
5db7721395fc add: final (for now) storage API
sam <sam@basx.dev>
parents:
diff changeset
21 const TEST_VALUE = "43"
5db7721395fc add: final (for now) storage API
sam <sam@basx.dev>
parents:
diff changeset
22 const KEY = "test2"
5db7721395fc add: final (for now) storage API
sam <sam@basx.dev>
parents:
diff changeset
23
5db7721395fc add: final (for now) storage API
sam <sam@basx.dev>
parents:
diff changeset
24 # get default
987
49d73ed5a1ec add: tests and did some simplification of code
sam <sam@basx.dev>
parents: 986
diff changeset
25 var future1 = load[string](storage, KEY)
49d73ed5a1ec add: tests and did some simplification of code
sam <sam@basx.dev>
parents: 986
diff changeset
26 while not future1.hasResult():
986
5db7721395fc add: final (for now) storage API
sam <sam@basx.dev>
parents:
diff changeset
27 sleep(1)
987
49d73ed5a1ec add: tests and did some simplification of code
sam <sam@basx.dev>
parents: 986
diff changeset
28 assert future1.getResult() == default(type(TEST_VALUE))
986
5db7721395fc add: final (for now) storage API
sam <sam@basx.dev>
parents:
diff changeset
29
5db7721395fc add: final (for now) storage API
sam <sam@basx.dev>
parents:
diff changeset
30 # save and load custom
987
49d73ed5a1ec add: tests and did some simplification of code
sam <sam@basx.dev>
parents: 986
diff changeset
31 var future2 = store(storage, KEY, TEST_VALUE)
49d73ed5a1ec add: tests and did some simplification of code
sam <sam@basx.dev>
parents: 986
diff changeset
32 while not future2.isStored():
49d73ed5a1ec add: tests and did some simplification of code
sam <sam@basx.dev>
parents: 986
diff changeset
33 sleep(1)
49d73ed5a1ec add: tests and did some simplification of code
sam <sam@basx.dev>
parents: 986
diff changeset
34 future1 = load[string](storage, KEY)
49d73ed5a1ec add: tests and did some simplification of code
sam <sam@basx.dev>
parents: 986
diff changeset
35 while not future1.hasResult():
986
5db7721395fc add: final (for now) storage API
sam <sam@basx.dev>
parents:
diff changeset
36 sleep(1)
987
49d73ed5a1ec add: tests and did some simplification of code
sam <sam@basx.dev>
parents: 986
diff changeset
37 assert future1.awaitResult() == TEST_VALUE
49d73ed5a1ec add: tests and did some simplification of code
sam <sam@basx.dev>
parents: 986
diff changeset
38
49d73ed5a1ec add: tests and did some simplification of code
sam <sam@basx.dev>
parents: 986
diff changeset
39 proc stressTest(storage: StorageType) =
49d73ed5a1ec add: tests and did some simplification of code
sam <sam@basx.dev>
parents: 986
diff changeset
40 for i in 1 .. 10000:
49d73ed5a1ec add: tests and did some simplification of code
sam <sam@basx.dev>
parents: 986
diff changeset
41 let key = &"key-{i}"
49d73ed5a1ec add: tests and did some simplification of code
sam <sam@basx.dev>
parents: 986
diff changeset
42 var p = store(storage, key, i)
49d73ed5a1ec add: tests and did some simplification of code
sam <sam@basx.dev>
parents: 986
diff changeset
43 p.awaitStored()
49d73ed5a1ec add: tests and did some simplification of code
sam <sam@basx.dev>
parents: 986
diff changeset
44 var p1 = load[int](storage, key)
49d73ed5a1ec add: tests and did some simplification of code
sam <sam@basx.dev>
parents: 986
diff changeset
45 assert p1.awaitResult() == i
49d73ed5a1ec add: tests and did some simplification of code
sam <sam@basx.dev>
parents: 986
diff changeset
46
49d73ed5a1ec add: tests and did some simplification of code
sam <sam@basx.dev>
parents: 986
diff changeset
47 proc concurrentStressTest(storage: StorageType) =
49d73ed5a1ec add: tests and did some simplification of code
sam <sam@basx.dev>
parents: 986
diff changeset
48 var storeFutures: seq[StoreFuture[int]]
49d73ed5a1ec add: tests and did some simplification of code
sam <sam@basx.dev>
parents: 986
diff changeset
49
49d73ed5a1ec add: tests and did some simplification of code
sam <sam@basx.dev>
parents: 986
diff changeset
50 for i in 1 .. 10000:
49d73ed5a1ec add: tests and did some simplification of code
sam <sam@basx.dev>
parents: 986
diff changeset
51 let key = &"key-{i}"
49d73ed5a1ec add: tests and did some simplification of code
sam <sam@basx.dev>
parents: 986
diff changeset
52 echo key
49d73ed5a1ec add: tests and did some simplification of code
sam <sam@basx.dev>
parents: 986
diff changeset
53 storeFutures.add store(storage, key, i)
49d73ed5a1ec add: tests and did some simplification of code
sam <sam@basx.dev>
parents: 986
diff changeset
54
49d73ed5a1ec add: tests and did some simplification of code
sam <sam@basx.dev>
parents: 986
diff changeset
55 for i in 1 .. 10000:
49d73ed5a1ec add: tests and did some simplification of code
sam <sam@basx.dev>
parents: 986
diff changeset
56 echo i
49d73ed5a1ec add: tests and did some simplification of code
sam <sam@basx.dev>
parents: 986
diff changeset
57 let key = &"key-{i}"
49d73ed5a1ec add: tests and did some simplification of code
sam <sam@basx.dev>
parents: 986
diff changeset
58 storeFutures[i - 1].awaitStored()
49d73ed5a1ec add: tests and did some simplification of code
sam <sam@basx.dev>
parents: 986
diff changeset
59 var p1 = load[int](storage, key)
49d73ed5a1ec add: tests and did some simplification of code
sam <sam@basx.dev>
parents: 986
diff changeset
60 assert p1.awaitResult() == i
986
5db7721395fc add: final (for now) storage API
sam <sam@basx.dev>
parents:
diff changeset
61
5db7721395fc add: final (for now) storage API
sam <sam@basx.dev>
parents:
diff changeset
62 proc main() =
987
49d73ed5a1ec add: tests and did some simplification of code
sam <sam@basx.dev>
parents: 986
diff changeset
63 SystemStorage.purge()
986
5db7721395fc add: final (for now) storage API
sam <sam@basx.dev>
parents:
diff changeset
64 echo "SystemStorage: Testing simple store/load"
5db7721395fc add: final (for now) storage API
sam <sam@basx.dev>
parents:
diff changeset
65 SystemStorage.testSimple()
5db7721395fc add: final (for now) storage API
sam <sam@basx.dev>
parents:
diff changeset
66 echo "SystemStorage: Testing store/load with busy wait"
5db7721395fc add: final (for now) storage API
sam <sam@basx.dev>
parents:
diff changeset
67 SystemStorage.testBusyWait()
5db7721395fc add: final (for now) storage API
sam <sam@basx.dev>
parents:
diff changeset
68
5db7721395fc add: final (for now) storage API
sam <sam@basx.dev>
parents:
diff changeset
69 UserStorage.purge()
5db7721395fc add: final (for now) storage API
sam <sam@basx.dev>
parents:
diff changeset
70 echo "UserStorage: Testing simple store/load"
5db7721395fc add: final (for now) storage API
sam <sam@basx.dev>
parents:
diff changeset
71 UserStorage.testSimple()
5db7721395fc add: final (for now) storage API
sam <sam@basx.dev>
parents:
diff changeset
72 echo "UserStorage: Testing store/load with busy wait"
5db7721395fc add: final (for now) storage API
sam <sam@basx.dev>
parents:
diff changeset
73 UserStorage.testBusyWait()
987
49d73ed5a1ec add: tests and did some simplification of code
sam <sam@basx.dev>
parents: 986
diff changeset
74
49d73ed5a1ec add: tests and did some simplification of code
sam <sam@basx.dev>
parents: 986
diff changeset
75 echo "Stress test with 10'000 saves/loads"
49d73ed5a1ec add: tests and did some simplification of code
sam <sam@basx.dev>
parents: 986
diff changeset
76 SystemStorage.stressTest()
49d73ed5a1ec add: tests and did some simplification of code
sam <sam@basx.dev>
parents: 986
diff changeset
77
49d73ed5a1ec add: tests and did some simplification of code
sam <sam@basx.dev>
parents: 986
diff changeset
78 SystemStorage.purge()
986
5db7721395fc add: final (for now) storage API
sam <sam@basx.dev>
parents:
diff changeset
79 UserStorage.purge()
5db7721395fc add: final (for now) storage API
sam <sam@basx.dev>
parents:
diff changeset
80
987
49d73ed5a1ec add: tests and did some simplification of code
sam <sam@basx.dev>
parents: 986
diff changeset
81 # TODO: fails currently, but is likely not too important
49d73ed5a1ec add: tests and did some simplification of code
sam <sam@basx.dev>
parents: 986
diff changeset
82 # echo "Stress test with 10'000 saves/loads and a little concurrency"
49d73ed5a1ec add: tests and did some simplification of code
sam <sam@basx.dev>
parents: 986
diff changeset
83 # SystemStorage.concurrentStressTest()
49d73ed5a1ec add: tests and did some simplification of code
sam <sam@basx.dev>
parents: 986
diff changeset
84
986
5db7721395fc add: final (for now) storage API
sam <sam@basx.dev>
parents:
diff changeset
85 when isMainModule:
5db7721395fc add: final (for now) storage API
sam <sam@basx.dev>
parents:
diff changeset
86 main()