48e27400d23e2586530cf943524e50c74d79a915Tony Bamford/**
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford * The contents of this file are subject to the terms of the Common Development and
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford * Distribution License (the License). You may not use this file except in compliance with the
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford * License.
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford *
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford * You can obtain a copy of the License at legal/CDDLv1.0.txt. See the License for the
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford * specific language governing permission and limitations under the License.
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford *
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford * When distributing Covered Software, include this CDDL Header Notice in each file and include
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford * the License file at legal/CDDLv1.0.txt. If applicable, add the following below the CDDL
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford * Header, with the fields enclosed by brackets [] replaced by your own identifying
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford * information: "Portions copyright [year] [name of copyright owner]".
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford *
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford * Copyright 2014 - 2015 ForgeRock AS.
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford */
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford#include <stdio.h>
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford#include <string.h>
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford#include <setjmp.h>
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs#include "platform.h"
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford#include "am.h"
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford#include "utility.h"
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs#include "thread.h"
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs#include "cmocka.h"
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford
48e27400d23e2586530cf943524e50c74d79a915Tony Bamfordtypedef am_return_t (* am_state_func_t)(am_request_t *);
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford
48e27400d23e2586530cf943524e50c74d79a915Tony Bamfordvoid am_test_get_state_funcs(am_state_func_t const ** func_array_p, int * func_array_len_p);
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacsvoid am_worker_pool_init_reset();
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacsvoid am_net_init_ssl_reset();
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford
48e27400d23e2586530cf943524e50c74d79a915Tony Bamfordstatic am_status_t get_post_data(struct am_request * request)
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford{
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford return AM_SUCCESS;
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford}
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford
48e27400d23e2586530cf943524e50c74d79a915Tony Bamfordstatic am_status_t set_custom_response(struct am_request * request, const char * data, const char * content_type)
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford{
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford return AM_SUCCESS;
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford}
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford
48e27400d23e2586530cf943524e50c74d79a915Tony Bamfordvoid test_simple_fail(void **state) {
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs am_state_func_t const * func_array = NULL;
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford int array_len = 0;
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs am_state_func_t notification_handler;
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford char * post_data =
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford "<NotificationSet version='1.0'>"
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford " <Notification>"
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford //option - invalidate config changed ( not for specific instance )
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford //" <AgentConfigChangeNotification />"
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford //option - invalidate session by sid ( state must be present, not is not used )
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford //" <SessionNotification>"
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford //" <Session sid='my-session' state='destroyed' />"
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford //" </SessionNotification>"
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford //option remove specific resources from the cache - check that it is the right service
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford //these can't be removed by resource from the session cache
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford " <PolicyChangeNotification serviceName='identified-service' >"
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford " <ResourceName type='added' >a.b.c:3232/d/e/f</ResourceName>"
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford " <ResourceName type='deleted' >a.b.c:3232/d/e/f</ResourceName>"
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford " <ResourceName type='modified' >a.b.c:3232/d/e/f</ResourceName>"
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford " </PolicyChangeNotification>"
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford " </Notification>"
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford "</NotificationSet>";
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs struct ctx {
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs void *dummy;
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford } ctx;
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford am_config_t config = {
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs .instance_id = 0,
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford .notif_enable = AM_TRUE,
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford .notif_url = "https://www.notify.com:1234/am",
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford .override_notif_url = AM_TRUE,
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford .url_eval_case_ignore = AM_FALSE,
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford };
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford am_request_t request = {
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs .instance_id = 0,
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford .conf = &config,
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford .ctx = &ctx,
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford .method = AM_REQUEST_POST,
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs .token = NULL,
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford .overridden_url = "https://www.override.com:90/am",
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford .normalized_url = "https://www.notify.com:90/am",
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford .post_data = post_data,
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford .post_data_sz = strlen(post_data),
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford .am_get_post_data_f = get_post_data,
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford .am_set_custom_response_f = set_custom_response,
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford };
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs am_test_get_state_funcs(&func_array, &array_len);
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs notification_handler = func_array[2];
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs /* this is not a notification */
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford assert_int_equal(notification_handler(&request), AM_FAIL);
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford}
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford
48e27400d23e2586530cf943524e50c74d79a915Tony Bamfordvoid test_simple_notification(void **state) {
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs am_state_func_t const * func_array = NULL;
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford int array_len = 0;
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs am_state_func_t notification_handler;
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford char * post_data =
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford "<NotificationSet version='1.0'>"
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford " <Notification>"
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford //option - invalidate config changed ( not for specific instance )
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford //" <AgentConfigChangeNotification />"
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford //option - invalidate session by sid ( state must be present, not is not used )
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford //" <SessionNotification>"
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford //" <Session sid='my-session' state='destroyed' />"
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford //" </SessionNotification>"
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford //option remove specific resources from the cache - check that it is the right service
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford //these can't be removed by resource from the session cache
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford " <PolicyChangeNotification serviceName='identified-service' >"
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford " <ResourceName type='added' >a.b.c:3232/d/e/f</ResourceName>"
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford " <ResourceName type='deleted' >a.b.c:3232/d/e/f</ResourceName>"
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford " <ResourceName type='modified' >a.b.c:3232/d/e/f</ResourceName>"
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford " </PolicyChangeNotification>"
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford " </Notification>"
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford "</NotificationSet>";
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs struct ctx {
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs void *dummy;
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford } ctx;
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford am_config_t config = {
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs .instance_id = 0,
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford .notif_enable = AM_TRUE,
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford .notif_url = "https://www.notify.com:1234/am",
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford .override_notif_url = AM_FALSE,
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford .url_eval_case_ignore = AM_FALSE,
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford };
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford am_request_t request = {
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs .instance_id = 0,
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford .conf = &config,
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford .ctx = &ctx,
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford .method = AM_REQUEST_POST,
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs .token = NULL,
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford .overridden_url = "https://www.override.com:90/am",
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford .normalized_url = "https://www.notify.com:1234/am",
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford .post_data = post_data,
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford .post_data_sz = strlen(post_data),
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford .am_get_post_data_f = get_post_data,
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford .am_set_custom_response_f = set_custom_response,
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford };
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs am_test_get_state_funcs(&func_array, &array_len);
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs notification_handler = func_array[2];
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs
5d0dcd9820c04ac52a150525298eaae50c8b3544Mareks Malnacs assert_int_equal(am_init(AM_DEFAULT_AGENT_ID, NULL), AM_SUCCESS);
8a4b0b791bf38ef8389a6501a586d8ab554e3711Mareks Malnacs am_init_worker(AM_DEFAULT_AGENT_ID);
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs sleep(2); /* must wait till worker pool is all set */
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs /* this is a notification */
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford assert_int_equal(notification_handler(&request), AM_OK);
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs sleep(2);
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford am_shutdown_worker();
8a4b0b791bf38ef8389a6501a586d8ab554e3711Mareks Malnacs am_shutdown(AM_DEFAULT_AGENT_ID);
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs am_worker_pool_init_reset();
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs am_net_init_ssl_reset();
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford}
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford
48e27400d23e2586530cf943524e50c74d79a915Tony Bamfordvoid test_session_notification_on_policy_cache(void **state) {
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford const char * session_id = "XXX";
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford char * session_notification =
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford "<NotificationSet version='1.0'>"
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford " <Notification>"
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford " <SessionNotification> <Session sid='XXX' state='destroyed' /> </SessionNotification>"
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford " </Notification>"
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford "</NotificationSet>";
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs am_state_func_t const * func_array = NULL;
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford int array_len = 0;
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs am_state_func_t notification_handler;
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs struct ctx {
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs void *dummy;
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford } ctx;
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford am_config_t config = {
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs .instance_id = 0,
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford .token_cache_valid = 0,
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford .notif_enable = AM_TRUE,
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford .notif_url = "https://www.notify.com:1234/am",
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford .override_notif_url = AM_FALSE,
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford .url_eval_case_ignore = AM_FALSE,
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford };
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford am_request_t request = {
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs .instance_id = 0,
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford .conf = &config,
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford .ctx = &ctx,
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford .method = AM_REQUEST_POST,
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs .token = NULL,
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford .overridden_url = "https://www.override.com:90/am",
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford .normalized_url = "https://www.notify.com:1234/am",
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford .post_data = session_notification,
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford .post_data_sz = strlen(session_notification),
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford .am_get_post_data_f = get_post_data,
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford .am_set_custom_response_f = set_custom_response,
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford };
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford char * xml =
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford "<PolicyService version='1.0' revisionNumber='60'>"
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford " <PolicyResponse requestId='4' issueInstant='1424783306343' >"
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford " <ResourceResult name='http://vb2.local.com:80/testwebsite'>"
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford " <PolicyDecision>"
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford " <ResponseAttributes>"
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford " <!-- these can have multiple (0..n) value elements -->"
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford " <AttributeValuePair>"
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford " <Attribute name='Attributes,key:0,0'/> <Value>Attributes,value:0,0,0</Value> <Value>Attributes,value:0,0,1</Value>"
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford " </AttributeValuePair>"
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford " <AttributeValuePair>"
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford " <Attribute name='Attributes,key:0,1'/> <Value>Attributes,value:0,1,0</Value>"
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford " </AttributeValuePair>"
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford " </ResponseAttributes>"
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford " <ActionDecision timeToLive='1234'>"
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford " <!-- these can have no value elements, which defaults to ? -->"
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford " <AttributeValuePair>"
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford " <Attribute name='PUT'/> <Value>deny</Value>"
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford " </AttributeValuePair>"
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford " <Advices>"
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford " <AttributeValuePair>"
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford " <Attribute name='Advices,key:0,0'/> <Value>Advices,value:0,0,0</Value>"
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford " </AttributeValuePair>"
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford " <AttributeValuePair>"
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford " <Attribute name='Advices,key:0,1'/> <Value>Advices,value:0,1,0</Value>"
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford " </AttributeValuePair>"
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford " </Advices>"
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford " </ActionDecision>"
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford " <ResponseDecisions>"
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford " <AttributeValuePair>"
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford " <Attribute name='Decision,key:0,0'/> <Value>Decision,value:0,0,0</Value>"
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford " </AttributeValuePair>"
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford " <AttributeValuePair>"
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford " <Attribute name='Decision,key:0,1'/> <Value>Decision,value:0,1,0</Value>"
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford " </AttributeValuePair>"
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford " <AttributeValuePair>"
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford " <Attribute name='Decision,key:0,2'/> <Value>Decision,value:0,2,0</Value>"
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford " </AttributeValuePair>"
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford " </ResponseDecisions>"
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford " </PolicyDecision>"
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford " </ResourceResult>"
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford " </PolicyResponse>"
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford "</PolicyService>";
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford char* pll = "<?xml version='1.0' encoding='UTF-8' standalone='yes'?>"
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford "<ResponseSet vers='1.0' svcid='poicy' reqid='48'>"
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford " <Response><![CDATA[%s]]></Response>"
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford "</ResponseSet>";
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford char * buffer = NULL;
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs struct am_policy_result * result;
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford time_t ets;
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford struct am_policy_result * r = NULL;
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford struct am_namevalue * session = NULL;
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs am_asprintf(&buffer, pll, xml);
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs result = am_parse_policy_xml(0l, buffer, strlen(buffer), 0);
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford free(buffer);
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs am_test_get_state_funcs(&func_array, &array_len);
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs notification_handler = func_array [2];
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford
5d0dcd9820c04ac52a150525298eaae50c8b3544Mareks Malnacs assert_int_equal(am_init(AM_DEFAULT_AGENT_ID, NULL), AM_SUCCESS);
8a4b0b791bf38ef8389a6501a586d8ab554e3711Mareks Malnacs am_init_worker(AM_DEFAULT_AGENT_ID);
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs sleep(2); /* must wait till worker pool is all set */
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs assert_int_equal(am_add_session_policy_cache_entry(&request, session_id, result, NULL), AM_SUCCESS);
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford delete_am_policy_result_list(&result);
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs /* find the session */
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford assert_int_equal(am_get_session_policy_cache_entry(&request, session_id, &r, &session, &ets), AM_SUCCESS);
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford delete_am_policy_result_list(&r);
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs /* this is a notification */
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford assert_int_equal(notification_handler(&request), AM_OK);
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs /* wait for the worker to have finished */
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs sleep(2);
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford assert_int_equal(am_get_session_policy_cache_entry(&request, session_id, &r, &session, &ets), AM_NOT_FOUND);
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs am_shutdown_worker();
8a4b0b791bf38ef8389a6501a586d8ab554e3711Mareks Malnacs am_shutdown(AM_DEFAULT_AGENT_ID);
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs am_worker_pool_init_reset();
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs am_net_init_ssl_reset();
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford}
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford
48e27400d23e2586530cf943524e50c74d79a915Tony Bamfordvoid test_resource_notification_on_policy_cache(void **state) {
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs am_state_func_t const * func_array = NULL;
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford int array_len = 0;
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs am_state_func_t notification_handler;
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs struct ctx {
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs void *dummy;
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs } ctx;
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford const char * session_id = "XXX";
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford char * session_notification =
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford "<NotificationSet version='1.0'>"
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford " <Notification>"
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford " <PolicyChangeNotification serviceName='identified-service' >"
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford " <ResourceName type='deleted' >a.b.c:3232/d/e/f</ResourceName>"
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford " <ResourceName type='modified' >a.b.c:3232/d/e/f</ResourceName>"
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford " </PolicyChangeNotification>"
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford " </Notification>"
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford "</NotificationSet>";
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford am_config_t config = {
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs .instance_id = 0,
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford .token_cache_valid = 0,
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford .notif_enable = AM_TRUE,
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford .notif_url = "https://www.notify.com:1234/am",
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford .override_notif_url = AM_FALSE,
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford .url_eval_case_ignore = AM_FALSE,
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford };
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford am_request_t request = {
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs .instance_id = 0,
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford .conf = &config,
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford .ctx = &ctx,
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford .method = AM_REQUEST_POST,
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs .token = NULL,
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford .overridden_url = "https://www.override.com:90/am",
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford .normalized_url = "https://www.notify.com:1234/am",
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford .post_data = session_notification,
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford .post_data_sz = strlen(session_notification),
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford .am_get_post_data_f = get_post_data,
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford .am_set_custom_response_f = set_custom_response,
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford };
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford char * xml =
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford "<PolicyService version='1.0' revisionNumber='60'>"
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford " <PolicyResponse requestId='4' issueInstant='1424783306343' >"
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford " <ResourceResult name='a.b.c:3232/d/e/f'>"
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford " <PolicyDecision>"
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford " <ResponseAttributes>"
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford " <!-- these can have multiple (0..n) value elements -->"
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford " <AttributeValuePair>"
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford " <Attribute name='Attributes,key:0,0'/> <Value>Attributes,value:0,0,0</Value> <Value>Attributes,value:0,0,1</Value>"
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford " </AttributeValuePair>"
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford " <AttributeValuePair>"
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford " <Attribute name='Attributes,key:0,1'/> <Value>Attributes,value:0,1,0</Value>"
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford " </AttributeValuePair>"
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford " </ResponseAttributes>"
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford " <ActionDecision timeToLive='1234'>"
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford " <!-- these can have no value elements, which defaults to ? -->"
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford " <AttributeValuePair>"
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford " <Attribute name='PUT'/> <Value>deny</Value>"
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford " </AttributeValuePair>"
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford " <Advices>"
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford " <AttributeValuePair>"
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford " <Attribute name='Advices,key:0,0'/> <Value>Advices,value:0,0,0</Value>"
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford " </AttributeValuePair>"
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford " <AttributeValuePair>"
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford " <Attribute name='Advices,key:0,1'/> <Value>Advices,value:0,1,0</Value>"
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford " </AttributeValuePair>"
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford " </Advices>"
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford " </ActionDecision>"
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford " <ResponseDecisions>"
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford " <AttributeValuePair>"
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford " <Attribute name='Decision,key:0,0'/> <Value>Decision,value:0,0,0</Value>"
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford " </AttributeValuePair>"
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford " <AttributeValuePair>"
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford " <Attribute name='Decision,key:0,1'/> <Value>Decision,value:0,1,0</Value>"
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford " </AttributeValuePair>"
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford " <AttributeValuePair>"
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford " <Attribute name='Decision,key:0,2'/> <Value>Decision,value:0,2,0</Value>"
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford " </AttributeValuePair>"
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford " </ResponseDecisions>"
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford " </PolicyDecision>"
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford " </ResourceResult>"
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford " </PolicyResponse>"
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford "</PolicyService>";
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford char * pll = "<?xml version='1.0' encoding='UTF-8' standalone='yes'?>"
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford "<ResponseSet vers='1.0' svcid='poicy' reqid='48'>"
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford " <Response><![CDATA[%s]]></Response>"
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford "</ResponseSet>";
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford char * buffer = NULL;
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs /* when the worker has finished, the session result list should be unchanged, but policy cache entry removed */
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford time_t ets;
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford struct am_policy_result * r = NULL;
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford struct am_namevalue * session = NULL;
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford struct am_policy_result * p;
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs struct am_policy_result * result;
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs am_asprintf(&buffer, pll, xml);
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs result = am_parse_policy_xml(0l, buffer, strlen(buffer), 0);
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford free(buffer);
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs am_test_get_state_funcs(&func_array, &array_len);
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs notification_handler = func_array [2];
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs
5d0dcd9820c04ac52a150525298eaae50c8b3544Mareks Malnacs assert_int_equal(am_init(AM_DEFAULT_AGENT_ID, NULL), AM_SUCCESS);
8a4b0b791bf38ef8389a6501a586d8ab554e3711Mareks Malnacs am_init_worker(AM_DEFAULT_AGENT_ID);
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs sleep(2); /* must wait till worker pool is all set */
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford assert_int_equal(am_add_session_policy_cache_entry(&request, session_id, result, 0), AM_SUCCESS);
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs /* add the resources to the policy cache */
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford for(p = result; p; p = p->next) {
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford am_add_policy_cache_entry(&request, p->resource, 500);
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford }
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford delete_am_policy_result_list(&result);
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs /* send a resource notification for the cached resource */
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford assert_int_equal(notification_handler(&request), AM_OK);
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs sleep(2);
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford assert_int_equal(am_get_session_policy_cache_entry(&request, session_id, &r, &session, &ets), AM_SUCCESS);
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford if (r != NULL) {
b0e02a0dd364decf4697db706d59eb72b6aeba62Nicholas James // check that the notification has been received, which will invalidate the cache entry
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford assert_int_equal(strcmp(r->resource, "a.b.c:3232/d/e/f"), 0);
b0e02a0dd364decf4697db706d59eb72b6aeba62Nicholas James assert_int_equal(am_get_policy_cache_entry(&request, r->resource, 0), AM_SUCCESS);
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford }
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford delete_am_policy_result_list(&r);
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs am_shutdown_worker();
8a4b0b791bf38ef8389a6501a586d8ab554e3711Mareks Malnacs am_shutdown(AM_DEFAULT_AGENT_ID);
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs am_worker_pool_init_reset();
4c6011bfcf29cd75d6af86f192d709221f4d5d3aMareks Malnacs am_net_init_ssl_reset();
48e27400d23e2586530cf943524e50c74d79a915Tony Bamford}