summaryrefslogtreecommitdiff
path: root/test/test_util.c
diff options
context:
space:
mode:
Diffstat (limited to 'test/test_util.c')
-rw-r--r--test/test_util.c129
1 files changed, 105 insertions, 24 deletions
diff --git a/test/test_util.c b/test/test_util.c
index 9496195..e99fb79 100644
--- a/test/test_util.c
+++ b/test/test_util.c
@@ -27,7 +27,8 @@
/* Server setup function(s)
*/
-#define SERV_URL "http://localhost:" SERV_PORT_STR
+#define HTTP_SERV_URL "http://localhost:" SERV_PORT_STR
+#define HTTPS_SERV_URL "https://localhost:" SERV_PORT_STR
static apr_status_t default_server_address(apr_sockaddr_t **address,
apr_pool_t *pool)
@@ -57,22 +58,51 @@ static void default_closed_connection(serf_connection_t *conn,
}
/* Default implementation of a serf_connection_setup_t callback. */
-static apr_status_t default_conn_setup(apr_socket_t *skt,
- serf_bucket_t **input_bkt,
- serf_bucket_t **output_bkt,
- void *setup_baton,
- apr_pool_t *pool)
+static apr_status_t default_http_conn_setup(apr_socket_t *skt,
+ serf_bucket_t **input_bkt,
+ serf_bucket_t **output_bkt,
+ void *setup_baton,
+ apr_pool_t *pool)
{
- test_baton_t *ctx = setup_baton;
+ test_baton_t *tb = setup_baton;
- *input_bkt = serf_bucket_socket_create(skt, ctx->bkt_alloc);
+ *input_bkt = serf_bucket_socket_create(skt, tb->bkt_alloc);
return APR_SUCCESS;
}
+/* This function makes serf use SSL on the connection. */
+apr_status_t default_https_conn_setup(apr_socket_t *skt,
+ serf_bucket_t **input_bkt,
+ serf_bucket_t **output_bkt,
+ void *setup_baton,
+ apr_pool_t *pool)
+{
+ test_baton_t *tb = setup_baton;
+
+ *input_bkt = serf_bucket_socket_create(skt, tb->bkt_alloc);
+ *input_bkt = serf_bucket_ssl_decrypt_create(*input_bkt, NULL,
+ tb->bkt_alloc);
+ tb->ssl_context = serf_bucket_ssl_encrypt_context_get(*input_bkt);
+
+ if (output_bkt) {
+ *output_bkt = serf_bucket_ssl_encrypt_create(*output_bkt,
+ tb->ssl_context,
+ tb->bkt_alloc);
+ }
+
+ if (tb->server_cert_cb)
+ serf_ssl_server_cert_callback_set(tb->ssl_context,
+ tb->server_cert_cb,
+ tb);
+
+ return APR_SUCCESS;
+}
static apr_status_t setup(test_baton_t **tb_p,
serf_connection_setup_t conn_setup,
+ const char *serv_url,
int use_proxy,
+ apr_size_t message_count,
apr_pool_t *pool)
{
apr_status_t status;
@@ -86,6 +116,11 @@ static apr_status_t setup(test_baton_t **tb_p,
tb->context = serf_context_create(pool);
tb->bkt_alloc = serf_bucket_allocator_create(pool, NULL, NULL);
+ tb->accepted_requests = apr_array_make(pool, message_count, sizeof(int));
+ tb->sent_requests = apr_array_make(pool, message_count, sizeof(int));
+ tb->handled_requests = apr_array_make(pool, message_count, sizeof(int));
+
+
status = default_server_address(&tb->serv_addr, pool);
if (status != APR_SUCCESS)
return status;
@@ -99,14 +134,13 @@ static apr_status_t setup(test_baton_t **tb_p,
serf_config_proxy(tb->context, tb->proxy_addr);
}
- status = apr_uri_parse(pool, SERV_URL, &url);
+ status = apr_uri_parse(pool, serv_url, &url);
if (status != APR_SUCCESS)
return status;
status = serf_connection_create2(&tb->connection, tb->context,
url,
- conn_setup ? conn_setup :
- default_conn_setup,
+ conn_setup,
tb,
default_closed_connection,
tb,
@@ -116,6 +150,43 @@ static apr_status_t setup(test_baton_t **tb_p,
}
+apr_status_t test_https_server_setup(test_baton_t **tb_p,
+ test_server_message_t *message_list,
+ apr_size_t message_count,
+ test_server_action_t *action_list,
+ apr_size_t action_count,
+ apr_int32_t options,
+ serf_connection_setup_t conn_setup,
+ const char *keyfile,
+ const char *certfile,
+ serf_ssl_need_server_cert_t server_cert_cb,
+ apr_pool_t *pool)
+{
+ apr_status_t status;
+ test_baton_t *tb;
+
+ status = setup(tb_p,
+ conn_setup ? conn_setup : default_https_conn_setup,
+ HTTPS_SERV_URL,
+ FALSE,
+ message_count,
+ pool);
+ if (status != APR_SUCCESS)
+ return status;
+
+ tb = *tb_p;
+ tb->server_cert_cb = server_cert_cb;
+
+ /* Prepare a server. */
+ test_setup_https_server(&tb->serv_ctx, tb->serv_addr,
+ message_list, message_count,
+ action_list, action_count, options,
+ keyfile, certfile,
+ pool);
+ status = test_start_server(tb->serv_ctx);
+
+ return status;
+}
apr_status_t test_server_setup(test_baton_t **tb_p,
test_server_message_t *message_list,
@@ -130,8 +201,10 @@ apr_status_t test_server_setup(test_baton_t **tb_p,
test_baton_t *tb;
status = setup(tb_p,
- conn_setup,
+ conn_setup ? conn_setup : default_http_conn_setup,
+ HTTP_SERV_URL,
FALSE,
+ message_count,
pool);
if (status != APR_SUCCESS)
return status;
@@ -139,9 +212,11 @@ apr_status_t test_server_setup(test_baton_t **tb_p,
tb = *tb_p;
/* Prepare a server. */
- status = test_start_server(&tb->serv_ctx, tb->serv_addr,
- message_list, message_count,
- action_list, action_count, options, pool);
+ test_setup_server(&tb->serv_ctx, tb->serv_addr,
+ message_list, message_count,
+ action_list, action_count, options,
+ pool);
+ status = test_start_server(tb->serv_ctx);
return status;
}
@@ -164,8 +239,10 @@ test_server_proxy_setup(test_baton_t **tb_p,
test_baton_t *tb;
status = setup(tb_p,
- conn_setup,
+ conn_setup ? conn_setup : default_http_conn_setup,
+ HTTP_SERV_URL,
TRUE,
+ serv_message_count,
pool);
if (status != APR_SUCCESS)
return status;
@@ -173,18 +250,22 @@ test_server_proxy_setup(test_baton_t **tb_p,
tb = *tb_p;
/* Prepare the server. */
- status = test_start_server(&tb->serv_ctx, tb->serv_addr,
- serv_message_list, serv_message_count,
- serv_action_list, serv_action_count,
- options, pool);
+ test_setup_server(&tb->serv_ctx, tb->serv_addr,
+ serv_message_list, serv_message_count,
+ serv_action_list, serv_action_count,
+ options,
+ pool);
+ status = test_start_server(tb->serv_ctx);
if (status != APR_SUCCESS)
return status;
/* Prepare the proxy. */
- status = test_start_server(&tb->proxy_ctx, tb->proxy_addr,
- proxy_message_list, proxy_message_count,
- proxy_action_list, proxy_action_count,
- options, pool);
+ test_setup_server(&tb->proxy_ctx, tb->proxy_addr,
+ proxy_message_list, proxy_message_count,
+ proxy_action_list, proxy_action_count,
+ options,
+ pool);
+ status = test_start_server(tb->proxy_ctx);
return status;
}