Annotation of embedaddon/strongswan/src/libcharon/tests/utils/exchange_test_helper.h, 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: /**
        !            17:  * This class and singleton object initializes charon and provides helper
        !            18:  * methods to create unit tests for IKEv2 exchanges.
        !            19:  *
        !            20:  * It also registers special implementations for the kernel_ipsec_t interface,
        !            21:  * the sender and provides dummy configs and credentials.
        !            22:  *
        !            23:  * @defgroup exchange_test_helper exchange_test_helper
        !            24:  * @{ @ingroup test_utils_c
        !            25:  */
        !            26: 
        !            27: #ifndef EXCHANGE_TEST_HELPER_H_
        !            28: #define EXCHANGE_TEST_HELPER_H_
        !            29: 
        !            30: #include <daemon.h>
        !            31: 
        !            32: #include "mock_sender.h"
        !            33: 
        !            34: typedef struct exchange_test_helper_t exchange_test_helper_t;
        !            35: typedef struct exchange_test_sa_conf_t exchange_test_sa_conf_t;
        !            36: 
        !            37: struct exchange_test_helper_t {
        !            38: 
        !            39:        /**
        !            40:         * Sender instance used during tests
        !            41:         */
        !            42:        mock_sender_t *sender;
        !            43: 
        !            44:        /**
        !            45:         * Set the initial byte of all nonces generated by future nonce
        !            46:         * generators (already instantiated nonce generators are not affected).
        !            47:         */
        !            48:        u_char nonce_first_byte;
        !            49: 
        !            50:        /**
        !            51:         * Creates an established IKE_SA/CHILD_SA
        !            52:         *
        !            53:         * @param[out] init             IKE_SA of the initiator
        !            54:         * @param[out] resp             IKE_SA of the responder
        !            55:         * @param conf                  configuration for SAs
        !            56:         */
        !            57:        void (*establish_sa)(exchange_test_helper_t *this, ike_sa_t **init,
        !            58:                                                 ike_sa_t **resp, exchange_test_sa_conf_t *conf);
        !            59: 
        !            60:        /**
        !            61:         * Similar to establish_sa() but does only create the SA and config
        !            62:         * objects, no exchanges are initiated/handled.  The returned child_cfg
        !            63:         * object is that created for the initiator to be used for a call to
        !            64:         * initiate(). The config objects for the responder are managed and
        !            65:         * provided by an internal config backend.
        !            66:         *
        !            67:         * Note that the responder SPIs are not yet set.
        !            68:         *
        !            69:         * @param[out] init             IKE_SA of the initiator
        !            70:         * @param[out] resp             IKE_SA of the responder
        !            71:         * @param conf                  configuration for SAs
        !            72:         * @return                              child_cfg for the initiator
        !            73:         */
        !            74:        child_cfg_t *(*create_sa)(exchange_test_helper_t *this, ike_sa_t **init,
        !            75:                                                          ike_sa_t **resp, exchange_test_sa_conf_t *conf);
        !            76: 
        !            77:        /**
        !            78:         * Pass a message to the given IKE_SA for processing, setting the IKE_SA on
        !            79:         * the bus while processing the message.
        !            80:         *
        !            81:         * @param ike_sa                the IKE_SA receiving the message
        !            82:         * @param message               the message, or NULL to pass the next message in the
        !            83:         *                                              send queue (adopted)
        !            84:         * @return                              return value from ike_sa_t::process_message()
        !            85:         */
        !            86:        status_t (*process_message)(exchange_test_helper_t *this, ike_sa_t *sa,
        !            87:                                                                message_t *message);
        !            88: 
        !            89:        /**
        !            90:         * Register a listener with the bus.
        !            91:         *
        !            92:         * Don't use bus_t::add_listener() directly for listeners on the stack
        !            93:         * as that could lead to invalid listeners registered when hooks are
        !            94:         * triggered during cleanup if a test case fails.  All of the listeners
        !            95:         * added this way are unregistered with the bus before cleaning up.
        !            96:         *
        !            97:         * @param listener              listener to add to the bus
        !            98:         */
        !            99:        void (*add_listener)(exchange_test_helper_t *this, listener_t *listener);
        !           100: };
        !           101: 
        !           102: struct exchange_test_sa_conf_t {
        !           103: 
        !           104:        /**
        !           105:         * Configuration for initiator and responder
        !           106:         */
        !           107:        struct {
        !           108:                /** IKE proposal */
        !           109:                char *ike;
        !           110:                /** ESP proposal */
        !           111:                char *esp;
        !           112:                /** Support for childless IKE_SAs */
        !           113:                childless_t childless;
        !           114:        } initiator, responder;
        !           115: };
        !           116: 
        !           117: /**
        !           118:  * Since we don't use the IKE_SA manager to checkout SAs use this to call a
        !           119:  * method on the given IKE_SA in its context.
        !           120:  */
        !           121: #define call_ikesa(sa, method, ...) ({ \
        !           122:        charon->bus->set_sa(charon->bus, sa); \
        !           123:        sa->method(sa, ##__VA_ARGS__); \
        !           124:        charon->bus->set_sa(charon->bus, NULL); \
        !           125: })
        !           126: 
        !           127: /**
        !           128:  * The one and only instance of the helper object.
        !           129:  *
        !           130:  * Set between exchange_test_helper_setup() and exchange_test_helper_teardown()
        !           131:  * calls.
        !           132:  */
        !           133: extern exchange_test_helper_t *exchange_test_helper;
        !           134: 
        !           135: /**
        !           136:  * Initialize charon and the helper object.
        !           137:  *
        !           138:  * @param plugins                      plugins to load
        !           139:  */
        !           140: void exchange_test_helper_init(char *plugins);
        !           141: 
        !           142: /**
        !           143:  * Deinitialize the helper object.
        !           144:  */
        !           145: void exchange_test_helper_deinit();
        !           146: 
        !           147: #endif /** EXCHANGE_TEST_HELPER_H_ @} */

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>