示例#1
0
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();
}
示例#2
0
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();
}
示例#3
0
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();
}
示例#4
0
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 );
}
示例#5
0
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();
}
示例#6
0
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();
}
示例#7
0
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();
}
示例#8
0
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 );
}
示例#9
0
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();
}
示例#10
0
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();
}
示例#11
0
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();
}
示例#12
0
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 );
}
示例#13
0
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();
}