Annotation of embedaddon/strongswan/src/libcharon/tests/utils/exchange_test_helper.h, revision 1.1.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>