Make all traces explicitly support the CTF 1.8 spec
[ctf-testsuite.git] / tests / 1.8 / stress / stream / pass / many-packets / test.py
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():
9 print('Please specify "prepare <SIZE>" or "clean <SIZE>" as first argument.')
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()
17 array_len = int(sys.argv[2])
18
19 tracedir_name = './trace-' + str(array_len) + '/'
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 = 1;\n'
37 ' minor = 8;\n'
38 ' uuid = "2a6422d0-6cee-11e0-8c08-cb07d7b3a564";\n'
39 ' byte_order = le;\n'
40 '}};\n'
41 '\n'
42 'stream {{\n'
43 ' packet.context := struct {{\n'
44 ' uint8_t packet_size; \n'
45 ' }};\n'
46 '}};\n').format(array_len)
47 metadata_f = open(output_metadata, 'w')
48 metadata_f.write(metadata_str)
49 metadata_f.close()
50
51 def generate_stream(array_len):
52 # Generate stream
53 stream_packet_header = [
54 0x8, # packet_size, in bits
55 ]
56 stream_f = open(output_stream, 'wb')
57 # generate trace content filled with 1-byte packets
58 for i in range(array_len):
59 write_binary(stream_f, stream_packet_header)
60 stream_f.close()
61
62 def test_prepare():
63 print('Preparing test for many packets length ' + str(array_len) + ' bytes')
64 os.mkdir(tracedir_name)
65 generate_metadata(array_len)
66 generate_stream(array_len)
67
68 def test_clean():
69 print('Cleaning up test for many packets length ' + str(array_len) + ' bytes')
70 try:
71 os.remove(output_metadata)
72 except:
73 pass
74 try:
75 os.remove(output_stream)
76 except:
77 pass
78 try:
79 os.rmdir(tracedir_name)
80 except:
81 pass
82
83 if (mode == "prepare"):
84 test_clean()
85 test_prepare()
86 elif (mode == "clean"):
87 test_clean()
88 else:
89 arg_err()
This page took 0.031034 seconds and 4 git commands to generate.