unit-tests: Add helper to create but not yet establish two IKE_SAs
This commit is contained in:
parent
202fb101b8
commit
e0678a8cc6
|
@ -49,6 +49,11 @@ struct private_exchange_test_helper_t {
|
|||
* List of registered listeners
|
||||
*/
|
||||
array_t *listeners;
|
||||
|
||||
/**
|
||||
* Config backend
|
||||
*/
|
||||
private_backend_t *backend;
|
||||
};
|
||||
|
||||
/**
|
||||
|
@ -186,6 +191,18 @@ METHOD(backend_t, create_peer_cfg_enumerator, enumerator_t*,
|
|||
return enumerator_create_single(this->peer_cfg, NULL);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the config objects provided by the backend
|
||||
*/
|
||||
static void set_config(private_backend_t *this, ike_cfg_t *ike,
|
||||
peer_cfg_t *peer)
|
||||
{
|
||||
DESTROY_IF(this->ike_cfg);
|
||||
this->ike_cfg = ike;
|
||||
DESTROY_IF(this->peer_cfg);
|
||||
this->peer_cfg = peer;
|
||||
}
|
||||
|
||||
METHOD(exchange_test_helper_t, process_message, status_t,
|
||||
private_exchange_test_helper_t *this, ike_sa_t *ike_sa, message_t *message)
|
||||
{
|
||||
|
@ -210,43 +227,50 @@ METHOD(exchange_test_helper_t, process_message, status_t,
|
|||
return status;
|
||||
}
|
||||
|
||||
METHOD(exchange_test_helper_t, establish_sa, void,
|
||||
METHOD(exchange_test_helper_t, create_sa, child_cfg_t*,
|
||||
private_exchange_test_helper_t *this, ike_sa_t **init, ike_sa_t **resp,
|
||||
exchange_test_sa_conf_t *conf)
|
||||
{
|
||||
private_backend_t backend = {
|
||||
.public = {
|
||||
.create_ike_cfg_enumerator = _create_ike_cfg_enumerator,
|
||||
.create_peer_cfg_enumerator = _create_peer_cfg_enumerator,
|
||||
.get_peer_cfg_by_name = (void*)return_null,
|
||||
},
|
||||
};
|
||||
ike_sa_id_t *id_i, *id_r;
|
||||
ike_sa_t *sa_i, *sa_r;
|
||||
peer_cfg_t *peer_cfg;
|
||||
child_cfg_t *child_cfg;
|
||||
|
||||
sa_i = *init = charon->ike_sa_manager->checkout_new(charon->ike_sa_manager,
|
||||
IKEV2, TRUE);
|
||||
id_i = sa_i->get_id(sa_i);
|
||||
*init = charon->ike_sa_manager->checkout_new(charon->ike_sa_manager,
|
||||
IKEV2, TRUE);
|
||||
|
||||
sa_r = *resp = charon->ike_sa_manager->checkout_new(charon->ike_sa_manager,
|
||||
IKEV2, FALSE);
|
||||
id_r = sa_r->get_id(sa_r);
|
||||
*resp = charon->ike_sa_manager->checkout_new(charon->ike_sa_manager,
|
||||
IKEV2, FALSE);
|
||||
|
||||
peer_cfg = create_peer_cfg(FALSE, conf);
|
||||
child_cfg = create_child_cfg(FALSE, conf);
|
||||
peer_cfg->add_child_cfg(peer_cfg, child_cfg->get_ref(child_cfg));
|
||||
child_cfg->destroy(child_cfg);
|
||||
set_config(this->backend, create_ike_cfg(FALSE, conf), peer_cfg);
|
||||
|
||||
peer_cfg = create_peer_cfg(TRUE, conf);
|
||||
child_cfg = create_child_cfg(TRUE, conf);
|
||||
peer_cfg->add_child_cfg(peer_cfg, child_cfg->get_ref(child_cfg));
|
||||
sa_i->set_peer_cfg(sa_i, peer_cfg);
|
||||
(*init)->set_peer_cfg(*init, peer_cfg);
|
||||
peer_cfg->destroy(peer_cfg);
|
||||
call_ikesa(sa_i, initiate, child_cfg, 0, NULL, NULL);
|
||||
return child_cfg;
|
||||
}
|
||||
|
||||
backend.ike_cfg = create_ike_cfg(FALSE, conf);
|
||||
peer_cfg = backend.peer_cfg = create_peer_cfg(FALSE, conf);
|
||||
child_cfg = create_child_cfg(FALSE, conf);
|
||||
peer_cfg->add_child_cfg(peer_cfg, child_cfg->get_ref(child_cfg));
|
||||
child_cfg->destroy(child_cfg);
|
||||
charon->backends->add_backend(charon->backends, &backend.public);
|
||||
METHOD(exchange_test_helper_t, establish_sa, void,
|
||||
private_exchange_test_helper_t *this, ike_sa_t **init, ike_sa_t **resp,
|
||||
exchange_test_sa_conf_t *conf)
|
||||
{
|
||||
ike_sa_id_t *id_i, *id_r;
|
||||
ike_sa_t *sa_i, *sa_r;
|
||||
child_cfg_t *child_i;
|
||||
|
||||
child_i = create_sa(this, init, resp, conf);
|
||||
|
||||
sa_i = *init;
|
||||
sa_r = *resp;
|
||||
|
||||
id_i = sa_i->get_id(sa_i);
|
||||
id_r = sa_r->get_id(sa_r);
|
||||
|
||||
call_ikesa(sa_i, initiate, child_i, 0, NULL, NULL);
|
||||
|
||||
/* IKE_SA_INIT --> */
|
||||
id_r->set_initiator_spi(id_r, id_i->get_initiator_spi(id_i));
|
||||
|
@ -258,10 +282,6 @@ METHOD(exchange_test_helper_t, establish_sa, void,
|
|||
process_message(this, sa_r, NULL);
|
||||
/* <-- IKE_AUTH */
|
||||
process_message(this, sa_i, NULL);
|
||||
|
||||
charon->backends->remove_backend(charon->backends, &backend.public);
|
||||
DESTROY_IF(backend.peer_cfg);
|
||||
DESTROY_IF(backend.ike_cfg);
|
||||
}
|
||||
|
||||
METHOD(exchange_test_helper_t, add_listener, void,
|
||||
|
@ -306,6 +326,7 @@ static nonce_gen_t *create_nonce_gen()
|
|||
void exchange_test_helper_init(char *plugins)
|
||||
{
|
||||
private_exchange_test_helper_t *this;
|
||||
private_backend_t *backend;
|
||||
plugin_feature_t features[] = {
|
||||
PLUGIN_REGISTER(DH, mock_dh_create),
|
||||
/* we only need to support a limited number of DH groups */
|
||||
|
@ -317,14 +338,24 @@ void exchange_test_helper_init(char *plugins)
|
|||
PLUGIN_DEPENDS(RNG, RNG_WEAK),
|
||||
};
|
||||
|
||||
INIT(backend,
|
||||
.public = {
|
||||
.create_ike_cfg_enumerator = _create_ike_cfg_enumerator,
|
||||
.create_peer_cfg_enumerator = _create_peer_cfg_enumerator,
|
||||
.get_peer_cfg_by_name = (void*)return_null,
|
||||
},
|
||||
);
|
||||
|
||||
INIT(this,
|
||||
.public = {
|
||||
.sender = mock_sender_create(),
|
||||
.establish_sa = _establish_sa,
|
||||
.create_sa = _create_sa,
|
||||
.process_message = _process_message,
|
||||
.add_listener = _add_listener,
|
||||
},
|
||||
.creds = mem_cred_create(),
|
||||
.backend = backend,
|
||||
);
|
||||
|
||||
initialize_logging();
|
||||
|
@ -345,6 +376,8 @@ void exchange_test_helper_init(char *plugins)
|
|||
charon->ike_sa_manager->set_spi_cb(charon->ike_sa_manager, get_ike_spi,
|
||||
this);
|
||||
|
||||
charon->backends->add_backend(charon->backends, &backend->public);
|
||||
|
||||
lib->credmgr->add_set(lib->credmgr, &this->creds->set);
|
||||
|
||||
this->creds->add_shared(this->creds,
|
||||
|
@ -368,6 +401,9 @@ void exchange_test_helper_deinit()
|
|||
{
|
||||
charon->bus->remove_listener(charon->bus, listener);
|
||||
}
|
||||
charon->backends->remove_backend(charon->backends, &this->backend->public);
|
||||
set_config(this->backend, NULL, NULL);
|
||||
free(this->backend);
|
||||
lib->credmgr->remove_set(lib->credmgr, &this->creds->set);
|
||||
this->creds->destroy(this->creds);
|
||||
/* flush SAs before destroying the sender (in case of test failures) */
|
||||
|
|
|
@ -57,6 +57,23 @@ struct exchange_test_helper_t {
|
|||
void (*establish_sa)(exchange_test_helper_t *this, ike_sa_t **init,
|
||||
ike_sa_t **resp, exchange_test_sa_conf_t *conf);
|
||||
|
||||
/**
|
||||
* Similar to establish_sa() but does only create the SA and config
|
||||
* objects, no exchanges are initiated/handled. The returned child_cfg
|
||||
* object is that created for the initiator to be used for a call to
|
||||
* initiate(). The config objects for the responder are managed and
|
||||
* provided by an internal config backend.
|
||||
*
|
||||
* Note that the responder SPIs are not yet set.
|
||||
*
|
||||
* @param[out] init IKE_SA of the initiator
|
||||
* @param[out] resp IKE_SA of the responder
|
||||
* @param conf configuration for SAs
|
||||
* @return child_cfg for the initiator
|
||||
*/
|
||||
child_cfg_t *(*create_sa)(exchange_test_helper_t *this, ike_sa_t **init,
|
||||
ike_sa_t **resp, exchange_test_sa_conf_t *conf);
|
||||
|
||||
/**
|
||||
* Pass a message to the given IKE_SA for processing, setting the IKE_SA on
|
||||
* the bus while processing the message.
|
||||
|
|
Loading…
Reference in New Issue