annotate tests/test_storage.nim @ 1096:9809bd9e2cdb

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