summaryrefslogtreecommitdiff
path: root/runner/decoder.c
blob: 850b6ad5f486e2090a985fb06e2b60fa1c4cc496 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/stat.h>
#include <sys/types.h>

#include "runnercomms.h"

static bool handle_log(const struct runnerpacket *packet, runnerpacket_read_helper helper, void *userdata)
{
	printf("(pid=%d tid=%d) LOG\tstream=%d,text=%s",
	       packet->senderpid, packet->sendertid,
	       helper.log.stream, helper.log.text);
	if (strlen(helper.log.text) == 0 || helper.log.text[strlen(helper.log.text) - 1] != '\n')
		printf("\n");

	return true;
}

static bool handle_exec(const struct runnerpacket *packet, runnerpacket_read_helper helper, void *userdata)
{
	printf("(pid=%d tid=%d) EXEC\tcmdline=%s\n",
	       packet->senderpid, packet->sendertid,
	       helper.exec.cmdline);

	return true;
}

static bool handle_exit(const struct runnerpacket *packet, runnerpacket_read_helper helper, void *userdata)
{
	printf("(pid=%d tid=%d) EXIT\texitcode=%d,timeused=%s\n",
	       packet->senderpid, packet->sendertid,
	       helper.exit.exitcode, helper.exit.timeused);

	return true;
}

static bool handle_subtest_start(const struct runnerpacket *packet, runnerpacket_read_helper helper, void *userdata)
{
	printf("(pid=%d tid=%d) SUBTEST_START\tname=%s\n",
	       packet->senderpid, packet->sendertid,
	       helper.subteststart.name);

	return true;
}

static bool handle_subtest_result(const struct runnerpacket *packet, runnerpacket_read_helper helper, void *userdata)
{
	printf("(pid=%d tid=%d) SUBTEST_RESULT\tname=%s,result=%s,timeused=%s,reason=%s\n",
	       packet->senderpid, packet->sendertid,
	       helper.subtestresult.name,
	       helper.subtestresult.result,
	       helper.subtestresult.timeused,
	       helper.subtestresult.reason ?: "<null>");

	return true;
}

static bool handle_dynamic_subtest_start(const struct runnerpacket *packet, runnerpacket_read_helper helper, void *userdata)
{
	printf("(pid=%d tid=%d) DYNAMIC_SUBTEST_START\tname=%s\n",
	       packet->senderpid, packet->sendertid,
	       helper.dynamicsubteststart.name);

	return true;
}

static bool handle_dynamic_subtest_result(const struct runnerpacket *packet, runnerpacket_read_helper helper, void *userdata)
{
	printf("(pid=%d tid=%d) DYNAMIC_SUBTEST_RESULT\tname=%s,result=%s,timeused=%s,reason=%s\n",
	       packet->senderpid, packet->sendertid,
	       helper.dynamicsubtestresult.name,
	       helper.dynamicsubtestresult.result,
	       helper.dynamicsubtestresult.timeused,
	       helper.dynamicsubtestresult.reason ?: "<null>");

	return true;
}

static bool handle_versionstring(const struct runnerpacket *packet, runnerpacket_read_helper helper, void *userdata)
{
	printf("(pid=%d tid=%d) VERSIONSTRING\ttext=%s",
	       packet->senderpid, packet->sendertid,
	       helper.versionstring.text);
	if (strlen(helper.versionstring.text) == 0 || helper.versionstring.text[strlen(helper.versionstring.text) - 1] != '\n')
		printf("\n");

	return true;
}

static bool handle_result_override(const struct runnerpacket *packet, runnerpacket_read_helper helper, void *userdata)
{
	printf("pid=%d tid=%d) RESULT_OVERRIDE\tresult=%s\n",
	       packet->senderpid, packet->sendertid,
	       helper.resultoverride.result);

	return true;
}

struct comms_visitor logger = {
	.log = handle_log,
	.exec = handle_exec,
	.exit = handle_exit,
	.subtest_start = handle_subtest_start,
	.subtest_result = handle_subtest_result,
	.dynamic_subtest_start = handle_dynamic_subtest_start,
	.dynamic_subtest_result = handle_dynamic_subtest_result,
	.versionstring = handle_versionstring,
	.result_override = handle_result_override,
};

int main(int argc, char **argv)
{
	int fd;

	if (argc < 2) {
		printf("Usage: %s igt-comms-data-file\n", argv[0]);
		return 2;
	}

	fd = open(argv[1], O_RDONLY);
	if (fd < 0) {
		fprintf(stderr, "Failure opening %s: %m\n", argv[1]);
		return 1;
	}

	comms_read_dump(fd, &logger);

	return 0;
}