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