stress test: many traces
[ctf-testsuite.git] / tests / 1.8 / stress / stream / pass / many-traces / test.py
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
22 def write_binary(f, arr):
23 f.write(bytes(arr))
24
25 def generate_metadata(trace_nr):
26 # Generate metadata
27 metadata_str = \
28 ('/* CTF 1.8 */\n'
29 '\n'
30 'typealias integer {{ size = 8; align = 8; signed = false; base = hex; }} := uint8_t;\n'
31 'typealias integer {{ size = 32; align = 8; signed = false; base = hex; }} := uint32_t;\n'
32 'typealias integer {{ size = 64; align = 8; signed = false; base = hex; }} := uint64_t;\n'
33 '\n'
34 'trace {{\n'
35 ' major = 0;\n'
36 ' minor = 0;\n'
37 ' uuid = "2a6422d0-6cee-11e0-8c08-cb07d7b3a564";\n'
38 ' byte_order = le;\n'
39 ' packet.header := struct {{\n'
40 ' uint32_t magic;\n'
41 ' uint8_t uuid[16];\n'
42 ' }};\n'
43 '}};\n'
44 '\n'
45 'clock {{\n'
46 ' name = monotonic;\n'
47 ' uuid = "e016a9b9-1058-40d5-9074-6ce5e2bb59c6";\n'
48 ' description = "Monotonic Clock";\n'
49 ' freq = 1000000000;\n'
50 ' offset = 1415075600471492540;\n'
51 '}};\n'
52 '\n'
53 'event {{\n'
54 ' name = myevent;\n'
55 ' fields := struct {{\n'
56 ' uint8_t f;\n'
57 ' }};\n'
58 '}};\n').format()
59
60 metadata_f = open(tracedir_name + '/' + str(trace_nr) + '/metadata', 'w')
61 metadata_f.write(metadata_str)
62 metadata_f.close()
63
64 def generate_stream(trace_nr):
65 # Generate stream
66 stream_packet_header = [
67 0xC1, 0x1F, 0xFC, 0xC1, # magic
68 0x2A, 0x64, 0x22, 0xD0, 0x6C, 0xEE, 0x11, 0xE0,
69 0x8C, 0x08, 0xCB, 0x07, 0xD7, 0xB3, 0xA5, 0x64, # uuid
70 ]
71 event_payload = [
72 0x42,
73 ]
74 stream_f = open(tracedir_name + '/' + str(trace_nr) + '/stream', 'wb')
75 write_binary(stream_f, stream_packet_header)
76 # generate 8-bit per event
77 write_binary(stream_f, event_payload)
78 stream_f.close()
79
80 def generate_traces(array_len):
81 for i in range(array_len):
82 os.mkdir(tracedir_name + '/' + str(i))
83 generate_metadata(i)
84 generate_stream(i)
85
86 def test_prepare():
87 print('Preparing test for ' + str(array_len) + ' traces')
88 os.mkdir(tracedir_name)
89 generate_traces(array_len)
90
91 def test_clean():
92 print('Cleaning up test for ' + str(array_len) + ' traces')
93 try:
94 os.remove(output_metadata)
95 except:
96 pass
97 for i in range(array_len):
98 try:
99 os.remove(tracedir_name + '/' + str(i) + '/metadata')
100 except:
101 pass
102 try:
103 os.remove(tracedir_name + '/' + str(i) + '/stream')
104 except:
105 pass
106 try:
107 os.rmdir(tracedir_name + '/' + str(i))
108 except:
109 pass
110 try:
111 os.rmdir(tracedir_name)
112 except:
113 pass
114
115 if (mode == "prepare"):
116 test_clean()
117 test_prepare()
118 elif (mode == "clean"):
119 test_clean()
120 else:
121 arg_err()
This page took 0.031827 seconds and 4 git commands to generate.