Commit | Line | Data |
---|---|---|
48beefc9 NC |
1 | /* Copyright (C) 2010 Nils Carlson |
2 | * | |
3 | * This library is free software; you can redistribute it and/or | |
4 | * modify it under the terms of the GNU Lesser General Public | |
5 | * License as published by the Free Software Foundation; either | |
6 | * version 2.1 of the License, or (at your option) any later version. | |
7 | * | |
8 | * This library is distributed in the hope that it will be useful, | |
9 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
10 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
11 | * Lesser General Public License for more details. | |
12 | * | |
13 | * You should have received a copy of the GNU Lesser General Public | |
14 | * License along with this library; if not, write to the Free Software | |
15 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA | |
16 | */ | |
17 | ||
2298f329 | 18 | /* Simple function tests for ustctl */ |
48beefc9 NC |
19 | |
20 | #include <stdio.h> | |
21 | #include <unistd.h> | |
22 | #include <sys/types.h> | |
23 | ||
24 | #include <ust/marker.h> | |
2298f329 | 25 | #include <ust/ustctl.h> |
48beefc9 NC |
26 | |
27 | #include "tap.h" | |
28 | ||
2298f329 | 29 | static void ustctl_function_tests(pid_t pid) |
48beefc9 NC |
30 | { |
31 | int result; | |
32 | unsigned int subbuf_size, subbuf_num; | |
33 | unsigned int new_subbuf_size, new_subbuf_num; | |
34 | struct marker_status *marker_status, *ms_ptr; | |
35 | char *old_socket_path, *new_socket_path; | |
36 | char *tmp_ustd_socket = "/tmp/tmp_ustd_socket"; | |
d89b8191 | 37 | char *trace = "auto"; |
48beefc9 NC |
38 | |
39 | printf("Connecting to pid %d\n", pid); | |
40 | ||
41 | /* marker status array functions */ | |
2298f329 NC |
42 | result = ustctl_get_cmsf(&marker_status, pid); |
43 | tap_ok(!result, "ustctl_get_cmsf"); | |
48beefc9 NC |
44 | |
45 | result = 0; | |
46 | for (ms_ptr = marker_status; ms_ptr->channel; ms_ptr++) { | |
47 | if (!strcmp(ms_ptr->channel, "ust") && | |
48 | !strcmp(ms_ptr->marker, "bar")) { | |
49 | result = 1; | |
50 | } | |
51 | } | |
52 | tap_ok(result, "Found channel \"ust\", marker \"bar\""); | |
53 | ||
2298f329 | 54 | tap_ok(!ustctl_free_cmsf(marker_status), "ustctl_free_cmsf"); |
48beefc9 NC |
55 | |
56 | /* Get and set the socket path */ | |
2298f329 NC |
57 | tap_ok(!ustctl_get_sock_path(&old_socket_path, pid), |
58 | "ustctl_get_sock_path"); | |
48beefc9 NC |
59 | |
60 | printf("Socket path: %s\n", old_socket_path); | |
61 | ||
2298f329 NC |
62 | tap_ok(!ustctl_set_sock_path(tmp_ustd_socket, pid), |
63 | "ustctl_set_sock_path - set a new path"); | |
48beefc9 | 64 | |
2298f329 NC |
65 | tap_ok(!ustctl_get_sock_path(&new_socket_path, pid), |
66 | "ustctl_get_sock_path - get the new path"); | |
48beefc9 NC |
67 | |
68 | tap_ok(!strcmp(new_socket_path, tmp_ustd_socket), | |
69 | "Compare the set path and the retrieved path"); | |
70 | ||
71 | free(new_socket_path); | |
72 | ||
2298f329 | 73 | tap_ok(!ustctl_set_sock_path(old_socket_path, pid), |
48beefc9 NC |
74 | "Reset the socket path"); |
75 | ||
76 | free(old_socket_path); | |
77 | ||
78 | /* Enable, disable markers */ | |
2298f329 NC |
79 | tap_ok(!ustctl_set_marker_state(trace, "ust", "bar", 1, pid), |
80 | "ustctl_set_marker_state - existing marker ust bar"); | |
48beefc9 NC |
81 | |
82 | /* Create and allocate a trace */ | |
2298f329 | 83 | tap_ok(!ustctl_create_trace(trace, pid), "ustctl_create_trace"); |
48beefc9 | 84 | |
2298f329 | 85 | tap_ok(!ustctl_alloc_trace(trace, pid), "ustctl_alloc_trace"); |
48beefc9 NC |
86 | |
87 | /* Get subbuf size and number */ | |
2298f329 NC |
88 | subbuf_num = ustctl_get_subbuf_num(trace, "ust", pid); |
89 | tap_ok(subbuf_num > 0, "ustctl_get_subbuf_num - %d sub-buffers", | |
48beefc9 NC |
90 | subbuf_num); |
91 | ||
2298f329 NC |
92 | subbuf_size = ustctl_get_subbuf_size(trace, "ust", pid); |
93 | tap_ok(subbuf_size, "ustctl_get_subbuf_size - sub-buffer size is %d", | |
48beefc9 NC |
94 | subbuf_size); |
95 | ||
96 | /* Start the trace */ | |
2298f329 | 97 | tap_ok(!ustctl_start_trace(trace, pid), "ustctl_start_trace"); |
48beefc9 NC |
98 | |
99 | ||
100 | /* Stop the trace and destroy it*/ | |
2298f329 | 101 | tap_ok(!ustctl_stop_trace(trace, pid), "ustctl_stop_trace"); |
48beefc9 | 102 | |
2298f329 | 103 | tap_ok(!ustctl_destroy_trace(trace, pid), "ustctl_destroy_trace"); |
48beefc9 NC |
104 | |
105 | /* Create a new trace */ | |
2298f329 | 106 | tap_ok(!ustctl_create_trace(trace, pid), "ustctl_create_trace - create a new trace"); |
48beefc9 NC |
107 | |
108 | printf("Setting new subbufer number and sizes (doubling)\n"); | |
109 | new_subbuf_num = 2 * subbuf_num; | |
110 | new_subbuf_size = 2 * subbuf_size; | |
111 | ||
2298f329 NC |
112 | tap_ok(!ustctl_set_subbuf_num(trace, "ust", new_subbuf_num, pid), |
113 | "ustctl_set_subbuf_num"); | |
48beefc9 | 114 | |
2298f329 NC |
115 | tap_ok(!ustctl_set_subbuf_size(trace, "ust", new_subbuf_size, pid), |
116 | "ustctl_set_subbuf_size"); | |
48beefc9 NC |
117 | |
118 | ||
119 | /* Allocate the new trace */ | |
2298f329 | 120 | tap_ok(!ustctl_alloc_trace(trace, pid), "ustctl_alloc_trace - allocate the new trace"); |
48beefc9 NC |
121 | |
122 | ||
123 | /* Get subbuf size and number and compare with what was set */ | |
2298f329 | 124 | subbuf_num = ustctl_get_subbuf_num(trace, "ust", pid); |
48beefc9 | 125 | |
2298f329 | 126 | subbuf_size = ustctl_get_subbuf_size(trace, "ust", pid); |
48beefc9 NC |
127 | |
128 | tap_ok(subbuf_num == new_subbuf_num, "Set a new subbuf number, %d == %d", | |
129 | subbuf_num, new_subbuf_num); | |
130 | ||
131 | ||
2298f329 | 132 | result = ustctl_get_subbuf_size(trace, "ust", pid); |
48beefc9 NC |
133 | tap_ok(subbuf_size == new_subbuf_size, "Set a new subbuf size, %d == %d", |
134 | subbuf_size, new_subbuf_size); | |
135 | ||
2298f329 | 136 | tap_ok(!ustctl_destroy_trace(trace, pid), "ustctl_destroy_trace - without ever starting"); |
48beefc9 NC |
137 | |
138 | ||
139 | printf("##### Tests that definetly should work are completed #####\n"); | |
140 | printf("############## Start expected failure cases ##############\n"); | |
141 | ||
2298f329 | 142 | tap_ok(ustctl_set_marker_state(trace, "ust","bar", 1, pid), |
48beefc9 NC |
143 | "Enable already enabled marker ust/bar"); |
144 | ||
2298f329 | 145 | tap_ok(ustctl_set_marker_state(trace, "ustl", "blar", 1, pid), |
48beefc9 NC |
146 | "Enable non-existent marker ustl blar"); |
147 | ||
2298f329 | 148 | tap_ok(ustctl_start_trace(trace, pid), |
48beefc9 NC |
149 | "Start a non-existent trace"); |
150 | ||
2298f329 | 151 | tap_ok(ustctl_destroy_trace(trace, pid), |
48beefc9 NC |
152 | "Destroy non-existent trace"); |
153 | ||
154 | exit(tap_status() ? EXIT_FAILURE : EXIT_SUCCESS); | |
155 | ||
156 | } | |
157 | ||
158 | ||
159 | int main() | |
160 | { | |
161 | int i, status, pipefd[2]; | |
162 | pid_t parent_pid, child_pid; | |
163 | FILE *pipe_file; | |
164 | ||
165 | tap_plan(27); | |
166 | ||
2298f329 | 167 | printf("Function tests for ustctl\n"); |
48beefc9 NC |
168 | |
169 | parent_pid = getpid(); | |
170 | child_pid = fork(); | |
171 | if (child_pid) { | |
172 | for(i=0; i<10; i++) { | |
173 | trace_mark(ust, bar, "str %s", "FOOBAZ"); | |
174 | trace_mark(ust, bar2, "number1 %d number2 %d", 53, 9800); | |
175 | usleep(100000); | |
176 | } | |
177 | ||
178 | wait(&status); | |
179 | } else { | |
2298f329 | 180 | ustctl_function_tests(parent_pid); |
48beefc9 NC |
181 | } |
182 | ||
183 | exit(status ? EXIT_FAILURE : EXIT_SUCCESS); | |
184 | } |