Annotation of embedaddon/strongswan/src/libcharon/tests/suites/test_ike_delete.c, revision 1.1
1.1 ! misho 1: /*
! 2: * Copyright (C) 2016 Tobias Brunner
! 3: * HSR Hochschule fuer Technik Rapperswil
! 4: *
! 5: * This program is free software; you can redistribute it and/or modify it
! 6: * under the terms of the GNU General Public License as published by the
! 7: * Free Software Foundation; either version 2 of the License, or (at your
! 8: * option) any later version. See <http://www.fsf.org/copyleft/gpl.txt>.
! 9: *
! 10: * This program is distributed in the hope that it will be useful, but
! 11: * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
! 12: * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
! 13: * for more details.
! 14: */
! 15:
! 16: #include "test_suite.h"
! 17:
! 18: #include <tests/utils/exchange_test_helper.h>
! 19: #include <tests/utils/exchange_test_asserts.h>
! 20: #include <tests/utils/sa_asserts.h>
! 21:
! 22: /**
! 23: * Regular IKE_SA delete either initiated by the original initiator or
! 24: * responder of the IKE_SA.
! 25: */
! 26: START_TEST(test_regular)
! 27: {
! 28: ike_sa_t *a, *b;
! 29: status_t s;
! 30:
! 31: if (_i)
! 32: { /* responder deletes the IKE_SA */
! 33: exchange_test_helper->establish_sa(exchange_test_helper,
! 34: &b, &a, NULL);
! 35: }
! 36: else
! 37: { /* initiator deletes the IKE_SA */
! 38: exchange_test_helper->establish_sa(exchange_test_helper,
! 39: &a, &b, NULL);
! 40: }
! 41: assert_hook_not_called(ike_updown);
! 42: assert_hook_not_called(child_updown);
! 43: call_ikesa(a, delete, FALSE);
! 44: assert_ike_sa_state(a, IKE_DELETING);
! 45: assert_hook();
! 46: assert_hook();
! 47:
! 48: /* INFORMATIONAL { D } --> */
! 49: assert_hook_updown(ike_updown, FALSE);
! 50: assert_hook_updown(child_updown, FALSE);
! 51: assert_single_payload(IN, PLV2_DELETE);
! 52: s = exchange_test_helper->process_message(exchange_test_helper, b, NULL);
! 53: ck_assert_int_eq(DESTROY_ME, s);
! 54: call_ikesa(b, destroy);
! 55: assert_hook();
! 56: assert_hook();
! 57:
! 58: /* <-- INFORMATIONAL { } */
! 59: assert_hook_updown(ike_updown, FALSE);
! 60: assert_hook_updown(child_updown, FALSE);
! 61: assert_message_empty(IN);
! 62: s = exchange_test_helper->process_message(exchange_test_helper, a, NULL);
! 63: ck_assert_int_eq(DESTROY_ME, s);
! 64: call_ikesa(a, destroy);
! 65: assert_hook();
! 66: assert_hook();
! 67: }
! 68: END_TEST
! 69:
! 70: /**
! 71: * Both peers initiate the IKE_SA deletion concurrently and should handle the
! 72: * collision properly.
! 73: */
! 74: START_TEST(test_collision)
! 75: {
! 76: ike_sa_t *a, *b;
! 77: status_t s;
! 78:
! 79: exchange_test_helper->establish_sa(exchange_test_helper,
! 80: &a, &b, NULL);
! 81:
! 82: assert_hook_not_called(ike_updown);
! 83: assert_hook_not_called(child_updown);
! 84: call_ikesa(a, delete, FALSE);
! 85: assert_ike_sa_state(a, IKE_DELETING);
! 86: call_ikesa(b, delete, FALSE);
! 87: assert_ike_sa_state(b, IKE_DELETING);
! 88: assert_hook();
! 89: assert_hook();
! 90:
! 91: /* RFC 7296 says: If a peer receives a request to close an IKE SA that it
! 92: * is currently trying to close, it SHOULD reply as usual, and forget about
! 93: * its own close request.
! 94: * So we expect the SA to just get closed with an empty response still sent.
! 95: */
! 96:
! 97: /* INFORMATIONAL { D } --> */
! 98: assert_hook_updown(ike_updown, FALSE);
! 99: assert_hook_updown(child_updown, FALSE);
! 100: assert_single_payload(IN, PLV2_DELETE);
! 101: assert_message_empty(OUT);
! 102: s = exchange_test_helper->process_message(exchange_test_helper, b, NULL);
! 103: ck_assert_int_eq(DESTROY_ME, s);
! 104: call_ikesa(b, destroy);
! 105: assert_hook();
! 106: assert_hook();
! 107:
! 108: /* <-- INFORMATIONAL { D } */
! 109: assert_hook_updown(ike_updown, FALSE);
! 110: assert_hook_updown(child_updown, FALSE);
! 111: assert_single_payload(IN, PLV2_DELETE);
! 112: assert_message_empty(OUT);
! 113: s = exchange_test_helper->process_message(exchange_test_helper, a, NULL);
! 114: ck_assert_int_eq(DESTROY_ME, s);
! 115: call_ikesa(a, destroy);
! 116: assert_hook();
! 117: assert_hook();
! 118: }
! 119: END_TEST
! 120:
! 121: Suite *ike_delete_suite_create()
! 122: {
! 123: Suite *s;
! 124: TCase *tc;
! 125:
! 126: s = suite_create("ike delete");
! 127:
! 128: tc = tcase_create("regular");
! 129: tcase_add_loop_test(tc, test_regular, 0, 2);
! 130: suite_add_tcase(s, tc);
! 131:
! 132: tc = tcase_create("collisions");
! 133: tcase_add_test(tc, test_collision);
! 134: suite_add_tcase(s, tc);
! 135:
! 136: return s;
! 137: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>