]>
jfr.im git - solanum.git/blob - tests/client_util.c
2 * client_util.c: Utility functions for making test clients
3 * Copyright 2017 Simon Arlott
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301
24 #include "tap/basic.h"
26 #include "client_util.h"
29 #include "s_newconf.h"
33 #define MSG "%s:%d (%s)", __FILE__, __LINE__, __FUNCTION__
35 static struct Listener fake_listener
= {
46 { .ss_family
= AF_INET6
},
47 { .ss_family
= AF_INET6
},
52 struct Client
*make_local_unknown(void)
54 struct Client
*client
;
56 client
= make_client(NULL
);
57 rb_dlinkMoveNode(&client
->localClient
->tnode
, &unknown_list
, &lclient_list
);
58 client
->servptr
= &me
;
59 rb_dlinkAdd(client
, &client
->lnode
, &client
->servptr
->serv
->users
);
60 client
->localClient
->listener
= &fake_listener
;
61 client
->preClient
->auth
.accepted
= true;
66 struct Client
*make_local_person(void)
68 return make_local_person_nick(TEST_NICK
);
71 struct Client
*make_local_person_nick(const char *nick
)
73 return make_local_person_full(nick
, TEST_USERNAME
, TEST_HOSTNAME
, TEST_IP
, TEST_REALNAME
);
76 struct Client
*make_local_person_full(const char *nick
, const char *username
, const char *hostname
, const char *ip
, const char *realname
)
78 struct Client
*client
;
80 client
= make_local_unknown();
84 rb_inet_pton_sock(ip
, &client
->localClient
->ip
);
85 rb_strlcpy(client
->name
, nick
, sizeof(client
->name
));
86 rb_strlcpy(client
->username
, username
, sizeof(client
->username
));
87 rb_strlcpy(client
->host
, hostname
, sizeof(client
->host
));
88 rb_inet_ntop_sock((struct sockaddr
*)&client
->localClient
->ip
, client
->sockhost
, sizeof(client
->sockhost
));
89 rb_strlcpy(client
->info
, realname
, sizeof(client
->info
));
91 add_to_client_hash(client
->name
, client
);
96 void make_local_person_oper(struct Client
*client
)
98 rb_dlinkAddAlloc(client
, &local_oper_list
);
99 rb_dlinkAddAlloc(client
, &oper_list
);
103 void remove_local_person(struct Client
*client
)
105 exit_client(NULL
, client
, &me
, "Test client removed");
108 struct Client
*make_remote_server(struct Client
*uplink
)
110 return make_remote_server_name(uplink
, TEST_SERVER_NAME
);
113 struct Client
*make_remote_server_name(struct Client
*uplink
, const char *name
)
115 return make_remote_server_full(uplink
, name
, "");
118 struct Client
*make_remote_server_full(struct Client
*uplink
, const char *name
, const char *id
)
120 struct Client
*client
;
122 client
= make_client(NULL
);
123 client
->servptr
= uplink
;
125 attach_server_conf(client
, find_server_conf(name
));
127 rb_strlcpy(client
->name
, name
, sizeof(client
->name
));
128 rb_strlcpy(client
->id
, id
, sizeof(client
->id
));
130 rb_dlinkAdd(client
, &client
->lnode
, &uplink
->serv
->servers
);
131 rb_dlinkMoveNode(&client
->localClient
->tnode
, &unknown_list
, &serv_list
);
132 rb_dlinkAddTailAlloc(client
, &global_serv_list
);
137 add_to_client_hash(client
->name
, client
);
139 add_to_id_hash(client
->id
, client
);
144 struct Client
*make_remote_person(struct Client
*server
)
146 return make_remote_person_nick(server
, TEST_REMOTE_NICK
);
149 struct Client
*make_remote_person_nick(struct Client
*server
, const char *nick
)
151 return make_remote_person_full(server
, nick
, TEST_USERNAME
, TEST_HOSTNAME
, TEST_IP
, TEST_REALNAME
);
154 struct Client
*make_remote_person_full(struct Client
*server
, const char *nick
, const char *username
, const char *hostname
, const char *ip
, const char *realname
)
156 struct Client
*client
;
157 struct sockaddr_storage addr
;
159 client
= make_client(server
);
161 SetRemoteClient(client
);
163 client
->servptr
= server
;
164 rb_dlinkAdd(server
, &server
->lnode
, &server
->servptr
->serv
->users
);
166 rb_inet_pton_sock(ip
, &addr
);
167 rb_strlcpy(client
->name
, nick
, sizeof(client
->name
));
168 rb_strlcpy(client
->username
, username
, sizeof(client
->username
));
169 rb_strlcpy(client
->host
, hostname
, sizeof(client
->host
));
170 rb_inet_ntop_sock((struct sockaddr
*)&addr
, client
->sockhost
, sizeof(client
->sockhost
));
171 rb_strlcpy(client
->info
, realname
, sizeof(client
->info
));
173 add_to_client_hash(nick
, client
);
174 add_to_hostname_hash(client
->host
, client
);
179 void make_remote_person_oper(struct Client
*client
)
181 rb_dlinkAddAlloc(client
, &oper_list
);
185 void remove_remote_person(struct Client
*client
)
187 exit_client(client
, client
->servptr
, client
->servptr
, "Test client removed");
190 void remove_remote_server(struct Client
*server
)
192 exit_client(server
, server
, server
->servptr
, "Test server removed");
195 struct Channel
*make_channel(void)
197 return allocate_channel(TEST_CHANNEL
);
200 char *get_client_sendq(const struct Client
*client
)
202 static char buf
[EXT_BUFSIZE
+ sizeof(CRLF
)];
204 if (rb_linebuf_len(&client
->localClient
->buf_sendq
)) {
207 memset(buf
, 0, sizeof(buf
));
208 ret
= rb_linebuf_get(&client
->localClient
->buf_sendq
, buf
, sizeof(buf
), 0, 1);
210 if (ok(ret
> 0, MSG
)) {
213 return "<get_client_sendq error>";
220 void client_util_parse(struct Client
*client
, const char *message
)
222 char *copy
= rb_strdup(message
);
224 parse(client
, copy
, copy
+strlen(copy
));
229 void client_util_init(void)
233 void client_util_free(void)