Files
flexnbd-c/tests/check_client.c

120 lines
2.4 KiB
C
Raw Normal View History

2012-06-07 11:44:19 +01:00
#include <check.h>
#include "self_pipe.h"
#include "nbdtypes.h"
2012-06-07 11:44:19 +01:00
#include "client.h"
#include <unistd.h>
#define FAKE_SERVER ((struct server *)23)
#define FAKE_SOCKET (42)
2012-06-07 11:44:19 +01:00
START_TEST( test_assigns_socket )
{
struct client * c;
c = client_create( FAKE_SERVER, FAKE_SOCKET );
2012-06-07 11:44:19 +01:00
fail_unless( 42 == c->socket, "Socket wasn't assigned." );
}
END_TEST
START_TEST( test_assigns_server )
{
struct client * c;
/* can't predict the storage size so we can't allocate one on
* the stack
*/
c = client_create( FAKE_SERVER, FAKE_SOCKET );
2012-06-07 11:44:19 +01:00
fail_unless( FAKE_SERVER == c->serve, "Serve wasn't assigned." );
2012-06-07 11:44:19 +01:00
}
END_TEST
START_TEST( test_opens_stop_signal )
{
struct client *c = client_create( FAKE_SERVER, FAKE_SOCKET );
2012-06-07 11:44:19 +01:00
client_signal_stop( c );
fail_unless( 1 == self_pipe_signal_clear( c->stop_signal ),
"No signal was sent." );
}
END_TEST
int fd_is_closed(int);
2012-06-07 11:44:19 +01:00
START_TEST( test_closes_stop_signal )
{
struct client *c = client_create( FAKE_SERVER, FAKE_SOCKET );
2012-06-07 11:44:19 +01:00
int read_fd = c->stop_signal->read_fd;
int write_fd = c->stop_signal->write_fd;
client_destroy( c );
fail_unless( fd_is_closed( read_fd ), "Stop signal wasn't destroyed." );
fail_unless( fd_is_closed( write_fd ), "Stop signal wasn't destroyed." );
}
END_TEST
START_TEST( test_read_request_quits_on_stop_signal )
{
int fds[2];
struct nbd_request nbdr;
pipe( fds );
struct client *c = client_create( FAKE_SERVER, fds[0] );
client_signal_stop( c );
int client_read_request( struct client *, struct nbd_request *);
fail_unless( 0 == client_read_request( c, &nbdr ), "Didn't quit on stop." );
close( fds[0] );
close( fds[1] );
}
END_TEST
Suite *client_suite(void)
2012-06-07 11:44:19 +01:00
{
Suite *s = suite_create("client");
TCase *tc_create = tcase_create("create");
TCase *tc_signal = tcase_create("signal");
TCase *tc_destroy = tcase_create("destroy");
tcase_add_test(tc_create, test_assigns_socket);
tcase_add_test(tc_create, test_assigns_server);
tcase_add_test(tc_signal, test_opens_stop_signal);
tcase_add_test(tc_signal, test_read_request_quits_on_stop_signal);
2012-06-07 11:44:19 +01:00
tcase_add_test( tc_destroy, test_closes_stop_signal );
suite_add_tcase(s, tc_create);
suite_add_tcase(s, tc_signal);
suite_add_tcase(s, tc_destroy);
return s;
}
int main(void)
{
int number_failed;
Suite *s = client_suite();
SRunner *sr = srunner_create(s);
srunner_run_all(sr, CK_NORMAL);
number_failed = srunner_ntests_failed(sr);
srunner_free(sr);
return (number_failed == 0) ? 0 : 1;
}