static void test_handle_packet_in_lookup_failed() { setup(); uint64_t datapath_id = 0x101; uint32_t transaction_id = 1234; uint32_t buffer_id = 0; uint16_t total_len = 0; uint32_t in_port32 = 1; uint8_t reason = 0; buffer *data; void *user_data = NULL; data = alloc_buffer(); expect_not_value( mock_set_match_from_packet, match, NULL ); expect_value( mock_set_match_from_packet, in_port32, in_port32 ); expect_value( mock_set_match_from_packet, wildcards, 0 ); expect_value( mock_set_match_from_packet, packet, data ); will_return_void( mock_set_match_from_packet ); expect_not_value( mock_lookup_match_entry, match, NULL ); will_return( mock_lookup_match_entry, NULL ); handle_packet_in( datapath_id, transaction_id, buffer_id, total_len, ( uint16_t ) in_port32, reason, data, user_data ); free_buffer( data ); teardown(); }
static void test_handle_packet_in_send_failed() { setup(); uint64_t datapath_id = 0x101; uint32_t transaction_id = 1234; uint32_t buffer_id = 0; uint32_t total_len32 = 0; uint32_t in_port32 = 1; uint32_t reason32 = 0; buffer *data; void *user_data = NULL; match_entry match_entry; buffer *buf; data = alloc_buffer(); expect_not_value( mock_set_match_from_packet, match, NULL ); expect_value( mock_set_match_from_packet, in_port32, in_port32 ); expect_value( mock_set_match_from_packet, wildcards, 0 ); expect_value( mock_set_match_from_packet, packet, data ); will_return_void( mock_set_match_from_packet ); memset( &match_entry, 0, sizeof( match_entry ) ); match_entry.service_name = ( char * ) ( uintptr_t ) ( "service_name" ); match_entry.entry_name = ( char * ) ( uintptr_t ) ( "entry_name" ); expect_not_value( mock_lookup_match_entry, match, NULL ); will_return( mock_lookup_match_entry, &match_entry ); buf = alloc_buffer(); expect_value( mock_create_packet_in, transaction_id, transaction_id ); expect_value( mock_create_packet_in, buffer_id, buffer_id ); expect_value( mock_create_packet_in, total_len32, total_len32 ); expect_value( mock_create_packet_in, in_port32, in_port32 ); expect_value( mock_create_packet_in, reason32, reason32 ); expect_value( mock_create_packet_in, data, data ); will_return( mock_create_packet_in, buf ); expect_string( mock_send_message, service_name, match_entry.service_name ); expect_value( mock_send_message, tag32, MESSENGER_OPENFLOW_MESSAGE ); expect_not_value( mock_send_message, data, NULL ); expect_not_value( mock_send_message, len, 0 ); will_return( mock_send_message, false ); expect_string( mock_error, buffer, "Failed to send a message to service_name ( entry_name = entry_name, match = wildcards = 0, in_port = 1, dl_src = 00:00:00:00:00:00, dl_dst = 00:00:00:00:00:00, dl_vlan = 0, dl_vlan_pcp = 0, dl_type = 0, nw_tos = 0, nw_proto = 0, nw_src = 0.0.0.0, nw_dst = 0.0.0.0, tp_src = 0, tp_dst = 0 )." ); will_return_void( mock_error ); handle_packet_in( datapath_id, transaction_id, buffer_id, ( uint16_t ) total_len32, ( uint16_t ) in_port32, ( uint8_t ) reason32, data, user_data ); free_buffer( data ); teardown(); }
static void test_handle_packet_in_successed() { setup(); uint64_t datapath_id = 0x101; uint32_t transaction_id = 1234; uint32_t buffer_id = 0; uint32_t total_len32 = 0; uint32_t in_port32 = 1; uint32_t reason32 = 0; buffer *data; void *user_data = NULL; match_entry match_entry; buffer *buf; data = alloc_buffer(); expect_not_value( mock_set_match_from_packet, match, NULL ); expect_value( mock_set_match_from_packet, in_port32, in_port32 ); expect_value( mock_set_match_from_packet, wildcards, 0 ); expect_value( mock_set_match_from_packet, packet, data ); will_return_void( mock_set_match_from_packet ); memset( &match_entry, 0, sizeof( match_entry ) ); match_entry.service_name = ( char * ) ( uintptr_t ) ( "service_name" ); match_entry.entry_name = ( char * ) ( uintptr_t ) ( "entry_name" ); expect_not_value( mock_lookup_match_entry, match, NULL ); will_return( mock_lookup_match_entry, &match_entry ); buf = alloc_buffer(); expect_value( mock_create_packet_in, transaction_id, transaction_id ); expect_value( mock_create_packet_in, buffer_id, buffer_id ); expect_value( mock_create_packet_in, total_len32, total_len32 ); expect_value( mock_create_packet_in, in_port32, in_port32 ); expect_value( mock_create_packet_in, reason32, reason32 ); expect_value( mock_create_packet_in, data, data ); will_return( mock_create_packet_in, buf ); expect_value( mock_send_message, service_name, match_entry.service_name ); expect_value( mock_send_message, tag32, MESSENGER_OPENFLOW_MESSAGE ); expect_not_value( mock_send_message, data, NULL ); expect_not_value( mock_send_message, len, 0 ); will_return( mock_send_message, true ); handle_packet_in( datapath_id, transaction_id, buffer_id, ( uint16_t ) total_len32, ( uint16_t ) in_port32, ( uint8_t ) reason32, data, user_data ); free_buffer( data ); teardown(); }
static void test_read_pid_fail_if_pid_is_zero() { // Test if correctly access. char path[] = "/home/yasuhito/trema/tmp/chess.pid"; expect_string( mock_access, pathname, path ); expect_value( mock_access, mode, R_OK ); will_return( mock_access, 0 ); // Test if correctly opened. int pid_file_fd = 111; expect_string( mock_open, pathname, path ); expect_value( mock_open, flags, O_RDONLY ); expect_value( mock_open, mode, 0 ); will_return( mock_open, pid_file_fd ); // Test if correctly read. expect_value( mock_read, fd, pid_file_fd ); expect_not_value( mock_read, buf, NULL ); expect_value( mock_read, count, 10 - 1 ); char ZERO_pid_string[] = "0\n"; read_buffer = ZERO_pid_string; read_length = strlen( ZERO_pid_string ); will_return( mock_read, read_length ); // Test if correctly close. expect_value( mock_close, fd, pid_file_fd ); // Go pid_t pid = read_pid( "/home/yasuhito/trema/tmp", "chess" ); assert_true( pid == -1 ); }
static void test_secure_channel_accept_accept_failed() { int listen_fd = 0; listener_info.listen_fd = listen_fd; expect_value( mock_accept, sockfd, listen_fd ); expect_not_value( mock_accept, addr, NULL ); expect_not_value( mock_accept, addrlen, NULL ); expect_value( mock_accept, *addrlen, sizeof( struct sockaddr_in ) ); will_return( mock_accept, -1 ); secure_channel_accept( &listener_info ); teardown(); }
static void test_wait_child_wait3_signaled() { setup(); expect_not_value( mock_wait3, status, NULL ); expect_value( mock_wait3, options, WNOHANG ); expect_value( mock_wait3, rusage, NULL ); mock_wait3_status = 3; will_return( mock_wait3, 4444 ); expect_not_value( mock_wait3, status, NULL ); expect_value( mock_wait3, options, WNOHANG ); expect_value( mock_wait3, rusage, NULL ); will_return( mock_wait3, 0 ); wait_child(); teardown(); }
static void test_wait_child_wait3_coredump() { setup(); expect_not_value( mock_wait3, status, NULL ); expect_value( mock_wait3, options, WNOHANG ); expect_value( mock_wait3, rusage, NULL ); mock_wait3_status = 0x80 | 11; will_return( mock_wait3, 5678 ); expect_not_value( mock_wait3, status, NULL ); expect_value( mock_wait3, options, WNOHANG ); expect_value( mock_wait3, rusage, NULL ); will_return( mock_wait3, 0 ); wait_child(); teardown(); }
static void test_secure_channel_accept_parent_succeeded() { setup(); int listen_fd = 0; int accept_fd = 1; int pid = 1; /* parent */ listener_info.listen_fd = listen_fd; expect_value( mock_accept, sockfd, listen_fd ); expect_not_value( mock_accept, addr, NULL ); expect_not_value( mock_accept, addrlen, NULL ); expect_value( mock_accept, *addrlen, sizeof( struct sockaddr_in ) ); will_return( mock_accept, accept_fd ); will_return( mock_fork, pid ); expect_value( mock_close, fd, accept_fd ); will_return_void( mock_close ); secure_channel_accept( &listener_info ); }
static void test_packetin_filter_main_successed() { setup(); char *argv[] = { ( char * ) ( uintptr_t ) "packetin_filter", ( char * ) ( uintptr_t ) "lldp::topo", ( char * ) ( uintptr_t ) "packet_in::hub", NULL, }; int argc = ARRAY_SIZE( argv ) - 1; int ret; expect_not_value( mock_insert_match_entry, ofp_match, NULL ); expect_value( mock_insert_match_entry, priority32, 0x8000 ); expect_string( mock_insert_match_entry, service_name, "topo" ); expect_string( mock_insert_match_entry, entry_name, "filter-lldp" ); will_return_void( mock_insert_match_entry ); expect_not_value( mock_insert_match_entry, ofp_match, NULL ); expect_value( mock_insert_match_entry, priority32, 0 ); expect_string( mock_insert_match_entry, service_name, "hub" ); expect_string( mock_insert_match_entry, entry_name, "filter-any" ); will_return_void( mock_insert_match_entry ); will_return_void( mock_init_trema ); will_return( mock_set_packet_in_handler, true ); will_return_void( mock_start_trema ); optind = 1; ret = packetin_filter_main( argc, argv ); assert_true( ret == EXIT_SUCCESS ); teardown(); }
static void test_register_any_filter() { setup(); uint32_t priority32 = 3; expect_not_value( mock_insert_match_entry, ofp_match, NULL ); expect_value( mock_insert_match_entry, priority32, priority32 ); expect_string( mock_insert_match_entry, service_name, "service_name" ); expect_string( mock_insert_match_entry, entry_name, "entry_name" ); will_return_void( mock_insert_match_entry ); register_any_filter( ( uint16_t ) priority32, "service_name", "entry_name" ); teardown(); }
static void test_secure_channel_listen_start_listen_failed() { setup(); int listen_fd = 1; listener_info.listen_fd = -1; expect_value( mock_socket, domain, PF_INET ); expect_value( mock_socket, type, SOCK_STREAM ); expect_value( mock_socket, protocol, 0 ); will_return( mock_socket, listen_fd ); expect_value_count( mock_setsockopt, sockfd, listen_fd, 1 ); expect_value_count( mock_setsockopt, level, SOL_SOCKET, 1 ); expect_value_count( mock_setsockopt, optname, SO_REUSEADDR, 1 ); expect_not_value_count( mock_setsockopt, optval, NULL, 1 ); expect_value_count( mock_setsockopt, optlen, sizeof( int ), 1 ); will_return_count( mock_setsockopt, 0, 1 ); expect_value_count( mock_setsockopt, sockfd, listen_fd, 1 ); expect_value_count( mock_setsockopt, level, IPPROTO_TCP, 1 ); expect_value_count( mock_setsockopt, optname, TCP_NODELAY, 1 ); expect_not_value_count( mock_setsockopt, optval, NULL, 1 ); expect_value_count( mock_setsockopt, optlen, sizeof( int ), 1 ); will_return_count( mock_setsockopt, 0, 1 ); expect_value( mock_bind, sockfd, listen_fd ); expect_not_value( mock_bind, addr_in, NULL ); expect_value( mock_bind, addrlen, sizeof( struct sockaddr_in ) ); expect_value( mock_bind, sin_family32, AF_INET ); expect_value( mock_bind, sin_port32, ( uint32_t ) htons( OFP_TCP_PORT ) ); expect_value( mock_bind, addr_in->sin_addr.s_addr, htonl( INADDR_ANY ) ); will_return( mock_bind, 0 ); expect_value( mock_listen, sockfd, listen_fd ); expect_value( mock_listen, backlog, 128 ); will_return( mock_listen, -1 ); expect_value( mock_close, fd, listen_fd ); will_return_void( mock_close ); assert_false( secure_channel_listen_start( &listener_info ) ); assert_true( listener_info.listen_fd == -1 ); teardown(); }
static void test_read_pid_fail_if_kill_fail_with_ESRCH() { // Test if correctly access. char path[] = "/home/yasuhito/trema/tmp/chess.pid"; expect_string( mock_access, pathname, path ); expect_value( mock_access, mode, R_OK ); will_return( mock_access, 0 ); // Test if correctly opened. int pid_file_fd = 111; expect_string( mock_open, pathname, path ); expect_value( mock_open, flags, O_RDONLY ); expect_value( mock_open, mode, 0 ); will_return( mock_open, pid_file_fd ); // Test if correctly read. expect_value( mock_read, fd, pid_file_fd ); expect_not_value( mock_read, buf, NULL ); expect_value( mock_read, count, 10 - 1 ); char valid_pid_string[] = "123\n"; pid_t valid_pid = 123; read_buffer = valid_pid_string; read_length = strlen( valid_pid_string ); will_return( mock_read, read_length ); // Test if correctly read. expect_value( mock_kill, pid, valid_pid ); expect_value( mock_kill, sig, 0 ); errno = ESRCH; will_return( mock_kill, -1 ); // Test if correctly close. expect_value( mock_close, fd, pid_file_fd ); // Test if correctly unlink. expect_string( mock_unlink, pathname, path ); will_return( mock_unlink, 0 ); // Go pid_t pid = read_pid( "/home/yasuhito/trema/tmp", "chess" ); assert_true( pid == -1 ); }
static void test_secure_channel_accept_child_succeeded() { setup(); int listen_fd = 0; int accept_fd = 3; int pid = 0; /* child */ listener_info.switch_manager = "switch_manager"; listener_info.switch_manager_argc = 0; listener_info.listen_fd = listen_fd; expect_value( mock_accept, sockfd, listen_fd ); expect_not_value( mock_accept, addr, NULL ); expect_not_value( mock_accept, addrlen, NULL ); expect_value( mock_accept, *addrlen, sizeof( struct sockaddr_in ) ); will_return( mock_accept, accept_fd ); will_return( mock_fork, pid ); expect_string( mock_open, pathname, "/dev/null" ); expect_value( mock_open, flags, O_RDONLY ); will_return( mock_open, 1 ); expect_value( mock_dup2, oldfd, 1 ); expect_value( mock_dup2, newfd, 0 ); will_return( mock_dup2, 0 ); expect_value( mock_close, fd, 1 ); will_return_void( mock_close ); expect_string( mock_open, pathname, "/dev/null" ); expect_value( mock_open, flags, O_WRONLY ); will_return( mock_open, 2 ); expect_value( mock_dup2, oldfd, 2 ); expect_value( mock_dup2, newfd, 1 ); will_return( mock_dup2, 1 ); expect_value( mock_close, fd, 2 ); will_return_void( mock_close ); expect_string( mock_open, pathname, "/dev/null" ); expect_value( mock_open, flags, O_WRONLY ); will_return( mock_open, 3 ); expect_value( mock_dup2, oldfd, 3 ); expect_value( mock_dup2, newfd, 2 ); will_return( mock_dup2, 2 ); expect_value( mock_close, fd, 3 ); will_return_void( mock_close ); expect_string( mock_execvp, file, listener_info.switch_manager ); expect_not_value( mock_execvp, argv, NULL ); expect_not_value( mock_execvp, argv[ 0 ], NULL ); expect_not_value( mock_execvp, argv[ 1 ], NULL ); will_return( mock_execvp, 0 ); expect_value( mock_exit, status, EXIT_FAILURE ); will_return_void( mock_exit ); secure_channel_accept( &listener_info ); teardown(); }