1 /* test_ctx.c
2 ** libstrophe XMPP client library -- test routines for the library run-time
3 *context
4 **
5 ** Copyright (C) 2005-2009 Collecta, Inc.
6 **
7 ** This software is provided AS-IS with no warranty, either express
8 ** or implied.
9 **
10 ** This program is dual licensed under the MIT and GPLv3 licenses.
11 */
12
13 #include <stdio.h>
14 #include <stdlib.h>
15 #include <string.h>
16
17 #include "strophe.h"
18 #include "common.h"
19
20 static int log_called = 0;
21 static int mem_alloc_called = 0;
22 static int mem_free_called = 0;
23 static int mem_realloc_called = 0;
24
my_alloc(size_t size,void * userdata)25 void *my_alloc(size_t size, void *userdata)
26 {
27 (void)userdata;
28
29 mem_alloc_called++;
30 return malloc(size);
31 }
32
my_free(void * p,void * userdata)33 void my_free(void *p, void *userdata)
34 {
35 (void)userdata;
36
37 mem_free_called++;
38 return free(p);
39 }
40
my_realloc(void * p,size_t size,void * userdata)41 void *my_realloc(void *p, size_t size, void *userdata)
42 {
43 (void)userdata;
44
45 mem_realloc_called++;
46 return realloc(p, size);
47 }
48
my_logger(void * userdata,xmpp_log_level_t level,const char * area,const char * msg)49 void my_logger(void *userdata,
50 xmpp_log_level_t level,
51 const char *area,
52 const char *msg)
53 {
54 if (strcmp((char *)userdata, "asdf") == 0 && level == XMPP_LEVEL_DEBUG &&
55 strcmp(area, "test") == 0 && strcmp(msg, "hello") == 0)
56 log_called++;
57 }
58
main()59 int main()
60 {
61 xmpp_ctx_t *ctx;
62 xmpp_mem_t mymem;
63 xmpp_log_t mylog;
64 char my_str[5] = "asdf";
65 void *testptr1, *testptr2;
66
67 ctx = xmpp_ctx_new(NULL, NULL);
68 if (ctx == NULL)
69 return 1;
70
71 /* destroy context */
72 xmpp_ctx_free(ctx);
73
74 /* setup our memory handler */
75 mymem.alloc = my_alloc;
76 mymem.free = my_free;
77 mymem.realloc = my_realloc;
78
79 /* setup our logger */
80 mylog.handler = my_logger;
81 mylog.userdata = my_str;
82
83 ctx = xmpp_ctx_new(&mymem, &mylog);
84 xmpp_debug(ctx, "test", "hello");
85
86 testptr1 = xmpp_alloc(ctx, 1024);
87 if (testptr1 == NULL) {
88 xmpp_ctx_free(ctx);
89 return 1;
90 }
91
92 testptr2 = xmpp_realloc(ctx, testptr1, 2048);
93 if (testptr2 == NULL) {
94 xmpp_free(ctx, testptr1);
95 xmpp_ctx_free(ctx);
96 return 1;
97 }
98
99 xmpp_free(ctx, testptr2);
100
101 xmpp_ctx_free(ctx);
102
103 /* check for test failure */
104 if (!(log_called && mem_alloc_called && mem_realloc_called &&
105 mem_free_called))
106 return 1;
107 if (mem_alloc_called != mem_free_called)
108 return 1;
109
110 return 0;
111 }
112