Commit | Line | Data |
---|---|---|
4eceb6e5 MD |
1 | #!/usr/bin/env python3 |
2 | ||
3 | # Expects either "prepare" or "clean" argument | |
4 | ||
5 | import sys | |
6 | import os | |
7 | ||
8 | def arg_err(): | |
14fedc72 | 9 | print('Please specify "prepare <SIZE>" or "clean <SIZE>" as first argument.') |
4eceb6e5 MD |
10 | sys.exit(-1) |
11 | ||
12 | if (len(sys.argv) <= 1): | |
13 | arg_err() | |
14 | mode = sys.argv[1] | |
15 | if (len(sys.argv) <= 2): | |
16 | arg_err() | |
48b1d0b5 | 17 | array_len = int(sys.argv[2]) |
4eceb6e5 | 18 | |
48b1d0b5 | 19 | tracedir_name = './trace-' + str(array_len) + '/' |
4eceb6e5 MD |
20 | output_metadata = tracedir_name + 'metadata' |
21 | output_stream = tracedir_name + 'stream' | |
22 | ||
23 | ||
24 | def write_binary(f, arr): | |
25 | f.write(bytes(arr)) | |
26 | ||
27 | def generate_metadata(array_len): | |
28 | # Generate metadata | |
29 | metadata_str = \ | |
30 | ( '/* CTF 1.8 */\n' | |
31 | '\n' | |
32 | 'typealias integer {{ size = 8; align = 8; signed = false; base = 10; }} := uint8_t;\n' | |
33 | 'typealias integer {{ size = 32; align = 32; signed = false; base = hex; }} := uint32_t;\n' | |
34 | '\n' | |
35 | 'trace {{\n' | |
36 | ' major = 0;\n' | |
37 | ' minor = 0;\n' | |
38 | ' uuid = "2a6422d0-6cee-11e0-8c08-cb07d7b3a564";\n' | |
39 | ' byte_order = le;\n' | |
40 | ' packet.header := struct {{\n' | |
41 | ' uint32_t magic;\n' | |
42 | ' uint8_t uuid[16];\n' | |
43 | ' }};\n' | |
44 | '}};\n' | |
45 | '\n' | |
46 | 'event {{\n' | |
47 | ' name = seq;\n' | |
48 | ' fields := struct {{\n' | |
49 | ' uint8_t field[{}]; \n' | |
50 | ' }};\n' | |
51 | '}};\n').format(array_len) | |
52 | metadata_f = open(output_metadata, 'w') | |
53 | metadata_f.write(metadata_str) | |
54 | metadata_f.close() | |
55 | ||
56 | def generate_stream(array_len): | |
57 | # Generate stream | |
58 | stream_packet_header = [ | |
59 | 0xC1, 0x1F, 0xFC, 0xC1, # magic | |
60 | 0x2A, 0x64, 0x22, 0xD0, 0x6C, 0xEE, 0x11, 0xE0, | |
61 | 0x8C, 0x08, 0xCB, 0x07, 0xD7, 0xB3, 0xA5, 0x64, # uuid | |
62 | ] | |
63 | stream_f = open(output_stream, 'wb') | |
64 | write_binary(stream_f, stream_packet_header) | |
65 | # generate array as event content | |
66 | os.ftruncate(stream_f.fileno(), len(stream_packet_header) + array_len) | |
67 | stream_f.close() | |
68 | ||
69 | def test_prepare(): | |
48b1d0b5 | 70 | print('Preparing test for array length ' + str(array_len) + ' bytes') |
4eceb6e5 MD |
71 | os.mkdir(tracedir_name) |
72 | generate_metadata(array_len) | |
73 | generate_stream(array_len) | |
74 | ||
75 | def test_clean(): | |
48b1d0b5 | 76 | print('Cleaning up test for array length ' + str(array_len) + ' bytes') |
4eceb6e5 MD |
77 | try: |
78 | os.remove(output_metadata) | |
79 | except: | |
80 | pass | |
81 | try: | |
82 | os.remove(output_stream) | |
83 | except: | |
84 | pass | |
85 | try: | |
86 | os.rmdir(tracedir_name) | |
87 | except: | |
88 | pass | |
89 | ||
90 | if (mode == "prepare"): | |
91 | test_clean() | |
92 | test_prepare() | |
93 | elif (mode == "clean"): | |
94 | test_clean() | |
95 | else: | |
96 | arg_err() |