unit-tests: Add another CHILD_SA delete collision

This commit is contained in:
Tobias Brunner
2016-06-17 18:48:02 +02:00
parent 7e5424868d
commit 32cfe1e00c
+56 -1
View File
@@ -127,6 +127,60 @@ START_TEST(test_collision)
}
END_TEST
/**
* This is like the collision above but one of the DELETEs is dropped or delayed
* so the other peer is not aware that there is a collision.
*/
START_TEST(test_collision_drop)
{
ike_sa_t *a, *b;
message_t *msg;
exchange_test_helper->establish_sa(exchange_test_helper,
&a, &b);
/* both peers delete the CHILD_SA concurrently */
assert_hook_not_called(child_updown);
call_ikesa(a, delete_child_sa, PROTO_ESP, 1, FALSE);
assert_child_sa_state(a, 1, CHILD_DELETING);
call_ikesa(b, delete_child_sa, PROTO_ESP, 2, FALSE);
assert_child_sa_state(b, 2, CHILD_DELETING);
assert_hook();
/* INFORMATIONAL { D } --> */
assert_hook_not_called(child_updown);
assert_single_payload(IN, PLV2_DELETE);
exchange_test_helper->process_message(exchange_test_helper, b, NULL);
assert_child_sa_state(b, 2, CHILD_DELETING);
assert_hook();
/* drop/delay the responder's message */
msg = exchange_test_helper->sender->dequeue(exchange_test_helper->sender);
/* <-- INFORMATIONAL { } */
assert_hook_updown(child_updown, FALSE);
assert_message_empty(IN);
exchange_test_helper->process_message(exchange_test_helper, a, NULL);
assert_child_sa_count(a, 0);
assert_hook();
/* <-- INFORMATIONAL { D } (delayed/retransmitted) */
assert_hook_not_called(child_updown);
assert_single_payload(IN, PLV2_DELETE);
exchange_test_helper->process_message(exchange_test_helper, a, msg);
assert_hook();
/* INFORMATIONAL { } --> */
assert_hook_updown(child_updown, FALSE);
assert_message_empty(IN);
exchange_test_helper->process_message(exchange_test_helper, b, NULL);
assert_child_sa_count(b, 0);
assert_hook();
call_ikesa(a, destroy);
call_ikesa(b, destroy);
}
END_TEST
Suite *child_delete_suite_create()
{
Suite *s;
@@ -138,8 +192,9 @@ Suite *child_delete_suite_create()
tcase_add_loop_test(tc, test_regular, 0, 2);
suite_add_tcase(s, tc);
tc = tcase_create("collision");
tc = tcase_create("collisions");
tcase_add_test(tc, test_collision);
tcase_add_test(tc, test_collision_drop);
suite_add_tcase(s, tc);
return s;