+
+/*********************************************************************/
+/* check hooking */
+
+#if WITH_AFB_HOOK
+int hookflag;
+
+void on_create(void *closure, const struct afb_hookid *hookid, struct afb_session *session)
+{
+ hookflag |= afb_hook_flag_session_create;
+}
+
+void on_close(void *closure, const struct afb_hookid *hookid, struct afb_session *session)
+{
+ hookflag |= afb_hook_flag_session_close;
+}
+
+void on_destroy(void *closure, const struct afb_hookid *hookid, struct afb_session *session)
+{
+ hookflag |= afb_hook_flag_session_destroy;
+}
+
+void on_renew(void *closure, const struct afb_hookid *hookid, struct afb_session *session)
+{
+ hookflag |= afb_hook_flag_session_renew;
+}
+
+void on_addref(void *closure, const struct afb_hookid *hookid, struct afb_session *session)
+{
+ hookflag |= afb_hook_flag_session_addref;
+}
+
+void on_unref(void *closure, const struct afb_hookid *hookid, struct afb_session *session)
+{
+ hookflag |= afb_hook_flag_session_unref;
+}
+
+struct afb_hook_session_itf hookitf = {
+ .hook_session_create = on_create,
+ .hook_session_close = on_close,
+ .hook_session_destroy = on_destroy,
+ .hook_session_renew = on_renew,
+ .hook_session_addref = on_addref,
+ .hook_session_unref = on_unref
+};
+
+extern void afb_hook_session_create(struct afb_session *session);
+extern void afb_hook_session_close(struct afb_session *session);
+extern void afb_hook_session_destroy(struct afb_session *session);
+extern void afb_hook_session_renew(struct afb_session *session);
+extern void afb_hook_session_addref(struct afb_session *session);
+extern void afb_hook_session_unref(struct afb_session *session);
+
+extern struct afb_hook_session *afb_hook_create_session(const char *pattern, int flags, struct afb_hook_session_itf *itf, void *closure);
+extern struct afb_hook_session *afb_hook_addref_session(struct afb_hook_session *hook);
+extern void afb_hook_unref_session(struct afb_hook_session *hook);
+
+
+START_TEST (check_hooking)
+{
+ struct afb_hook_session *hs;
+ struct afb_session *s;
+
+ /* init */
+ ck_assert_int_eq(0, afb_session_init(10, 3600, GOOD_UUID));
+
+ /* create the hooking */
+ hs = afb_hook_create_session(NULL, afb_hook_flags_session_all, &hookitf, NULL);
+ ck_assert_ptr_ne(hs, 0);
+
+ /* create a session */
+ hookflag = 0;
+ s = afb_session_create(AFB_SESSION_TIMEOUT_DEFAULT);
+ ck_assert_ptr_ne(s, 0);
+ ck_assert_int_eq(hookflag, afb_hook_flag_session_create);
+
+ /* addref session */
+ hookflag = 0;
+ afb_session_addref(s);
+ ck_assert_int_eq(hookflag, afb_hook_flag_session_addref);
+
+ /* unref session */
+ hookflag = 0;
+ afb_session_unref(s);
+ ck_assert_int_eq(hookflag, afb_hook_flag_session_unref);
+
+ /* renew session token */
+ hookflag = 0;
+ afb_session_new_token(s);
+ ck_assert_int_eq(hookflag, afb_hook_flag_session_renew);
+
+ /* close session */
+ hookflag = 0;
+ afb_session_close(s);
+ ck_assert_int_eq(hookflag, afb_hook_flag_session_close);
+
+ /* unref session */
+ hookflag = 0;
+ afb_session_unref(s);
+ ck_assert_int_eq(hookflag, afb_hook_flag_session_unref);
+
+ /* purge */
+ hookflag = 0;
+ afb_session_purge();
+ ck_assert_int_eq(hookflag, afb_hook_flag_session_destroy);
+
+ /* drop hooks */
+ hookflag = 0;
+ afb_hook_unref_session(hs);
+ s = afb_session_create(AFB_SESSION_TIMEOUT_DEFAULT);
+ ck_assert_ptr_ne(s, 0);
+ ck_assert_int_eq(hookflag, 0);
+ afb_session_unref(s);
+ ck_assert_int_eq(hookflag, 0);
+}
+END_TEST
+
+#endif
+
+/*********************************************************************/
+
+