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>