64 lines
1.4 KiB
Python
64 lines
1.4 KiB
Python
|
#!/usr/bin/env python3
|
||
|
|
||
|
import json
|
||
|
import pathlib
|
||
|
import os
|
||
|
import sys
|
||
|
import textwrap
|
||
|
|
||
|
test_header = """
|
||
|
set -u
|
||
|
|
||
|
setup_file() {
|
||
|
load "../lib/setup_file.sh"
|
||
|
}
|
||
|
|
||
|
teardown_file() {
|
||
|
load "../lib/teardown_file.sh"
|
||
|
}
|
||
|
|
||
|
setup() {
|
||
|
load "../lib/setup.sh"
|
||
|
}
|
||
|
"""
|
||
|
|
||
|
|
||
|
def write_chunk(target_dir, n, chunk):
|
||
|
with open(target_dir / f"hub-{n}.bats", "w") as f:
|
||
|
f.write(test_header)
|
||
|
for test in chunk:
|
||
|
cscli = os.environ['CSCLI']
|
||
|
crowdsec = os.environ['CROWDSEC']
|
||
|
testname = test['Name']
|
||
|
hubdir = os.environ['LOCAL_DIR'] + '/hub-tests'
|
||
|
f.write(textwrap.dedent(f"""
|
||
|
@test "{testname}" {{
|
||
|
run "{cscli}" \\
|
||
|
--crowdsec "{crowdsec}" \\
|
||
|
--cscli "{cscli}" \\
|
||
|
--hub "{hubdir}" \\
|
||
|
hubtest run "{testname}" \\
|
||
|
--clean
|
||
|
echo "$output"
|
||
|
assert_success
|
||
|
}}
|
||
|
"""))
|
||
|
|
||
|
|
||
|
def main():
|
||
|
hubtests_json = sys.argv[1]
|
||
|
target_dir = sys.argv[2]
|
||
|
|
||
|
with open(hubtests_json) as f:
|
||
|
j = json.load(f)
|
||
|
chunk_size = len(j) // 3 + 1
|
||
|
n = 1
|
||
|
for i in range(0, len(j), chunk_size):
|
||
|
chunk = j[i:i + chunk_size]
|
||
|
write_chunk(pathlib.Path(target_dir), n, chunk)
|
||
|
n += 1
|
||
|
|
||
|
|
||
|
if __name__ == "__main__":
|
||
|
main()
|