68 lines
1.8 KiB
Python
68 lines
1.8 KiB
Python
# This test checks the failure modes by setting a specific failure mode and then
|
|
# trying to open a corrupt database file.
|
|
#
|
|
# @TEST-GROUP: store
|
|
#
|
|
# @TEST-EXEC: btest-bg-run writer1 "btest-sqlite-driver --program=../writer.json > out.txt"
|
|
# @TEST-EXEC: btest-bg-run writer2 "btest-sqlite-driver --program=../writer.json > out.txt"
|
|
# @TEST-EXEC: btest-bg-wait 30
|
|
# @TEST-EXEC: python3 destroydb.py writer1/test.db
|
|
# @TEST-EXEC: python3 destroydb.py writer2/test.db
|
|
# @TEST-EXEC: btest-bg-run prog1 "btest-sqlite-driver --program=../prog1.json > out.txt"
|
|
# @TEST-EXEC: btest-bg-run prog2 "btest-sqlite-driver --program=../prog2.json > out.txt"
|
|
# @TEST-EXEC: btest-bg-wait 30
|
|
# @TEST-EXEC: awk 'FNR==1 {print "==> ", FILENAME}{print}' prog*/out.txt > all.txt
|
|
# @TEST-EXEC: btest-diff all.txt
|
|
|
|
# Writes 'key1' into an SQLite file.
|
|
@TEST-START-FILE writer.json
|
|
{
|
|
"config": {
|
|
"file-path": "test.db",
|
|
"options": {}
|
|
},
|
|
"commands": [
|
|
["put", ["key1", "value1"]],
|
|
["get", ["key1"]]
|
|
]
|
|
}
|
|
@TEST-END-FILE
|
|
|
|
# Fails when trying to read from a corrupt file.
|
|
@TEST-START-FILE prog1.json
|
|
{
|
|
"config": {
|
|
"file-path": "../writer1/test.db",
|
|
"options": {
|
|
"failure_mode": "Broker::SQLITE_FAILURE_MODE_FAIL"
|
|
}
|
|
},
|
|
"commands": [
|
|
["get", ["key1"]]
|
|
]
|
|
}
|
|
@TEST-END-FILE
|
|
|
|
# Deletes the corrupt file and carries on.
|
|
@TEST-START-FILE prog2.json
|
|
{
|
|
"config": {
|
|
"file-path": "../writer2/test.db",
|
|
"options": {
|
|
"failure_mode": "Broker::SQLITE_FAILURE_MODE_DELETE"
|
|
}
|
|
},
|
|
"commands": [
|
|
["get", ["key1"]]
|
|
]
|
|
}
|
|
@TEST-END-FILE
|
|
|
|
# Destroys a database by writing garbage into the SQLite file.
|
|
@TEST-START-FILE destroydb.py
|
|
import sys
|
|
with open(sys.argv[1], "r+b") as f:
|
|
f.seek(2)
|
|
f.write('AAAA'.encode('ascii'))
|
|
@TEST-END-FILE
|