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