1 /*
2    protocol types tests
3 
4    Copyright (C) Amitay Isaacs  2015
5 
6    This program is free software; you can redistribute it and/or modify
7    it under the terms of the GNU General Public License as published by
8    the Free Software Foundation; either version 3 of the License, or
9    (at your option) any later version.
10 
11    This program is distributed in the hope that it will be useful,
12    but WITHOUT ANY WARRANTY; without even the implied warranty of
13    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14    GNU General Public License for more details.
15 
16    You should have received a copy of the GNU General Public License
17    along with this program; if not, see <http://www.gnu.org/licenses/>.
18 */
19 
20 #include "replace.h"
21 #include "system/filesys.h"
22 
23 #include <assert.h>
24 
25 #include "protocol/protocol_basic.c"
26 #include "protocol/protocol_types.c"
27 #include "protocol/protocol_sock.c"
28 
29 #include "tests/src/protocol_common.h"
30 
31 PROTOCOL_TYPE2_TEST(TDB_DATA, ctdb_tdb_data);
32 PROTOCOL_TYPE2_TEST(TDB_DATA, ctdb_tdb_datan);
33 PROTOCOL_TYPE1_TEST(struct ctdb_latency_counter, ctdb_latency_counter);
34 
35 PROTOCOL_TYPE3_TEST(struct ctdb_statistics, ctdb_statistics);
36 PROTOCOL_TYPE3_TEST(struct ctdb_vnn_map, ctdb_vnn_map);
37 PROTOCOL_TYPE3_TEST(struct ctdb_dbid, ctdb_dbid);
38 PROTOCOL_TYPE3_TEST(struct ctdb_dbid_map, ctdb_dbid_map);
39 PROTOCOL_TYPE3_TEST(struct ctdb_pulldb, ctdb_pulldb);
40 PROTOCOL_TYPE3_TEST(struct ctdb_pulldb_ext, ctdb_pulldb_ext);
41 PROTOCOL_TYPE3_TEST(struct ctdb_db_vacuum, ctdb_db_vacuum);
42 PROTOCOL_TYPE1_TEST(struct ctdb_ltdb_header, ctdb_ltdb_header);
43 PROTOCOL_TYPE3_TEST(struct ctdb_rec_data, ctdb_rec_data);
44 PROTOCOL_TYPE3_TEST(struct ctdb_rec_buffer, ctdb_rec_buffer);
45 PROTOCOL_TYPE3_TEST(struct ctdb_traverse_start, ctdb_traverse_start);
46 PROTOCOL_TYPE3_TEST(struct ctdb_traverse_all, ctdb_traverse_all);
47 PROTOCOL_TYPE3_TEST(struct ctdb_traverse_start_ext, ctdb_traverse_start_ext);
48 PROTOCOL_TYPE3_TEST(struct ctdb_traverse_all_ext, ctdb_traverse_all_ext);
49 PROTOCOL_TYPE3_TEST(ctdb_sock_addr, ctdb_sock_addr);
50 PROTOCOL_TYPE3_TEST(struct ctdb_connection, ctdb_connection);
51 PROTOCOL_TYPE3_TEST(struct ctdb_connection_list, ctdb_connection_list);
52 PROTOCOL_TYPE3_TEST(struct ctdb_tunable, ctdb_tunable);
53 PROTOCOL_TYPE3_TEST(struct ctdb_node_flag_change, ctdb_node_flag_change);
54 PROTOCOL_TYPE3_TEST(struct ctdb_var_list, ctdb_var_list);
55 PROTOCOL_TYPE3_TEST(struct ctdb_tunable_list, ctdb_tunable_list);
56 PROTOCOL_TYPE3_TEST(struct ctdb_tickle_list, ctdb_tickle_list);
57 PROTOCOL_TYPE3_TEST(struct ctdb_addr_info, ctdb_addr_info);
58 PROTOCOL_TYPE3_TEST(struct ctdb_transdb, ctdb_transdb);
59 PROTOCOL_TYPE3_TEST(struct ctdb_uptime, ctdb_uptime);
60 PROTOCOL_TYPE3_TEST(struct ctdb_public_ip, ctdb_public_ip);
61 PROTOCOL_TYPE3_TEST(struct ctdb_public_ip_list, ctdb_public_ip_list);
62 PROTOCOL_TYPE3_TEST(struct ctdb_node_and_flags, ctdb_node_and_flags);
63 PROTOCOL_TYPE3_TEST(struct ctdb_node_map, ctdb_node_map);
64 PROTOCOL_TYPE3_TEST(struct ctdb_script, ctdb_script);
65 PROTOCOL_TYPE3_TEST(struct ctdb_script_list, ctdb_script_list);
66 PROTOCOL_TYPE3_TEST(struct ctdb_ban_state, ctdb_ban_state);
67 PROTOCOL_TYPE3_TEST(struct ctdb_notify_data, ctdb_notify_data);
68 PROTOCOL_TYPE3_TEST(struct ctdb_iface, ctdb_iface);
69 PROTOCOL_TYPE3_TEST(struct ctdb_iface_list, ctdb_iface_list);
70 PROTOCOL_TYPE3_TEST(struct ctdb_public_ip_info, ctdb_public_ip_info);
71 PROTOCOL_TYPE3_TEST(struct ctdb_statistics_list, ctdb_statistics_list);
72 PROTOCOL_TYPE3_TEST(struct ctdb_key_data, ctdb_key_data);
73 PROTOCOL_TYPE3_TEST(struct ctdb_db_statistics, ctdb_db_statistics);
74 PROTOCOL_TYPE3_TEST(struct ctdb_pid_srvid, ctdb_pid_srvid);
75 PROTOCOL_TYPE3_TEST(struct ctdb_election_message, ctdb_election_message);
76 PROTOCOL_TYPE3_TEST(struct ctdb_srvid_message, ctdb_srvid_message);
77 PROTOCOL_TYPE3_TEST(struct ctdb_disable_message, ctdb_disable_message);
78 PROTOCOL_TYPE1_TEST(struct ctdb_server_id, ctdb_server_id);
79 PROTOCOL_TYPE1_TEST(struct ctdb_g_lock, ctdb_g_lock);
80 PROTOCOL_TYPE3_TEST(struct ctdb_g_lock_list, ctdb_g_lock_list);
81 
82 PROTOCOL_TYPE1_TEST(struct sock_packet_header, sock_packet_header);
83 
84 static void test_ctdb_rec_buffer_read_write(void)
85 {
86 	TALLOC_CTX *mem_ctx = talloc_new(NULL);
87 	struct ctdb_rec_buffer *p1, **p2;
88 	const char *filename = "ctdb_rec_buffer_test.dat";
89 	int count = 100;
90 	int fd, i, ret;
91 	off_t offset;
92 
93 	p1 = talloc_array(mem_ctx, struct ctdb_rec_buffer, count);
94 	assert(p1 != NULL);
95 	for (i=0; i<count; i++) {
96 		fill_ctdb_rec_buffer(mem_ctx, &p1[i]);
97 	}
98 
99 	fd = open(filename, O_RDWR|O_CREAT, 0600);
100 	assert(fd != -1);
101 	unlink(filename);
102 
103 	for (i=0; i<count; i++) {
104 		ret = ctdb_rec_buffer_write(&p1[i], fd);
105 		assert(ret == 0);
106 	}
107 
108 	offset = lseek(fd, 0, SEEK_CUR);
109 	assert(offset != -1);
110 	offset = lseek(fd, -offset, SEEK_CUR);
111 	assert(offset == 0);
112 
113 	p2 = talloc_array(mem_ctx, struct ctdb_rec_buffer *, count);
114 	assert(p2 != NULL);
115 
116 	for (i=0; i<count; i++) {
117 		ret = ctdb_rec_buffer_read(fd, mem_ctx, &p2[i]);
118 		assert(ret == 0);
119 	}
120 
121 	close(fd);
122 
123 	for (i=0; i<count; i++) {
124 		verify_ctdb_rec_buffer(&p1[i], p2[i]);
125 	}
126 
127 	talloc_free(mem_ctx);
128 }
129 
130 int main(int argc, char *argv[])
131 {
132 	if (argc == 2) {
133 		int seed = atoi(argv[1]);
134 		srandom(seed);
135 	}
136 
137 	TEST_FUNC(ctdb_tdb_data)();
138 	TEST_FUNC(ctdb_tdb_datan)();
139 	TEST_FUNC(ctdb_latency_counter)();
140 
141 	TEST_FUNC(ctdb_statistics)();
142 	TEST_FUNC(ctdb_vnn_map)();
143 	TEST_FUNC(ctdb_dbid)();
144 	TEST_FUNC(ctdb_dbid_map)();
145 	TEST_FUNC(ctdb_pulldb)();
146 	TEST_FUNC(ctdb_pulldb_ext)();
147 	TEST_FUNC(ctdb_db_vacuum)();
148 	TEST_FUNC(ctdb_ltdb_header)();
149 	TEST_FUNC(ctdb_rec_data)();
150 	TEST_FUNC(ctdb_rec_buffer)();
151 	TEST_FUNC(ctdb_traverse_start)();
152 	TEST_FUNC(ctdb_traverse_all)();
153 	TEST_FUNC(ctdb_traverse_start_ext)();
154 	TEST_FUNC(ctdb_traverse_all_ext)();
155 	TEST_FUNC(ctdb_sock_addr)();
156 	TEST_FUNC(ctdb_connection)();
157 	TEST_FUNC(ctdb_connection_list)();
158 	TEST_FUNC(ctdb_tunable)();
159 	TEST_FUNC(ctdb_node_flag_change)();
160 	TEST_FUNC(ctdb_var_list)();
161 	TEST_FUNC(ctdb_tunable_list)();
162 	TEST_FUNC(ctdb_tickle_list)();
163 	TEST_FUNC(ctdb_addr_info)();
164 	TEST_FUNC(ctdb_transdb)();
165 	TEST_FUNC(ctdb_uptime)();
166 	TEST_FUNC(ctdb_public_ip)();
167 	TEST_FUNC(ctdb_public_ip_list)();
168 	TEST_FUNC(ctdb_node_and_flags)();
169 	TEST_FUNC(ctdb_node_map)();
170 	TEST_FUNC(ctdb_script)();
171 	TEST_FUNC(ctdb_script_list)();
172 	TEST_FUNC(ctdb_ban_state)();
173 	TEST_FUNC(ctdb_notify_data)();
174 	TEST_FUNC(ctdb_iface)();
175 	TEST_FUNC(ctdb_iface_list)();
176 	TEST_FUNC(ctdb_public_ip_info)();
177 	TEST_FUNC(ctdb_statistics_list)();
178 	TEST_FUNC(ctdb_key_data)();
179 	TEST_FUNC(ctdb_db_statistics)();
180 	TEST_FUNC(ctdb_pid_srvid)();
181 	TEST_FUNC(ctdb_election_message)();
182 	TEST_FUNC(ctdb_srvid_message)();
183 	TEST_FUNC(ctdb_disable_message)();
184 	TEST_FUNC(ctdb_server_id)();
185 	TEST_FUNC(ctdb_g_lock)();
186 	TEST_FUNC(ctdb_g_lock_list)();
187 
188 	TEST_FUNC(sock_packet_header)();
189 
190 	test_ctdb_rec_buffer_read_write();
191 
192 	return 0;
193 }
194