mirror of
https://github.com/weechat/weechat.git
synced 2026-06-12 14:14:48 +02:00
7769 lines
278 KiB
C++
7769 lines
278 KiB
C++
/*
|
|
* SPDX-FileCopyrightText: 2019-2026 Sébastien Helleu <flashcode@flashtux.org>
|
|
*
|
|
* SPDX-License-Identifier: GPL-3.0-or-later
|
|
*
|
|
* This file is part of WeeChat, the extensible chat client.
|
|
*
|
|
* WeeChat is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation; either version 3 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* WeeChat is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with WeeChat. If not, see <http://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
/* Test IRC protocol functions */
|
|
|
|
#include "CppUTest/TestHarness.h"
|
|
|
|
#include "tests.h"
|
|
#include "tests-record.h"
|
|
|
|
extern "C"
|
|
{
|
|
#include <stdio.h>
|
|
#include <string.h>
|
|
#include <time.h>
|
|
#include <sys/time.h>
|
|
#include "src/core/core-arraylist.h"
|
|
#include "src/core/core-config-file.h"
|
|
#include "src/core/core-hashtable.h"
|
|
#include "src/core/core-hook.h"
|
|
#include "src/core/core-input.h"
|
|
#include "src/core/core-string.h"
|
|
#include "src/gui/gui-buffer.h"
|
|
#include "src/gui/gui-color.h"
|
|
#include "src/plugins/plugin.h"
|
|
#include "src/plugins/irc/irc-batch.h"
|
|
#include "src/plugins/irc/irc-ctcp.h"
|
|
#include "src/plugins/irc/irc-protocol.h"
|
|
#include "src/plugins/irc/irc-channel.h"
|
|
#include "src/plugins/irc/irc-config.h"
|
|
#include "src/plugins/irc/irc-nick.h"
|
|
#include "src/plugins/irc/irc-server.h"
|
|
#include "src/plugins/logger/logger-config.h"
|
|
#include "src/plugins/typing/typing-config.h"
|
|
#include "src/plugins/typing/typing-status.h"
|
|
#include "src/plugins/xfer/xfer-buffer.h"
|
|
|
|
extern int irc_protocol_is_numeric_command (const char *str);
|
|
extern int irc_protocol_log_level_for_command (const char *command);
|
|
extern const char *irc_protocol_nick_address (struct t_irc_server *server,
|
|
int server_message,
|
|
struct t_irc_nick *nick,
|
|
const char *nickname,
|
|
const char *address);
|
|
extern char *irc_protocol_string_params (const char **params,
|
|
int arg_start, int arg_end);
|
|
extern char *irc_protocol_cap_to_enable (const char *capabilities,
|
|
int sasl_requested);
|
|
}
|
|
|
|
#define IRC_FAKE_SERVER "fake"
|
|
#define IRC_MSG_005 "PREFIX=(ohv)@%+ MAXLIST=bqeI:100 MODES=4 " \
|
|
"NETWORK=StaticBox STATUSMSG=@+ CALLERID=g " \
|
|
"CASEMAPPING=strict-rfc1459 LINELEN=4096 NICKLEN=30 MAXNICKLEN=31 " \
|
|
"USERLEN=16 HOSTLEN=32 CHANNELLEN=50 TOPICLEN=390 DEAF=D " \
|
|
"CHANTYPES=# CHANMODES=eIbq,k,flj,CFLMPQScgimnprstuz " \
|
|
"MONITOR=100 UTF8MAPPING=rfc8265 UTF8ONLY"
|
|
#define IRC_ALL_CAPS "account-notify,account-tag,away-notify,batch," \
|
|
"cap-notify,chghost,draft/multiline,echo-message,extended-join," \
|
|
"invite-notify,message-tags,multi-prefix,server-time,setname," \
|
|
"userhost-in-names"
|
|
|
|
#define WEE_CHECK_PROTOCOL_TAGS(__result, __server, __command, __tags, \
|
|
__extra_tags) \
|
|
ctxt.server = __server; \
|
|
ctxt.command = (char *)__command; \
|
|
ctxt.tags = __tags; \
|
|
STRCMP_EQUAL(__result, irc_protocol_tags (&ctxt, __extra_tags));
|
|
|
|
#define WEE_CHECK_CAP_TO_ENABLE(__result, __string, __sasl_requested) \
|
|
str = irc_protocol_cap_to_enable (__string, __sasl_requested); \
|
|
STRCMP_EQUAL(__result, str); \
|
|
free (str);
|
|
|
|
#define RECV(__irc_msg) \
|
|
server_recv (__irc_msg);
|
|
|
|
#define CHECK_CORE(__prefix, __message) \
|
|
if (!record_search ("core.weechat", __prefix, __message, NULL)) \
|
|
{ \
|
|
char **msg = build_error ( \
|
|
"Core message not displayed", \
|
|
__prefix, \
|
|
__message, \
|
|
NULL, \
|
|
"All messages displayed"); \
|
|
record_dump (msg); \
|
|
FAIL(string_dyn_free (msg, 0)); \
|
|
}
|
|
|
|
#define CHECK_SRV(__prefix, __message, __tags) \
|
|
if (!record_search ("irc.server." IRC_FAKE_SERVER, __prefix, \
|
|
__message, __tags)) \
|
|
{ \
|
|
char **msg = build_error ( \
|
|
"Server message not displayed", \
|
|
__prefix, \
|
|
__message, \
|
|
__tags, \
|
|
"All messages displayed"); \
|
|
record_dump (msg); \
|
|
FAIL(string_dyn_free (msg, 0)); \
|
|
}
|
|
|
|
#define CHECK_ERROR_PARAMS(__command, __params, __expected_params) \
|
|
CHECK_SRV("=!=", \
|
|
"irc: too few parameters received in command " \
|
|
"\"" __command "\" (received: " #__params ", " \
|
|
"expected: at least " #__expected_params ")", \
|
|
"");
|
|
|
|
#define CHECK_ERROR_NICK(__command) \
|
|
CHECK_SRV("=!=", \
|
|
"irc: command \"" __command "\" received without nick", \
|
|
"");
|
|
|
|
#define CHECK_ERROR_PARSE(__command, __message) \
|
|
CHECK_SRV("=!=", \
|
|
"irc: failed to parse command \"" __command "\" " \
|
|
"(please report to developers): \"" __message "\"", \
|
|
"");
|
|
|
|
#define CHECK_CHAN(__prefix, __message, __tags) \
|
|
if (!record_search ("irc." IRC_FAKE_SERVER ".#test", __prefix, \
|
|
__message, __tags)) \
|
|
{ \
|
|
char **msg = build_error ( \
|
|
"Channel message not displayed", \
|
|
__prefix, \
|
|
__message, \
|
|
__tags, \
|
|
"All messages displayed"); \
|
|
record_dump (msg); \
|
|
FAIL(string_dyn_free (msg, 0)); \
|
|
}
|
|
|
|
#define CHECK_CHAN_DATE_VALUE(__prefix, __message, __tags, \
|
|
__date_sec, __date_usec) \
|
|
{ \
|
|
struct timeval tv_now; \
|
|
const char *ptr_date; \
|
|
long value; \
|
|
char *error; \
|
|
gettimeofday (&tv_now, NULL); \
|
|
struct t_hashtable *record = record_search ( \
|
|
"irc." IRC_FAKE_SERVER ".#test", \
|
|
__prefix, __message, __tags); \
|
|
if (!record) \
|
|
{ \
|
|
char **msg = build_error ( \
|
|
"Channel message not displayed", \
|
|
__prefix, \
|
|
__message, \
|
|
__tags, \
|
|
"All messages displayed"); \
|
|
record_dump (msg); \
|
|
FAIL(string_dyn_free (msg, 0)); \
|
|
} \
|
|
ptr_date = (const char *)hashtable_get (record, "date"); \
|
|
CHECK(ptr_date); \
|
|
value = strtol (ptr_date, &error, 10); \
|
|
CHECK(error && !error[0]); \
|
|
LONGS_EQUAL(__date_sec, value); \
|
|
ptr_date = (const char *)hashtable_get (record, "date_usec"); \
|
|
CHECK(ptr_date); \
|
|
value = strtol (ptr_date, &error, 10); \
|
|
CHECK(error && !error[0]); \
|
|
LONGS_EQUAL(__date_usec, value); \
|
|
}
|
|
|
|
#define CHECK_CHAN_DATE_NOW(__prefix, __message, __tags) \
|
|
{ \
|
|
struct timeval tv_now; \
|
|
const char *ptr_date; \
|
|
long value; \
|
|
char *error; \
|
|
gettimeofday (&tv_now, NULL); \
|
|
struct t_hashtable *record = record_search ( \
|
|
"irc." IRC_FAKE_SERVER ".#test", \
|
|
__prefix, __message, __tags); \
|
|
if (!record) \
|
|
{ \
|
|
char **msg = build_error ( \
|
|
"Channel message not displayed", \
|
|
__prefix, \
|
|
__message, \
|
|
__tags, \
|
|
"All messages displayed"); \
|
|
record_dump (msg); \
|
|
FAIL(string_dyn_free (msg, 0)); \
|
|
} \
|
|
ptr_date = (const char *)hashtable_get (record, "date"); \
|
|
CHECK(ptr_date); \
|
|
value = strtol (ptr_date, &error, 10); \
|
|
CHECK(error && !error[0]); \
|
|
CHECK(value >= tv_now.tv_sec - 5); \
|
|
CHECK(value <= tv_now.tv_sec + 5); \
|
|
}
|
|
|
|
#define CHECK_PV(__nick, __prefix, __message, __tags) \
|
|
if (!record_search ("irc." IRC_FAKE_SERVER "." __nick, \
|
|
__prefix, __message, __tags)) \
|
|
{ \
|
|
char **msg = build_error ( \
|
|
"Private message not displayed", \
|
|
__prefix, \
|
|
__message, \
|
|
__tags, \
|
|
"All messages displayed"); \
|
|
record_dump (msg); \
|
|
FAIL(string_dyn_free (msg, 0)); \
|
|
}
|
|
|
|
#define CHECK_PV_CLOSE(__nick, __prefix, __message, __tags) \
|
|
CHECK_PV(__nick, __prefix, __message, __tags); \
|
|
gui_buffer_close ( \
|
|
gui_buffer_search_by_full_name ("irc." IRC_FAKE_SERVER \
|
|
"." __nick));
|
|
|
|
#define CHECK_NO_MSG \
|
|
if (arraylist_size (recorded_messages) > 0) \
|
|
{ \
|
|
char **msg = build_error ( \
|
|
"Unexpected message(s) displayed", \
|
|
NULL, \
|
|
NULL, \
|
|
NULL, \
|
|
NULL); \
|
|
record_dump (msg); \
|
|
FAIL(string_dyn_free (msg, 0)); \
|
|
}
|
|
|
|
#define CHECK_SENT(__message) \
|
|
if ((__message != NULL) \
|
|
&& !arraylist_search (sent_messages, (void *)__message, \
|
|
NULL, NULL)) \
|
|
{ \
|
|
char **msg = build_error ( \
|
|
"Message not sent to the IRC server", \
|
|
NULL, \
|
|
__message, \
|
|
NULL, \
|
|
"All messages sent"); \
|
|
sent_msg_dump (msg); \
|
|
FAIL(string_dyn_free (msg, 0)); \
|
|
} \
|
|
else if ((__message == NULL) \
|
|
&& (arraylist_size (sent_messages) > 0)) \
|
|
{ \
|
|
char **msg = build_error ( \
|
|
"Unexpected response(s) sent to the IRC server", \
|
|
NULL, \
|
|
NULL, \
|
|
NULL, \
|
|
NULL); \
|
|
sent_msg_dump (msg); \
|
|
FAIL(string_dyn_free (msg, 0)); \
|
|
}
|
|
|
|
#define SRV_INIT \
|
|
RECV(":server 001 alice :Welcome on this server, alice!"); \
|
|
CHECK_SRV("--", "Welcome on this server, alice!", \
|
|
"irc_001,irc_numeric,nick_server,log3");
|
|
|
|
#define SRV_INIT_JOIN \
|
|
SRV_INIT; \
|
|
RECV(":alice!user_a@host_a JOIN #test"); \
|
|
CHECK_CHAN("-->", "alice (user_a@host_a) has joined #test", \
|
|
"irc_join,nick_alice,host_user_a@host_a,log4");
|
|
|
|
#define SRV_INIT_JOIN2 \
|
|
SRV_INIT_JOIN; \
|
|
RECV(":bob!user_b@host_b JOIN #test"); \
|
|
CHECK_CHAN("-->", "bob (user_b@host_b) has joined #test", \
|
|
"irc_join,irc_smart_filter,nick_bob,host_user_b@host_b," \
|
|
"log4");
|
|
|
|
TEST_GROUP(IrcProtocol)
|
|
{
|
|
};
|
|
|
|
TEST_GROUP(IrcProtocolWithServer)
|
|
{
|
|
struct t_irc_server *ptr_server = NULL;
|
|
struct t_arraylist *sent_messages = NULL;
|
|
struct t_hook *hook_signal_irc_out = NULL;
|
|
|
|
void server_recv (const char *command)
|
|
{
|
|
char str_command[8192];
|
|
|
|
record_start ();
|
|
arraylist_clear (sent_messages);
|
|
|
|
snprintf (str_command, sizeof (str_command),
|
|
"/command -buffer irc.server." IRC_FAKE_SERVER " irc "
|
|
"/server fakerecv \"%s\"",
|
|
command);
|
|
run_cmd_quiet (str_command);
|
|
|
|
record_stop ();
|
|
}
|
|
|
|
void server_input_data (const char *buffer, const char *data)
|
|
{
|
|
struct t_gui_buffer *ptr_buffer;
|
|
|
|
record_start ();
|
|
arraylist_clear (sent_messages);
|
|
|
|
ptr_buffer = gui_buffer_search_by_full_name (buffer);
|
|
if (ptr_buffer)
|
|
input_data (ptr_buffer, data, NULL, 0, 0);
|
|
|
|
record_stop ();
|
|
}
|
|
|
|
char **build_error (const char *msg1,
|
|
const char *prefix,
|
|
const char *message,
|
|
const char *tags,
|
|
const char *msg2)
|
|
{
|
|
char **msg;
|
|
|
|
msg = string_dyn_alloc (1024);
|
|
string_dyn_concat (msg, msg1, -1);
|
|
if (message)
|
|
{
|
|
string_dyn_concat (msg, ": prefix=\"", -1);
|
|
string_dyn_concat (msg, prefix, -1);
|
|
string_dyn_concat (msg, "\", message=\"", -1);
|
|
string_dyn_concat (msg, message, -1);
|
|
string_dyn_concat (msg, "\", tags=\"", -1);
|
|
string_dyn_concat (msg, tags, -1);
|
|
string_dyn_concat (msg, "\"\n", -1);
|
|
}
|
|
else
|
|
{
|
|
string_dyn_concat (msg, ":\n", -1);
|
|
}
|
|
if (msg2)
|
|
{
|
|
string_dyn_concat (msg, msg2, -1);
|
|
string_dyn_concat (msg, ":\n", -1);
|
|
}
|
|
return msg;
|
|
}
|
|
|
|
static int signal_irc_out_cb (const void *pointer, void *data,
|
|
const char *signal, const char *type_data,
|
|
void *signal_data)
|
|
{
|
|
/* make C++ compiler happy */
|
|
(void) data;
|
|
(void) signal;
|
|
(void) type_data;
|
|
|
|
if (signal_data)
|
|
{
|
|
arraylist_add ((struct t_arraylist *)pointer,
|
|
strdup ((const char *)signal_data));
|
|
}
|
|
|
|
return WEECHAT_RC_OK;
|
|
}
|
|
|
|
static int sent_msg_cmp_cb (void *data, struct t_arraylist *arraylist,
|
|
void *pointer1, void *pointer2)
|
|
{
|
|
/* make C++ compiler happy */
|
|
(void) data;
|
|
(void) arraylist;
|
|
|
|
return strcmp ((char *)pointer1, (char *)pointer2);
|
|
}
|
|
|
|
static void sent_msg_free_cb (void *data, struct t_arraylist *arraylist,
|
|
void *pointer)
|
|
{
|
|
/* make C++ compiler happy */
|
|
(void) data;
|
|
(void) arraylist;
|
|
|
|
free (pointer);
|
|
}
|
|
|
|
void sent_msg_dump (char **msg)
|
|
{
|
|
int i;
|
|
|
|
for (i = 0; i < arraylist_size (sent_messages); i++)
|
|
{
|
|
string_dyn_concat (msg, " \"", -1);
|
|
string_dyn_concat (msg,
|
|
(const char *)arraylist_get (sent_messages, i),
|
|
-1);
|
|
string_dyn_concat (msg, "\"\n", -1);
|
|
}
|
|
}
|
|
|
|
void setup ()
|
|
{
|
|
/* initialize list of messages sent to the server */
|
|
if (sent_messages)
|
|
{
|
|
arraylist_clear (sent_messages);
|
|
}
|
|
else
|
|
{
|
|
sent_messages = arraylist_new (16, 0, 1,
|
|
&sent_msg_cmp_cb, NULL,
|
|
&sent_msg_free_cb, NULL);
|
|
}
|
|
|
|
if (!hook_signal_irc_out)
|
|
{
|
|
hook_signal_irc_out = hook_signal (
|
|
NULL,
|
|
IRC_FAKE_SERVER ",irc_out1_*",
|
|
&signal_irc_out_cb, sent_messages, NULL);
|
|
}
|
|
|
|
/*
|
|
* disable backlog feature during tests, so we are not polluted by
|
|
* these messages when buffers are opened
|
|
*/
|
|
config_file_option_set (logger_config_look_backlog, "0", 1);
|
|
|
|
/* create a fake server (no I/O) */
|
|
run_cmd_quiet ("/mute /server add " IRC_FAKE_SERVER " fake:127.0.0.1 "
|
|
"-nicks=nick1,nick2,nick3");
|
|
|
|
/* connect to the fake server */
|
|
run_cmd_quiet ("/connect " IRC_FAKE_SERVER);
|
|
|
|
/* get the server pointer */
|
|
ptr_server = irc_server_search (IRC_FAKE_SERVER);
|
|
}
|
|
|
|
void teardown ()
|
|
{
|
|
/* disconnect and delete the fake server */
|
|
run_cmd_quiet ("/mute /disconnect " IRC_FAKE_SERVER);
|
|
run_cmd_quiet ("/mute /server del " IRC_FAKE_SERVER);
|
|
ptr_server = NULL;
|
|
|
|
/* restore backlog feature */
|
|
config_file_option_reset (logger_config_look_backlog, 1);
|
|
}
|
|
};
|
|
|
|
/*
|
|
* Test functions:
|
|
* irc_protocol_is_numeric_command
|
|
*/
|
|
|
|
TEST(IrcProtocol, IsNumericCommand)
|
|
{
|
|
LONGS_EQUAL(0, irc_protocol_is_numeric_command (NULL));
|
|
LONGS_EQUAL(0, irc_protocol_is_numeric_command (""));
|
|
LONGS_EQUAL(0, irc_protocol_is_numeric_command ("abc"));
|
|
|
|
LONGS_EQUAL(1, irc_protocol_is_numeric_command ("0"));
|
|
LONGS_EQUAL(1, irc_protocol_is_numeric_command ("1"));
|
|
LONGS_EQUAL(1, irc_protocol_is_numeric_command ("12"));
|
|
LONGS_EQUAL(1, irc_protocol_is_numeric_command ("123"));
|
|
}
|
|
|
|
/*
|
|
* Test functions:
|
|
* irc_protocol_log_level_for_command
|
|
*/
|
|
|
|
TEST(IrcProtocol, LogLevelForCommand)
|
|
{
|
|
LONGS_EQUAL(0, irc_protocol_log_level_for_command (NULL));
|
|
LONGS_EQUAL(0, irc_protocol_log_level_for_command (""));
|
|
|
|
LONGS_EQUAL(1, irc_protocol_log_level_for_command ("privmsg"));
|
|
LONGS_EQUAL(1, irc_protocol_log_level_for_command ("notice"));
|
|
|
|
LONGS_EQUAL(2, irc_protocol_log_level_for_command ("nick"));
|
|
|
|
LONGS_EQUAL(4, irc_protocol_log_level_for_command ("join"));
|
|
LONGS_EQUAL(4, irc_protocol_log_level_for_command ("part"));
|
|
LONGS_EQUAL(4, irc_protocol_log_level_for_command ("quit"));
|
|
LONGS_EQUAL(4, irc_protocol_log_level_for_command ("nick_back"));
|
|
|
|
LONGS_EQUAL(3, irc_protocol_log_level_for_command ("001"));
|
|
LONGS_EQUAL(3, irc_protocol_log_level_for_command ("away"));
|
|
LONGS_EQUAL(3, irc_protocol_log_level_for_command ("kick"));
|
|
LONGS_EQUAL(3, irc_protocol_log_level_for_command ("topic"));
|
|
}
|
|
|
|
/*
|
|
* Test functions:
|
|
* irc_protocol_tags
|
|
*/
|
|
|
|
TEST(IrcProtocolWithServer, Tags)
|
|
{
|
|
struct t_irc_protocol_ctxt ctxt;
|
|
struct t_hashtable *tags_empty, *tags_1, *tags_2;
|
|
|
|
SRV_INIT;
|
|
|
|
memset (&ctxt, 0, sizeof (ctxt));
|
|
|
|
ctxt.nick = strdup ("alice");
|
|
ctxt.nick_is_me = 1;
|
|
ctxt.address = strdup ("user@example.com");
|
|
|
|
tags_empty = hashtable_new (32,
|
|
WEECHAT_HASHTABLE_STRING,
|
|
WEECHAT_HASHTABLE_STRING,
|
|
NULL, NULL);
|
|
|
|
tags_1 = hashtable_new (32,
|
|
WEECHAT_HASHTABLE_STRING,
|
|
WEECHAT_HASHTABLE_STRING,
|
|
NULL, NULL);
|
|
hashtable_set (tags_1, "key1", "value1");
|
|
|
|
tags_2 = hashtable_new (32,
|
|
WEECHAT_HASHTABLE_STRING,
|
|
WEECHAT_HASHTABLE_STRING,
|
|
NULL, NULL);
|
|
hashtable_set (tags_2, "key1", "value1");
|
|
hashtable_set (tags_2, "key_2,comma", "value2,comma");
|
|
hashtable_set (tags_2, "key_3_empty", "");
|
|
hashtable_set (tags_2, "key_4_null", NULL);
|
|
|
|
WEE_CHECK_PROTOCOL_TAGS("nick_alice,host_user@example.com",
|
|
NULL, NULL, NULL, NULL);
|
|
|
|
/* command */
|
|
WEE_CHECK_PROTOCOL_TAGS("irc_privmsg,nick_alice,host_user@example.com,log1",
|
|
NULL, "privmsg", NULL, NULL);
|
|
WEE_CHECK_PROTOCOL_TAGS("irc_join,nick_alice,host_user@example.com,log4",
|
|
NULL, "join", NULL, NULL);
|
|
|
|
/* command + irc_msg_tags */
|
|
WEE_CHECK_PROTOCOL_TAGS(
|
|
"irc_privmsg,nick_alice,host_user@example.com,log1",
|
|
NULL, "privmsg", tags_empty, NULL);
|
|
WEE_CHECK_PROTOCOL_TAGS(
|
|
"irc_join,nick_alice,host_user@example.com,log4",
|
|
NULL, "join", tags_empty, NULL);
|
|
WEE_CHECK_PROTOCOL_TAGS(
|
|
"irc_privmsg,irc_tag_key1=value1,nick_alice,host_user@example.com,log1",
|
|
NULL, "privmsg", tags_1, NULL);
|
|
WEE_CHECK_PROTOCOL_TAGS(
|
|
"irc_join,irc_tag_key1=value1,nick_alice,host_user@example.com,log4",
|
|
NULL, "join", tags_1, NULL);
|
|
WEE_CHECK_PROTOCOL_TAGS(
|
|
"irc_privmsg,irc_tag_key1=value1,"
|
|
"irc_tag_key_2;comma=value2;comma,"
|
|
"irc_tag_key_3_empty=,irc_tag_key_4_null,nick_alice,"
|
|
"host_user@example.com,log1",
|
|
NULL, "privmsg", tags_2, NULL);
|
|
WEE_CHECK_PROTOCOL_TAGS(
|
|
"irc_join,irc_tag_key1=value1,"
|
|
"irc_tag_key_2;comma=value2;comma,"
|
|
"irc_tag_key_3_empty=,irc_tag_key_4_null,nick_alice,"
|
|
"host_user@example.com,log4",
|
|
NULL, "join", tags_2, NULL);
|
|
|
|
/* command + extra_tags */
|
|
WEE_CHECK_PROTOCOL_TAGS(
|
|
"irc_privmsg,nick_alice,host_user@example.com,log1",
|
|
NULL, "privmsg", NULL, "");
|
|
WEE_CHECK_PROTOCOL_TAGS(
|
|
"irc_join,nick_alice,host_user@example.com,log4",
|
|
NULL, "join", NULL, "");
|
|
WEE_CHECK_PROTOCOL_TAGS(
|
|
"irc_privmsg,tag1,tag2,nick_alice,host_user@example.com,log1",
|
|
NULL, "privmsg", NULL, "tag1,tag2");
|
|
WEE_CHECK_PROTOCOL_TAGS(
|
|
"irc_join,tag1,tag2,nick_alice,host_user@example.com,log4",
|
|
NULL, "join", NULL, "tag1,tag2");
|
|
|
|
/* command + irc_msg_tags + extra_tags + nick */
|
|
WEE_CHECK_PROTOCOL_TAGS(
|
|
"irc_privmsg,irc_tag_key1=value1,irc_tag_key_2;comma=value2;comma,"
|
|
"irc_tag_key_3_empty=,irc_tag_key_4_null,tag1,tag2,nick_bob,log1",
|
|
NULL, "privmsg", tags_2, "tag1,tag2,nick_bob");
|
|
|
|
/* command + irc_msg_tags + extra_tags + nick + address */
|
|
WEE_CHECK_PROTOCOL_TAGS(
|
|
"irc_privmsg,irc_tag_key1=value1,irc_tag_key_2;comma=value2;comma,"
|
|
"irc_tag_key_3_empty=,irc_tag_key_4_null,tag1,tag2,nick_bob,"
|
|
"host_user@host,log1",
|
|
NULL, "privmsg", tags_2,
|
|
"tag1,tag2,nick_bob,host_user@host");
|
|
|
|
/* self message */
|
|
WEE_CHECK_PROTOCOL_TAGS(
|
|
"irc_privmsg,self_msg,host_user@example.com,log1",
|
|
NULL, "privmsg", NULL, "self_msg");
|
|
|
|
/* server + self message */
|
|
WEE_CHECK_PROTOCOL_TAGS(
|
|
"irc_privmsg,self_msg,nick_alice,host_user@example.com,log1",
|
|
ptr_server, "privmsg", NULL, "self_msg");
|
|
|
|
/* server + self message + host */
|
|
WEE_CHECK_PROTOCOL_TAGS(
|
|
"irc_privmsg,self_msg,host_user@host,nick_alice,log1",
|
|
ptr_server, "privmsg", NULL, "self_msg,host_user@host");
|
|
|
|
/* server + self message (other nick) + host */
|
|
ctxt.nick_is_me = 0;
|
|
WEE_CHECK_PROTOCOL_TAGS(
|
|
"irc_privmsg,self_msg,nick_bob,log1",
|
|
ptr_server, "privmsg", NULL, "self_msg,nick_bob");
|
|
|
|
hashtable_free (tags_empty);
|
|
hashtable_free (tags_1);
|
|
hashtable_free (tags_2);
|
|
|
|
free (ctxt.nick);
|
|
free (ctxt.address);
|
|
}
|
|
|
|
/*
|
|
* Test functions:
|
|
* irc_protocol_string_params
|
|
*/
|
|
|
|
TEST(IrcProtocol, StringParams)
|
|
{
|
|
char *str;
|
|
const char *params_empty[] = { "", NULL };
|
|
const char *params_1[] = { "param1", NULL };
|
|
const char *params_2[] = { "param1", "param2", NULL };
|
|
const char *params_3[] = { "param1", "param2", "param3", NULL };
|
|
|
|
/* invalid arguments */
|
|
WEE_TEST_STR("", irc_protocol_string_params (NULL, -1, -1));
|
|
WEE_TEST_STR("", irc_protocol_string_params (NULL, 0, 0));
|
|
WEE_TEST_STR("", irc_protocol_string_params (NULL, 0, -1));
|
|
WEE_TEST_STR("", irc_protocol_string_params (params_1, 1, 0));
|
|
|
|
/* empty parameter */
|
|
WEE_TEST_STR("", irc_protocol_string_params (params_empty, 0, 0));
|
|
WEE_TEST_STR("", irc_protocol_string_params (params_empty, 1, 1));
|
|
|
|
/* one parameter */
|
|
WEE_TEST_STR("param1", irc_protocol_string_params (params_1, 0, 0));
|
|
WEE_TEST_STR("", irc_protocol_string_params (params_1, 1, 1));
|
|
|
|
/* two parameters */
|
|
WEE_TEST_STR("param1 param2", irc_protocol_string_params (params_2, 0, 1));
|
|
WEE_TEST_STR("param2", irc_protocol_string_params (params_2, 1, 1));
|
|
WEE_TEST_STR("", irc_protocol_string_params (params_2, 2, 2));
|
|
|
|
/* three parameters */
|
|
WEE_TEST_STR("param1 param2 param3", irc_protocol_string_params (params_3, 0, 2));
|
|
WEE_TEST_STR("param2 param3", irc_protocol_string_params (params_3, 1, 2));
|
|
WEE_TEST_STR("param2", irc_protocol_string_params (params_3, 1, 1));
|
|
WEE_TEST_STR("param3", irc_protocol_string_params (params_3, 2, 2));
|
|
WEE_TEST_STR("", irc_protocol_string_params (params_3, 3, 3));
|
|
}
|
|
|
|
/*
|
|
* Tests send of messages to channel (STATUSMSG and normal) and nick,
|
|
* without capability "echo-message" enabled:
|
|
* - message (text)
|
|
* - notice (/notice)
|
|
* - action (/me + /ctcp)
|
|
* - CTCP (/ctcp)
|
|
*/
|
|
|
|
TEST(IrcProtocolWithServer, SendMessagesWithoutEchoMessage)
|
|
{
|
|
const char *buffer_server = "irc.server." IRC_FAKE_SERVER;
|
|
const char *buffer_chan = "irc." IRC_FAKE_SERVER ".#test";
|
|
const char *buffer_pv = "irc." IRC_FAKE_SERVER ".bob";
|
|
|
|
SRV_INIT_JOIN;
|
|
|
|
/* open private buffer */
|
|
RECV(":bob!user@host PRIVMSG alice :hi Alice!");
|
|
|
|
/* message to channel (text in buffer) */
|
|
server_input_data (buffer_chan, "\002msg chan 1");
|
|
CHECK_SENT("PRIVMSG #test :\002msg chan 1");
|
|
CHECK_CHAN("alice", "msg chan 1",
|
|
"irc_privmsg,self_msg,notify_none,no_highlight,prefix_nick_white,"
|
|
"nick_alice,log1");
|
|
|
|
/* message to channel (with /msg <channel>) */
|
|
server_input_data (buffer_server, "/msg #test \002msg chan 2");
|
|
CHECK_SENT("PRIVMSG #test :\002msg chan 2");
|
|
CHECK_CHAN("alice", "msg chan 2",
|
|
"irc_privmsg,self_msg,notify_none,no_highlight,prefix_nick_white,"
|
|
"nick_alice,log1");
|
|
|
|
/* message to channel (with /msg <channel>), channel not joined */
|
|
server_input_data (buffer_server, "/msg #zzz \002msg chan not joined");
|
|
CHECK_SENT("PRIVMSG #zzz :\002msg chan not joined");
|
|
CHECK_SRV("--", "Msg(alice) -> #zzz: msg chan not joined",
|
|
"irc_privmsg,self_msg,notify_none,no_highlight,nick_alice,log1");
|
|
|
|
/* STATUSMSG message to channel (with /msg @<channel>) */
|
|
server_input_data (buffer_server, "/msg @#test \002msg chan ops");
|
|
CHECK_SENT("PRIVMSG @#test :\002msg chan ops");
|
|
CHECK_CHAN("--", "Msg(alice) -> @#test: msg chan ops",
|
|
"irc_privmsg,self_msg,notify_none,no_highlight,nick_alice,log1");
|
|
|
|
/* STATUSMSG message to channel (with /msg @<channel>), channel not joined */
|
|
server_input_data (buffer_server, "/msg @#zzz \002msg chan ops not joined");
|
|
CHECK_SENT("PRIVMSG @#zzz :\002msg chan ops not joined");
|
|
CHECK_SRV("--", "Msg(alice) -> @#zzz: msg chan ops not joined",
|
|
"irc_privmsg,self_msg,notify_none,no_highlight,nick_alice,log1");
|
|
|
|
/* message to a nick (text in private buffer) */
|
|
server_input_data (buffer_pv, "\002msg pv 1");
|
|
CHECK_SENT("PRIVMSG bob :\002msg pv 1");
|
|
CHECK_PV("bob", "alice", "msg pv 1",
|
|
"irc_privmsg,self_msg,notify_none,no_highlight,prefix_nick_white,"
|
|
"nick_alice,log1");
|
|
|
|
/* message to a nick (with /msg <nick>) */
|
|
server_input_data (buffer_server, "/msg bob \002msg pv 2");
|
|
CHECK_SENT("PRIVMSG bob :\002msg pv 2");
|
|
CHECK_PV("bob", "alice", "msg pv 2",
|
|
"irc_privmsg,self_msg,notify_none,no_highlight,prefix_nick_white,"
|
|
"nick_alice,log1");
|
|
|
|
/* message to a nick (with /msg <nick>), hidden password */
|
|
server_input_data (buffer_server, "/msg nickserv identify secret");
|
|
CHECK_SENT("PRIVMSG nickserv :identify secret");
|
|
CHECK_SRV("--", "Msg(alice) -> nickserv: identify ******",
|
|
"irc_privmsg,self_msg,notify_none,no_highlight,nick_alice,log1");
|
|
|
|
/* message to a nick (with /query <nick>) */
|
|
server_input_data (buffer_server, "/query bob \002msg pv 3");
|
|
CHECK_SENT("PRIVMSG bob :\002msg pv 3");
|
|
CHECK_PV("bob", "alice", "msg pv 3",
|
|
"irc_privmsg,self_msg,notify_none,no_highlight,prefix_nick_white,"
|
|
"nick_alice,log1");
|
|
|
|
/* message to a nick (with /query <nick>), private buffer does not exist */
|
|
server_input_data (buffer_server, "/query bob_query \002msg pv 4");
|
|
CHECK_SENT("PRIVMSG bob_query :\002msg pv 4");
|
|
CHECK_PV("bob_query", "alice", "msg pv 4",
|
|
"irc_privmsg,self_msg,notify_none,no_highlight,prefix_nick_white,"
|
|
"nick_alice,log1");
|
|
|
|
/* notice to channel */
|
|
server_input_data (buffer_server, "/notice #test \002notice chan");
|
|
CHECK_SENT("NOTICE #test :\002notice chan");
|
|
CHECK_CHAN("--", "Notice(alice) -> #test: notice chan",
|
|
"irc_notice,self_msg,notify_none,no_highlight,nick_alice,log1");
|
|
|
|
/* STATUSMSG notice to channel */
|
|
server_input_data (buffer_server, "/notice @#test \002notice chan ops");
|
|
CHECK_SENT("NOTICE @#test :\002notice chan ops");
|
|
CHECK_CHAN("--", "Notice(alice) -> @#test: notice chan ops",
|
|
"irc_notice,self_msg,notify_none,no_highlight,nick_alice,log1");
|
|
|
|
/* notice to a nick */
|
|
server_input_data (buffer_server, "/notice bob \002notice pv");
|
|
CHECK_SENT("NOTICE bob :\002notice pv");
|
|
CHECK_PV("bob", "--", "Notice(alice) -> bob: notice pv",
|
|
"irc_notice,self_msg,notify_none,no_highlight,nick_alice,log1");
|
|
|
|
/* action on channel (with /me) */
|
|
server_input_data (buffer_chan, "/me \002action chan 1");
|
|
CHECK_SENT("PRIVMSG #test :\001ACTION \002action chan 1\001");
|
|
CHECK_CHAN(" *", "alice action chan 1",
|
|
"irc_privmsg,irc_action,self_msg,notify_none,no_highlight,"
|
|
"nick_alice,log1");
|
|
|
|
/* action on channel (with /me), no message */
|
|
server_input_data (buffer_chan, "/me");
|
|
CHECK_SENT("PRIVMSG #test :\001ACTION\001");
|
|
CHECK_CHAN(" *", "alice",
|
|
"irc_privmsg,irc_action,self_msg,notify_none,no_highlight,"
|
|
"nick_alice,log1");
|
|
|
|
/* action on channel (with raw code: "\001ACTION") */
|
|
server_input_data (buffer_chan, "\001ACTION \002is testing\001");
|
|
CHECK_SENT("PRIVMSG #test :\001ACTION \002is testing\001");
|
|
CHECK_CHAN(" *", "alice is testing",
|
|
"irc_privmsg,irc_action,self_msg,notify_none,no_highlight,"
|
|
"nick_alice,log1");
|
|
|
|
/* action on channel (with raw code: "\001ACTION"), no message */
|
|
server_input_data (buffer_chan, "\001ACTION\001");
|
|
CHECK_SENT("PRIVMSG #test :\001ACTION\001");
|
|
CHECK_CHAN(" *", "alice",
|
|
"irc_privmsg,irc_action,self_msg,notify_none,no_highlight,"
|
|
"nick_alice,log1");
|
|
|
|
/* action on channel (with /action *) */
|
|
server_input_data (buffer_chan, "/action * \002action chan 2");
|
|
CHECK_SENT("PRIVMSG #test :\001ACTION \002action chan 2\001");
|
|
CHECK_CHAN(" *", "alice action chan 2",
|
|
"irc_privmsg,irc_action,self_msg,notify_none,no_highlight,"
|
|
"nick_alice,log1");
|
|
|
|
/* action on channel (with /action <channel>) */
|
|
server_input_data (buffer_server, "/action #test \002action chan 3");
|
|
CHECK_SENT("PRIVMSG #test :\001ACTION \002action chan 3\001");
|
|
CHECK_CHAN(" *", "alice action chan 3",
|
|
"irc_privmsg,irc_action,self_msg,notify_none,no_highlight,"
|
|
"nick_alice,log1");
|
|
|
|
/* action on channel (with /action <channel>), no message */
|
|
server_input_data (buffer_chan, "/action #test");
|
|
CHECK_SENT("PRIVMSG #test :\001ACTION\001");
|
|
CHECK_CHAN(" *", "alice",
|
|
"irc_privmsg,irc_action,self_msg,notify_none,no_highlight,"
|
|
"nick_alice,log1");
|
|
|
|
/* STATUSMSG action on channel (with /action @<channel>) */
|
|
server_input_data (buffer_server, "/action @#test \002action chan 4");
|
|
CHECK_SENT("PRIVMSG @#test :\001ACTION \002action chan 4\001");
|
|
CHECK_CHAN("--", "Action -> @#test: alice action chan 4",
|
|
"irc_privmsg,irc_action,self_msg,notify_none,no_highlight,"
|
|
"nick_alice,log1");
|
|
|
|
/* STATUSMSG action on channel (with /action @<channel>), no message */
|
|
server_input_data (buffer_server, "/action @#test");
|
|
CHECK_SENT("PRIVMSG @#test :\001ACTION\001");
|
|
CHECK_CHAN("--", "Action -> @#test: alice",
|
|
"irc_privmsg,irc_action,self_msg,notify_none,no_highlight,"
|
|
"nick_alice,log1");
|
|
|
|
/* action on channel (with /ctcp <channel> action) */
|
|
server_input_data (buffer_server, "/ctcp #test action \002action chan 5");
|
|
CHECK_SENT("PRIVMSG #test :\001ACTION \002action chan 5\001");
|
|
CHECK_CHAN(" *", "alice action chan 5",
|
|
"irc_privmsg,irc_action,self_msg,notify_none,no_highlight,"
|
|
"nick_alice,log1");
|
|
|
|
/* action on channel (with /ctcp <channel> action), no message */
|
|
server_input_data (buffer_server, "/ctcp #test action");
|
|
CHECK_SENT("PRIVMSG #test :\001ACTION\001");
|
|
CHECK_CHAN(" *", "alice",
|
|
"irc_privmsg,irc_action,self_msg,notify_none,no_highlight,"
|
|
"nick_alice,log1");
|
|
|
|
/* STATUSMSG action on channel (with /ctcp @<channel> action) */
|
|
server_input_data (buffer_server, "/ctcp @#test action \002action chan ops");
|
|
CHECK_SENT("PRIVMSG @#test :\001ACTION \002action chan ops\001");
|
|
CHECK_CHAN("--", "Action -> @#test: alice action chan ops",
|
|
"irc_privmsg,irc_action,self_msg,notify_none,no_highlight,"
|
|
"nick_alice,log1");
|
|
|
|
/* action in private (with /me) */
|
|
server_input_data (buffer_pv, "/me \002action pv 1");
|
|
CHECK_SENT("PRIVMSG bob :\001ACTION \002action pv 1\001");
|
|
CHECK_PV("bob", " *", "alice action pv 1",
|
|
"irc_privmsg,irc_action,self_msg,notify_none,no_highlight,"
|
|
"nick_alice,log1");
|
|
|
|
/* action in private (with /ctcp) */
|
|
server_input_data (buffer_server, "/ctcp bob action \002action pv 2");
|
|
CHECK_SENT("PRIVMSG bob :\001ACTION \002action pv 2\001");
|
|
CHECK_PV("bob", " *", "alice action pv 2",
|
|
"irc_privmsg,irc_action,self_msg,notify_none,no_highlight,"
|
|
"nick_alice,log1");
|
|
|
|
/* action in private (with /ctcp), without private buffer */
|
|
server_input_data (buffer_server, "/ctcp bob2 action \002action pv 3");
|
|
CHECK_SENT("PRIVMSG bob2 :\001ACTION \002action pv 3\001");
|
|
CHECK_SRV("--", "Action -> bob2: alice action pv 3",
|
|
"irc_privmsg,irc_action,self_msg,notify_none,no_highlight,"
|
|
"nick_alice,log1");
|
|
|
|
/* CTCP version to channel */
|
|
server_input_data (buffer_server, "/ctcp #test version");
|
|
CHECK_SENT("PRIVMSG #test :\001VERSION\001");
|
|
CHECK_CHAN("--", "CTCP query to #test: VERSION",
|
|
"irc_privmsg,irc_ctcp,self_msg,notify_none,no_highlight,"
|
|
"nick_alice,log1");
|
|
|
|
/* unknown CTCP to channel */
|
|
server_input_data (buffer_server, "/ctcp #test unknown1 \002some args");
|
|
CHECK_SENT("PRIVMSG #test :\001UNKNOWN1 \002some args\001");
|
|
CHECK_CHAN("--", "CTCP query to #test: UNKNOWN1 some args",
|
|
"irc_privmsg,irc_ctcp,self_msg,notify_none,no_highlight,"
|
|
"nick_alice,log1");
|
|
|
|
/* CTCP version to nick */
|
|
server_input_data (buffer_server, "/ctcp bob version");
|
|
CHECK_SENT("PRIVMSG bob :\001VERSION\001");
|
|
CHECK_PV("bob", "--", "CTCP query to bob: VERSION",
|
|
"irc_privmsg,irc_ctcp,self_msg,notify_none,no_highlight,"
|
|
"nick_alice,log1");
|
|
|
|
/* CTCP version to other nick (no private buffer) */
|
|
server_input_data (buffer_server, "/ctcp other_nick version");
|
|
CHECK_SENT("PRIVMSG other_nick :\001VERSION\001");
|
|
CHECK_SRV("--", "CTCP query to other_nick: VERSION",
|
|
"irc_privmsg,irc_ctcp,self_msg,notify_none,no_highlight,"
|
|
"nick_alice,log1");
|
|
|
|
/* unknown CTCP to nick */
|
|
server_input_data (buffer_server, "/ctcp bob unknown2 \002some args");
|
|
CHECK_SENT("PRIVMSG bob :\001UNKNOWN2 \002some args\001");
|
|
CHECK_PV("bob", "--", "CTCP query to bob: UNKNOWN2 some args",
|
|
"irc_privmsg,irc_ctcp,self_msg,notify_none,no_highlight,"
|
|
"nick_alice,log1");
|
|
}
|
|
|
|
/*
|
|
* Tests send of messages to channel (STATUSMSG and normal) and nick,
|
|
* with capability "echo-message" enabled:
|
|
* - message (text)
|
|
* - notice (/notice)
|
|
* - action (/me + /ctcp)
|
|
* - CTCP (/ctcp)
|
|
*/
|
|
|
|
TEST(IrcProtocolWithServer, SendMessagesWithEchoMessage)
|
|
{
|
|
const char *buffer_server = "irc.server." IRC_FAKE_SERVER;
|
|
const char *buffer_chan = "irc." IRC_FAKE_SERVER ".#test";
|
|
const char *buffer_pv = "irc." IRC_FAKE_SERVER ".bob";
|
|
|
|
/* assume "echo-message" capability is enabled in server */
|
|
hashtable_set (ptr_server->cap_list, "echo-message", NULL);
|
|
|
|
SRV_INIT_JOIN;
|
|
|
|
/* open private buffer */
|
|
RECV(":bob!user@host PRIVMSG alice :hi Alice!");
|
|
|
|
/* message to channel (text in buffer) */
|
|
server_input_data (buffer_chan, "\002msg chan 1");
|
|
CHECK_SENT("PRIVMSG #test :\002msg chan 1");
|
|
CHECK_NO_MSG;
|
|
|
|
/* message to channel (with /msg <channel>) */
|
|
server_input_data (buffer_server, "/msg #test \002msg chan 2");
|
|
CHECK_SENT("PRIVMSG #test :\002msg chan 2");
|
|
CHECK_NO_MSG;
|
|
|
|
/* message to channel (with /msg <channel>), channel not joined */
|
|
server_input_data (buffer_server, "/msg #zzz \002msg chan not joined");
|
|
CHECK_SENT("PRIVMSG #zzz :\002msg chan not joined");
|
|
CHECK_NO_MSG;
|
|
|
|
/* STATUSMSG message to channel (with /msg @<channel>) */
|
|
server_input_data (buffer_server, "/msg @#test \002msg chan ops");
|
|
CHECK_SENT("PRIVMSG @#test :\002msg chan ops");
|
|
CHECK_NO_MSG;
|
|
|
|
/* STATUSMSG message to channel (with /msg @<channel>), channel not joined */
|
|
server_input_data (buffer_server, "/msg @#zzz \002msg chan ops not joined");
|
|
CHECK_SENT("PRIVMSG @#zzz :\002msg chan ops not joined");
|
|
CHECK_NO_MSG;
|
|
|
|
/* message to a nick (text in private buffer) */
|
|
server_input_data (buffer_pv, "\002msg pv 1");
|
|
CHECK_SENT("PRIVMSG bob :\002msg pv 1");
|
|
CHECK_NO_MSG;
|
|
|
|
/* message to a nick (with /msg <nick>) */
|
|
server_input_data (buffer_server, "/msg bob \002msg pv 2");
|
|
CHECK_SENT("PRIVMSG bob :\002msg pv 2");
|
|
CHECK_NO_MSG;
|
|
|
|
/* message to a nick (with /msg <nick>), hidden password */
|
|
server_input_data (buffer_server, "/msg nickserv identify secret");
|
|
CHECK_SENT("PRIVMSG nickserv :identify secret");
|
|
CHECK_NO_MSG;
|
|
|
|
/* message to a nick (with /query <nick>) */
|
|
server_input_data (buffer_server, "/query bob \002msg pv 3");
|
|
CHECK_SENT("PRIVMSG bob :\002msg pv 3");
|
|
CHECK_NO_MSG;
|
|
|
|
/* message to a nick (with /query <nick>), private buffer does not exist */
|
|
server_input_data (buffer_server, "/query bob_query \002msg pv 4");
|
|
CHECK_SENT("PRIVMSG bob_query :\002msg pv 4");
|
|
CHECK_NO_MSG;
|
|
|
|
/* notice to channel */
|
|
server_input_data (buffer_server, "/notice #test \002notice chan");
|
|
CHECK_SENT("NOTICE #test :\002notice chan");
|
|
CHECK_NO_MSG;
|
|
|
|
/* STATUSMSG notice to channel */
|
|
server_input_data (buffer_server, "/notice @#test \002notice chan ops");
|
|
CHECK_SENT("NOTICE @#test :\002notice chan ops");
|
|
CHECK_NO_MSG;
|
|
|
|
/* notice to a nick */
|
|
server_input_data (buffer_server, "/notice bob \002notice pv");
|
|
CHECK_SENT("NOTICE bob :\002notice pv");
|
|
CHECK_NO_MSG;
|
|
|
|
/* action on channel (with /me) */
|
|
server_input_data (buffer_chan, "/me \002action chan 1");
|
|
CHECK_SENT("PRIVMSG #test :\001ACTION \002action chan 1\001");
|
|
CHECK_NO_MSG;
|
|
|
|
/* action on channel (with /me), no message */
|
|
server_input_data (buffer_chan, "/me");
|
|
CHECK_SENT("PRIVMSG #test :\001ACTION\001");
|
|
CHECK_NO_MSG;
|
|
|
|
/* action on channel (with raw code: "\001ACTION") */
|
|
server_input_data (buffer_chan, "\001ACTION \002is testing\001");
|
|
CHECK_SENT("PRIVMSG #test :\001ACTION \002is testing\001");
|
|
CHECK_NO_MSG;
|
|
|
|
/* action on channel (with raw code: "\001ACTION"), no message */
|
|
server_input_data (buffer_chan, "\001ACTION\001");
|
|
CHECK_SENT("PRIVMSG #test :\001ACTION\001");
|
|
CHECK_NO_MSG;
|
|
|
|
/* action on channel (with /action *) */
|
|
server_input_data (buffer_chan, "/action * \002action chan 2");
|
|
CHECK_SENT("PRIVMSG #test :\001ACTION \002action chan 2\001");
|
|
CHECK_NO_MSG;
|
|
|
|
/* action on channel (with /action <channel>) */
|
|
server_input_data (buffer_server, "/action #test \002action chan 3");
|
|
CHECK_SENT("PRIVMSG #test :\001ACTION \002action chan 3\001");
|
|
CHECK_NO_MSG;
|
|
|
|
/* action on channel (with /action <channel>), no message */
|
|
server_input_data (buffer_chan, "/action #test");
|
|
CHECK_SENT("PRIVMSG #test :\001ACTION\001");
|
|
CHECK_NO_MSG;
|
|
|
|
/* STATUSMSG action on channel (with /action @<channel>) */
|
|
server_input_data (buffer_server, "/action @#test \002action chan 4");
|
|
CHECK_SENT("PRIVMSG @#test :\001ACTION \002action chan 4\001");
|
|
CHECK_NO_MSG;
|
|
|
|
/* STATUSMSG action on channel (with /action @<channel>), no message */
|
|
server_input_data (buffer_server, "/action @#test");
|
|
CHECK_SENT("PRIVMSG @#test :\001ACTION\001");
|
|
CHECK_NO_MSG;
|
|
|
|
/* action on channel (with /ctcp <channel> action) */
|
|
server_input_data (buffer_server, "/ctcp #test action \002action chan 5");
|
|
CHECK_SENT("PRIVMSG #test :\001ACTION \002action chan 5\001");
|
|
CHECK_NO_MSG;
|
|
|
|
/* STATUSMSG action on channel (with /ctcp @<channel> action) */
|
|
server_input_data (buffer_server, "/ctcp @#test action \002action chan ops");
|
|
CHECK_SENT("PRIVMSG @#test :\001ACTION \002action chan ops\001");
|
|
CHECK_NO_MSG;
|
|
|
|
/* action in private (with /me) */
|
|
server_input_data (buffer_pv, "/me \002action pv 1");
|
|
CHECK_SENT("PRIVMSG bob :\001ACTION \002action pv 1\001");
|
|
CHECK_NO_MSG;
|
|
|
|
/* action in private (with /ctcp) */
|
|
server_input_data (buffer_server, "/ctcp bob action \002action pv 2");
|
|
CHECK_SENT("PRIVMSG bob :\001ACTION \002action pv 2\001");
|
|
CHECK_NO_MSG;
|
|
|
|
/* action in private (with /ctcp), without private buffer */
|
|
server_input_data (buffer_server, "/ctcp bob2 action \002action pv 3");
|
|
CHECK_SENT("PRIVMSG bob2 :\001ACTION \002action pv 3\001");
|
|
CHECK_NO_MSG;
|
|
|
|
/* CTCP version to channel */
|
|
server_input_data (buffer_server, "/ctcp #test version");
|
|
CHECK_SENT("PRIVMSG #test :\001VERSION\001");
|
|
CHECK_NO_MSG;
|
|
|
|
/* unknown CTCP to channel */
|
|
server_input_data (buffer_server, "/ctcp #test unknown1 \002some args");
|
|
CHECK_SENT("PRIVMSG #test :\001UNKNOWN1 \002some args\001");
|
|
CHECK_NO_MSG;
|
|
|
|
/* CTCP version to nick */
|
|
server_input_data (buffer_server, "/ctcp bob version");
|
|
CHECK_SENT("PRIVMSG bob :\001VERSION\001");
|
|
CHECK_NO_MSG;
|
|
|
|
/* CTCP version to other nick (no private buffer) */
|
|
server_input_data (buffer_server, "/ctcp other_nick version");
|
|
CHECK_SENT("PRIVMSG other_nick :\001VERSION\001");
|
|
CHECK_NO_MSG;
|
|
|
|
/* unknown CTCP to nick */
|
|
server_input_data (buffer_server, "/ctcp bob unknown2 \002some args");
|
|
CHECK_SENT("PRIVMSG bob :\001UNKNOWN2 \002some args\001");
|
|
CHECK_NO_MSG;
|
|
|
|
hashtable_remove (ptr_server->cap_list, "echo-message");
|
|
}
|
|
|
|
/*
|
|
* Test functions:
|
|
* irc_protocol_nick_address
|
|
*/
|
|
|
|
TEST(IrcProtocolWithServer, NickAddress)
|
|
{
|
|
struct t_irc_nick *ptr_nick;
|
|
char result[1024];
|
|
|
|
SRV_INIT_JOIN;
|
|
|
|
ptr_nick = ptr_server->channels->nicks;
|
|
|
|
STRCMP_EQUAL("", irc_protocol_nick_address (NULL, 0, NULL,
|
|
NULL, NULL));
|
|
STRCMP_EQUAL("", irc_protocol_nick_address (ptr_server, 0, NULL,
|
|
NULL, NULL));
|
|
STRCMP_EQUAL("", irc_protocol_nick_address (ptr_server, 0, ptr_nick,
|
|
NULL, NULL));
|
|
STRCMP_EQUAL("", irc_protocol_nick_address (ptr_server, 0, ptr_nick,
|
|
NULL, NULL));
|
|
|
|
snprintf (result, sizeof (result),
|
|
"%s%s%s",
|
|
ptr_nick->color,
|
|
"alice",
|
|
gui_color_get_custom ("reset"));
|
|
STRCMP_EQUAL(result, irc_protocol_nick_address (ptr_server, 0, ptr_nick,
|
|
"alice", NULL));
|
|
|
|
snprintf (result, sizeof (result),
|
|
"%s%s %s(%s%s%s)%s",
|
|
ptr_nick->color,
|
|
"alice",
|
|
gui_color_search_config ("chat_delimiters"),
|
|
gui_color_search_config ("chat_host"),
|
|
"example.com",
|
|
gui_color_search_config ("chat_delimiters"),
|
|
gui_color_get_custom ("reset"));
|
|
STRCMP_EQUAL(result, irc_protocol_nick_address (ptr_server, 0, ptr_nick,
|
|
"alice", "example.com"));
|
|
|
|
config_file_option_set (irc_config_look_color_nicks_in_server_messages,
|
|
"off", 1);
|
|
snprintf (result, sizeof (result),
|
|
"%s%s %s(%s%s%s)%s",
|
|
ptr_nick->color,
|
|
"alice",
|
|
gui_color_search_config ("chat_delimiters"),
|
|
gui_color_search_config ("chat_host"),
|
|
"example.com",
|
|
gui_color_search_config ("chat_delimiters"),
|
|
gui_color_get_custom ("reset"));
|
|
STRCMP_EQUAL(result, irc_protocol_nick_address (ptr_server, 0, ptr_nick,
|
|
"alice", "example.com"));
|
|
snprintf (result, sizeof (result),
|
|
"%s%s %s(%s%s%s)%s",
|
|
gui_color_search_config ("chat_nick"),
|
|
"alice",
|
|
gui_color_search_config ("chat_delimiters"),
|
|
gui_color_search_config ("chat_host"),
|
|
"example.com",
|
|
gui_color_search_config ("chat_delimiters"),
|
|
gui_color_get_custom ("reset"));
|
|
STRCMP_EQUAL(result, irc_protocol_nick_address (ptr_server, 1, ptr_nick,
|
|
"alice", "example.com"));
|
|
config_file_option_reset (irc_config_look_color_nicks_in_server_messages, 1);
|
|
}
|
|
|
|
/*
|
|
* Test functions:
|
|
* irc_protocol_recv_command (command not found)
|
|
*/
|
|
|
|
TEST(IrcProtocolWithServer, recv_command_not_found)
|
|
{
|
|
SRV_INIT;
|
|
|
|
RECV(":alice!user@host XYZ");
|
|
CHECK_SRV("=!=", "irc: command \"XYZ\" not found: \":alice!user@host XYZ\"",
|
|
"");
|
|
|
|
RECV(":alice!user@host XYZ abc :\002def");
|
|
CHECK_SRV("=!=",
|
|
"irc: command \"XYZ\" not found: \":alice!user@host XYZ abc :\002def\"",
|
|
"");
|
|
|
|
RECV(":alice!user@host 099");
|
|
CHECK_ERROR_PARAMS("099", 0, 1);
|
|
|
|
RECV(":alice!user@host 099 abc :\002def");
|
|
CHECK_SRV("--", "abc def",
|
|
"irc_099,irc_numeric,nick_alice,host_user@host,log3");
|
|
}
|
|
|
|
/*
|
|
* Test functions:
|
|
* irc_protocol_recv_command (invalid message)
|
|
*/
|
|
|
|
TEST(IrcProtocolWithServer, recv_command_invalid_message)
|
|
{
|
|
SRV_INIT;
|
|
|
|
RECV(":");
|
|
CHECK_NO_MSG;
|
|
|
|
RECV("abc");
|
|
CHECK_SRV("=!=", "irc: command \"abc\" not found: \"abc\"", "");
|
|
|
|
RECV(":alice!user@host");
|
|
CHECK_NO_MSG;
|
|
|
|
RECV("@");
|
|
CHECK_SRV("=!=", "irc: command \"@\" not found: \"@\"", "");
|
|
|
|
RECV("@test");
|
|
CHECK_SRV("=!=", "irc: command \"@test\" not found: \"@test\"", "");
|
|
|
|
RECV("@test :");
|
|
CHECK_NO_MSG;
|
|
|
|
RECV("@test :abc");
|
|
CHECK_NO_MSG;
|
|
}
|
|
|
|
/*
|
|
* Test functions:
|
|
* irc_protocol_cb_account (without account-notify capability)
|
|
*/
|
|
|
|
TEST(IrcProtocolWithServer, account_without_account_notify_cap)
|
|
{
|
|
struct t_irc_nick *ptr_nick;
|
|
|
|
SRV_INIT_JOIN2;
|
|
|
|
RECV(":bob!user@host PRIVMSG alice :hi Alice!");
|
|
|
|
ptr_nick = ptr_server->channels->last_nick;
|
|
|
|
STRCMP_EQUAL(NULL, ptr_nick->account);
|
|
|
|
/* not enough parameters */
|
|
RECV(":bob!user@host ACCOUNT");
|
|
CHECK_ERROR_PARAMS("account", 0, 1);
|
|
|
|
STRCMP_EQUAL(NULL, ptr_nick->account);
|
|
|
|
RECV(":bob!user@host ACCOUNT *");
|
|
CHECK_CHAN("--", "bob has unidentified",
|
|
"irc_account,irc_smart_filter,nick_bob,host_user@host,log3");
|
|
CHECK_PV("bob", "--", "bob has unidentified",
|
|
"irc_account,nick_bob,host_user@host,log3");
|
|
STRCMP_EQUAL(NULL, ptr_nick->account);
|
|
|
|
RECV(":bob!user@host ACCOUNT :*");
|
|
CHECK_CHAN("--", "bob has unidentified",
|
|
"irc_account,irc_smart_filter,nick_bob,host_user@host,log3");
|
|
CHECK_PV("bob", "--", "bob has unidentified",
|
|
"irc_account,nick_bob,host_user@host,log3");
|
|
STRCMP_EQUAL(NULL, ptr_nick->account);
|
|
|
|
RECV(":bob!user@host ACCOUNT new_account");
|
|
CHECK_CHAN("--", "bob has identified as new_account",
|
|
"irc_account,irc_smart_filter,nick_bob,host_user@host,log3");
|
|
CHECK_PV("bob", "--", "bob has identified as new_account",
|
|
"irc_account,nick_bob,host_user@host,log3");
|
|
STRCMP_EQUAL(NULL, ptr_nick->account);
|
|
|
|
RECV(":bob!user@host ACCOUNT :\002new_account");
|
|
CHECK_CHAN("--", "bob has identified as new_account",
|
|
"irc_account,irc_smart_filter,nick_bob,host_user@host,log3");
|
|
CHECK_PV("bob", "--", "bob has identified as new_account",
|
|
"irc_account,nick_bob,host_user@host,log3");
|
|
STRCMP_EQUAL(NULL, ptr_nick->account);
|
|
}
|
|
|
|
/*
|
|
* Test functions:
|
|
* irc_protocol_cb_account (with account-notify capability)
|
|
*/
|
|
|
|
TEST(IrcProtocolWithServer, account_with_account_notify_cap)
|
|
{
|
|
struct t_irc_nick *ptr_nick;
|
|
|
|
/* assume "account-notify" capability is enabled in server */
|
|
hashtable_set (ptr_server->cap_list, "account-notify", NULL);
|
|
|
|
SRV_INIT_JOIN;
|
|
|
|
ptr_nick = ptr_server->channels->nicks;
|
|
|
|
STRCMP_EQUAL(NULL, ptr_nick->account);
|
|
|
|
RECV(":alice!user@host ACCOUNT new_account");
|
|
CHECK_CHAN("--", "alice has identified as new_account",
|
|
"irc_account,nick_alice,host_user@host,log3");
|
|
STRCMP_EQUAL("new_account", ptr_nick->account);
|
|
|
|
RECV(":alice!user@host ACCOUNT : \002new account with spaces ");
|
|
CHECK_CHAN("--", "alice has identified as new account with spaces ",
|
|
"irc_account,nick_alice,host_user@host,log3");
|
|
STRCMP_EQUAL(" \002new account with spaces ", ptr_nick->account);
|
|
|
|
RECV(":alice!user@host ACCOUNT *");
|
|
CHECK_CHAN("--", "alice has unidentified",
|
|
"irc_account,nick_alice,host_user@host,log3");
|
|
STRCMP_EQUAL(NULL, ptr_nick->account);
|
|
|
|
RECV(":alice!user@host ACCOUNT :new_account2");
|
|
CHECK_CHAN("--", "alice has identified as new_account2",
|
|
"irc_account,nick_alice,host_user@host,log3");
|
|
STRCMP_EQUAL("new_account2", ptr_nick->account);
|
|
|
|
RECV(":alice!user@host ACCOUNT :*");
|
|
CHECK_CHAN("--", "alice has unidentified",
|
|
"irc_account,nick_alice,host_user@host,log3");
|
|
STRCMP_EQUAL(NULL, ptr_nick->account);
|
|
|
|
hashtable_remove (ptr_server->cap_list, "account-notify");
|
|
}
|
|
|
|
/*
|
|
* Test functions:
|
|
* irc_protocol_cb_authenticate
|
|
*/
|
|
|
|
TEST(IrcProtocolWithServer, authenticate)
|
|
{
|
|
SRV_INIT;
|
|
|
|
/* not enough parameters */
|
|
RECV("AUTHENTICATE");
|
|
CHECK_ERROR_PARAMS("authenticate", 0, 1);
|
|
RECV(":server.address AUTHENTICATE");
|
|
CHECK_ERROR_PARAMS("authenticate", 0, 1);
|
|
|
|
RECV("AUTHENTICATE "
|
|
"QQDaUzXAmVffxuzFy77XWBGwABBQAgdinelBrKZaR3wE7nsIETuTVY= ");
|
|
CHECK_NO_MSG;
|
|
RECV(":server.address AUTHENTICATE "
|
|
"QQDaUzXAmVffxuzFy77XWBGwABBQAgdinelBrKZaR3wE7nsIETuTVY= ");
|
|
CHECK_NO_MSG;
|
|
}
|
|
|
|
/*
|
|
* Test functions:
|
|
* irc_protocol_cb_away
|
|
*/
|
|
|
|
TEST(IrcProtocolWithServer, away)
|
|
{
|
|
struct t_irc_nick *ptr_nick;
|
|
|
|
SRV_INIT_JOIN;
|
|
|
|
/* missing nick */
|
|
RECV("AWAY");
|
|
CHECK_ERROR_NICK("away");
|
|
|
|
ptr_nick = ptr_server->channels->nicks;
|
|
|
|
LONGS_EQUAL(0, ptr_nick->away);
|
|
|
|
RECV(":alice!user@host AWAY Bye");
|
|
CHECK_NO_MSG;
|
|
LONGS_EQUAL(1, ptr_nick->away);
|
|
|
|
RECV(":alice!user@host AWAY : \002Holidays now! ");
|
|
CHECK_NO_MSG;
|
|
LONGS_EQUAL(1, ptr_nick->away);
|
|
|
|
RECV(":alice!user@host AWAY");
|
|
CHECK_NO_MSG;
|
|
LONGS_EQUAL(0, ptr_nick->away);
|
|
}
|
|
|
|
/*
|
|
* Test functions:
|
|
* irc_protocol_cb_batch (without batch cap)
|
|
*/
|
|
|
|
TEST(IrcProtocolWithServer, batch_without_batch_cap)
|
|
{
|
|
SRV_INIT_JOIN2;
|
|
|
|
/* not enough parameters */
|
|
RECV(":server BATCH");
|
|
CHECK_ERROR_PARAMS("batch", 0, 1);
|
|
RECV(":server BATCH +test");
|
|
CHECK_NO_MSG;
|
|
|
|
/* invalid reference: does not start with '+' or '-' */
|
|
RECV(":server BATCH zzz type");
|
|
CHECK_NO_MSG;
|
|
POINTERS_EQUAL(NULL, ptr_server->batches);
|
|
|
|
/* start batch without parameters */
|
|
RECV(":server BATCH +ref example");
|
|
CHECK_NO_MSG;
|
|
POINTERS_EQUAL(NULL, irc_batch_search (ptr_server, "ref"));
|
|
|
|
/* new messages with batch reference */
|
|
RECV("@batch=ref :bob!user_b@host_b PRIVMSG #test : \002this is a test ");
|
|
CHECK_CHAN("bob", " this is a test ",
|
|
"irc_privmsg,irc_tag_batch=ref,notify_message,"
|
|
"prefix_nick_248,nick_bob,host_user_b@host_b,log1");
|
|
RECV("@batch=ref :bob!user_b@host_b PRIVMSG #test :second test");
|
|
CHECK_CHAN("bob", "second test",
|
|
"irc_privmsg,irc_tag_batch=ref,notify_message,"
|
|
"prefix_nick_248,nick_bob,host_user_b@host_b,log1");
|
|
RECV("@batch=ref :bob!user_b@host_b PRIVMSG #test :third test");
|
|
CHECK_CHAN("bob", "third test",
|
|
"irc_privmsg,irc_tag_batch=ref,notify_message,"
|
|
"prefix_nick_248,nick_bob,host_user_b@host_b,log1");
|
|
|
|
/* end batch */
|
|
RECV(":server BATCH -ref");
|
|
CHECK_NO_MSG;
|
|
|
|
/* start batch with parameters */
|
|
RECV(":server BATCH +ref example param1 param2 param3");
|
|
CHECK_NO_MSG;
|
|
POINTERS_EQUAL(NULL, irc_batch_search (ptr_server, "ref"));
|
|
|
|
/* new messages with batch reference */
|
|
RECV("@batch=ref :bob!user_b@host_b PRIVMSG #test :test 1");
|
|
CHECK_CHAN("bob", "test 1",
|
|
"irc_privmsg,irc_tag_batch=ref,notify_message,"
|
|
"prefix_nick_248,nick_bob,host_user_b@host_b,log1");
|
|
RECV("@batch=ref :bob!user_b@host_b PRIVMSG #test :test 2");
|
|
CHECK_CHAN("bob", "test 2",
|
|
"irc_privmsg,irc_tag_batch=ref,notify_message,"
|
|
"prefix_nick_248,nick_bob,host_user_b@host_b,log1");
|
|
RECV("@batch=ref :bob!user_b@host_b PRIVMSG #test :test 3");
|
|
CHECK_CHAN("bob", "test 3",
|
|
"irc_privmsg,irc_tag_batch=ref,notify_message,"
|
|
"prefix_nick_248,nick_bob,host_user_b@host_b,log1");
|
|
|
|
/* end batch */
|
|
RECV(":server BATCH -ref");
|
|
CHECK_NO_MSG;
|
|
|
|
/* start/end batch without parameters */
|
|
RECV(":server BATCH +ref example");
|
|
RECV(":server BATCH -ref");
|
|
CHECK_NO_MSG;
|
|
POINTERS_EQUAL(NULL, irc_batch_search (ptr_server, "ref"));
|
|
|
|
/* interleaving batches */
|
|
RECV(":server BATCH +1 example");
|
|
CHECK_NO_MSG;
|
|
RECV("@batch=1 :bob!user_b@host_b PRIVMSG #test :message 1");
|
|
CHECK_CHAN("bob", "message 1",
|
|
"irc_privmsg,irc_tag_batch=1,notify_message,"
|
|
"prefix_nick_248,nick_bob,host_user_b@host_b,log1");
|
|
RECV(":server BATCH +2 example");
|
|
CHECK_NO_MSG;
|
|
RECV("@batch=1 :bob!user_b@host_b PRIVMSG #test :message 2");
|
|
CHECK_CHAN("bob", "message 2",
|
|
"irc_privmsg,irc_tag_batch=1,notify_message,"
|
|
"prefix_nick_248,nick_bob,host_user_b@host_b,log1");
|
|
RECV("@batch=2 :bob!user_b@host_b PRIVMSG #test :message 4");
|
|
CHECK_CHAN("bob", "message 4",
|
|
"irc_privmsg,irc_tag_batch=2,notify_message,"
|
|
"prefix_nick_248,nick_bob,host_user_b@host_b,log1");
|
|
RECV("@batch=1 :bob!user_b@host_b PRIVMSG #test :message 3");
|
|
CHECK_CHAN("bob", "message 3",
|
|
"irc_privmsg,irc_tag_batch=1,notify_message,"
|
|
"prefix_nick_248,nick_bob,host_user_b@host_b,log1");
|
|
RECV(":server BATCH -1");
|
|
CHECK_NO_MSG;
|
|
RECV("@batch=2 :bob!user_b@host_b PRIVMSG #test :message 5");
|
|
CHECK_CHAN("bob", "message 5",
|
|
"irc_privmsg,irc_tag_batch=2,notify_message,"
|
|
"prefix_nick_248,nick_bob,host_user_b@host_b,log1");
|
|
RECV(":server BATCH -2");
|
|
CHECK_NO_MSG;
|
|
|
|
/* nested batch */
|
|
RECV(":server BATCH +ref1 example1");
|
|
CHECK_NO_MSG;
|
|
RECV("@batch=ref1 :server BATCH +ref2 example2");
|
|
RECV("@batch=ref1 :bob!user_b@host_b PRIVMSG #test :test ref1");
|
|
CHECK_CHAN("bob", "test ref1",
|
|
"irc_privmsg,irc_tag_batch=ref1,notify_message,"
|
|
"prefix_nick_248,nick_bob,host_user_b@host_b,log1");
|
|
RECV("@batch=ref2 :bob!user_b@host_b PRIVMSG #test :test ref2");
|
|
CHECK_CHAN("bob", "test ref2",
|
|
"irc_privmsg,irc_tag_batch=ref2,notify_message,"
|
|
"prefix_nick_248,nick_bob,host_user_b@host_b,log1");
|
|
RECV(":server BATCH -ref2");
|
|
CHECK_NO_MSG;
|
|
RECV(":server BATCH -ref1");
|
|
CHECK_NO_MSG;
|
|
|
|
/* multiline */
|
|
RECV(":server BATCH +ref draft/multiline #test");
|
|
CHECK_NO_MSG;
|
|
RECV("@batch=ref :bob!user_b@host_b PRIVMSG #test :line 1");
|
|
CHECK_CHAN("bob", "line 1",
|
|
"irc_privmsg,irc_tag_batch=ref,notify_message,"
|
|
"prefix_nick_248,nick_bob,host_user_b@host_b,log1");
|
|
RECV("@batch=ref :bob!user_b@host_b PRIVMSG #test :line 2");
|
|
CHECK_CHAN("bob", "line 2",
|
|
"irc_privmsg,irc_tag_batch=ref,notify_message,"
|
|
"prefix_nick_248,nick_bob,host_user_b@host_b,log1");
|
|
RECV(":server BATCH -ref");
|
|
CHECK_NO_MSG;
|
|
|
|
/* multiline with CTCP */
|
|
RECV(":server BATCH +ref draft/multiline #test");
|
|
CHECK_NO_MSG;
|
|
RECV("@batch=ref :bob!user_b@host_b PRIVMSG #test :\001ACTION is testing");
|
|
CHECK_CHAN(" *", "bob is testing",
|
|
"irc_privmsg,irc_tag_batch=ref,irc_action,notify_message,"
|
|
"nick_bob,host_user_b@host_b,log1");
|
|
RECV("@batch=ref :bob!user_b@host_b PRIVMSG #test :again\001");
|
|
CHECK_CHAN("bob", "again\001",
|
|
"irc_privmsg,irc_tag_batch=ref,notify_message,"
|
|
"prefix_nick_248,nick_bob,host_user_b@host_b,log1");
|
|
RECV(":server BATCH -ref");
|
|
CHECK_NO_MSG;
|
|
}
|
|
|
|
/*
|
|
* Test functions:
|
|
* irc_protocol_cb_batch (with batch cap)
|
|
*/
|
|
|
|
TEST(IrcProtocolWithServer, batch_with_batch_cap)
|
|
{
|
|
struct t_irc_batch *ptr_batch;
|
|
|
|
/* assume "batch" capability is enabled in server */
|
|
hashtable_set (ptr_server->cap_list, "batch", NULL);
|
|
|
|
SRV_INIT_JOIN2;
|
|
|
|
/* not enough parameters */
|
|
RECV(":server BATCH");
|
|
CHECK_ERROR_PARAMS("batch", 0, 1);
|
|
RECV(":server BATCH +test");
|
|
CHECK_ERROR_PARSE("batch", ":server BATCH +test");
|
|
|
|
/* invalid reference: does not start with '+' or '-' */
|
|
RECV(":server BATCH zzz type");
|
|
CHECK_NO_MSG;
|
|
POINTERS_EQUAL(NULL, ptr_server->batches);
|
|
|
|
/* start batch without parameters */
|
|
RECV(":server BATCH +ref example ");
|
|
CHECK_NO_MSG;
|
|
ptr_batch = irc_batch_search (ptr_server, "ref");
|
|
CHECK(ptr_batch);
|
|
STRCMP_EQUAL(NULL, ptr_batch->parent_ref);
|
|
STRCMP_EQUAL("example", ptr_batch->type);
|
|
STRCMP_EQUAL(NULL, ptr_batch->parameters);
|
|
POINTERS_EQUAL(NULL, ptr_batch->messages);
|
|
LONGS_EQUAL(0, ptr_batch->end_received);
|
|
LONGS_EQUAL(0, ptr_batch->messages_processed);
|
|
|
|
/* new messages with batch reference */
|
|
RECV("@batch=ref :bob!user_b@host_b PRIVMSG #test : \002this is a test ");
|
|
RECV("@batch=ref :bob!user_b@host_b PRIVMSG #test :second test");
|
|
RECV("@batch=ref :bob!user_b@host_b PRIVMSG #test :third test");
|
|
CHECK_NO_MSG;
|
|
|
|
/* end batch */
|
|
RECV(":server BATCH -ref");
|
|
CHECK_CHAN("bob", " this is a test ",
|
|
"irc_privmsg,irc_tag_batch=ref,irc_batch_type_example,"
|
|
"notify_message,prefix_nick_248,nick_bob,"
|
|
"host_user_b@host_b,log1");
|
|
CHECK_CHAN("bob", "second test",
|
|
"irc_privmsg,irc_tag_batch=ref,irc_batch_type_example,"
|
|
"notify_message,prefix_nick_248,nick_bob,"
|
|
"host_user_b@host_b,log1");
|
|
CHECK_CHAN("bob", "third test",
|
|
"irc_privmsg,irc_tag_batch=ref,irc_batch_type_example,"
|
|
"notify_message,prefix_nick_248,nick_bob,"
|
|
"host_user_b@host_b,log1");
|
|
POINTERS_EQUAL(NULL, irc_batch_search (ptr_server, "ref"));
|
|
|
|
/* start batch with parameters */
|
|
RECV(":server BATCH +ref example param1 param2 param3 ");
|
|
CHECK_NO_MSG;
|
|
ptr_batch = irc_batch_search (ptr_server, "ref");
|
|
CHECK(ptr_batch);
|
|
STRCMP_EQUAL(NULL, ptr_batch->parent_ref);
|
|
STRCMP_EQUAL("example", ptr_batch->type);
|
|
STRCMP_EQUAL("param1 param2 param3", ptr_batch->parameters);
|
|
POINTERS_EQUAL(NULL, ptr_batch->messages);
|
|
LONGS_EQUAL(0, ptr_batch->end_received);
|
|
LONGS_EQUAL(0, ptr_batch->messages_processed);
|
|
|
|
/* new messages with batch reference */
|
|
RECV("@batch=ref :bob!user_b@host_b PRIVMSG #test :test 1");
|
|
RECV("@batch=ref :bob!user_b@host_b PRIVMSG #test :test 2");
|
|
RECV("@batch=ref :bob!user_b@host_b PRIVMSG #test :test 3");
|
|
CHECK_NO_MSG;
|
|
|
|
/* end batch */
|
|
RECV(":server BATCH -ref");
|
|
CHECK_CHAN("bob", "test 1",
|
|
"irc_privmsg,irc_tag_batch=ref,irc_batch_type_example,"
|
|
"notify_message,prefix_nick_248,nick_bob,"
|
|
"host_user_b@host_b,log1");
|
|
CHECK_CHAN("bob", "test 2",
|
|
"irc_privmsg,irc_tag_batch=ref,irc_batch_type_example,"
|
|
"notify_message,prefix_nick_248,nick_bob,"
|
|
"host_user_b@host_b,log1");
|
|
CHECK_CHAN("bob", "test 3",
|
|
"irc_privmsg,irc_tag_batch=ref,irc_batch_type_example,"
|
|
"notify_message,prefix_nick_248,nick_bob,"
|
|
"host_user_b@host_b,log1");
|
|
POINTERS_EQUAL(NULL, irc_batch_search (ptr_server, "ref"));
|
|
|
|
/* start/end batch without parameters */
|
|
RECV(":server BATCH +ref example");
|
|
RECV(":server BATCH -ref");
|
|
CHECK_NO_MSG;
|
|
POINTERS_EQUAL(NULL, irc_batch_search (ptr_server, "ref"));
|
|
|
|
/* interleaving batches */
|
|
RECV(":server BATCH +1 example");
|
|
CHECK_NO_MSG;
|
|
CHECK(irc_batch_search (ptr_server, "1"));
|
|
RECV("@batch=1 :bob!user_b@host_b PRIVMSG #test :message 1");
|
|
CHECK_NO_MSG;
|
|
RECV(":server BATCH +2 example");
|
|
CHECK_NO_MSG;
|
|
CHECK(irc_batch_search (ptr_server, "2"));
|
|
RECV("@batch=1 :bob!user_b@host_b PRIVMSG #test :message 2");
|
|
CHECK_NO_MSG;
|
|
RECV("@batch=2 :bob!user_b@host_b PRIVMSG #test :message 4");
|
|
CHECK_NO_MSG;
|
|
RECV("@batch=1 :bob!user_b@host_b PRIVMSG #test :message 3");
|
|
CHECK_NO_MSG;
|
|
RECV(":server BATCH -1");
|
|
CHECK_CHAN("bob", "message 1",
|
|
"irc_privmsg,irc_tag_batch=1,irc_batch_type_example,"
|
|
"notify_message,prefix_nick_248,nick_bob,"
|
|
"host_user_b@host_b,log1");
|
|
CHECK_CHAN("bob", "message 2",
|
|
"irc_privmsg,irc_tag_batch=1,irc_batch_type_example,"
|
|
"notify_message,prefix_nick_248,nick_bob,"
|
|
"host_user_b@host_b,log1");
|
|
CHECK_CHAN("bob", "message 3",
|
|
"irc_privmsg,irc_tag_batch=1,irc_batch_type_example,"
|
|
"notify_message,prefix_nick_248,nick_bob,"
|
|
"host_user_b@host_b,log1");
|
|
POINTERS_EQUAL(NULL, irc_batch_search (ptr_server, "1"));
|
|
RECV("@batch=2 :bob!user_b@host_b PRIVMSG #test :message 5");
|
|
CHECK_NO_MSG;
|
|
RECV(":server BATCH -2");
|
|
CHECK_CHAN("bob", "message 4",
|
|
"irc_privmsg,irc_tag_batch=2,irc_batch_type_example,"
|
|
"notify_message,prefix_nick_248,nick_bob,"
|
|
"host_user_b@host_b,log1");
|
|
CHECK_CHAN("bob", "message 5",
|
|
"irc_privmsg,irc_tag_batch=2,irc_batch_type_example,"
|
|
"notify_message,prefix_nick_248,nick_bob,"
|
|
"host_user_b@host_b,log1");
|
|
POINTERS_EQUAL(NULL, irc_batch_search (ptr_server, "2"));
|
|
|
|
/* nested batch */
|
|
RECV(":server BATCH +ref1 example1");
|
|
CHECK_NO_MSG;
|
|
CHECK(irc_batch_search (ptr_server, "ref1"));
|
|
RECV("@batch=ref1 :server BATCH +ref2 example2");
|
|
CHECK_NO_MSG;
|
|
CHECK(irc_batch_search (ptr_server, "ref2"));
|
|
RECV("@batch=ref1 :bob!user_b@host_b PRIVMSG #test :test ref1");
|
|
CHECK_NO_MSG;
|
|
RECV("@batch=ref2 :bob!user_b@host_b PRIVMSG #test :test ref2");
|
|
CHECK_NO_MSG;
|
|
RECV(":server BATCH -ref2");
|
|
CHECK_NO_MSG;
|
|
CHECK(irc_batch_search (ptr_server, "ref2"));
|
|
RECV(":server BATCH -ref1");
|
|
CHECK_CHAN("bob", "test ref1",
|
|
"irc_privmsg,irc_tag_batch=ref1,irc_batch_type_example1,"
|
|
"notify_message,prefix_nick_248,nick_bob,"
|
|
"host_user_b@host_b,log1");
|
|
CHECK_CHAN("bob", "test ref2",
|
|
"irc_privmsg,irc_tag_batch=ref2,irc_batch_type_example2,"
|
|
"notify_message,prefix_nick_248,nick_bob,"
|
|
"host_user_b@host_b,log1");
|
|
POINTERS_EQUAL(NULL, irc_batch_search (ptr_server, "ref1"));
|
|
POINTERS_EQUAL(NULL, irc_batch_search (ptr_server, "ref2"));
|
|
|
|
/* multiline */
|
|
RECV("@time=2023-08-09T07:43:01.830Z;msgid=icqfzy7zdbpix4gy8pvzuv49kw "
|
|
":server BATCH +ref draft/multiline #test");
|
|
CHECK_NO_MSG;
|
|
RECV("@batch=ref :bob!user_b@host_b PRIVMSG #test :line 1");
|
|
CHECK_NO_MSG;
|
|
RECV("@batch=ref :bob!user_b@host_b PRIVMSG #test :line 2");
|
|
CHECK_NO_MSG;
|
|
RECV(":server BATCH -ref");
|
|
CHECK_CHAN("bob", "line 1",
|
|
"irc_privmsg,irc_tag_batch=ref,irc_tag_time=2023-08-09T07:43:01.830Z,"
|
|
"irc_tag_msgid=icqfzy7zdbpix4gy8pvzuv49kw,"
|
|
"irc_batch_type_draft/multiline,notify_message,prefix_nick_248,"
|
|
"nick_bob,host_user_b@host_b,log1");
|
|
CHECK_CHAN("bob", "line 2",
|
|
"irc_privmsg,irc_tag_batch=ref,irc_tag_time=2023-08-09T07:43:01.830Z,"
|
|
"irc_tag_msgid=icqfzy7zdbpix4gy8pvzuv49kw,irc_batch_type_draft/multiline,"
|
|
"notify_message,prefix_nick_248,nick_bob,host_user_b@host_b,log1");
|
|
|
|
/* multiline with CTCP */
|
|
RECV(":server BATCH +ref draft/multiline #test");
|
|
CHECK_NO_MSG;
|
|
RECV("@batch=ref :bob!user_b@host_b PRIVMSG #test :\001ACTION is testing");
|
|
CHECK_NO_MSG;
|
|
RECV("@batch=ref :bob!user_b@host_b PRIVMSG #test :again\001");
|
|
CHECK_NO_MSG;
|
|
RECV(":server BATCH -ref");
|
|
CHECK_CHAN(" *", "bob is testing",
|
|
"irc_privmsg,irc_tag_batch=ref,irc_batch_type_draft/multiline,"
|
|
"irc_action,notify_message,nick_bob,host_user_b@host_b,log1");
|
|
CHECK_CHAN("bob", "again\001",
|
|
"irc_privmsg,irc_tag_batch=ref,irc_batch_type_draft/multiline,"
|
|
"notify_message,prefix_nick_248,nick_bob,"
|
|
"host_user_b@host_b,log1");
|
|
RECV(":bob!user_b@host_b PRIVMSG #test :prout\001");
|
|
CHECK_CHAN("bob", "prout\001",
|
|
"irc_privmsg,notify_message,prefix_nick_248,nick_bob,"
|
|
"host_user_b@host_b,log1");
|
|
|
|
/* assume "draft/multiline" capability is enabled in server */
|
|
hashtable_set (ptr_server->cap_list, "draft/multiline", NULL);
|
|
irc_server_set_buffer_input_multiline (ptr_server, 1);
|
|
|
|
/* multiline */
|
|
RECV("@time=2023-08-09T07:43:01.830Z;msgid=icqfzy7zdbpix4gy8pvzuv49kw "
|
|
":server BATCH +ref draft/multiline #test");
|
|
CHECK_NO_MSG;
|
|
RECV("@batch=ref :bob!user_b@host_b PRIVMSG #test :line 1");
|
|
CHECK_NO_MSG;
|
|
RECV("@batch=ref :bob!user_b@host_b PRIVMSG #test :line 2");
|
|
CHECK_NO_MSG;
|
|
RECV(":server BATCH -ref");
|
|
CHECK_CHAN("bob", "line 1\n"
|
|
"line 2",
|
|
"irc_privmsg,irc_tag_batch=ref,irc_tag_time=2023-08-09T07:43:01.830Z,"
|
|
"irc_tag_msgid=icqfzy7zdbpix4gy8pvzuv49kw,"
|
|
"irc_batch_type_draft/multiline,notify_message,prefix_nick_248,"
|
|
"nick_bob,host_user_b@host_b,log1");
|
|
|
|
/* multiline with CTCP */
|
|
RECV(":server BATCH +ref draft/multiline #test");
|
|
CHECK_NO_MSG;
|
|
RECV("@batch=ref :bob!user_b@host_b PRIVMSG #test :\001ACTION is testing");
|
|
CHECK_NO_MSG;
|
|
RECV("@batch=ref :bob!user_b@host_b PRIVMSG #test :again\001");
|
|
CHECK_NO_MSG;
|
|
RECV(":server BATCH -ref");
|
|
CHECK_CHAN(" *", "bob is testing\n"
|
|
"again",
|
|
"irc_privmsg,irc_tag_batch=ref,irc_batch_type_draft/multiline,"
|
|
"irc_action,notify_message,nick_bob,host_user_b@host_b,log1");
|
|
|
|
hashtable_remove (ptr_server->cap_list, "draft/multiline");
|
|
irc_server_set_buffer_input_multiline (ptr_server, 0);
|
|
|
|
hashtable_remove (ptr_server->cap_list, "batch");
|
|
}
|
|
|
|
/*
|
|
* Test functions:
|
|
* irc_protocol_cap_to_enable
|
|
*/
|
|
|
|
TEST(IrcProtocol, cap_to_enable)
|
|
{
|
|
char *str;
|
|
|
|
WEE_CHECK_CAP_TO_ENABLE("", NULL, 0);
|
|
WEE_CHECK_CAP_TO_ENABLE("", "", 0);
|
|
WEE_CHECK_CAP_TO_ENABLE("extended-join", "extended-join", 0);
|
|
WEE_CHECK_CAP_TO_ENABLE("extended-join,sasl", "extended-join", 1);
|
|
WEE_CHECK_CAP_TO_ENABLE(IRC_ALL_CAPS, "*", 0);
|
|
WEE_CHECK_CAP_TO_ENABLE(IRC_ALL_CAPS ",sasl", "*", 1);
|
|
WEE_CHECK_CAP_TO_ENABLE(IRC_ALL_CAPS ",!away-notify,!extended-join,sasl",
|
|
"*,!away-notify,!extended-join", 1);
|
|
}
|
|
|
|
/*
|
|
* Test functions:
|
|
* irc_protocol_cb_cap
|
|
*/
|
|
|
|
TEST(IrcProtocolWithServer, cap)
|
|
{
|
|
SRV_INIT;
|
|
|
|
/* not enough parameters */
|
|
RECV("CAP");
|
|
CHECK_ERROR_PARAMS("cap", 0, 2);
|
|
RECV("CAP *");
|
|
CHECK_ERROR_PARAMS("cap", 1, 2);
|
|
RECV(":server CAP");
|
|
CHECK_ERROR_PARAMS("cap", 0, 2);
|
|
RECV(":server CAP *");
|
|
CHECK_ERROR_PARAMS("cap", 1, 2);
|
|
|
|
/* CAP LS */
|
|
RECV("CAP * LS :multi-prefix sasl ");
|
|
CHECK_SRV("--", "irc: client capability, server supports: multi-prefix sasl",
|
|
"irc_cap,log3");
|
|
RECV("CAP * LS * :multi-prefix sasl");
|
|
CHECK_NO_MSG;
|
|
RECV(":server CAP * LS :multi-prefix sasl");
|
|
CHECK_SRV("--", "irc: client capability, server supports: multi-prefix sasl",
|
|
"irc_cap,log3");
|
|
RECV(":server CAP * LS * :multi-prefix sasl");
|
|
CHECK_NO_MSG;
|
|
|
|
/* CAP LIST */
|
|
RECV("CAP * LIST : multi-prefix sasl ");
|
|
CHECK_SRV("--", "irc: client capability, currently enabled: multi-prefix sasl",
|
|
"irc_cap,log3");
|
|
RECV("CAP * LIST * :multi-prefix sasl");
|
|
CHECK_NO_MSG;
|
|
RECV(":server CAP * LIST :multi-prefix sasl");
|
|
CHECK_SRV("--", "irc: client capability, currently enabled: multi-prefix sasl",
|
|
"irc_cap,log3");
|
|
RECV(":server CAP * LIST * :multi-prefix sasl");
|
|
CHECK_NO_MSG;
|
|
|
|
/* CAP NEW */
|
|
RECV("CAP * NEW : multi-prefix sasl ");
|
|
CHECK_SRV("--", "irc: client capability, now available: multi-prefix sasl ",
|
|
"irc_cap,log3");
|
|
RECV(":server CAP * NEW :multi-prefix sasl");
|
|
CHECK_SRV("--", "irc: client capability, now available: multi-prefix sasl",
|
|
"irc_cap,log3");
|
|
|
|
/* CAP DEL */
|
|
RECV("CAP * DEL : multi-prefix sasl ");
|
|
CHECK_SRV("--", "irc: client capability, removed: multi-prefix sasl ",
|
|
"irc_cap,log3");
|
|
RECV(":server CAP * DEL :multi-prefix sasl");
|
|
CHECK_SRV("--", "irc: client capability, removed: multi-prefix sasl",
|
|
"irc_cap,log3");
|
|
|
|
/* CAP ACK */
|
|
RECV("CAP * ACK : sasl ");
|
|
CHECK_SRV("--", "irc: client capability, enabled: sasl", "irc_cap,log3");
|
|
RECV(":server CAP * ACK :sasl");
|
|
CHECK_SRV("--", "irc: client capability, enabled: sasl", "irc_cap,log3");
|
|
|
|
/* CAP NAK */
|
|
RECV("CAP * NAK : sasl ");
|
|
CHECK_SRV("=!=", "irc: client capability, refused: sasl ", "irc_cap,log3");
|
|
RECV(":server CAP * NAK :sasl");
|
|
CHECK_SRV("=!=", "irc: client capability, refused: sasl", "irc_cap,log3");
|
|
}
|
|
|
|
/*
|
|
* Test functions:
|
|
* irc_protocol_cb_chghost
|
|
*/
|
|
|
|
TEST(IrcProtocolWithServer, chghost)
|
|
{
|
|
struct t_irc_nick *ptr_nick, *ptr_nick2;
|
|
|
|
SRV_INIT_JOIN2;
|
|
|
|
RECV(":bob!user_\00304red@host_\00304red PRIVMSG alice :hi Alice!");
|
|
|
|
ptr_nick = ptr_server->channels->nicks;
|
|
ptr_nick2 = ptr_server->channels->last_nick;
|
|
|
|
STRCMP_EQUAL("user_a@host_a", ptr_nick->host);
|
|
|
|
/* not enough parameters */
|
|
RECV(":alice!user@host CHGHOST");
|
|
CHECK_ERROR_PARAMS("chghost", 0, 2);
|
|
RECV(":alice!user@host CHGHOST user2");
|
|
CHECK_ERROR_PARAMS("chghost", 1, 2);
|
|
|
|
/* missing nick */
|
|
RECV("CHGHOST user2 host2");
|
|
CHECK_ERROR_NICK("chghost");
|
|
|
|
STRCMP_EQUAL("user_a@host_a", ptr_nick->host);
|
|
|
|
/* self nick */
|
|
RECV(":alice!user@host CHGHOST user2 host2 ");
|
|
CHECK_CHAN("--", "alice (user@host) has changed host to user2@host2",
|
|
"irc_chghost,new_host_user2@host2,nick_alice,host_user@host,log3");
|
|
STRCMP_EQUAL("user2@host2", ptr_nick->host);
|
|
|
|
RECV(":alice!user@host CHGHOST user2 host2");
|
|
CHECK_CHAN("--", "alice (user@host) has changed host to user2@host2",
|
|
"irc_chghost,new_host_user2@host2,nick_alice,host_user@host,log3");
|
|
STRCMP_EQUAL("user2@host2", ptr_nick->host);
|
|
|
|
RECV(":alice!user2@host2 CHGHOST user3 :host3");
|
|
CHECK_CHAN("--", "alice (user2@host2) has changed host to user3@host3",
|
|
"irc_chghost,new_host_user3@host3,nick_alice,host_user2@host2,log3");
|
|
STRCMP_EQUAL("user3@host3", ptr_nick->host);
|
|
|
|
/* another nick */
|
|
RECV(":bob!user_\00304red@host_\00304red CHGHOST user_\00302blue host_\00302blue");
|
|
CHECK_CHAN("--",
|
|
"bob (user_red@host_red) has changed host to user_blue@host_blue",
|
|
"irc_chghost,new_host_user_\00302blue@host_\00302blue,irc_smart_filter,"
|
|
"nick_bob,host_user_\00304red@host_\00304red,log3");
|
|
STRCMP_EQUAL("user_\00302blue@host_\00302blue", ptr_nick2->host);
|
|
CHECK_PV("bob",
|
|
"--",
|
|
"bob (user_red@host_red) has changed host to user_blue@host_blue",
|
|
"irc_chghost,new_host_user_\00302blue@host_\00302blue,nick_bob,"
|
|
"host_user_\00304red@host_\00304red,log3");
|
|
}
|
|
|
|
/*
|
|
* Test functions:
|
|
* irc_protocol_cb_error
|
|
*/
|
|
|
|
TEST(IrcProtocolWithServer, error)
|
|
{
|
|
SRV_INIT;
|
|
|
|
/* not enough parameters */
|
|
RECV("ERROR");
|
|
CHECK_ERROR_PARAMS("error", 0, 1);
|
|
|
|
RECV("ERROR test");
|
|
CHECK_SRV("=!=", "test", "irc_error,log3");
|
|
RECV("ERROR : Closing Link: irc.server.org (\002Bad Password\002) ");
|
|
CHECK_SRV("=!=", " Closing Link: irc.server.org (Bad Password) ",
|
|
"irc_error,log3");
|
|
}
|
|
|
|
/*
|
|
* Test functions:
|
|
* irc_protocol_cb_fail
|
|
*/
|
|
|
|
TEST(IrcProtocolWithServer, fail)
|
|
{
|
|
SRV_INIT;
|
|
|
|
/* not enough parameters */
|
|
RECV(":server FAIL");
|
|
CHECK_ERROR_PARAMS("fail", 0, 2);
|
|
RECV(":server FAIL *");
|
|
CHECK_ERROR_PARAMS("fail", 1, 2);
|
|
RECV(":server FAIL COMMAND");
|
|
CHECK_ERROR_PARAMS("fail", 1, 2);
|
|
|
|
RECV(":server FAIL * TEST");
|
|
CHECK_SRV("=!=", "Failure: [] TEST", "irc_fail,nick_server,log3");
|
|
RECV(":server FAIL * TEST : \002the message ");
|
|
CHECK_SRV("=!=", "Failure: [TEST] the message ", "irc_fail,nick_server,log3");
|
|
RECV(":server FAIL * TEST TEST2");
|
|
CHECK_SRV("=!=", "Failure: [TEST] TEST2", "irc_fail,nick_server,log3");
|
|
RECV(":server FAIL * TEST TEST2 :the message");
|
|
CHECK_SRV("=!=", "Failure: [TEST TEST2] the message",
|
|
"irc_fail,nick_server,log3");
|
|
|
|
RECV(":server FAIL COMMAND TEST");
|
|
CHECK_SRV("=!=", "Failure: COMMAND [] TEST", "irc_fail,nick_server,log3");
|
|
RECV(":server FAIL COMMAND TEST :the message");
|
|
CHECK_SRV("=!=", "Failure: COMMAND [TEST] the message",
|
|
"irc_fail,nick_server,log3");
|
|
RECV(":server FAIL COMMAND TEST TEST2");
|
|
CHECK_SRV("=!=", "Failure: COMMAND [TEST] TEST2", "irc_fail,nick_server,log3");
|
|
RECV(":server FAIL COMMAND TEST TEST2 :the message");
|
|
CHECK_SRV("=!=", "Failure: COMMAND [TEST TEST2] the message",
|
|
"irc_fail,nick_server,log3");
|
|
}
|
|
|
|
/*
|
|
* Test functions:
|
|
* irc_protocol_cb_invite
|
|
*/
|
|
|
|
TEST(IrcProtocolWithServer, invite)
|
|
{
|
|
SRV_INIT;
|
|
|
|
/* not enough parameters */
|
|
RECV(":bob!user@host INVITE");
|
|
CHECK_ERROR_PARAMS("invite", 0, 2);
|
|
RECV(":bob!user@host INVITE alice");
|
|
CHECK_ERROR_PARAMS("invite", 1, 2);
|
|
|
|
/* missing nick */
|
|
RECV("INVITE alice #channel");
|
|
CHECK_ERROR_NICK("invite");
|
|
|
|
RECV(":bob!user@host INVITE alice #channel ");
|
|
CHECK_SRV("--", "You have been invited to #channel by bob",
|
|
"irc_invite,notify_highlight,nick_bob,host_user@host,log3");
|
|
RECV(":bob!user@host INVITE xxx #channel");
|
|
CHECK_SRV("--", "bob has invited xxx to #channel",
|
|
"irc_invite,nick_bob,host_user@host,log3");
|
|
}
|
|
|
|
/*
|
|
* Test functions:
|
|
* irc_protocol_cb_join
|
|
*/
|
|
|
|
TEST(IrcProtocolWithServer, join)
|
|
{
|
|
struct t_irc_channel *ptr_channel;
|
|
struct t_irc_nick *ptr_nick;
|
|
|
|
SRV_INIT;
|
|
|
|
POINTERS_EQUAL(NULL, ptr_server->channels);
|
|
|
|
/* not enough parameters */
|
|
RECV(":alice!user@host JOIN");
|
|
CHECK_ERROR_PARAMS("join", 0, 1);
|
|
|
|
/* missing nick */
|
|
RECV("JOIN #test");
|
|
CHECK_ERROR_NICK("join");
|
|
|
|
POINTERS_EQUAL(NULL, ptr_server->channels);
|
|
|
|
/* join of a user while the channel does not yet exist in local */
|
|
RECV(":bob!user@host JOIN #test");
|
|
CHECK_NO_MSG;
|
|
|
|
RECV(":alice!user@host JOIN #test ");
|
|
CHECK_CHAN("-->", "alice (user@host) has joined #test",
|
|
"irc_join,nick_alice,host_user@host,log4");
|
|
|
|
ptr_channel = ptr_server->channels;
|
|
|
|
CHECK(ptr_channel);
|
|
CHECK(ptr_channel == ptr_server->last_channel);
|
|
|
|
LONGS_EQUAL(IRC_CHANNEL_TYPE_CHANNEL, ptr_channel->type);
|
|
STRCMP_EQUAL("#test", ptr_channel->name);
|
|
STRCMP_EQUAL(NULL, ptr_channel->topic);
|
|
STRCMP_EQUAL(NULL, ptr_channel->modes);
|
|
LONGS_EQUAL(0, ptr_channel->limit);
|
|
STRCMP_EQUAL(NULL, ptr_channel->key);
|
|
LONGS_EQUAL(0, ptr_channel->checking_whox);
|
|
STRCMP_EQUAL(NULL, ptr_channel->away_message);
|
|
LONGS_EQUAL(0, ptr_channel->has_quit_server);
|
|
LONGS_EQUAL(0, ptr_channel->cycle);
|
|
LONGS_EQUAL(0, ptr_channel->part);
|
|
STRCMP_EQUAL(NULL, ptr_channel->pv_remote_nick_color);
|
|
POINTERS_EQUAL(NULL, ptr_channel->hook_autorejoin);
|
|
|
|
ptr_nick = ptr_channel->nicks;
|
|
|
|
LONGS_EQUAL(1, ptr_channel->nicks_count);
|
|
CHECK(ptr_nick);
|
|
CHECK(ptr_nick == ptr_channel->last_nick);
|
|
STRCMP_EQUAL("alice", ptr_nick->name);
|
|
STRCMP_EQUAL("user@host", ptr_nick->host);
|
|
STRCMP_EQUAL(" ", ptr_nick->prefixes);
|
|
STRCMP_EQUAL(" ", ptr_nick->prefix);
|
|
LONGS_EQUAL(0, ptr_nick->away);
|
|
STRCMP_EQUAL(NULL, ptr_nick->account);
|
|
STRCMP_EQUAL(NULL, ptr_nick->realname);
|
|
CHECK(ptr_nick->color);
|
|
|
|
CHECK(ptr_channel->buffer);
|
|
|
|
/* second self JOIN should be ignored if already joined */
|
|
RECV(":alice!user@host JOIN #test ");
|
|
CHECK_NO_MSG;
|
|
|
|
RECV(":bob!user@host JOIN #test * : ");
|
|
CHECK_CHAN("-->", "bob ( ) (user@host) has joined #test",
|
|
"irc_join,irc_smart_filter,nick_bob,host_user@host,log4");
|
|
|
|
ptr_nick = ptr_channel->last_nick;
|
|
|
|
LONGS_EQUAL(2, ptr_channel->nicks_count);
|
|
CHECK(ptr_nick);
|
|
STRCMP_EQUAL("bob", ptr_nick->name);
|
|
STRCMP_EQUAL("user@host", ptr_nick->host);
|
|
STRCMP_EQUAL(" ", ptr_nick->prefixes);
|
|
STRCMP_EQUAL(" ", ptr_nick->prefix);
|
|
LONGS_EQUAL(0, ptr_nick->away);
|
|
STRCMP_EQUAL(NULL, ptr_nick->account);
|
|
STRCMP_EQUAL(" ", ptr_nick->realname);
|
|
CHECK(ptr_nick->color);
|
|
|
|
RECV(":carol!user@host JOIN #test carol_account : \002Carol Name ");
|
|
CHECK_CHAN("-->",
|
|
"carol [carol_account] ( Carol Name ) (user@host) "
|
|
"has joined #test",
|
|
"irc_join,irc_smart_filter,nick_carol,host_user@host,log4");
|
|
|
|
ptr_nick = ptr_channel->last_nick;
|
|
|
|
LONGS_EQUAL(3, ptr_channel->nicks_count);
|
|
CHECK(ptr_nick);
|
|
STRCMP_EQUAL("carol", ptr_nick->name);
|
|
STRCMP_EQUAL("user@host", ptr_nick->host);
|
|
STRCMP_EQUAL(" ", ptr_nick->prefixes);
|
|
STRCMP_EQUAL(" ", ptr_nick->prefix);
|
|
LONGS_EQUAL(0, ptr_nick->away);
|
|
STRCMP_EQUAL("carol_account", ptr_nick->account);
|
|
STRCMP_EQUAL(" \002Carol Name ", ptr_nick->realname);
|
|
CHECK(ptr_nick->color);
|
|
|
|
/* join with option irc.look.display_host_join set to off */
|
|
config_file_option_set (irc_config_look_display_host_join, "off", 1);
|
|
RECV(":dan!user@host JOIN #test");
|
|
CHECK_CHAN("-->",
|
|
"dan has joined #test",
|
|
"irc_join,irc_smart_filter,nick_dan,host_user@host,log4");
|
|
config_file_option_reset (irc_config_look_display_host_join, 1);
|
|
|
|
/* join with option irc.look.display_host_join_local set to off */
|
|
config_file_option_set (irc_config_look_display_host_join_local, "off", 1);
|
|
RECV(":alice!user@host PART #test");
|
|
RECV(":alice!user@host JOIN #test");
|
|
CHECK_CHAN("-->", "alice has joined #test",
|
|
"irc_join,nick_alice,host_user@host,log4");
|
|
config_file_option_reset (irc_config_look_display_host_join_local, 1);
|
|
}
|
|
|
|
/*
|
|
* Test functions:
|
|
* irc_protocol_cb_kick
|
|
*/
|
|
|
|
TEST(IrcProtocolWithServer, kick)
|
|
{
|
|
struct t_irc_channel *ptr_channel;
|
|
|
|
SRV_INIT;
|
|
|
|
POINTERS_EQUAL(NULL, ptr_server->channels);
|
|
|
|
RECV(":alice!user@host JOIN #test");
|
|
CHECK_CHAN("-->", "alice (user@host) has joined #test",
|
|
"irc_join,nick_alice,host_user@host,log4");
|
|
RECV(":bob!user@host JOIN #test");
|
|
CHECK_CHAN("-->", "bob (user@host) has joined #test",
|
|
"irc_join,irc_smart_filter,nick_bob,host_user@host,log4");
|
|
|
|
ptr_channel = ptr_server->channels;
|
|
|
|
CHECK(ptr_channel);
|
|
CHECK(ptr_channel->nicks);
|
|
STRCMP_EQUAL("alice", ptr_channel->nicks->name);
|
|
CHECK(ptr_channel->nicks->next_nick);
|
|
STRCMP_EQUAL("bob", ptr_channel->nicks->next_nick->name);
|
|
|
|
/* not enough parameters */
|
|
RECV(":alice!user@host KICK");
|
|
CHECK_ERROR_PARAMS("kick", 0, 2);
|
|
RECV(":alice!user@host KICK #test");
|
|
CHECK_ERROR_PARAMS("kick", 1, 2);
|
|
|
|
/* missing nick */
|
|
RECV("KICK #test bob");
|
|
CHECK_ERROR_NICK("kick");
|
|
|
|
STRCMP_EQUAL("bob", ptr_channel->nicks->next_nick->name);
|
|
|
|
/* channel not found */
|
|
RECV(":alice!user@host KICK #xyz bob :\002the reason");
|
|
CHECK_NO_MSG;
|
|
|
|
/* kick without a reason */
|
|
RECV(":alice!user@host KICK #test bob");
|
|
CHECK_CHAN("<--", "alice has kicked bob",
|
|
"irc_kick,nick_alice,host_user@host,log3");
|
|
STRCMP_EQUAL("alice", ptr_channel->nicks->name);
|
|
POINTERS_EQUAL(NULL, ptr_channel->nicks->next_nick);
|
|
|
|
RECV(":bob!user@host JOIN #test");
|
|
CHECK_CHAN("-->", "bob (user@host) has joined #test",
|
|
"irc_join,irc_smart_filter,nick_bob,host_user@host,log4");
|
|
|
|
/* with kick a reason */
|
|
RECV(":alice!user@host KICK #test bob :\002no spam here! ");
|
|
CHECK_CHAN("<--", "alice has kicked bob (no spam here! )",
|
|
"irc_kick,nick_alice,host_user@host,log3");
|
|
STRCMP_EQUAL("alice", ptr_channel->nicks->name);
|
|
POINTERS_EQUAL(NULL, ptr_channel->nicks->next_nick);
|
|
|
|
RECV(":bob!user@host JOIN #test");
|
|
CHECK_CHAN("-->", "bob (user@host) has joined #test",
|
|
"irc_join,irc_smart_filter,nick_bob,host_user@host,log4");
|
|
|
|
/* kick of self nick */
|
|
RECV(":bob!user@host KICK #test alice :\002no spam here! ");
|
|
CHECK_CHAN("<--", "bob has kicked alice (no spam here! )",
|
|
"irc_kick,nick_bob,host_user@host,log3");
|
|
POINTERS_EQUAL(NULL, ptr_channel->nicks);
|
|
}
|
|
|
|
/*
|
|
* Test functions:
|
|
* irc_protocol_cb_kill
|
|
*/
|
|
|
|
TEST(IrcProtocolWithServer, kill)
|
|
{
|
|
struct t_irc_channel *ptr_channel;
|
|
|
|
SRV_INIT_JOIN2;
|
|
|
|
ptr_channel = ptr_server->channels;
|
|
|
|
CHECK(ptr_channel);
|
|
CHECK(ptr_channel->nicks);
|
|
STRCMP_EQUAL("alice", ptr_channel->nicks->name);
|
|
CHECK(ptr_channel->nicks->next_nick);
|
|
STRCMP_EQUAL("bob", ptr_channel->nicks->next_nick->name);
|
|
|
|
/* not enough parameters */
|
|
RECV(":alice!user@host KILL");
|
|
CHECK_ERROR_PARAMS("kill", 0, 1);
|
|
|
|
/* missing nick */
|
|
RECV("KILL alice");
|
|
CHECK_ERROR_NICK("kill");
|
|
|
|
STRCMP_EQUAL("bob", ptr_channel->nicks->next_nick->name);
|
|
|
|
/* kill without a reason */
|
|
RECV(":bob!user@host KILL alice");
|
|
CHECK_CHAN("<--", "You were killed by bob",
|
|
"irc_kill,nick_bob,host_user@host,log3");
|
|
POINTERS_EQUAL(NULL, ptr_channel->nicks);
|
|
|
|
RECV(":alice!user@host JOIN #test");
|
|
CHECK_CHAN("-->", "alice (user@host) has joined #test",
|
|
"irc_join,nick_alice,host_user@host,log4");
|
|
RECV(":bob!user@host JOIN #test");
|
|
CHECK_CHAN("-->", "bob (user@host) has joined #test",
|
|
"irc_join,irc_smart_filter,nick_bob,host_user@host,log4");
|
|
|
|
/* kill with a reason */
|
|
RECV(":bob!user@host KILL alice :\002killed by admin ");
|
|
CHECK_CHAN("<--", "You were killed by bob (killed by admin )",
|
|
"irc_kill,nick_bob,host_user@host,log3");
|
|
POINTERS_EQUAL(NULL, ptr_channel->nicks);
|
|
}
|
|
|
|
/*
|
|
* Test functions:
|
|
* irc_protocol_cb_mode
|
|
*/
|
|
|
|
TEST(IrcProtocolWithServer, mode)
|
|
{
|
|
struct t_irc_channel *ptr_channel;
|
|
struct t_irc_nick *ptr_nick;
|
|
|
|
SRV_INIT_JOIN;
|
|
|
|
ptr_channel = ptr_server->channels;
|
|
CHECK(ptr_channel);
|
|
STRCMP_EQUAL(NULL, ptr_channel->modes);
|
|
ptr_nick = ptr_channel->nicks;
|
|
CHECK(ptr_nick);
|
|
STRCMP_EQUAL("alice", ptr_nick->name);
|
|
STRCMP_EQUAL(" ", ptr_nick->prefixes);
|
|
STRCMP_EQUAL(" ", ptr_nick->prefix);
|
|
|
|
/* not enough parameters */
|
|
RECV(":admin MODE");
|
|
CHECK_ERROR_PARAMS("mode", 0, 2);
|
|
RECV(":admin MODE #test");
|
|
CHECK_ERROR_PARAMS("mode", 1, 2);
|
|
|
|
/* missing nick */
|
|
RECV("MODE #test +nt");
|
|
CHECK_ERROR_NICK("mode");
|
|
|
|
STRCMP_EQUAL(NULL, ptr_channel->modes);
|
|
|
|
/* channel mode */
|
|
RECV(":admin!user@host MODE #test +nt ");
|
|
CHECK_CHAN("--", "Mode #test [+nt] by admin",
|
|
"irc_mode,nick_admin,host_user@host,log3");
|
|
STRCMP_EQUAL("+tn", ptr_channel->modes);
|
|
|
|
/* channel mode removed */
|
|
RECV(":admin!user@host MODE #test -n");
|
|
CHECK_CHAN("--", "Mode #test [-n] by admin",
|
|
"irc_mode,nick_admin,host_user@host,log3");
|
|
STRCMP_EQUAL("+t", ptr_channel->modes);
|
|
|
|
/* channel mode removed */
|
|
RECV(":admin!user@host MODE #test -t");
|
|
CHECK_CHAN("--", "Mode #test [-t] by admin",
|
|
"irc_mode,nick_admin,host_user@host,log3");
|
|
STRCMP_EQUAL(NULL, ptr_channel->modes);
|
|
|
|
/* bans added on channel */
|
|
RECV(":admin!user@host MODE #test +bb "
|
|
"bob!user_\00304red@host_\00304red "
|
|
"carol!user_\00304red@host_\00304red");
|
|
CHECK_CHAN("--", "Mode #test [+bb bob!user_red@host_red "
|
|
"carol!user_red@host_red] by admin",
|
|
"irc_mode,nick_admin,host_user@host,log3");
|
|
|
|
/* bans removed from channel */
|
|
RECV(":admin!user@host MODE #test -bb "
|
|
"bob!user_\00304red@host_\00304red "
|
|
"carol!user_\00304red@host_\00304red");
|
|
CHECK_CHAN("--", "Mode #test [-bb bob!user_red@host_red "
|
|
"carol!user_red@host_red] by admin",
|
|
"irc_mode,nick_admin,host_user@host,log3");
|
|
|
|
/* nick mode '@' on channel #test */
|
|
RECV(":admin!user@host MODE #test +o alice ");
|
|
CHECK_CHAN("--", "Mode #test [+o alice] by admin",
|
|
"irc_mode,nick_admin,host_user@host,log3");
|
|
STRCMP_EQUAL("@ ", ptr_nick->prefixes);
|
|
STRCMP_EQUAL("@", ptr_nick->prefix);
|
|
|
|
/* another nick mode '+' on channel #test */
|
|
RECV(":admin!user@host MODE #test +v alice");
|
|
CHECK_CHAN("--", "Mode #test [+v alice] by admin",
|
|
"irc_mode,nick_admin,host_user@host,log3");
|
|
STRCMP_EQUAL("@+", ptr_nick->prefixes);
|
|
STRCMP_EQUAL("@", ptr_nick->prefix);
|
|
|
|
/* nick mode '@' removed on channel #test */
|
|
RECV(":admin!user@host MODE #test -o alice");
|
|
CHECK_CHAN("--", "Mode #test [-o alice] by admin",
|
|
"irc_mode,nick_admin,host_user@host,log3");
|
|
STRCMP_EQUAL(" +", ptr_nick->prefixes);
|
|
STRCMP_EQUAL("+", ptr_nick->prefix);
|
|
|
|
/* nick mode '+' removed on channel #test */
|
|
RECV(":admin!user@host MODE #test -v alice");
|
|
CHECK_CHAN("--", "Mode #test [-v alice] by admin",
|
|
"irc_mode,nick_admin,host_user@host,log3");
|
|
STRCMP_EQUAL(" ", ptr_nick->prefixes);
|
|
STRCMP_EQUAL(" ", ptr_nick->prefix);
|
|
|
|
/* nick mode 'i' */
|
|
STRCMP_EQUAL(NULL, ptr_server->nick_modes);
|
|
RECV(":admin!user@host MODE alice +i");
|
|
CHECK_SRV("--", "User mode [+i] by admin",
|
|
"irc_mode,nick_admin,host_user@host,log3");
|
|
STRCMP_EQUAL("i", ptr_server->nick_modes);
|
|
|
|
/* nick mode 'R' */
|
|
RECV(":admin!user@host MODE alice +R");
|
|
CHECK_SRV("--", "User mode [+R] by admin",
|
|
"irc_mode,nick_admin,host_user@host,log3");
|
|
STRCMP_EQUAL("iR", ptr_server->nick_modes);
|
|
|
|
/* remove nick mode 'i' */
|
|
RECV(":admin!user@host MODE alice -i");
|
|
CHECK_SRV("--", "User mode [-i] by admin",
|
|
"irc_mode,nick_admin,host_user@host,log3");
|
|
STRCMP_EQUAL("R", ptr_server->nick_modes);
|
|
}
|
|
|
|
/*
|
|
* Test functions:
|
|
* irc_protocol_cb_nick
|
|
*/
|
|
|
|
TEST(IrcProtocolWithServer, nick)
|
|
{
|
|
struct t_irc_channel *ptr_channel;
|
|
struct t_irc_nick *ptr_nick1, *ptr_nick2;
|
|
|
|
SRV_INIT_JOIN2;
|
|
|
|
RECV(":bob!user@host PRIVMSG alice :hi Alice!");
|
|
CHECK_PV("bob", "bob", "hi Alice!",
|
|
"irc_privmsg,notify_private,prefix_nick_248,nick_bob,"
|
|
"host_user@host,log1");
|
|
|
|
ptr_channel = ptr_server->channels;
|
|
CHECK(ptr_channel);
|
|
ptr_nick1 = ptr_channel->nicks;
|
|
CHECK(ptr_nick1);
|
|
ptr_nick2 = ptr_nick1->next_nick;
|
|
CHECK(ptr_nick2);
|
|
STRCMP_EQUAL("alice", ptr_nick1->name);
|
|
STRCMP_EQUAL("bob", ptr_nick2->name);
|
|
|
|
/* not enough parameters */
|
|
RECV(":alice!user@host NICK");
|
|
CHECK_ERROR_PARAMS("nick", 0, 1);
|
|
STRCMP_EQUAL("alice", ptr_nick1->name);
|
|
STRCMP_EQUAL("bob", ptr_nick2->name);
|
|
|
|
/* missing nick */
|
|
RECV("NICK alice_away");
|
|
CHECK_ERROR_NICK("nick");
|
|
|
|
/* new nick for alice */
|
|
RECV(":alice!user@host NICK alice_away ");
|
|
CHECK_SRV("--", "You are now known as alice_away",
|
|
"irc_nick,irc_nick1_alice,irc_nick2_alice_away,"
|
|
"nick_alice,host_user@host,log2");
|
|
CHECK_CHAN("--", "You are now known as alice_away",
|
|
"irc_nick,irc_nick1_alice,irc_nick2_alice_away,"
|
|
"nick_alice,host_user@host,log2");
|
|
STRCMP_EQUAL("alice_away", ptr_nick1->name);
|
|
|
|
/* new nick for alice_away (with ":") */
|
|
RECV(":alice_away!user@host NICK :alice2");
|
|
CHECK_SRV("--", "You are now known as alice2",
|
|
"irc_nick,irc_nick1_alice_away,irc_nick2_alice2,"
|
|
"nick_alice_away,host_user@host,log2");
|
|
CHECK_CHAN("--", "You are now known as alice2",
|
|
"irc_nick,irc_nick1_alice_away,irc_nick2_alice2,"
|
|
"nick_alice_away,host_user@host,log2");
|
|
STRCMP_EQUAL("alice2", ptr_nick1->name);
|
|
|
|
/* new nick for bob */
|
|
RECV(":bob!user@host NICK bob_away");
|
|
CHECK_CHAN("--", "bob is now known as bob_away",
|
|
"irc_nick,irc_smart_filter,irc_nick1_bob,irc_nick2_bob_away,"
|
|
"nick_bob,host_user@host,log2");
|
|
CHECK_PV("bob_away", "--", "bob is now known as bob_away",
|
|
"irc_nick,irc_nick1_bob,irc_nick2_bob_away,nick_bob,host_user@host,"
|
|
"log2");
|
|
STRCMP_EQUAL("bob_away", ptr_nick2->name);
|
|
|
|
/* new nick for bob_away (with ":") */
|
|
RECV(":bob_away!user@host NICK :bob2");
|
|
CHECK_CHAN("--", "bob_away is now known as bob2",
|
|
"irc_nick,irc_smart_filter,irc_nick1_bob_away,"
|
|
"irc_nick2_bob2,nick_bob_away,host_user@host,log2");
|
|
CHECK_PV("bob2", "--", "bob_away is now known as bob2",
|
|
"irc_nick,irc_nick1_bob_away,irc_nick2_bob2,"
|
|
"nick_bob_away,host_user@host,log2");
|
|
STRCMP_EQUAL("bob2", ptr_nick2->name);
|
|
|
|
STRCMP_EQUAL("bob2", ptr_server->last_channel->name);
|
|
}
|
|
|
|
/*
|
|
* Test functions:
|
|
* irc_protocol_cb_note
|
|
*/
|
|
|
|
TEST(IrcProtocolWithServer, note)
|
|
{
|
|
SRV_INIT;
|
|
|
|
/* not enough parameters */
|
|
RECV(":server NOTE");
|
|
CHECK_ERROR_PARAMS("note", 0, 2);
|
|
RECV(":server NOTE *");
|
|
CHECK_ERROR_PARAMS("note", 1, 2);
|
|
RECV(":server NOTE COMMAND");
|
|
CHECK_ERROR_PARAMS("note", 1, 2);
|
|
|
|
RECV(":server NOTE * TEST");
|
|
CHECK_SRV("--", "Note: [] TEST", "irc_note,nick_server,log3");
|
|
RECV(":server NOTE * TEST : \002the message ");
|
|
CHECK_SRV("--", "Note: [TEST] the message ", "irc_note,nick_server,log3");
|
|
RECV(":server NOTE * TEST TEST2");
|
|
CHECK_SRV("--", "Note: [TEST] TEST2", "irc_note,nick_server,log3");
|
|
RECV(":server NOTE * TEST TEST2 :the message");
|
|
CHECK_SRV("--", "Note: [TEST TEST2] the message", "irc_note,nick_server,log3");
|
|
|
|
RECV(":server NOTE COMMAND TEST");
|
|
CHECK_SRV("--", "Note: COMMAND [] TEST", "irc_note,nick_server,log3");
|
|
RECV(":server NOTE COMMAND TEST :the message");
|
|
CHECK_SRV("--", "Note: COMMAND [TEST] the message", "irc_note,nick_server,log3");
|
|
RECV(":server NOTE COMMAND TEST TEST2");
|
|
CHECK_SRV("--", "Note: COMMAND [TEST] TEST2", "irc_note,nick_server,log3");
|
|
RECV(":server NOTE COMMAND TEST TEST2 :the message");
|
|
CHECK_SRV("--", "Note: COMMAND [TEST TEST2] the message",
|
|
"irc_note,nick_server,log3");
|
|
}
|
|
|
|
/*
|
|
* Test functions:
|
|
* irc_protocol_cb_notice
|
|
*/
|
|
|
|
TEST(IrcProtocolWithServer, notice)
|
|
{
|
|
int echo_message;
|
|
|
|
SRV_INIT_JOIN;
|
|
|
|
/* test without and with capability "echo-message" */
|
|
for (echo_message = 0; echo_message < 2; echo_message++)
|
|
{
|
|
if (echo_message == 1)
|
|
{
|
|
/* assume "echo-message" capability is enabled in server */
|
|
hashtable_set (ptr_server->cap_list, "echo-message", NULL);
|
|
}
|
|
|
|
/* not enough parameters */
|
|
RECV("NOTICE");
|
|
CHECK_ERROR_PARAMS("notice", 0, 2);
|
|
RECV("NOTICE AUTH");
|
|
CHECK_ERROR_PARAMS("notice", 1, 2);
|
|
RECV(":bob!user@host NOTICE");
|
|
CHECK_ERROR_PARAMS("notice", 0, 2);
|
|
RECV(":bob!user@host NOTICE #test");
|
|
CHECK_ERROR_PARSE("notice", ":bob!user@host NOTICE #test");
|
|
RECV(":bob!user@host NOTICE alice");
|
|
CHECK_ERROR_PARSE("notice", ":bob!user@host NOTICE alice");
|
|
|
|
/* notice from server */
|
|
RECV("NOTICE AUTH :\002*** Looking up your hostname... ");
|
|
CHECK_SRV("--", "*** Looking up your hostname... ", "irc_notice,log1");
|
|
RECV(":server.address NOTICE AUTH :*** Looking up your hostname... ");
|
|
CHECK_SRV("--", "server.address: *** Looking up your hostname... ",
|
|
"irc_notice,notify_private,nick_server.address,log1");
|
|
RECV(":server.address NOTICE * :*** Looking up your hostname... ");
|
|
CHECK_SRV("--", "server.address: *** Looking up your hostname... ",
|
|
"irc_notice,notify_private,nick_server.address,log1");
|
|
|
|
/* notice to channel/user */
|
|
RECV(":server.address NOTICE #test :\002a notice ");
|
|
CHECK_CHAN("--", "Notice(server.address) -> #test: a notice ",
|
|
"irc_notice,notify_message,nick_server.address,log1");
|
|
RECV(":server.address NOTICE alice :a notice ");
|
|
CHECK_SRV("--", "server.address: a notice ",
|
|
"irc_notice,notify_private,nick_server.address,log1");
|
|
RECV(":bob!user@host NOTICE #test :a notice ");
|
|
CHECK_CHAN("--", "Notice(bob) -> #test: a notice ",
|
|
"irc_notice,notify_message,nick_bob,host_user@host,log1");
|
|
RECV(":bob!user@host NOTICE alice :a notice ");
|
|
CHECK_SRV("--", "bob (user@host): a notice ",
|
|
"irc_notice,notify_private,nick_bob,host_user@host,log1");
|
|
|
|
/* notice to channel/user with color in address */
|
|
RECV(":bob!user_\00304red@host_\00304red NOTICE #test :a notice ");
|
|
CHECK_CHAN("--", "Notice(bob) -> #test: a notice ",
|
|
"irc_notice,notify_message,nick_bob,host_user_\00304red@host_\00304red,log1");
|
|
RECV(":bob!user_\00304red@host_\00304red NOTICE alice :a notice ");
|
|
CHECK_SRV("--", "bob (user_red@host_red): a notice ",
|
|
"irc_notice,notify_private,nick_bob,host_user_\00304red@host_\00304red,log1");
|
|
|
|
/* notice to channel/user with option irc.look.display_host_notice set to off */
|
|
config_file_option_set (irc_config_look_display_host_notice, "off", 1);
|
|
RECV(":server.address NOTICE #test :\002a notice ");
|
|
CHECK_CHAN("--", "Notice(server.address) -> #test: a notice ",
|
|
"irc_notice,notify_message,nick_server.address,log1");
|
|
RECV(":server.address NOTICE alice :a notice ");
|
|
CHECK_SRV("--", "server.address: a notice ",
|
|
"irc_notice,notify_private,nick_server.address,log1");
|
|
RECV(":bob!user@host NOTICE #test :a notice ");
|
|
CHECK_CHAN("--", "Notice(bob) -> #test: a notice ",
|
|
"irc_notice,notify_message,nick_bob,host_user@host,log1");
|
|
RECV(":bob!user@host NOTICE alice :a notice ");
|
|
CHECK_SRV("--", "bob: a notice ",
|
|
"irc_notice,notify_private,nick_bob,host_user@host,log1");
|
|
config_file_option_reset (irc_config_look_display_host_notice, 1);
|
|
|
|
/*
|
|
* notice to channel/user from self nick
|
|
* (case of bouncer or if echo-message capability is enabled)
|
|
*/
|
|
RECV(":alice!user@host NOTICE #test :\002a notice ");
|
|
CHECK_CHAN("--", "Notice(alice) -> #test: a notice ",
|
|
"irc_notice,self_msg,notify_none,no_highlight,nick_alice,"
|
|
"host_user@host,log1");
|
|
|
|
/* notice to ops of channel */
|
|
RECV(":server.address NOTICE @#test :\002a notice ");
|
|
CHECK_CHAN("--", "Notice(server.address) -> @#test: a notice ",
|
|
"irc_notice,notify_message,nick_server.address,log1");
|
|
RECV(":bob!user@host NOTICE @#test :a notice ");
|
|
CHECK_CHAN("--", "Notice(bob) -> @#test: a notice ",
|
|
"irc_notice,notify_message,nick_bob,host_user@host,log1");
|
|
|
|
/*
|
|
* notice to ops of channel from self nick
|
|
* (case of bouncer or if echo-message capability is enabled)
|
|
*/
|
|
RECV(":alice!user@host NOTICE @#test :\002a notice ");
|
|
CHECK_CHAN("--", "Notice(alice) -> @#test: a notice ",
|
|
"irc_notice,self_msg,notify_none,no_highlight,nick_alice,"
|
|
"host_user@host,log1");
|
|
|
|
/*
|
|
* notice from self nick
|
|
* (case of bouncer or if echo-message capability is enabled)
|
|
*/
|
|
RECV(":alice!user@host NOTICE alice :\002a notice ");
|
|
CHECK_SRV("--", "Notice -> alice: a notice ",
|
|
"irc_notice,notify_private,nick_alice,host_user@host,log1");
|
|
|
|
/* notice with channel name at beginning */
|
|
RECV(":server.address NOTICE alice :[#test] \002a notice ");
|
|
CHECK_CHAN("--", "PvNotice(server.address): a notice ",
|
|
"irc_notice,nick_server.address,log1");
|
|
RECV(":server.address NOTICE alice :(#test) a notice ");
|
|
CHECK_CHAN("--", "PvNotice(server.address): a notice ",
|
|
"irc_notice,nick_server.address,log1");
|
|
RECV(":server.address NOTICE alice :{#test} a notice ");
|
|
CHECK_CHAN("--", "PvNotice(server.address): a notice ",
|
|
"irc_notice,nick_server.address,log1");
|
|
RECV(":server.address NOTICE alice :<#test> a notice ");
|
|
CHECK_CHAN("--", "PvNotice(server.address): a notice ",
|
|
"irc_notice,nick_server.address,log1");
|
|
RECV(":bob!user@host NOTICE alice :[#test] a notice ");
|
|
CHECK_CHAN("--", "PvNotice(bob): a notice ",
|
|
"irc_notice,nick_bob,host_user@host,log1");
|
|
RECV(":bob!user@host NOTICE alice :(#test) a notice ");
|
|
CHECK_CHAN("--", "PvNotice(bob): a notice ",
|
|
"irc_notice,nick_bob,host_user@host,log1");
|
|
RECV(":bob!user@host NOTICE alice :{#test} a notice ");
|
|
CHECK_CHAN("--", "PvNotice(bob): a notice ",
|
|
"irc_notice,nick_bob,host_user@host,log1");
|
|
RECV(":bob!user@host NOTICE alice :<#test> a notice ");
|
|
CHECK_CHAN("--", "PvNotice(bob): a notice ",
|
|
"irc_notice,nick_bob,host_user@host,log1");
|
|
|
|
/*
|
|
* notice to another nick with channel name at beginning
|
|
* (case of a notice sent if echo-message capability is enabled)
|
|
*/
|
|
RECV(":alice!user@host NOTICE bob :[#test] \002a notice ");
|
|
CHECK_SRV("--", "Notice -> bob: [#test] a notice ",
|
|
"irc_notice,notify_private,nick_alice,host_user@host,log1");
|
|
|
|
/* broken CTCP to channel */
|
|
RECV(":bob!user@host NOTICE #test :\001");
|
|
CHECK_SRV("--", "CTCP reply from bob: ",
|
|
"irc_notice,nick_bob,host_user@host,log1");
|
|
RECV(":bob!user@host NOTICE #test :\001TEST");
|
|
CHECK_SRV("--", "CTCP reply from bob: TEST",
|
|
"irc_notice,nick_bob,host_user@host,log1");
|
|
RECV(":bob!user@host NOTICE #test :\001ACTION");
|
|
CHECK_SRV("--", "CTCP reply from bob: ACTION",
|
|
"irc_notice,nick_bob,host_user@host,log1");
|
|
RECV(":bob!user@host NOTICE #test :\001ACTION is testing");
|
|
CHECK_SRV("--", "CTCP reply from bob: ACTION is testing",
|
|
"irc_notice,irc_ctcp,nick_bob,host_user@host,log1");
|
|
RECV(":bob!user@host NOTICE #test :\001VERSION");
|
|
CHECK_SRV("--", "CTCP reply from bob: VERSION",
|
|
"irc_notice,nick_bob,host_user@host,log1");
|
|
RECV(":bob!user@host NOTICE #test :\001DCC");
|
|
CHECK_SRV("--", "CTCP reply from bob: DCC",
|
|
"irc_notice,nick_bob,host_user@host,log1");
|
|
RECV(":bob!user@host NOTICE #test :\001DCC SEND");
|
|
CHECK_SRV("--", "CTCP reply from bob: DCC SEND",
|
|
"irc_notice,irc_ctcp,nick_bob,host_user@host,log1");
|
|
RECV(":bob!user@host NOTICE #test :\001DCC SEND file.txt");
|
|
CHECK_SRV("--", "CTCP reply from bob: DCC SEND file.txt",
|
|
"irc_notice,irc_ctcp,nick_bob,host_user@host,log1");
|
|
RECV(":bob!user@host NOTICE #test :\001DCC SEND file.txt 1 2 3");
|
|
CHECK_SRV("--", "CTCP reply from bob: DCC SEND file.txt 1 2 3",
|
|
"irc_notice,irc_ctcp,nick_bob,host_user@host,log1");
|
|
|
|
/* broken CTCP to user */
|
|
RECV(":bob!user@host NOTICE alice :\001");
|
|
CHECK_SRV("--", "CTCP reply from bob: ",
|
|
"irc_notice,nick_bob,host_user@host,log1");
|
|
RECV(":bob!user@host NOTICE alice :\001TEST");
|
|
CHECK_SRV("--", "CTCP reply from bob: TEST",
|
|
"irc_notice,nick_bob,host_user@host,log1");
|
|
RECV(":bob!user@host NOTICE alice :\001ACTION");
|
|
CHECK_SRV("--", "CTCP reply from bob: ACTION",
|
|
"irc_notice,nick_bob,host_user@host,log1");
|
|
RECV(":bob!user@host NOTICE alice :\001ACTION is testing");
|
|
CHECK_SRV("--", "CTCP reply from bob: ACTION is testing",
|
|
"irc_notice,irc_ctcp,nick_bob,host_user@host,log1");
|
|
RECV(":bob!user@host NOTICE alice :\001VERSION");
|
|
CHECK_SRV("--", "CTCP reply from bob: VERSION",
|
|
"irc_notice,nick_bob,host_user@host,log1");
|
|
RECV(":bob!user@host NOTICE alice :\001DCC");
|
|
CHECK_SRV("--", "CTCP reply from bob: DCC",
|
|
"irc_notice,nick_bob,host_user@host,log1");
|
|
RECV(":bob!user@host NOTICE alice :\001DCC SEND");
|
|
CHECK_SRV("--", "CTCP reply from bob: DCC SEND",
|
|
"irc_notice,irc_ctcp,nick_bob,host_user@host,log1");
|
|
RECV(":bob!user@host NOTICE alice :\001DCC SEND file.txt");
|
|
CHECK_SRV("--", "CTCP reply from bob: DCC SEND file.txt",
|
|
"irc_notice,irc_ctcp,nick_bob,host_user@host,log1");
|
|
RECV(":bob!user@host NOTICE alice :\001DCC SEND file.txt 1 2 3");
|
|
CHECK_SRV("--", "CTCP reply from bob: DCC SEND file.txt 1 2 3",
|
|
"irc_notice,irc_ctcp,nick_bob,host_user@host,log1");
|
|
|
|
/* valid CTCP to channel */
|
|
RECV(":bob!user@host NOTICE #test :\001TEST\001");
|
|
CHECK_SRV("--", "CTCP reply from bob: TEST",
|
|
"irc_notice,nick_bob,host_user@host,log1");
|
|
RECV(":bob!user@host NOTICE #test :\001ACTION\001");
|
|
CHECK_SRV("--", "CTCP reply from bob: ACTION",
|
|
"irc_notice,nick_bob,host_user@host,log1");
|
|
RECV(":bob!user@host NOTICE #test :\001ACTION is testing\001");
|
|
CHECK_SRV("--", "CTCP reply from bob: ACTION is testing",
|
|
"irc_notice,irc_ctcp,nick_bob,host_user@host,log1");
|
|
RECV(":bob!user@host NOTICE #test :\001VERSION\001");
|
|
CHECK_SRV("--", "CTCP reply from bob: VERSION",
|
|
"irc_notice,nick_bob,host_user@host,log1");
|
|
RECV(":bob!user@host NOTICE #test :\001DCC SEND file.txt 1 2 3\001");
|
|
CHECK_SRV("--", "CTCP reply from bob: DCC SEND file.txt 1 2 3",
|
|
"irc_notice,irc_ctcp,nick_bob,host_user@host,log1");
|
|
|
|
/* valid CTCP to user */
|
|
RECV(":bob!user@host NOTICE alice :\001TEST\001");
|
|
CHECK_SRV("--", "CTCP reply from bob: TEST",
|
|
"irc_notice,nick_bob,host_user@host,log1");
|
|
RECV(":bob!user@host NOTICE alice :\001ACTION\001");
|
|
CHECK_SRV("--", "CTCP reply from bob: ACTION",
|
|
"irc_notice,nick_bob,host_user@host,log1");
|
|
RECV(":bob!user@host NOTICE alice :\001ACTION is testing\001");
|
|
CHECK_SRV("--", "CTCP reply from bob: ACTION is testing",
|
|
"irc_notice,irc_ctcp,nick_bob,host_user@host,log1");
|
|
RECV(":bob!user@host NOTICE alice :\001VERSION\001");
|
|
CHECK_SRV("--", "CTCP reply from bob: VERSION",
|
|
"irc_notice,nick_bob,host_user@host,log1");
|
|
RECV(":bob!user@host NOTICE alice :\001DCC SEND file.txt 1 2 3\001");
|
|
CHECK_SRV("--", "CTCP reply from bob: DCC SEND file.txt 1 2 3",
|
|
"irc_notice,irc_ctcp,nick_bob,host_user@host,log1");
|
|
|
|
if (echo_message == 1)
|
|
hashtable_remove (ptr_server->cap_list, "echo-message");
|
|
}
|
|
}
|
|
|
|
/*
|
|
* Test functions:
|
|
* irc_protocol_cb_part
|
|
*/
|
|
|
|
TEST(IrcProtocolWithServer, part)
|
|
{
|
|
SRV_INIT_JOIN;
|
|
|
|
/* not enough parameters */
|
|
RECV(":alice!user@host PART");
|
|
CHECK_ERROR_PARAMS("part", 0, 1);
|
|
|
|
/* missing nick */
|
|
RECV("PART #test");
|
|
CHECK_ERROR_NICK("part");
|
|
|
|
STRCMP_EQUAL("#test", ptr_server->channels->name);
|
|
CHECK(ptr_server->channels->nicks);
|
|
LONGS_EQUAL(0, ptr_server->channels->part);
|
|
|
|
/* channel not found */
|
|
RECV(":alice!user@host PART #xyz");
|
|
CHECK_NO_MSG;
|
|
STRCMP_EQUAL("#test", ptr_server->channels->name);
|
|
CHECK(ptr_server->channels->nicks);
|
|
LONGS_EQUAL(0, ptr_server->channels->part);
|
|
|
|
/* without part message */
|
|
RECV(":alice!user@host PART #test");
|
|
CHECK_CHAN("<--", "alice (user@host) has left #test",
|
|
"irc_part,nick_alice,host_user@host,log4");
|
|
STRCMP_EQUAL("#test", ptr_server->channels->name);
|
|
POINTERS_EQUAL(NULL, ptr_server->channels->nicks);
|
|
LONGS_EQUAL(1, ptr_server->channels->part);
|
|
|
|
/* without part message (but empty trailing parameter) */
|
|
RECV(":alice!user@host JOIN #test");
|
|
RECV(":alice!user@host PART #test :");
|
|
CHECK_CHAN("<--", "alice (user@host) has left #test",
|
|
"irc_part,nick_alice,host_user@host,log4");
|
|
STRCMP_EQUAL("#test", ptr_server->channels->name);
|
|
POINTERS_EQUAL(NULL, ptr_server->channels->nicks);
|
|
LONGS_EQUAL(1, ptr_server->channels->part);
|
|
|
|
/* with part message */
|
|
RECV(":alice!user@host JOIN #test");
|
|
RECV(":alice!user@host PART #test :\002part message ");
|
|
CHECK_CHAN("<--", "alice (user@host) has left #test (part message )",
|
|
"irc_part,nick_alice,host_user@host,log4");
|
|
STRCMP_EQUAL("#test", ptr_server->channels->name);
|
|
POINTERS_EQUAL(NULL, ptr_server->channels->nicks);
|
|
LONGS_EQUAL(1, ptr_server->channels->part);
|
|
|
|
RECV(":alice!user@host JOIN #test");
|
|
CHECK_CHAN("-->", "alice (user@host) has joined #test",
|
|
"irc_join,nick_alice,host_user@host,log4");
|
|
RECV(":bob!user@host JOIN #test");
|
|
CHECK_CHAN("-->", "bob (user@host) has joined #test",
|
|
"irc_join,irc_smart_filter,nick_bob,host_user@host,log4");
|
|
|
|
/* part from another user */
|
|
RECV(":bob!user@host PART #test :part message ");
|
|
CHECK_CHAN("<--", "bob (user@host) has left #test (part message )",
|
|
"irc_part,irc_smart_filter,nick_bob,host_user@host,log4");
|
|
STRCMP_EQUAL("#test", ptr_server->channels->name);
|
|
CHECK(ptr_server->channels->nicks == ptr_server->channels->last_nick);
|
|
LONGS_EQUAL(0, ptr_server->channels->part);
|
|
}
|
|
|
|
/*
|
|
* Test functions:
|
|
* irc_protocol_cb_ping
|
|
*/
|
|
|
|
TEST(IrcProtocolWithServer, ping)
|
|
{
|
|
SRV_INIT;
|
|
|
|
/* not enough parameters, no response */
|
|
RECV("PING");
|
|
CHECK_ERROR_PARAMS("ping", 0, 1);
|
|
CHECK_SENT(NULL);
|
|
|
|
RECV("PING :\002123456789 ");
|
|
CHECK_NO_MSG;
|
|
CHECK_SENT("PONG :\002123456789 ");
|
|
}
|
|
|
|
/*
|
|
* Test functions:
|
|
* irc_protocol_cb_pong
|
|
*/
|
|
|
|
TEST(IrcProtocolWithServer, pong)
|
|
{
|
|
SRV_INIT;
|
|
|
|
RECV(":server PONG");
|
|
CHECK_SRV("", "PONG", "irc_pong,nick_server,log3");
|
|
RECV(":server PONG server");
|
|
CHECK_SRV("", "PONG", "irc_pong,nick_server,log3");
|
|
RECV(":server PONG server : \002info ");
|
|
CHECK_SRV("", "PONG: info ", "irc_pong,nick_server,log3");
|
|
RECV(":server PONG server :extra info");
|
|
CHECK_SRV("", "PONG: extra info", "irc_pong,nick_server,log3");
|
|
}
|
|
|
|
/*
|
|
* Test functions:
|
|
* irc_protocol_cb_privmsg
|
|
*/
|
|
|
|
TEST(IrcProtocolWithServer, privmsg)
|
|
{
|
|
char *info, message[1024];
|
|
int echo_message;
|
|
|
|
SRV_INIT_JOIN2;
|
|
|
|
/* test without and with capability "echo-message" */
|
|
for (echo_message = 0; echo_message < 2; echo_message++)
|
|
{
|
|
if (echo_message == 1)
|
|
{
|
|
/* assume "echo-message" capability is enabled in server */
|
|
hashtable_set (ptr_server->cap_list, "echo-message", NULL);
|
|
}
|
|
|
|
/* not enough parameters */
|
|
RECV(":bob!user@host PRIVMSG");
|
|
CHECK_ERROR_PARAMS("privmsg", 0, 2);
|
|
RECV(":bob!user@host PRIVMSG #test");
|
|
CHECK_ERROR_PARAMS("privmsg", 1, 2);
|
|
RECV(":bob!user@host PRIVMSG alice");
|
|
CHECK_ERROR_PARAMS("privmsg", 1, 2);
|
|
|
|
/* missing nick */
|
|
RECV("PRIVMSG #test :this is the message");
|
|
CHECK_ERROR_NICK("privmsg");
|
|
|
|
/* message to channel/user */
|
|
RECV(":bob!user@host PRIVMSG #test :\002this is the message ");
|
|
CHECK_CHAN_DATE_NOW("bob", "this is the message ",
|
|
"irc_privmsg,notify_message,prefix_nick_248,nick_bob,"
|
|
"host_user@host,log1");
|
|
RECV(":bob!user@host PRIVMSG alice :this is the message ");
|
|
CHECK_PV_CLOSE("bob", "bob", "this is the message ",
|
|
"irc_privmsg,notify_private,prefix_nick_248,nick_bob,"
|
|
"host_user@host,log1");
|
|
|
|
/* message with tags to channel/user */
|
|
RECV("@tag1=value1;tag2=value2 :bob!user@host PRIVMSG #test "
|
|
":\002this is the message ");
|
|
CHECK_CHAN_DATE_NOW("bob", "this is the message ",
|
|
"irc_privmsg,irc_tag_tag1=value1,irc_tag_tag2=value2,"
|
|
"notify_message,prefix_nick_248,nick_bob,host_user@host,log1");
|
|
RECV("@tag1=value1;tag2=value2 :bob!user@host PRIVMSG alice "
|
|
":this is the message ");
|
|
CHECK_PV_CLOSE("bob", "bob", "this is the message ",
|
|
"irc_privmsg,irc_tag_tag1=value1,irc_tag_tag2=value2,"
|
|
"notify_private,prefix_nick_248,nick_bob,host_user@host,log1");
|
|
|
|
/* message with tags + time as timestamp to channel/user */
|
|
RECV("@tag1=value1;tag2=value2;time=1703500149 :bob!user@host PRIVMSG #test "
|
|
":\002this is the message ");
|
|
CHECK_CHAN_DATE_VALUE(
|
|
"bob",
|
|
"this is the message ",
|
|
"irc_privmsg,irc_tag_tag1=value1,irc_tag_tag2=value2,"
|
|
"irc_tag_time=1703500149,notify_message,prefix_nick_248,nick_bob,"
|
|
"host_user@host,log1",
|
|
1703500149, 0);
|
|
|
|
/* message with tags + time as timestamp with milliseconds to channel/user */
|
|
RECV("@tag1=value1;tag2=value2;time=1703500149.456 :bob!user@host PRIVMSG #test "
|
|
":\002this is the message ");
|
|
CHECK_CHAN_DATE_VALUE(
|
|
"bob",
|
|
"this is the message ",
|
|
"irc_privmsg,irc_tag_tag1=value1,irc_tag_tag2=value2,"
|
|
"irc_tag_time=1703500149.456,notify_message,prefix_nick_248,nick_bob,"
|
|
"host_user@host,log1",
|
|
1703500149, 456000);
|
|
|
|
/* message with tags + time as timestamp with microseconds to channel/user */
|
|
RECV("@tag1=value1;tag2=value2;time=1703500149.456789 :bob!user@host PRIVMSG #test "
|
|
":\002this is the message ");
|
|
CHECK_CHAN_DATE_VALUE(
|
|
"bob",
|
|
"this is the message ",
|
|
"irc_privmsg,irc_tag_tag1=value1,irc_tag_tag2=value2,"
|
|
"irc_tag_time=1703500149.456789,notify_message,prefix_nick_248,nick_bob,"
|
|
"host_user@host,log1",
|
|
1703500149, 456789);
|
|
|
|
/* message with tags + time as ISO 8601 with microseconds to channel/user */
|
|
RECV("@tag1=value1;tag2=value2;time=2023-12-25T10:29:09.456789Z "
|
|
":bob!user@host PRIVMSG #test :\002this is the message ");
|
|
CHECK_CHAN_DATE_VALUE(
|
|
"bob",
|
|
"this is the message ",
|
|
"irc_privmsg,irc_tag_tag1=value1,irc_tag_tag2=value2,"
|
|
"irc_tag_time=2023-12-25T10:29:09.456789Z,notify_message,"
|
|
"prefix_nick_248,nick_bob,"
|
|
"host_user@host,log1",
|
|
1703500149, 456789);
|
|
|
|
/*
|
|
* message to channel/user from self nick
|
|
* (case of bouncer or if echo-message capability is enabled)
|
|
*/
|
|
RECV(":alice!user@host PRIVMSG #test :\002this is the message ");
|
|
CHECK_CHAN("alice", "this is the message ",
|
|
"irc_privmsg,self_msg,notify_none,no_highlight,"
|
|
"prefix_nick_white,nick_alice,host_user@host,log1");
|
|
|
|
/* message to ops of channel */
|
|
RECV(":bob!user@host PRIVMSG @#test :\002this is the message ");
|
|
CHECK_CHAN("--", "Msg(bob) -> @#test: this is the message ",
|
|
"irc_privmsg,notify_message,nick_bob,host_user@host,log1");
|
|
|
|
/*
|
|
* message to ops of channel from self nick
|
|
* (case of bouncer or if echo-message capability is enabled)
|
|
*/
|
|
RECV(":alice!user@host PRIVMSG @#test :\002this is the message ");
|
|
CHECK_CHAN("--", "Msg(alice) -> @#test: this is the message ",
|
|
"irc_privmsg,self_msg,notify_none,no_highlight,nick_alice,"
|
|
"host_user@host,log1");
|
|
|
|
/*
|
|
* message from self nick in private
|
|
* (case of bouncer or if echo-message capability is enabled)
|
|
*/
|
|
if (echo_message == 0)
|
|
{
|
|
/* without echo-message */
|
|
RECV(":alice!user@host PRIVMSG bob :\002this is the message ");
|
|
CHECK_PV_CLOSE("bob", "alice", "this is the message ",
|
|
"irc_privmsg,self_msg,notify_none,no_highlight,"
|
|
"prefix_nick_white,nick_alice,host_user@host,log1");
|
|
}
|
|
else
|
|
{
|
|
/* with echo-message */
|
|
RECV(":alice!user@host PRIVMSG bob :\002this is the message ");
|
|
CHECK_PV_CLOSE("bob", "alice", "this is the message ",
|
|
"irc_privmsg,self_msg,notify_none,no_highlight,"
|
|
"prefix_nick_white,nick_alice,host_user@host,log1");
|
|
/* with echo-message, option irc.look.open_pv_buffer_echo_msg off */
|
|
config_file_option_set (irc_config_look_open_pv_buffer_echo_msg,
|
|
"off", 1);
|
|
RECV(":alice!user@host PRIVMSG bob :\002this is the message ");
|
|
CHECK_SRV("--", "Msg(alice) -> bob: this is the message ",
|
|
"irc_privmsg,self_msg,notify_none,no_highlight,"
|
|
"nick_alice,host_user@host,log1");
|
|
config_file_option_reset (irc_config_look_open_pv_buffer_echo_msg, 1);
|
|
}
|
|
|
|
/*
|
|
* message from self nick in private, with password hidden (nickserv)
|
|
* (case of bouncer or if echo-message capability is enabled)
|
|
*/
|
|
if (echo_message == 0)
|
|
{
|
|
/* without echo-message */
|
|
RECV(":alice!user@host PRIVMSG nickserv :identify secret");
|
|
CHECK_PV_CLOSE("nickserv", "alice", "identify ******",
|
|
"irc_privmsg,self_msg,notify_none,no_highlight,"
|
|
"prefix_nick_white,nick_alice,host_user@host,log1");
|
|
}
|
|
else
|
|
{
|
|
/* with echo-message */
|
|
RECV(":alice!user@host PRIVMSG nickserv :identify secret");
|
|
CHECK_PV_CLOSE("nickserv", "alice", "identify ******",
|
|
"irc_privmsg,self_msg,notify_none,no_highlight,"
|
|
"prefix_nick_white,nick_alice,host_user@host,log1");
|
|
/* with echo-message, option irc.look.open_pv_buffer_echo_msg off */
|
|
config_file_option_set (irc_config_look_open_pv_buffer_echo_msg,
|
|
"off", 1);
|
|
RECV(":alice!user@host PRIVMSG nickserv :identify secret");
|
|
CHECK_SRV("--", "Msg(alice) -> nickserv: identify ******",
|
|
"irc_privmsg,self_msg,notify_none,no_highlight,"
|
|
"nick_alice,host_user@host,log1");
|
|
config_file_option_reset (irc_config_look_open_pv_buffer_echo_msg, 1);
|
|
}
|
|
|
|
/* broken CTCP to channel */
|
|
RECV(":bob!user@host PRIVMSG #test :\001");
|
|
CHECK_SENT(NULL);
|
|
CHECK_CHAN("--", "Unknown CTCP requested by bob: ",
|
|
"irc_privmsg,irc_ctcp,nick_bob,host_user@host,log1");
|
|
RECV(":bob!user@host PRIVMSG #test :\001TEST");
|
|
CHECK_SENT(NULL);
|
|
CHECK_CHAN("--", "Unknown CTCP requested by bob: TEST",
|
|
"irc_privmsg,irc_ctcp,nick_bob,host_user@host,log1");
|
|
RECV(":bob!user@host PRIVMSG #test :\001ACTION");
|
|
CHECK_SENT(NULL);
|
|
CHECK_CHAN(" *", "bob",
|
|
"irc_privmsg,irc_action,notify_message,nick_bob,"
|
|
"host_user@host,log1");
|
|
RECV(":bob!user@host PRIVMSG #test :\001ACTION \002is testing");
|
|
CHECK_SENT(NULL);
|
|
CHECK_CHAN(" *", "bob is testing",
|
|
"irc_privmsg,irc_action,notify_message,nick_bob,"
|
|
"host_user@host,log1");
|
|
info = irc_ctcp_eval_reply (ptr_server,
|
|
irc_ctcp_get_reply (ptr_server, "VERSION"));
|
|
RECV(":bob!user@host PRIVMSG #test :\001VERSION");
|
|
snprintf (message, sizeof (message),
|
|
"NOTICE bob :\001VERSION %s\001", info);
|
|
CHECK_SENT(message);
|
|
CHECK_CHAN("--", "CTCP requested by bob: VERSION",
|
|
"irc_privmsg,irc_ctcp,nick_bob,host_user@host,log1");
|
|
snprintf (message, sizeof (message),
|
|
"CTCP reply to bob: VERSION %s", info);
|
|
if (echo_message == 0)
|
|
{
|
|
/* reply is displayed only if echo-message is NOT enabled */
|
|
CHECK_SRV("--", message,
|
|
"irc_privmsg,irc_ctcp,irc_ctcp_reply,self_msg,notify_none,"
|
|
"no_highlight,nick_alice,log1");
|
|
}
|
|
snprintf (message, sizeof (message),
|
|
"NOTICE bob :\001VERSION %s\001", info);
|
|
CHECK_SENT(message);
|
|
free (info);
|
|
RECV(":bob!user@host PRIVMSG #test :\001DCC");
|
|
CHECK_SENT(NULL);
|
|
CHECK_NO_MSG;
|
|
RECV(":bob!user@host PRIVMSG #test :\001DCC SEND");
|
|
CHECK_SENT(NULL);
|
|
CHECK_NO_MSG;
|
|
RECV(":bob!user@host PRIVMSG #test :\001DCC SEND file.txt");
|
|
CHECK_SENT(NULL);
|
|
CHECK_SRV("=!=", "irc: cannot parse \"privmsg\" command", "");
|
|
RECV(":bob!user@host PRIVMSG #test :\001DCC SEND file.txt 1 2 3");
|
|
CHECK_SENT(NULL);
|
|
CHECK_CORE("",
|
|
"xfer: incoming file from bob (0.0.0.1, irc." IRC_FAKE_SERVER
|
|
"), name: file.txt, 3 bytes (protocol: dcc)");
|
|
|
|
/* broken CTCP to user */
|
|
RECV(":bob!user@host PRIVMSG alice :\001");
|
|
CHECK_SENT(NULL);
|
|
CHECK_SRV("--", "Unknown CTCP requested by bob: ",
|
|
"irc_privmsg,irc_ctcp,nick_bob,host_user@host,log1");
|
|
RECV(":bob!user@host PRIVMSG alice :\001TEST");
|
|
CHECK_SENT(NULL);
|
|
CHECK_SRV("--", "Unknown CTCP requested by bob: TEST",
|
|
"irc_privmsg,irc_ctcp,nick_bob,host_user@host,log1");
|
|
RECV(":bob!user@host PRIVMSG alice :\001ACTION");
|
|
CHECK_SENT(NULL);
|
|
CHECK_PV_CLOSE("bob", " *", "bob",
|
|
"irc_privmsg,irc_action,notify_private,nick_bob,"
|
|
"host_user@host,log1");
|
|
RECV(":bob!user@host PRIVMSG alice :\001ACTION \002is testing");
|
|
CHECK_SENT(NULL);
|
|
CHECK_PV_CLOSE("bob", " *", "bob is testing",
|
|
"irc_privmsg,irc_action,notify_private,nick_bob,"
|
|
"host_user@host,log1");
|
|
info = irc_ctcp_eval_reply (ptr_server,
|
|
irc_ctcp_get_reply (ptr_server, "VERSION"));
|
|
RECV(":bob!user@host PRIVMSG alice :\001VERSION");
|
|
snprintf (message, sizeof (message),
|
|
"NOTICE bob :\001VERSION %s\001", info);
|
|
CHECK_SENT(message);
|
|
snprintf (message, sizeof (message),
|
|
"CTCP reply to bob: VERSION %s", info);
|
|
if (echo_message == 0)
|
|
{
|
|
/* reply is displayed only if echo-message is NOT enabled */
|
|
CHECK_SRV("--", message,
|
|
"irc_privmsg,irc_ctcp,irc_ctcp_reply,self_msg,notify_none,"
|
|
"no_highlight,nick_alice,log1");
|
|
}
|
|
free (info);
|
|
RECV(":bob!user@host PRIVMSG alice :\001DCC");
|
|
CHECK_SENT(NULL);
|
|
CHECK_NO_MSG;
|
|
RECV(":bob!user@host PRIVMSG alice :\001DCC SEND");
|
|
CHECK_SENT(NULL);
|
|
CHECK_NO_MSG;
|
|
RECV(":bob!user@host PRIVMSG alice :\001DCC SEND file.txt");
|
|
CHECK_SENT(NULL);
|
|
CHECK_SRV("=!=", "irc: cannot parse \"privmsg\" command", "");
|
|
RECV(":bob!user@host PRIVMSG alice :\001DCC SEND file.txt 1 2 3");
|
|
CHECK_SENT(NULL);
|
|
CHECK_CORE("",
|
|
"xfer: incoming file from bob (0.0.0.1, irc." IRC_FAKE_SERVER
|
|
"), name: file.txt, 3 bytes (protocol: dcc)");
|
|
|
|
/* valid CTCP to channel */
|
|
RECV("@time=2023-12-25T10:29:09.456789Z "
|
|
":bob!user@host PRIVMSG #test :\001TEST\001");
|
|
CHECK_SENT(NULL);
|
|
RECV("@time=2023-12-25T10:29:09.456789Z "
|
|
":bob!user@host PRIVMSG #test :\001ACTION\001");
|
|
CHECK_SENT(NULL);
|
|
CHECK_CHAN(" *", "bob",
|
|
"irc_privmsg,irc_tag_time=2023-12-25T10:29:09.456789Z,"
|
|
"irc_action,notify_message,nick_bob,host_user@host,log1");
|
|
RECV("@time=2023-12-25T10:29:09.456789Z "
|
|
":bob!user@host PRIVMSG #test :\001ACTION is testing with \002bold\002\001");
|
|
CHECK_SENT(NULL);
|
|
CHECK_CHAN(" *", "bob is testing with bold",
|
|
"irc_privmsg,irc_tag_time=2023-12-25T10:29:09.456789Z,"
|
|
"irc_action,notify_message,nick_bob,host_user@host,log1");
|
|
RECV("@time=2023-12-25T10:29:09.456789Z "
|
|
":bob!user@host PRIVMSG #test :\001PING 1703496549 905284\001");
|
|
CHECK_SENT("NOTICE bob :\001PING 1703496549 905284\001");
|
|
CHECK_CHAN("--", "CTCP requested by bob: PING 1703496549 905284",
|
|
"irc_privmsg,irc_tag_time=2023-12-25T10:29:09.456789Z,"
|
|
"irc_ctcp,nick_bob,host_user@host,log1");
|
|
if (echo_message == 0)
|
|
{
|
|
/* reply is displayed only if echo-message is NOT enabled */
|
|
CHECK_SRV("--", "CTCP reply to bob: PING 1703496549 905284",
|
|
"irc_privmsg,irc_tag_time=2023-12-25T10:29:09.456789Z,"
|
|
"irc_ctcp,irc_ctcp_reply,self_msg,notify_none,"
|
|
"no_highlight,nick_alice,log1");
|
|
}
|
|
RECV("@time=2023-12-25T10:29:09.456789Z "
|
|
":bob!user@host PRIVMSG #test :\001UNKNOWN\001");
|
|
CHECK_SENT(NULL);
|
|
CHECK_CHAN("--", "Unknown CTCP requested by bob: UNKNOWN",
|
|
"irc_privmsg,irc_tag_time=2023-12-25T10:29:09.456789Z,"
|
|
"irc_ctcp,nick_bob,host_user@host,log1");
|
|
|
|
/* valid CTCP to ops of channel */
|
|
RECV("@time=2023-12-25T10:29:09.456789Z "
|
|
":bob!user@host PRIVMSG @#test :\001ACTION\001");
|
|
CHECK_SENT(NULL);
|
|
CHECK_CHAN("--", "Action -> @#test: bob",
|
|
"irc_privmsg,irc_tag_time=2023-12-25T10:29:09.456789Z,"
|
|
"irc_action,notify_message,nick_bob,host_user@host,log1");
|
|
RECV("@time=2023-12-25T10:29:09.456789Z "
|
|
":bob!user@host PRIVMSG @#test :\001ACTION \002is testing\001");
|
|
CHECK_SENT(NULL);
|
|
CHECK_CHAN("--", "Action -> @#test: bob is testing",
|
|
"irc_privmsg,irc_tag_time=2023-12-25T10:29:09.456789Z,"
|
|
"irc_action,notify_message,nick_bob,host_user@host,log1");
|
|
RECV("@time=2023-12-25T10:29:09.456789Z "
|
|
":bob!user@host PRIVMSG @#test :\001PING 1703496549 905284\001");
|
|
CHECK_SENT("NOTICE bob :\001PING 1703496549 905284\001");
|
|
CHECK_CHAN("--", "CTCP requested by bob: PING 1703496549 905284",
|
|
"irc_privmsg,irc_tag_time=2023-12-25T10:29:09.456789Z,"
|
|
"irc_ctcp,nick_bob,host_user@host,log1");
|
|
if (echo_message == 0)
|
|
{
|
|
/* reply is displayed only if echo-message is NOT enabled */
|
|
CHECK_SRV("--", "CTCP reply to bob: PING 1703496549 905284",
|
|
"irc_privmsg,irc_tag_time=2023-12-25T10:29:09.456789Z,"
|
|
"irc_ctcp,irc_ctcp_reply,self_msg,notify_none,"
|
|
"no_highlight,nick_alice,log1");
|
|
}
|
|
RECV("@time=2023-12-25T10:29:09.456789Z "
|
|
":bob!user@host PRIVMSG @#test :\001UNKNOWN\001");
|
|
CHECK_SENT(NULL);
|
|
CHECK_CHAN("--", "Unknown CTCP requested by bob: UNKNOWN",
|
|
"irc_privmsg,irc_tag_time=2023-12-25T10:29:09.456789Z,"
|
|
"irc_ctcp,nick_bob,host_user@host,log1");
|
|
|
|
/*
|
|
* valid CTCP to channel from self nick
|
|
* (case of bouncer or if echo-message capability is enabled)
|
|
*/
|
|
RECV("@time=2023-12-25T10:29:09.456789Z "
|
|
":alice!user@host PRIVMSG #test :\001VERSION\001");
|
|
CHECK_SENT(NULL);
|
|
CHECK_CHAN("--", "CTCP query to #test: VERSION",
|
|
"irc_privmsg,irc_tag_time=2023-12-25T10:29:09.456789Z,"
|
|
"irc_ctcp,self_msg,notify_none,no_highlight,nick_alice,"
|
|
"host_user@host,log1");
|
|
RECV("@time=2023-12-25T10:29:09.456789Z "
|
|
":alice!user@host PRIVMSG #test :\001ACTION\001");
|
|
CHECK_SENT(NULL);
|
|
CHECK_CHAN(" *", "alice",
|
|
"irc_privmsg,irc_tag_time=2023-12-25T10:29:09.456789Z,"
|
|
"irc_action,self_msg,notify_none,no_highlight,nick_alice,"
|
|
"host_user@host,log1");
|
|
RECV("@time=2023-12-25T10:29:09.456789Z "
|
|
":alice!user@host PRIVMSG #test :\001ACTION is testing with \002bold\002\001");
|
|
CHECK_SENT(NULL);
|
|
CHECK_CHAN(" *", "alice is testing with bold",
|
|
"irc_privmsg,irc_tag_time=2023-12-25T10:29:09.456789Z,"
|
|
"irc_action,self_msg,notify_none,no_highlight,nick_alice,"
|
|
"host_user@host,log1");
|
|
RECV("@time=2023-12-25T10:29:09.456789Z "
|
|
":alice!user@host PRIVMSG #test :\001PING 1703496549 905284\001");
|
|
CHECK_SENT(NULL);
|
|
CHECK_CHAN("--", "CTCP query to #test: PING 1703496549 905284",
|
|
"irc_privmsg,irc_tag_time=2023-12-25T10:29:09.456789Z,"
|
|
"irc_ctcp,self_msg,notify_none,no_highlight,"
|
|
"nick_alice,host_user@host,log1");
|
|
RECV("@time=2023-12-25T10:29:09.456789Z "
|
|
":alice!user@host PRIVMSG #test :\001UNKNOWN\001");
|
|
CHECK_SENT(NULL);
|
|
CHECK_CHAN("--", "CTCP query to #test: UNKNOWN",
|
|
"irc_privmsg,irc_tag_time=2023-12-25T10:29:09.456789Z,"
|
|
"irc_ctcp,self_msg,notify_none,no_highlight,"
|
|
"nick_alice,host_user@host,log1");
|
|
|
|
/*
|
|
* valid CTCP to ops of channel from self nick
|
|
* (case of bouncer or if echo-message capability is enabled)
|
|
*/
|
|
RECV("@time=2023-12-25T10:29:09.456789Z "
|
|
":alice!user@host PRIVMSG @#test :\001ACTION\001");
|
|
CHECK_SENT(NULL);
|
|
CHECK_CHAN("--", "Action -> @#test: alice",
|
|
"irc_privmsg,irc_tag_time=2023-12-25T10:29:09.456789Z,"
|
|
"irc_action,self_msg,notify_none,no_highlight,nick_alice,"
|
|
"host_user@host,log1");
|
|
RECV("@time=2023-12-25T10:29:09.456789Z "
|
|
":alice!user@host PRIVMSG @#test :\001ACTION \002is testing\001");
|
|
CHECK_SENT(NULL);
|
|
CHECK_CHAN("--", "Action -> @#test: alice is testing",
|
|
"irc_privmsg,irc_tag_time=2023-12-25T10:29:09.456789Z,"
|
|
"irc_action,self_msg,notify_none,no_highlight,nick_alice,"
|
|
"host_user@host,log1");
|
|
RECV("@time=2023-12-25T10:29:09.456789Z "
|
|
":alice!user@host PRIVMSG @#test :\001PING 1703496549 905284\001");
|
|
CHECK_SENT(NULL);
|
|
CHECK_CHAN("--", "CTCP query to @#test: PING 1703496549 905284",
|
|
"irc_privmsg,irc_tag_time=2023-12-25T10:29:09.456789Z,"
|
|
"irc_ctcp,self_msg,notify_none,no_highlight,"
|
|
"nick_alice,host_user@host,log1");
|
|
RECV("@time=2023-12-25T10:29:09.456789Z "
|
|
":alice!user@host PRIVMSG @#test :\001UNKNOWN\001");
|
|
CHECK_SENT(NULL);
|
|
CHECK_CHAN("--", "CTCP query to @#test: UNKNOWN",
|
|
"irc_privmsg,irc_tag_time=2023-12-25T10:29:09.456789Z,"
|
|
"irc_ctcp,self_msg,notify_none,no_highlight,"
|
|
"nick_alice,host_user@host,log1");
|
|
|
|
/* valid CTCP to user */
|
|
RECV("@time=2023-12-25T10:29:09.456789Z "
|
|
":bob!user@host PRIVMSG alice :\001TEST\001");
|
|
CHECK_SENT(NULL);
|
|
RECV("@time=2023-12-25T10:29:09.456789Z "
|
|
":bob!user@host PRIVMSG alice :\001ACTION\001");
|
|
CHECK_SENT(NULL);
|
|
RECV("@time=2023-12-25T10:29:09.456789Z "
|
|
":bob!user@host PRIVMSG alice :\001ACTION \002is testing\001");
|
|
CHECK_SENT(NULL);
|
|
RECV("@time=2023-12-25T10:29:09.456789Z "
|
|
":bob!user@host PRIVMSG alice :\001PING 1703496549 905284\001");
|
|
CHECK_SENT("NOTICE bob :\001PING 1703496549 905284\001");
|
|
CHECK_SRV("--", "CTCP requested by bob: PING 1703496549 905284",
|
|
"irc_privmsg,irc_tag_time=2023-12-25T10:29:09.456789Z,"
|
|
"irc_ctcp,nick_bob,host_user@host,log1");
|
|
if (echo_message == 0)
|
|
{
|
|
/* reply is displayed only if echo-message is NOT enabled */
|
|
CHECK_SRV("--", "CTCP reply to bob: PING 1703496549 905284",
|
|
"irc_privmsg,irc_tag_time=2023-12-25T10:29:09.456789Z,"
|
|
"irc_ctcp,irc_ctcp_reply,self_msg,notify_none,"
|
|
"no_highlight,nick_alice,log1");
|
|
}
|
|
RECV("@time=2023-12-25T10:29:09.456789Z "
|
|
":bob!user@host PRIVMSG alice :\001UNKNOWN\001");
|
|
CHECK_SENT(NULL);
|
|
CHECK_SRV("--", "Unknown CTCP requested by bob: UNKNOWN",
|
|
"irc_privmsg,irc_tag_time=2023-12-25T10:29:09.456789Z,"
|
|
"irc_ctcp,nick_bob,host_user@host,log1");
|
|
info = irc_ctcp_eval_reply (ptr_server,
|
|
irc_ctcp_get_reply (ptr_server, "VERSION"));
|
|
RECV("@time=2023-12-25T10:29:09.456789Z "
|
|
":bob!user@host PRIVMSG alice :\001VERSION\001");
|
|
snprintf (message, sizeof (message),
|
|
"NOTICE bob :\001VERSION %s\001", info);
|
|
CHECK_SENT(message);
|
|
CHECK_SRV("--", "CTCP requested by bob: VERSION",
|
|
"irc_privmsg,irc_tag_time=2023-12-25T10:29:09.456789Z,"
|
|
"irc_ctcp,nick_bob,host_user@host,log1");
|
|
snprintf (message, sizeof (message),
|
|
"CTCP reply to bob: VERSION %s", info);
|
|
if (echo_message == 0)
|
|
{
|
|
/* reply is displayed only if echo-message is NOT enabled */
|
|
CHECK_SRV("--", message,
|
|
"irc_privmsg,irc_tag_time=2023-12-25T10:29:09.456789Z,"
|
|
"irc_ctcp,irc_ctcp_reply,self_msg,notify_none,no_highlight,"
|
|
"nick_alice,log1");
|
|
}
|
|
snprintf (message, sizeof (message),
|
|
"NOTICE bob :\001VERSION %s\001", info);
|
|
CHECK_SENT(message);
|
|
free (info);
|
|
info = hook_info_get (NULL, "weechat_site_download", "");
|
|
RECV("@time=2023-12-25T10:29:09.456789Z "
|
|
":bob!user@host PRIVMSG alice :\001SOURCE\001");
|
|
snprintf (message, sizeof (message),
|
|
"NOTICE bob :\001SOURCE %s\001", info);
|
|
CHECK_SENT(message);
|
|
free (info);
|
|
RECV("@time=2023-12-25T10:29:09.456789Z "
|
|
":bob!user@host PRIVMSG alice :\001DCC SEND file.txt 1 2 3\001");
|
|
CHECK_SENT(NULL);
|
|
CHECK_CORE("",
|
|
"xfer: incoming file from bob (0.0.0.1, irc." IRC_FAKE_SERVER
|
|
"), name: file.txt, 3 bytes (protocol: dcc)");
|
|
CHECK_SENT(NULL);
|
|
|
|
/*
|
|
* valid CTCP to user from self nick
|
|
* (case of bouncer or if echo-message capability is enabled)
|
|
*/
|
|
RECV("@time=2023-12-25T10:29:09.456789Z "
|
|
":alice!user@host PRIVMSG alice :\001CLIENTINFO\001");
|
|
if (echo_message == 0)
|
|
{
|
|
CHECK_SENT("NOTICE alice :\001CLIENTINFO ACTION CLIENTINFO DCC "
|
|
"PING SOURCE TIME VERSION\001");
|
|
CHECK_SRV("--", "CTCP requested by alice: CLIENTINFO",
|
|
"irc_privmsg,irc_tag_time=2023-12-25T10:29:09.456789Z,"
|
|
"irc_ctcp,nick_alice,host_user@host,log1");
|
|
CHECK_SRV("--", "CTCP reply to alice: CLIENTINFO ACTION CLIENTINFO "
|
|
"DCC PING SOURCE TIME VERSION",
|
|
"irc_privmsg,irc_tag_time=2023-12-25T10:29:09.456789Z,"
|
|
"irc_ctcp,irc_ctcp_reply,self_msg,notify_none,"
|
|
"no_highlight,nick_alice,host_user@host,log1");
|
|
}
|
|
else
|
|
{
|
|
CHECK_SENT(NULL);
|
|
CHECK_SRV("--", "CTCP query to alice: CLIENTINFO",
|
|
"irc_privmsg,irc_tag_time=2023-12-25T10:29:09.456789Z,"
|
|
"irc_ctcp,self_msg,notify_none,no_highlight,nick_alice,"
|
|
"host_user@host,log1");
|
|
RECV("@time=2023-12-25T10:29:09.456789Z "
|
|
":alice!user@host PRIVMSG alice :\001CLIENTINFO\001");
|
|
CHECK_SENT("NOTICE alice :\001CLIENTINFO ACTION CLIENTINFO DCC "
|
|
"PING SOURCE TIME VERSION\001");
|
|
CHECK_SRV("--", "CTCP requested by alice: CLIENTINFO",
|
|
"irc_privmsg,irc_tag_time=2023-12-25T10:29:09.456789Z,"
|
|
"irc_ctcp,nick_alice,host_user@host,log1");
|
|
RECV("@time=2023-12-25T10:29:09.456789Z "
|
|
":alice!user@host NOTICE alice :\001CLIENTINFO DCC PING "
|
|
"SOURCE TIME VERSION\001");
|
|
CHECK_SENT(NULL);
|
|
CHECK_SRV("--", "CTCP reply to alice: CLIENTINFO DCC PING "
|
|
"SOURCE TIME VERSION",
|
|
"irc_notice,irc_tag_time=2023-12-25T10:29:09.456789Z,"
|
|
"irc_ctcp,irc_ctcp_reply,self_msg,notify_none,"
|
|
"no_highlight,nick_alice,host_user@host,log1");
|
|
RECV("@time=2023-12-25T10:29:09.456789Z "
|
|
":alice!user@host NOTICE alice :\001CLIENTINFO DCC PING "
|
|
"SOURCE TIME VERSION\001");
|
|
CHECK_SENT(NULL);
|
|
CHECK_SRV("--", "CTCP reply from alice: CLIENTINFO DCC PING "
|
|
"SOURCE TIME VERSION",
|
|
"irc_notice,irc_tag_time=2023-12-25T10:29:09.456789Z,"
|
|
"irc_ctcp,nick_alice,host_user@host,log1");
|
|
}
|
|
|
|
/* close xfer buffer */
|
|
if (xfer_buffer)
|
|
gui_buffer_close (xfer_buffer);
|
|
|
|
if (echo_message == 1)
|
|
hashtable_remove (ptr_server->cap_list, "echo-message");
|
|
}
|
|
}
|
|
|
|
/*
|
|
* Test functions:
|
|
* irc_protocol_cb_quit
|
|
*/
|
|
|
|
TEST(IrcProtocolWithServer, quit)
|
|
{
|
|
struct t_irc_channel *ptr_channel;
|
|
|
|
SRV_INIT_JOIN;
|
|
|
|
/* missing nick */
|
|
RECV("QUIT");
|
|
CHECK_ERROR_NICK("quit");
|
|
|
|
RECV(":bob!user@host PRIVMSG alice :hi Alice!");
|
|
CHECK_PV("bob", "bob", "hi Alice!",
|
|
"irc_privmsg,notify_private,prefix_nick_248,nick_bob,"
|
|
"host_user@host,log1");
|
|
|
|
ptr_channel = ptr_server->channels;
|
|
|
|
/* without quit message */
|
|
RECV(":bob!user@host JOIN #test");
|
|
RECV(":bob!user@host QUIT");
|
|
CHECK_CHAN("<--", "bob (user@host) has quit",
|
|
"irc_quit,irc_smart_filter,nick_bob,host_user@host,log4");
|
|
LONGS_EQUAL(1, ptr_channel->nicks_count);
|
|
STRCMP_EQUAL("alice", ptr_channel->nicks->name);
|
|
POINTERS_EQUAL(NULL, ptr_channel->nicks->next_nick);
|
|
|
|
/* without quit message (but empty trailing parameter) */
|
|
RECV(":bob!user@host JOIN #test");
|
|
RECV(":bob!user@host QUIT :");
|
|
CHECK_CHAN("<--", "bob (user@host) has quit",
|
|
"irc_quit,irc_smart_filter,nick_bob,host_user@host,log4");
|
|
LONGS_EQUAL(1, ptr_channel->nicks_count);
|
|
STRCMP_EQUAL("alice", ptr_channel->nicks->name);
|
|
POINTERS_EQUAL(NULL, ptr_channel->nicks->next_nick);
|
|
|
|
/* with quit message */
|
|
RECV(":bob!user@host JOIN #test");
|
|
RECV(":bob!user@host QUIT :\002quit message ");
|
|
CHECK_CHAN("<--", "bob (user@host) has quit (quit message )",
|
|
"irc_quit,irc_smart_filter,nick_bob,host_user@host,log4");
|
|
LONGS_EQUAL(1, ptr_channel->nicks_count);
|
|
STRCMP_EQUAL("alice", ptr_channel->nicks->name);
|
|
POINTERS_EQUAL(NULL, ptr_channel->nicks->next_nick);
|
|
|
|
/* with quit message */
|
|
RECV(":bob!user_\00304red@host_\00304red JOIN #test");
|
|
RECV(":bob!user_\00304red@host_\00304red QUIT :\002quit message ");
|
|
CHECK_CHAN("<--", "bob (user_red@host_red) has quit (quit message )",
|
|
"irc_quit,irc_smart_filter,nick_bob,host_user_\00304red@host_\00304red,log4");
|
|
LONGS_EQUAL(1, ptr_channel->nicks_count);
|
|
STRCMP_EQUAL("alice", ptr_channel->nicks->name);
|
|
POINTERS_EQUAL(NULL, ptr_channel->nicks->next_nick);
|
|
RECV(":bob!user_\00304red@host_\00304red JOIN #test");
|
|
CHECK_PV("bob", "-->", "bob (user_red@host_red) is back on server",
|
|
"irc_nick_back,nick_bob,host_user_\00304red@host_\00304red,log4");
|
|
RECV(":bob!user_\00304red@host_\00304red QUIT :\002quit message ");
|
|
|
|
/* quit with option irc.look.display_host_quit set to off */
|
|
config_file_option_set (irc_config_look_display_host_quit, "off", 1);
|
|
RECV(":bob!user@host JOIN #test");
|
|
RECV(":bob!user@host QUIT :\002quit message ");
|
|
CHECK_CHAN("<--", "bob has quit (quit message )",
|
|
"irc_quit,irc_smart_filter,nick_bob,host_user@host,log4");
|
|
config_file_option_reset (irc_config_look_display_host_quit, 1);
|
|
}
|
|
|
|
/*
|
|
* Test functions:
|
|
* irc_protocol_cb_setname (without setname capability)
|
|
*/
|
|
|
|
TEST(IrcProtocolWithServer, setname_without_setname_cap)
|
|
{
|
|
struct t_irc_nick *ptr_nick;
|
|
|
|
SRV_INIT_JOIN2;
|
|
|
|
ptr_nick = ptr_server->channels->nicks;
|
|
|
|
STRCMP_EQUAL(NULL, ptr_nick->realname);
|
|
|
|
/* not enough parameters */
|
|
RECV(":alice!user@host SETNAME");
|
|
CHECK_ERROR_PARAMS("setname", 0, 1);
|
|
|
|
/* missing nick */
|
|
RECV("SETNAME :new bob realname");
|
|
CHECK_ERROR_NICK("setname");
|
|
|
|
STRCMP_EQUAL(NULL, ptr_nick->realname);
|
|
|
|
/* real name of "bob" has changed */
|
|
RECV(":bob!user@host SETNAME :\002new bob realname ");
|
|
CHECK_CHAN("--", "bob has changed real name to \"new bob realname \"",
|
|
"irc_setname,irc_smart_filter,nick_bob,host_user@host,log3");
|
|
STRCMP_EQUAL(NULL, ptr_nick->realname);
|
|
|
|
/* self real name has changed */
|
|
RECV(":alice!user@host SETNAME :\002new alice realname ");
|
|
CHECK_SRV("--", "Your real name has been set to \"new alice realname \"",
|
|
"irc_setname,nick_alice,host_user@host,log3");
|
|
STRCMP_EQUAL(NULL, ptr_nick->realname);
|
|
}
|
|
|
|
/*
|
|
* Test functions:
|
|
* irc_protocol_cb_setname (with setname capability)
|
|
*/
|
|
|
|
TEST(IrcProtocolWithServer, setname_with_setname_cap)
|
|
{
|
|
struct t_irc_nick *ptr_nick, *ptr_nick2;
|
|
|
|
/* assume "setname" capability is enabled in server */
|
|
hashtable_set (ptr_server->cap_list, "setname", NULL);
|
|
|
|
SRV_INIT_JOIN2;
|
|
|
|
ptr_nick = ptr_server->channels->nicks;
|
|
ptr_nick2 = ptr_server->channels->last_nick;
|
|
|
|
STRCMP_EQUAL(NULL, ptr_nick->realname);
|
|
|
|
/* real name of "bob" has changed */
|
|
RECV(":bob!user@host SETNAME :\002new bob realname ");
|
|
CHECK_CHAN("--", "bob has changed real name to \"new bob realname \"",
|
|
"irc_setname,irc_smart_filter,nick_bob,host_user@host,log3");
|
|
STRCMP_EQUAL("\002new bob realname ", ptr_nick2->realname);
|
|
|
|
/* self real name has changed */
|
|
RECV(":alice!user@host SETNAME :new realname");
|
|
CHECK_SRV("--", "Your real name has been set to \"new realname\"",
|
|
"irc_setname,nick_alice,host_user@host,log3");
|
|
STRCMP_EQUAL("new realname", ptr_nick->realname);
|
|
|
|
/* self real name has changed */
|
|
RECV(":alice!user@host SETNAME :new realname2");
|
|
CHECK_SRV("--", "Your real name has been set to \"new realname2\"",
|
|
"irc_setname,nick_alice,host_user@host,log3");
|
|
STRCMP_EQUAL("new realname2", ptr_nick->realname);
|
|
|
|
hashtable_remove (ptr_server->cap_list, "setname");
|
|
}
|
|
|
|
/*
|
|
* Test functions:
|
|
* irc_protocol_cb_tagmsg
|
|
*/
|
|
|
|
TEST(IrcProtocolWithServer, tagmsg)
|
|
{
|
|
struct t_gui_buffer *ptr_buffer;
|
|
struct t_typing_status *ptr_typing_status;
|
|
|
|
SRV_INIT_JOIN2;
|
|
|
|
/* not enough parameters */
|
|
RECV(":bob!user@host TAGMSG");
|
|
CHECK_ERROR_PARAMS("tagmsg", 0, 1);
|
|
|
|
/* no tags */
|
|
RECV(":bob!user@host TAGMSG #test");
|
|
CHECK_NO_MSG;
|
|
RECV(":bob!user@host TAGMSG :#test");
|
|
CHECK_NO_MSG;
|
|
|
|
/* with tags */
|
|
RECV("@tag1=123;tag2=456 :bob!user@host TAGMSG #test ");
|
|
CHECK_NO_MSG;
|
|
RECV("@tag1=123;tag2=456 :bob!user@host TAGMSG :#test ");
|
|
CHECK_NO_MSG;
|
|
|
|
/* check typing status */
|
|
ptr_buffer = ptr_server->channels->buffer;
|
|
|
|
config_file_option_set (irc_config_look_typing_status_nicks, "on", 1);
|
|
config_file_option_set (typing_config_look_enabled_nicks, "on", 1);
|
|
|
|
POINTERS_EQUAL(NULL, typing_status_nick_search (ptr_buffer, "bob"));
|
|
|
|
RECV("@+typing=active :bob!user@host TAGMSG #test ");
|
|
ptr_typing_status = typing_status_nick_search (ptr_buffer, "bob");
|
|
CHECK(ptr_typing_status);
|
|
LONGS_EQUAL(TYPING_STATUS_STATE_TYPING, ptr_typing_status->state);
|
|
|
|
RECV("@+typing=paused :bob!user@host TAGMSG : #test ");
|
|
ptr_typing_status = typing_status_nick_search (ptr_buffer, "bob");
|
|
CHECK(ptr_typing_status);
|
|
LONGS_EQUAL(TYPING_STATUS_STATE_PAUSED, ptr_typing_status->state);
|
|
|
|
RECV("@+typing=done :bob!user@host TAGMSG #test ");
|
|
POINTERS_EQUAL(NULL, typing_status_nick_search (ptr_buffer, "bob"));
|
|
|
|
config_file_option_reset (typing_config_look_enabled_nicks, 1);
|
|
config_file_option_reset (irc_config_look_typing_status_nicks, 1);
|
|
}
|
|
|
|
/*
|
|
* Test functions:
|
|
* irc_protocol_cb_topic
|
|
*/
|
|
|
|
TEST(IrcProtocolWithServer, topic)
|
|
{
|
|
struct t_irc_channel *ptr_channel;
|
|
|
|
SRV_INIT_JOIN;
|
|
|
|
ptr_channel = ptr_server->channels;
|
|
STRCMP_EQUAL(NULL, ptr_channel->topic);
|
|
|
|
/* not enough parameters */
|
|
RECV(":alice!user@host TOPIC");
|
|
CHECK_ERROR_PARAMS("topic", 0, 1);
|
|
|
|
/* missing nick */
|
|
RECV("TOPIC #test :new topic");
|
|
CHECK_ERROR_NICK("topic");
|
|
|
|
STRCMP_EQUAL(NULL, ptr_channel->topic);
|
|
|
|
/* not a channel */
|
|
RECV(":alice!user@host TOPIC bob");
|
|
CHECK_SRV("=!=", "irc: \"topic\" command received without channel", "");
|
|
|
|
/* empty topic */
|
|
RECV(":alice!user@host TOPIC #test");
|
|
CHECK_CHAN("--", "alice has unset topic for #test",
|
|
"irc_topic,nick_alice,host_user@host,log3");
|
|
STRCMP_EQUAL(NULL, ptr_channel->topic);
|
|
|
|
/* empty topic (with empty trailing parameter) */
|
|
RECV(":alice!user@host TOPIC #test :");
|
|
CHECK_CHAN("--", "alice has unset topic for #test",
|
|
"irc_topic,nick_alice,host_user@host,log3");
|
|
STRCMP_EQUAL(NULL, ptr_channel->topic);
|
|
|
|
/* new topic */
|
|
RECV(":alice!user@host TOPIC #test :\002new topic ");
|
|
CHECK_CHAN("--", "alice has changed topic for #test to \"new topic \"",
|
|
"irc_topic,nick_alice,host_user@host,log3");
|
|
STRCMP_EQUAL("\002new topic ", ptr_channel->topic);
|
|
|
|
/* another new topic */
|
|
RECV(":alice!user_\00304red@host_\00304red TOPIC #test :\00304another new topic ");
|
|
CHECK_CHAN("--",
|
|
"alice has changed topic for #test from "
|
|
"\"new topic \" to \"another new topic \"",
|
|
"irc_topic,nick_alice,host_user_\00304red@host_\00304red,log3");
|
|
STRCMP_EQUAL("\00304another new topic ", ptr_channel->topic);
|
|
|
|
/* empty topic */
|
|
RECV(":alice!user@host TOPIC #test");
|
|
CHECK_CHAN("--",
|
|
"alice has unset topic for #test (old topic: "
|
|
"\"another new topic \")",
|
|
"irc_topic,nick_alice,host_user@host,log3");
|
|
STRCMP_EQUAL(NULL, ptr_channel->topic);
|
|
}
|
|
|
|
/*
|
|
* Test functions:
|
|
* irc_protocol_cb_wallops
|
|
*/
|
|
|
|
TEST(IrcProtocolWithServer, wallops)
|
|
{
|
|
SRV_INIT;
|
|
|
|
/* not enough parameters */
|
|
RECV(":alice!user@host WALLOPS");
|
|
CHECK_ERROR_PARAMS("wallops", 0, 1);
|
|
|
|
RECV(":alice!user@host WALLOPS message ");
|
|
CHECK_SRV("--", "Wallops from alice (user@host): message",
|
|
"irc_wallops,notify_private,nick_alice,host_user@host,log3");
|
|
|
|
RECV(":alice!user@host WALLOPS :\002message from admin ");
|
|
CHECK_SRV("--", "Wallops from alice (user@host): message from admin ",
|
|
"irc_wallops,notify_private,nick_alice,host_user@host,log3");
|
|
|
|
/* wallops with option irc.look.display_host_wallops set to off */
|
|
config_file_option_set (irc_config_look_display_host_wallops, "off", 1);
|
|
RECV(":alice!user@host WALLOPS :message from admin ");
|
|
CHECK_SRV("--", "Wallops from alice: message from admin ",
|
|
"irc_wallops,notify_private,nick_alice,host_user@host,log3");
|
|
config_file_option_reset (irc_config_look_display_host_wallops, 1);
|
|
}
|
|
|
|
/*
|
|
* Test functions:
|
|
* irc_protocol_cb_warn
|
|
*/
|
|
|
|
TEST(IrcProtocolWithServer, warn)
|
|
{
|
|
SRV_INIT;
|
|
|
|
/* not enough parameters */
|
|
RECV(":server WARN");
|
|
CHECK_ERROR_PARAMS("warn", 0, 2);
|
|
RECV(":server WARN *");
|
|
CHECK_ERROR_PARAMS("warn", 1, 2);
|
|
RECV(":server WARN COMMAND");
|
|
CHECK_ERROR_PARAMS("warn", 1, 2);
|
|
|
|
RECV(":server WARN * TEST");
|
|
CHECK_SRV("=!=", "Warning: [] TEST", "irc_warn,nick_server,log3");
|
|
RECV(":server WARN * TEST : \002the message ");
|
|
CHECK_SRV("=!=", "Warning: [TEST] the message ", "irc_warn,nick_server,log3");
|
|
RECV(":server WARN * TEST TEST2");
|
|
CHECK_SRV("=!=", "Warning: [TEST] TEST2", "irc_warn,nick_server,log3");
|
|
RECV(":server WARN * TEST TEST2 :the message");
|
|
CHECK_SRV("=!=", "Warning: [TEST TEST2] the message", "irc_warn,nick_server,log3");
|
|
|
|
RECV(":server WARN COMMAND TEST");
|
|
CHECK_SRV("=!=", "Warning: COMMAND [] TEST", "irc_warn,nick_server,log3");
|
|
RECV(":server WARN COMMAND TEST :the message");
|
|
CHECK_SRV("=!=", "Warning: COMMAND [TEST] the message", "irc_warn,nick_server,log3");
|
|
RECV(":server WARN COMMAND TEST TEST2");
|
|
CHECK_SRV("=!=", "Warning: COMMAND [TEST] TEST2", "irc_warn,nick_server,log3");
|
|
RECV(":server WARN COMMAND TEST TEST2 :the message");
|
|
CHECK_SRV("=!=", "Warning: COMMAND [TEST TEST2] the message",
|
|
"irc_warn,nick_server,log3");
|
|
}
|
|
|
|
/*
|
|
* Test functions:
|
|
* irc_protocol_cb_001 (connected to IRC server, empty)
|
|
*/
|
|
|
|
TEST(IrcProtocolWithServer, 001_empty)
|
|
{
|
|
LONGS_EQUAL(0, ptr_server->is_connected);
|
|
STRCMP_EQUAL("nick1", ptr_server->nick);
|
|
|
|
/* not enough parameters */
|
|
RECV(":server 001");
|
|
CHECK_ERROR_PARAMS("001", 0, 1);
|
|
|
|
RECV(":server 001 alice");
|
|
CHECK_SRV("--", "", "irc_001,irc_numeric,nick_server,log3");
|
|
LONGS_EQUAL(1, ptr_server->is_connected);
|
|
STRCMP_EQUAL("alice", ptr_server->nick);
|
|
}
|
|
|
|
/*
|
|
* Test functions:
|
|
* irc_protocol_cb_001 (connected to IRC server, welcome message)
|
|
*/
|
|
|
|
TEST(IrcProtocolWithServer, 001_welcome)
|
|
{
|
|
run_cmd_quiet ("/mute /set irc.server." IRC_FAKE_SERVER ".autojoin \"#autojoin1\"");
|
|
run_cmd_quiet ("/mute /set irc.server." IRC_FAKE_SERVER ".command "
|
|
"\"/join #test1;/join #test2;/query remote_nick\"");
|
|
LONGS_EQUAL(0, ptr_server->is_connected);
|
|
STRCMP_EQUAL("nick1", ptr_server->nick);
|
|
|
|
RECV(":server 001 alice : Welcome on this server, alice! ");
|
|
CHECK_SRV("--", " Welcome on this server, alice! ",
|
|
"irc_001,irc_numeric,nick_server,log3");
|
|
|
|
LONGS_EQUAL(1, ptr_server->is_connected);
|
|
STRCMP_EQUAL("alice", ptr_server->nick);
|
|
CHECK(ptr_server->channels);
|
|
STRCMP_EQUAL("remote_nick", ptr_server->channels->name);
|
|
}
|
|
|
|
/*
|
|
* Test functions:
|
|
* irc_protocol_cb_005 (infos from server, empty)
|
|
*/
|
|
|
|
TEST(IrcProtocolWithServer, 005_empty)
|
|
{
|
|
SRV_INIT;
|
|
|
|
STRCMP_EQUAL(NULL, ptr_server->prefix_modes);
|
|
STRCMP_EQUAL(NULL, ptr_server->prefix_chars);
|
|
|
|
RECV(":server 005 alice TEST=A");
|
|
CHECK_SRV("--", "TEST=A", "irc_005,irc_numeric,nick_server,log3");
|
|
|
|
STRCMP_EQUAL(NULL, ptr_server->prefix_modes);
|
|
STRCMP_EQUAL(NULL, ptr_server->prefix_chars);
|
|
}
|
|
|
|
/*
|
|
* Test functions:
|
|
* irc_protocol_cb_005 (infos from server, full)
|
|
*/
|
|
|
|
TEST(IrcProtocolWithServer, 005_full)
|
|
{
|
|
SRV_INIT;
|
|
|
|
STRCMP_EQUAL(NULL, ptr_server->prefix_modes);
|
|
STRCMP_EQUAL(NULL, ptr_server->prefix_chars);
|
|
LONGS_EQUAL(0, ptr_server->msg_max_length);
|
|
LONGS_EQUAL(0, ptr_server->nick_max_length);
|
|
LONGS_EQUAL(0, ptr_server->user_max_length);
|
|
LONGS_EQUAL(0, ptr_server->host_max_length);
|
|
LONGS_EQUAL(0, ptr_server->casemapping);
|
|
STRCMP_EQUAL(NULL, ptr_server->chantypes);
|
|
STRCMP_EQUAL(NULL, ptr_server->chanmodes);
|
|
LONGS_EQUAL(0, ptr_server->monitor);
|
|
LONGS_EQUAL(IRC_SERVER_UTF8MAPPING_NONE, ptr_server->utf8mapping);
|
|
LONGS_EQUAL(0, ptr_server->utf8only);
|
|
STRCMP_EQUAL(NULL, ptr_server->isupport);
|
|
|
|
RECV(":server 005 alice " IRC_MSG_005 " : are supported ");
|
|
CHECK_SRV("--", IRC_MSG_005 " are supported ",
|
|
"irc_005,irc_numeric,nick_server,log3");
|
|
|
|
STRCMP_EQUAL("ohv", ptr_server->prefix_modes);
|
|
STRCMP_EQUAL("@%+", ptr_server->prefix_chars);
|
|
LONGS_EQUAL(4096, ptr_server->msg_max_length);
|
|
LONGS_EQUAL(30, ptr_server->nick_max_length);
|
|
LONGS_EQUAL(16, ptr_server->user_max_length);
|
|
LONGS_EQUAL(32, ptr_server->host_max_length);
|
|
LONGS_EQUAL(1, ptr_server->casemapping);
|
|
STRCMP_EQUAL("#", ptr_server->chantypes);
|
|
STRCMP_EQUAL("eIbq,k,flj,CFLMPQScgimnprstuz", ptr_server->chanmodes);
|
|
LONGS_EQUAL(100, ptr_server->monitor);
|
|
LONGS_EQUAL(IRC_SERVER_UTF8MAPPING_RFC8265, ptr_server->utf8mapping);
|
|
LONGS_EQUAL(1, ptr_server->utf8only);
|
|
STRCMP_EQUAL(IRC_MSG_005, ptr_server->isupport);
|
|
|
|
/* check that realloc of info is OK if we receive the message again */
|
|
RECV(":server 005 alice " IRC_MSG_005 " :are supported");
|
|
CHECK_SRV("--", IRC_MSG_005 " are supported",
|
|
"irc_005,irc_numeric,nick_server,log3");
|
|
|
|
STRCMP_EQUAL("ohv", ptr_server->prefix_modes);
|
|
STRCMP_EQUAL("@%+", ptr_server->prefix_chars);
|
|
LONGS_EQUAL(4096, ptr_server->msg_max_length);
|
|
LONGS_EQUAL(30, ptr_server->nick_max_length);
|
|
LONGS_EQUAL(16, ptr_server->user_max_length);
|
|
LONGS_EQUAL(32, ptr_server->host_max_length);
|
|
LONGS_EQUAL(1, ptr_server->casemapping);
|
|
STRCMP_EQUAL("#", ptr_server->chantypes);
|
|
STRCMP_EQUAL("eIbq,k,flj,CFLMPQScgimnprstuz", ptr_server->chanmodes);
|
|
LONGS_EQUAL(100, ptr_server->monitor);
|
|
LONGS_EQUAL(IRC_SERVER_UTF8MAPPING_RFC8265, ptr_server->utf8mapping);
|
|
LONGS_EQUAL(1, ptr_server->utf8only);
|
|
STRCMP_EQUAL(IRC_MSG_005 " " IRC_MSG_005, ptr_server->isupport);
|
|
}
|
|
|
|
/*
|
|
* Test functions:
|
|
* irc_protocol_cb_005 (accumulated ISUPPORT is bounded)
|
|
*/
|
|
|
|
TEST(IrcProtocolWithServer, 005_limit)
|
|
{
|
|
char str_msg[4096], str_value[3500];
|
|
size_t length1, length2;
|
|
int i;
|
|
|
|
SRV_INIT;
|
|
|
|
memset (str_value, 'X', sizeof (str_value) - 1);
|
|
str_value[sizeof (str_value) - 1] = '\0';
|
|
snprintf (str_msg, sizeof (str_msg),
|
|
":server 005 alice TEST=%s :are supported", str_value);
|
|
|
|
/* flood the server with "005" messages */
|
|
for (i = 0; i < 100; i++)
|
|
{
|
|
server_recv (str_msg);
|
|
}
|
|
CHECK(ptr_server->isupport);
|
|
length1 = strlen (ptr_server->isupport);
|
|
|
|
/* the accumulated ISUPPORT data must be bounded */
|
|
CHECK(length1 <= IRC_SERVER_ISUPPORT_MAX_LENGTH + sizeof (str_value));
|
|
|
|
/* receiving more "005" messages must not grow it any further */
|
|
for (i = 0; i < 100; i++)
|
|
{
|
|
server_recv (str_msg);
|
|
}
|
|
length2 = strlen (ptr_server->isupport);
|
|
LONGS_EQUAL(length1, length2);
|
|
}
|
|
|
|
/*
|
|
* Test functions:
|
|
* irc_protocol_cb_005 (infos from server, multiple messages)
|
|
*/
|
|
|
|
TEST(IrcProtocolWithServer, 005_multiple_messages)
|
|
{
|
|
SRV_INIT;
|
|
|
|
STRCMP_EQUAL(NULL, ptr_server->prefix_modes);
|
|
STRCMP_EQUAL(NULL, ptr_server->prefix_chars);
|
|
LONGS_EQUAL(0, ptr_server->host_max_length);
|
|
STRCMP_EQUAL(NULL, ptr_server->isupport);
|
|
|
|
RECV(":server 005 alice PREFIX=(ohv)@%+ :are supported");
|
|
CHECK_SRV("--", "PREFIX=(ohv)@%+ are supported",
|
|
"irc_005,irc_numeric,nick_server,log3");
|
|
STRCMP_EQUAL("ohv", ptr_server->prefix_modes);
|
|
STRCMP_EQUAL("@%+", ptr_server->prefix_chars);
|
|
STRCMP_EQUAL("PREFIX=(ohv)@%+", ptr_server->isupport);
|
|
|
|
RECV(":server 005 alice HOSTLEN=24 :are supported");
|
|
CHECK_SRV("--", "HOSTLEN=24 are supported",
|
|
"irc_005,irc_numeric,nick_server,log3");
|
|
LONGS_EQUAL(24, ptr_server->host_max_length);
|
|
STRCMP_EQUAL("PREFIX=(ohv)@%+ HOSTLEN=24", ptr_server->isupport);
|
|
}
|
|
|
|
/*
|
|
* Test functions:
|
|
* irc_protocol_cb_008 (server notice mask)
|
|
*/
|
|
|
|
TEST(IrcProtocolWithServer, 008)
|
|
{
|
|
SRV_INIT;
|
|
|
|
/* not enough parameters */
|
|
RECV(":server 008");
|
|
CHECK_ERROR_PARAMS("008", 0, 2);
|
|
RECV(":server 008 alice");
|
|
CHECK_ERROR_PARAMS("008", 1, 2);
|
|
|
|
RECV(":server 008 alice +Zbfkrsuy : \002Server notice mask ");
|
|
CHECK_SRV("--",
|
|
"Server notice mask for alice: +Zbfkrsuy Server notice mask ",
|
|
"irc_008,irc_numeric,nick_server,log3");
|
|
}
|
|
|
|
/*
|
|
* Test functions:
|
|
* irc_protocol_cb_221 (user mode string)
|
|
*/
|
|
|
|
TEST(IrcProtocolWithServer, 221)
|
|
{
|
|
SRV_INIT;
|
|
|
|
/* not enough parameters */
|
|
RECV(":server 221");
|
|
CHECK_ERROR_PARAMS("221", 0, 2);
|
|
RECV(":server 221 alice");
|
|
CHECK_ERROR_PARAMS("221", 1, 2);
|
|
|
|
STRCMP_EQUAL(NULL, ptr_server->nick_modes);
|
|
|
|
RECV(":server 221 alice : +abc ");
|
|
CHECK_SRV("--", "User mode for alice is [ +abc ]",
|
|
"irc_221,irc_numeric,nick_server,log3");
|
|
STRCMP_EQUAL("abc", ptr_server->nick_modes);
|
|
|
|
RECV(":server 221 alice :-abc");
|
|
CHECK_SRV("--", "User mode for alice is [-abc]",
|
|
"irc_221,irc_numeric,nick_server,log3");
|
|
STRCMP_EQUAL(NULL, ptr_server->nick_modes);
|
|
}
|
|
|
|
/*
|
|
* Test functions:
|
|
* irc_protocol_cb_whois_nick_msg
|
|
*
|
|
* Messages:
|
|
* 223: whois (charset is)
|
|
* 264: whois (is using encrypted connection)
|
|
* 275: whois (secure connection)
|
|
* 276: whois (has client certificate fingerprint)
|
|
* 307: whois (registered nick)
|
|
* 310: whois (help mode)
|
|
* 313: whois (operator)
|
|
* 318: whois (end)
|
|
* 319: whois (channels)
|
|
* 320: whois (identified user)
|
|
* 326: whois (has oper privs)
|
|
* 335: whois (is a bot on)
|
|
* 337: whois ((is hiding idle time)
|
|
* 378: whois (connecting from)
|
|
* 379: whois (using modes)
|
|
* 671: whois (secure connection)
|
|
*/
|
|
|
|
TEST(IrcProtocolWithServer, whois_nick_msg)
|
|
{
|
|
SRV_INIT;
|
|
|
|
/* not enough parameters */
|
|
RECV(":server 223");
|
|
CHECK_ERROR_PARAMS("223", 0, 2);
|
|
RECV(":server 223 alice");
|
|
CHECK_ERROR_PARAMS("223", 1, 2);
|
|
RECV(":server 264");
|
|
CHECK_ERROR_PARAMS("264", 0, 2);
|
|
RECV(":server 264 alice");
|
|
CHECK_ERROR_PARAMS("264", 1, 2);
|
|
RECV(":server 275");
|
|
CHECK_ERROR_PARAMS("275", 0, 2);
|
|
RECV(":server 275 alice");
|
|
CHECK_ERROR_PARAMS("275", 1, 2);
|
|
RECV(":server 276");
|
|
CHECK_ERROR_PARAMS("276", 0, 2);
|
|
RECV(":server 276 alice");
|
|
CHECK_ERROR_PARAMS("276", 1, 2);
|
|
RECV(":server 307");
|
|
CHECK_ERROR_PARAMS("307", 0, 2);
|
|
RECV(":server 307 alice");
|
|
CHECK_ERROR_PARAMS("307", 1, 2);
|
|
RECV(":server 310");
|
|
CHECK_ERROR_PARAMS("310", 0, 2);
|
|
RECV(":server 310 alice");
|
|
CHECK_ERROR_PARAMS("310", 1, 2);
|
|
RECV(":server 313");
|
|
CHECK_ERROR_PARAMS("313", 0, 2);
|
|
RECV(":server 313 alice");
|
|
CHECK_ERROR_PARAMS("313", 1, 2);
|
|
RECV(":server 318");
|
|
CHECK_ERROR_PARAMS("318", 0, 2);
|
|
RECV(":server 318 alice");
|
|
CHECK_ERROR_PARAMS("318", 1, 2);
|
|
RECV(":server 319");
|
|
CHECK_ERROR_PARAMS("319", 0, 2);
|
|
RECV(":server 319 alice");
|
|
CHECK_ERROR_PARAMS("319", 1, 2);
|
|
RECV(":server 320");
|
|
CHECK_ERROR_PARAMS("320", 0, 2);
|
|
RECV(":server 320 alice");
|
|
CHECK_ERROR_PARAMS("320", 1, 2);
|
|
RECV(":server 326");
|
|
CHECK_ERROR_PARAMS("326", 0, 2);
|
|
RECV(":server 326 alice");
|
|
CHECK_ERROR_PARAMS("326", 1, 2);
|
|
RECV(":server 335");
|
|
CHECK_ERROR_PARAMS("335", 0, 2);
|
|
RECV(":server 335 alice");
|
|
CHECK_ERROR_PARAMS("335", 1, 2);
|
|
RECV(":server 337");
|
|
CHECK_ERROR_PARAMS("337", 0, 2);
|
|
RECV(":server 337 alice");
|
|
CHECK_ERROR_PARAMS("337", 1, 2);
|
|
RECV(":server 378");
|
|
CHECK_ERROR_PARAMS("378", 0, 2);
|
|
RECV(":server 378 alice");
|
|
CHECK_ERROR_PARAMS("378", 1, 2);
|
|
RECV(":server 379");
|
|
CHECK_ERROR_PARAMS("379", 0, 2);
|
|
RECV(":server 379 alice");
|
|
CHECK_ERROR_PARAMS("379", 1, 2);
|
|
RECV(":server 671");
|
|
CHECK_ERROR_PARAMS("671", 0, 2);
|
|
RECV(":server 671 alice");
|
|
CHECK_ERROR_PARAMS("671", 1, 2);
|
|
|
|
RECV(":server 223 alice bob UTF-8");
|
|
CHECK_SRV("--", "[bob] UTF-8", "irc_223,irc_numeric,nick_server,log3");
|
|
RECV(":server 223 alice bob :UTF-8");
|
|
CHECK_SRV("--", "[bob] UTF-8", "irc_223,irc_numeric,nick_server,log3");
|
|
RECV(":server 223 alice bob : UTF-8 ");
|
|
CHECK_SRV("--", "[bob] UTF-8 ", "irc_223,irc_numeric,nick_server,log3");
|
|
RECV(":server 223 alice bob");
|
|
CHECK_SRV("--", "bob", "irc_223,irc_numeric,nick_server,log3");
|
|
RECV(":server 264 alice bob : \002is using encrypted connection ");
|
|
CHECK_SRV("--", "[bob] is using encrypted connection ",
|
|
"irc_264,irc_numeric,nick_server,log3");
|
|
RECV(":server 264 alice bob");
|
|
CHECK_SRV("--", "bob", "irc_264,irc_numeric,nick_server,log3");
|
|
RECV(":server 275 alice bob : is using secure connection ");
|
|
CHECK_SRV("--", "[bob] is using secure connection ",
|
|
"irc_275,irc_numeric,nick_server,log3");
|
|
RECV(":server 275 alice bob");
|
|
CHECK_SRV("--", "bob", "irc_275,irc_numeric,nick_server,log3");
|
|
RECV(":server 276 alice bob : has client certificate fingerprint ");
|
|
CHECK_SRV("--", "[bob] has client certificate fingerprint ",
|
|
"irc_276,irc_numeric,nick_server,log3");
|
|
RECV(":server 276 alice bob");
|
|
CHECK_SRV("--", "bob", "irc_276,irc_numeric,nick_server,log3");
|
|
RECV(":server 307 alice bob : registered nick ");
|
|
CHECK_SRV("--", "[bob] registered nick ", "irc_307,irc_numeric,nick_server,log3");
|
|
RECV(":server 307 alice bob");
|
|
CHECK_SRV("--", "bob", "irc_307,irc_numeric,nick_server,log3");
|
|
RECV(":server 310 alice bob : help mode ");
|
|
CHECK_SRV("--", "[bob] help mode ", "irc_310,irc_numeric,nick_server,log3");
|
|
RECV(":server 310 alice bob");
|
|
CHECK_SRV("--", "bob", "irc_310,irc_numeric,nick_server,log3");
|
|
RECV(":server 313 alice bob : operator ");
|
|
CHECK_SRV("--", "[bob] operator ", "irc_313,irc_numeric,nick_server,log3");
|
|
RECV(":server 313 alice bob");
|
|
CHECK_SRV("--", "bob", "irc_313,irc_numeric,nick_server,log3");
|
|
RECV(":server 318 alice bob : end ");
|
|
CHECK_SRV("--", "[bob] end ", "irc_318,irc_numeric,nick_server,log3");
|
|
RECV(":server 318 alice bob");
|
|
CHECK_SRV("--", "bob", "irc_318,irc_numeric,nick_server,log3");
|
|
RECV(":server 319 alice bob : channels ");
|
|
CHECK_SRV("--", "[bob] channels ", "irc_319,irc_numeric,nick_server,log3");
|
|
RECV(":server 319 alice bob");
|
|
CHECK_SRV("--", "bob", "irc_319,irc_numeric,nick_server,log3");
|
|
RECV(":server 320 alice bob : identified user ");
|
|
CHECK_SRV("--", "[bob] identified user ", "irc_320,irc_numeric,nick_server,log3");
|
|
RECV(":server 320 alice bob");
|
|
CHECK_SRV("--", "bob", "irc_320,irc_numeric,nick_server,log3");
|
|
RECV(":server 326 alice bob : has oper privs ");
|
|
CHECK_SRV("--", "[bob] has oper privs ", "irc_326,irc_numeric,nick_server,log3");
|
|
RECV(":server 326 alice bob");
|
|
CHECK_SRV("--", "bob", "irc_326,irc_numeric,nick_server,log3");
|
|
RECV(":server 335 alice bob : is a bot ");
|
|
CHECK_SRV("--", "[bob] is a bot ", "irc_335,irc_numeric,nick_server,log3");
|
|
RECV(":server 335 alice bob");
|
|
CHECK_SRV("--", "bob", "irc_335,irc_numeric,nick_server,log3");
|
|
RECV(":server 337 alice bob : is hiding their idle time ");
|
|
CHECK_SRV("--", "[bob] is hiding their idle time ", "irc_337,irc_numeric,nick_server,log3");
|
|
RECV(":server 337 alice bob");
|
|
CHECK_SRV("--", "bob", "irc_337,irc_numeric,nick_server,log3");
|
|
RECV(":server 378 alice bob");
|
|
CHECK_SRV("--", "bob", "irc_378,irc_numeric,nick_server,log3");
|
|
RECV(":server 378 alice bob : connecting from ");
|
|
CHECK_SRV("--", "[bob] connecting from ", "irc_378,irc_numeric,nick_server,log3");
|
|
RECV(":server 378 alice bob");
|
|
CHECK_SRV("--", "bob", "irc_378,irc_numeric,nick_server,log3");
|
|
RECV(":server 379 alice bob : using modes ");
|
|
CHECK_SRV("--", "[bob] using modes ", "irc_379,irc_numeric,nick_server,log3");
|
|
RECV(":server 379 alice bob");
|
|
CHECK_SRV("--", "bob", "irc_379,irc_numeric,nick_server,log3");
|
|
RECV(":server 671 alice bob : secure connection ");
|
|
CHECK_SRV("--", "[bob] secure connection ", "irc_671,irc_numeric,nick_server,log3");
|
|
RECV(":server 671 alice bob");
|
|
CHECK_SRV("--", "bob", "irc_671,irc_numeric,nick_server,log3");
|
|
}
|
|
|
|
/*
|
|
* Test functions:
|
|
* irc_protocol_cb_whowas_nick_msg
|
|
*
|
|
* Messages:
|
|
* 369: whowas (end)
|
|
*/
|
|
|
|
TEST(IrcProtocolWithServer, whowas_nick_msg)
|
|
{
|
|
SRV_INIT;
|
|
|
|
/* not enough parameters */
|
|
RECV(":server 369");
|
|
CHECK_ERROR_PARAMS("369", 0, 2);
|
|
RECV(":server 369 alice");
|
|
CHECK_ERROR_PARAMS("369", 1, 2);
|
|
|
|
RECV(":server 369 alice bob end");
|
|
CHECK_SRV("--", "[bob] end", "irc_369,irc_numeric,nick_server,log3");
|
|
RECV(":server 369 alice bob : \002end ");
|
|
CHECK_SRV("--", "[bob] end ", "irc_369,irc_numeric,nick_server,log3");
|
|
RECV(":server 369 alice bob");
|
|
CHECK_SRV("--", "bob", "irc_369,irc_numeric,nick_server,log3");
|
|
}
|
|
|
|
/*
|
|
* Test functions:
|
|
* irc_protocol_cb_301 (away message)
|
|
*/
|
|
|
|
TEST(IrcProtocolWithServer, 301)
|
|
{
|
|
SRV_INIT;
|
|
|
|
RECV(":bob!user@host PRIVMSG alice :hi Alice!");
|
|
CHECK_PV("bob", "bob", "hi Alice!",
|
|
"irc_privmsg,notify_private,prefix_nick_248,nick_bob,"
|
|
"host_user@host,log1");
|
|
|
|
/* not enough parameters */
|
|
RECV(":server 301");
|
|
CHECK_ERROR_PARAMS("301", 0, 1);
|
|
|
|
STRCMP_EQUAL(NULL, ptr_server->channels->away_message);
|
|
|
|
RECV(":server 301 alice bob");
|
|
CHECK_NO_MSG;
|
|
STRCMP_EQUAL(NULL, ptr_server->channels->away_message);
|
|
|
|
RECV(":server 301 alice bob : \002I am away ");
|
|
CHECK_PV("bob", "--", "[bob] is away: I am away ",
|
|
"irc_301,irc_numeric,nick_server,log3");
|
|
STRCMP_EQUAL(" \002I am away ", ptr_server->channels->away_message);
|
|
}
|
|
|
|
/*
|
|
* Test functions:
|
|
* irc_protocol_cb_303 (ison)
|
|
*/
|
|
|
|
TEST(IrcProtocolWithServer, 303)
|
|
{
|
|
SRV_INIT;
|
|
|
|
/* not enough parameters */
|
|
RECV(":server 303");
|
|
CHECK_ERROR_PARAMS("303", 0, 2);
|
|
RECV(":server 303 alice");
|
|
CHECK_ERROR_PARAMS("303", 1, 2);
|
|
|
|
RECV(":server 303 alice : nick1 nick2 ");
|
|
CHECK_SRV("--", "Users online: nick1 nick2 ",
|
|
"irc_303,irc_numeric,nick_server,log3");
|
|
}
|
|
|
|
/*
|
|
* Test functions:
|
|
* irc_protocol_cb_305 (unaway)
|
|
* irc_protocol_cb_306 (away)
|
|
*/
|
|
|
|
TEST(IrcProtocolWithServer, 305_306)
|
|
{
|
|
SRV_INIT;
|
|
|
|
RECV(":bob!user@host PRIVMSG alice :hi Alice!");
|
|
CHECK_PV("bob", "bob", "hi Alice!",
|
|
"irc_privmsg,notify_private,prefix_nick_248,nick_bob,"
|
|
"host_user@host,log1");
|
|
|
|
/* not enough parameters */
|
|
RECV(":server 305");
|
|
CHECK_ERROR_PARAMS("305", 0, 1);
|
|
RECV(":server 306");
|
|
CHECK_ERROR_PARAMS("306", 0, 1);
|
|
|
|
STRCMP_EQUAL(NULL, ptr_server->channels->away_message);
|
|
|
|
RECV(":server 306 alice"); /* now away */
|
|
CHECK_NO_MSG;
|
|
LONGS_EQUAL(1, ptr_server->is_away);
|
|
|
|
RECV(":server 305 alice");
|
|
CHECK_NO_MSG;
|
|
LONGS_EQUAL(0, ptr_server->is_away);
|
|
|
|
RECV(":server 306 alice : \002We'll miss you "); /* now away */
|
|
CHECK_SRV("--", " We'll miss you ", "irc_306,irc_numeric,nick_server,log3");
|
|
LONGS_EQUAL(1, ptr_server->is_away);
|
|
|
|
RECV(":server 305 alice : \002Does this mean you're really back? ");
|
|
CHECK_SRV("--", " Does this mean you're really back? ",
|
|
"irc_305,irc_numeric,nick_server,log3");
|
|
LONGS_EQUAL(0, ptr_server->is_away);
|
|
}
|
|
|
|
/*
|
|
* Test functions:
|
|
* irc_protocol_cb_311 (whois, user)
|
|
*/
|
|
|
|
TEST(IrcProtocolWithServer, 311)
|
|
{
|
|
SRV_INIT;
|
|
|
|
/* not enough parameters */
|
|
RECV(":server 311");
|
|
CHECK_ERROR_PARAMS("311", 0, 3);
|
|
RECV(":server 311 alice");
|
|
CHECK_ERROR_PARAMS("311", 1, 3);
|
|
RECV(":server 311 alice bob");
|
|
CHECK_ERROR_PARAMS("311", 2, 3);
|
|
RECV(":server 311 alice bob user");
|
|
|
|
/* non-standard parameters (using default whois callback) */
|
|
RECV(":server 311 alice bob user");
|
|
CHECK_SRV("--", "[bob] user", "irc_311,irc_numeric,nick_server,log3");
|
|
|
|
/* standard parameters */
|
|
RECV(":server 311 alice bob user_\00304red host_\00302blue * : \002real name ");
|
|
CHECK_SRV("--", "[bob] (user_red@host_blue): real name ",
|
|
"irc_311,irc_numeric,nick_server,log3");
|
|
}
|
|
|
|
/*
|
|
* Test functions:
|
|
* irc_protocol_cb_312 (whois, server)
|
|
*/
|
|
|
|
TEST(IrcProtocolWithServer, 312)
|
|
{
|
|
SRV_INIT;
|
|
|
|
/* not enough parameters */
|
|
RECV(":server 312");
|
|
CHECK_ERROR_PARAMS("312", 0, 3);
|
|
RECV(":server 312 alice");
|
|
CHECK_ERROR_PARAMS("312", 1, 3);
|
|
RECV(":server 312 alice bob");
|
|
CHECK_ERROR_PARAMS("312", 2, 3);
|
|
|
|
/* non-standard parameters (using default whois callback) */
|
|
RECV(":server 312 alice bob server");
|
|
CHECK_SRV("--", "[bob] server", "irc_312,irc_numeric,nick_server,log3");
|
|
|
|
/* standard parameters */
|
|
RECV(":server 312 alice bob server : \002https://example.com/ ");
|
|
CHECK_SRV("--", "[bob] server ( https://example.com/ )",
|
|
"irc_312,irc_numeric,nick_server,log3");
|
|
}
|
|
|
|
/*
|
|
* Test functions:
|
|
* irc_protocol_cb_314 (whowas)
|
|
*/
|
|
|
|
TEST(IrcProtocolWithServer, 314)
|
|
{
|
|
SRV_INIT;
|
|
|
|
/* not enough parameters */
|
|
RECV(":server 314");
|
|
CHECK_ERROR_PARAMS("314", 0, 3);
|
|
RECV(":server 314 alice");
|
|
CHECK_ERROR_PARAMS("314", 1, 3);
|
|
RECV(":server 314 alice bob");
|
|
CHECK_ERROR_PARAMS("314", 2, 3);
|
|
|
|
/* non-standard parameters (using default whowas callback) */
|
|
RECV(":server 314 alice bob user");
|
|
CHECK_SRV("--", "[bob] user", "irc_314,irc_numeric,nick_server,log3");
|
|
|
|
/* standard parameters */
|
|
RECV(":server 314 alice bob user host * : \002real name ");
|
|
CHECK_SRV("--", "[bob] (user@host) was real name ",
|
|
"irc_314,irc_numeric,nick_server,log3");
|
|
}
|
|
|
|
/*
|
|
* Test functions:
|
|
* irc_protocol_cb_315 (end of /who)
|
|
*/
|
|
|
|
TEST(IrcProtocolWithServer, 315)
|
|
{
|
|
SRV_INIT_JOIN;
|
|
|
|
/* not enough parameters */
|
|
RECV(":server 315");
|
|
CHECK_ERROR_PARAMS("315", 0, 3);
|
|
RECV(":server 315 alice");
|
|
CHECK_ERROR_PARAMS("315", 1, 3);
|
|
RECV(":server 315 alice #test");
|
|
CHECK_ERROR_PARAMS("315", 2, 3);
|
|
|
|
RECV(":server 315 alice #test end");
|
|
CHECK_SRV("--", "[#test] end",
|
|
"irc_315,irc_numeric,nick_server,log3");
|
|
|
|
RECV(":server 315 alice #test : \002End of /WHO list. ");
|
|
CHECK_SRV("--", "[#test] End of /WHO list. ",
|
|
"irc_315,irc_numeric,nick_server,log3");
|
|
}
|
|
|
|
/*
|
|
* Test functions:
|
|
* irc_protocol_cb_317 (whois, idle)
|
|
*/
|
|
|
|
TEST(IrcProtocolWithServer, 317)
|
|
{
|
|
time_t time;
|
|
char message[1024];
|
|
|
|
SRV_INIT;
|
|
|
|
/* not enough parameters */
|
|
RECV(":server 317");
|
|
CHECK_ERROR_PARAMS("317", 0, 4);
|
|
RECV(":server 317 alice");
|
|
CHECK_ERROR_PARAMS("317", 1, 4);
|
|
RECV(":server 317 alice bob");
|
|
CHECK_ERROR_PARAMS("317", 2, 4);
|
|
RECV(":server 317 alice bob 122877");
|
|
CHECK_ERROR_PARAMS("317", 3, 4);
|
|
|
|
/* signon at 03/12/2008 @ 1:18pm (UTC) */
|
|
RECV(":server 317 alice bob 122877 1205327880");
|
|
CHECK_SRV("--",
|
|
"[bob] idle: 1 day, 10 hours 07 minutes 57 seconds, "
|
|
"signon at: Wed, 12 Mar 2008 13:18:00",
|
|
"irc_317,irc_numeric,nick_server,log3");
|
|
RECV(":server 317 alice bob 122877 1205327880 :\002seconds idle, signon time ");
|
|
CHECK_SRV("--",
|
|
"[bob] idle: 1 day, 10 hours 07 minutes 57 seconds, "
|
|
"signon at: Wed, 12 Mar 2008 13:18:00",
|
|
"irc_317,irc_numeric,nick_server,log3");
|
|
|
|
/* signon 2 minutes ago */
|
|
time = time_t (NULL);
|
|
time -= 120;
|
|
snprintf (message, sizeof (message),
|
|
":server 317 alice bob 30 %lld :seconds idle, signon time",
|
|
(long long)time);
|
|
RECV(message);
|
|
}
|
|
|
|
/*
|
|
* Test functions:
|
|
* irc_protocol_cb_321 (/list start)
|
|
*/
|
|
|
|
TEST(IrcProtocolWithServer, 321)
|
|
{
|
|
SRV_INIT;
|
|
|
|
/* not enough parameters */
|
|
RECV(":server 321");
|
|
CHECK_ERROR_PARAMS("321", 0, 2);
|
|
RECV(":server 321 alice");
|
|
CHECK_ERROR_PARAMS("321", 1, 2);
|
|
|
|
RECV(":server 321 alice #test");
|
|
CHECK_SRV("--", "#test", "irc_321,irc_numeric,nick_server,log3");
|
|
RECV(":server 321 alice #test Users");
|
|
CHECK_SRV("--", "#test Users", "irc_321,irc_numeric,nick_server,log3");
|
|
RECV(":server 321 alice #test : \002Users Name ");
|
|
CHECK_SRV("--", "#test Users Name ", "irc_321,irc_numeric,nick_server,log3");
|
|
}
|
|
|
|
/*
|
|
* Test functions:
|
|
* irc_protocol_cb_322 (channel for /list)
|
|
*/
|
|
|
|
TEST(IrcProtocolWithServer, 322)
|
|
{
|
|
SRV_INIT;
|
|
|
|
/* not enough parameters */
|
|
RECV(":server 322");
|
|
CHECK_ERROR_PARAMS("322", 0, 3);
|
|
RECV(":server 322 alice");
|
|
CHECK_ERROR_PARAMS("322", 1, 3);
|
|
RECV(":server 322 alice #test");
|
|
CHECK_ERROR_PARAMS("322", 2, 3);
|
|
|
|
RECV(":server 322 alice #test 3");
|
|
CHECK_SRV("--", "#test(3)", "irc_322,irc_numeric,nick_server,log3");
|
|
RECV(":server 322 alice #test 3 :\002topic of channel ");
|
|
CHECK_SRV("--", "#test(3): topic of channel ",
|
|
"irc_322,irc_numeric,nick_server,log3");
|
|
|
|
run_cmd_quiet ("/list -server " IRC_FAKE_SERVER " -raw #test.*");
|
|
CHECK_SRV("--", "#test(3): topic of channel ",
|
|
"irc_322,irc_numeric,nick_server,log3");
|
|
|
|
RECV(":server 322 alice #test 3");
|
|
CHECK_SRV("--", "#test(3)",
|
|
"irc_322,irc_numeric,nick_server,log3");
|
|
RECV(":server 322 alice #test 3 :topic of channel ");
|
|
CHECK_SRV("--", "#test(3): topic of channel ",
|
|
"irc_322,irc_numeric,nick_server,log3");
|
|
|
|
RECV(":server 322 alice #xyz 3");
|
|
CHECK_NO_MSG;
|
|
RECV(":server 322 alice #xyz 3 :topic of channel ");
|
|
CHECK_NO_MSG;
|
|
}
|
|
|
|
/*
|
|
* Test functions:
|
|
* irc_protocol_cb_323 (end of /list)
|
|
*/
|
|
|
|
TEST(IrcProtocolWithServer, 323)
|
|
{
|
|
SRV_INIT;
|
|
|
|
/* not enough parameters */
|
|
RECV(":server 323");
|
|
CHECK_ERROR_PARAMS("323", 0, 1);
|
|
|
|
RECV(":server 323 alice");
|
|
CHECK_SRV("--", "", "irc_323,irc_numeric,nick_server,log3");
|
|
RECV(":server 323 alice end");
|
|
CHECK_SRV("--", "end", "irc_323,irc_numeric,nick_server,log3");
|
|
RECV(":server 323 alice : \002End of /LIST ");
|
|
CHECK_SRV("--", " End of /LIST ", "irc_323,irc_numeric,nick_server,log3");
|
|
}
|
|
|
|
/*
|
|
* Test functions:
|
|
* irc_protocol_cb_324 (channel mode)
|
|
*/
|
|
|
|
TEST(IrcProtocolWithServer, 324)
|
|
{
|
|
SRV_INIT_JOIN;
|
|
|
|
STRCMP_EQUAL(NULL, ptr_server->channels->modes);
|
|
|
|
/* not enough parameters */
|
|
RECV(":server 324");
|
|
CHECK_ERROR_PARAMS("324", 0, 2);
|
|
RECV(":server 324 alice");
|
|
CHECK_ERROR_PARAMS("324", 1, 2);
|
|
|
|
RECV(":server 324 alice #test +nt");
|
|
CHECK_NO_MSG;
|
|
STRCMP_EQUAL("+nt", ptr_server->channels->modes);
|
|
|
|
RECV(":server 324 alice #test +nst ");
|
|
CHECK_CHAN("--", "Mode #test [+nst]", "irc_324,irc_numeric,nick_server,log3");
|
|
STRCMP_EQUAL("+nst", ptr_server->channels->modes);
|
|
|
|
RECV(":server 324 alice #test");
|
|
CHECK_CHAN("--", "Mode #test []", "irc_324,irc_numeric,nick_server,log3");
|
|
STRCMP_EQUAL(NULL, ptr_server->channels->modes);
|
|
}
|
|
|
|
/*
|
|
* Test functions:
|
|
* irc_protocol_cb_327 (whois, host)
|
|
*/
|
|
|
|
TEST(IrcProtocolWithServer, 327)
|
|
{
|
|
SRV_INIT;
|
|
|
|
/* not enough parameters */
|
|
RECV(":server 327");
|
|
CHECK_ERROR_PARAMS("327", 0, 3);
|
|
RECV(":server 327 alice");
|
|
CHECK_ERROR_PARAMS("327", 1, 3);
|
|
RECV(":server 327 alice bob");
|
|
CHECK_ERROR_PARAMS("327", 2, 3);
|
|
|
|
/* non-standard parameters (using default whois callback) */
|
|
RECV(":server 327 alice bob host");
|
|
CHECK_SRV("--", "[bob] host", "irc_327,irc_numeric,nick_server,log3");
|
|
|
|
/* standard parameters */
|
|
RECV(":server 327 alice bob host 1.2.3.4");
|
|
CHECK_SRV("--", "[bob] host 1.2.3.4", "irc_327,irc_numeric,nick_server,log3");
|
|
RECV(":server 327 alice bob host_\00304red 1.2.3.4 : \002real name ");
|
|
CHECK_SRV("--", "[bob] host_red 1.2.3.4 ( real name )",
|
|
"irc_327,irc_numeric,nick_server,log3");
|
|
}
|
|
|
|
/*
|
|
* Test functions:
|
|
* irc_protocol_cb_328 (channel URL)
|
|
*/
|
|
|
|
TEST(IrcProtocolWithServer, 328)
|
|
{
|
|
SRV_INIT_JOIN;
|
|
|
|
/* not enough parameters */
|
|
RECV(":server 328");
|
|
CHECK_ERROR_PARAMS("328", 0, 3);
|
|
RECV(":server 328 alice");
|
|
CHECK_ERROR_PARAMS("328", 1, 3);
|
|
RECV(":server 328 alice #test");
|
|
CHECK_ERROR_PARAMS("328", 2, 3);
|
|
|
|
RECV(":server 328 alice #test :https://example.com/");
|
|
CHECK_CHAN("--", "URL for #test: https://example.com/",
|
|
"irc_328,irc_numeric,nick_server,log3");
|
|
RECV(":server 328 alice #test : \002URL is https://example.com/ ");
|
|
CHECK_CHAN("--", "URL for #test: URL is https://example.com/ ",
|
|
"irc_328,irc_numeric,nick_server,log3");
|
|
}
|
|
|
|
/*
|
|
* Test functions:
|
|
* irc_protocol_cb_329 (channel creation date)
|
|
*/
|
|
|
|
TEST(IrcProtocolWithServer, 329)
|
|
{
|
|
SRV_INIT_JOIN;
|
|
|
|
/* not enough parameters */
|
|
RECV(":server 329");
|
|
CHECK_ERROR_PARAMS("329", 0, 3);
|
|
RECV(":server 329 alice");
|
|
CHECK_ERROR_PARAMS("329", 1, 3);
|
|
RECV(":server 329 alice #test");
|
|
CHECK_ERROR_PARAMS("329", 2, 3);
|
|
|
|
RECV(":server 329 alice #test 1205327894");
|
|
CHECK_CHAN("--", "Channel created on Wed, 12 Mar 2008 13:18:14",
|
|
"irc_329,irc_numeric,nick_server,log3");
|
|
RECV(":server 329 alice #test :1205327894");
|
|
CHECK_CHAN("--", "Channel created on Wed, 12 Mar 2008 13:18:14",
|
|
"irc_329,irc_numeric,nick_server,log3");
|
|
|
|
/* channel not found */
|
|
RECV(":server 329 alice #xyz 1205327894");
|
|
CHECK_SRV("--", "Channel #xyz created on Wed, 12 Mar 2008 13:18:14",
|
|
"irc_329,irc_numeric,nick_server,log3");
|
|
RECV(":server 329 alice #xyz :1205327894 ");
|
|
CHECK_SRV("--", "Channel #xyz created on Wed, 12 Mar 2008 13:18:14",
|
|
"irc_329,irc_numeric,nick_server,log3");
|
|
}
|
|
|
|
/*
|
|
* Test functions:
|
|
* irc_protocol_cb_330 (whois, is logged in as)
|
|
* irc_protocol_cb_343 (whois, is opered as)
|
|
*/
|
|
|
|
TEST(IrcProtocolWithServer, 330_343)
|
|
{
|
|
SRV_INIT_JOIN;
|
|
|
|
/* not enough parameters */
|
|
RECV(":server 330");
|
|
CHECK_ERROR_PARAMS("330", 0, 3);
|
|
RECV(":server 330 alice");
|
|
CHECK_ERROR_PARAMS("330", 1, 3);
|
|
RECV(":server 330 alice bob");
|
|
CHECK_ERROR_PARAMS("330", 2, 3);
|
|
|
|
/* not enough parameters */
|
|
RECV(":server 343");
|
|
CHECK_ERROR_PARAMS("343", 0, 3);
|
|
RECV(":server 343 alice");
|
|
CHECK_ERROR_PARAMS("343", 1, 3);
|
|
RECV(":server 343 alice bob");
|
|
CHECK_ERROR_PARAMS("343", 2, 3);
|
|
|
|
RECV(":server 330 alice bob bob2");
|
|
CHECK_SRV("--", "[bob] bob2", "irc_330,irc_numeric,nick_server,log3");
|
|
RECV(":server 330 alice bob bob2 : \002is logged in as ");
|
|
CHECK_SRV("--", "[bob] is logged in as bob2",
|
|
"irc_330,irc_numeric,nick_server,log3");
|
|
|
|
RECV(":server 343 alice bob bob2");
|
|
CHECK_SRV("--", "[bob] bob2", "irc_343,irc_numeric,nick_server,log3");
|
|
RECV(":server 343 alice bob bob2 :\002is opered as ");
|
|
CHECK_SRV("--", "[bob] is opered as bob2",
|
|
"irc_343,irc_numeric,nick_server,log3");
|
|
}
|
|
|
|
/*
|
|
* Test functions:
|
|
* irc_protocol_cb_331 (no topic for channel)
|
|
*/
|
|
|
|
TEST(IrcProtocolWithServer, 331)
|
|
{
|
|
SRV_INIT_JOIN;
|
|
|
|
/* not enough parameters */
|
|
RECV(":server 331");
|
|
CHECK_ERROR_PARAMS("331", 0, 2);
|
|
RECV(":server 331 alice");
|
|
CHECK_ERROR_PARAMS("331", 1, 2);
|
|
|
|
RECV(":server 331 alice #test");
|
|
CHECK_CHAN("--", "No topic set for channel #test",
|
|
"irc_331,irc_numeric,nick_server,log3");
|
|
|
|
/* channel not found */
|
|
RECV(":server 331 alice #xyz ");
|
|
CHECK_SRV("--", "No topic set for channel #xyz",
|
|
"irc_331,irc_numeric,nick_server,log3");
|
|
}
|
|
|
|
/*
|
|
* Test functions:
|
|
* irc_protocol_cb_332 (topic of channel)
|
|
*/
|
|
|
|
TEST(IrcProtocolWithServer, 332)
|
|
{
|
|
SRV_INIT_JOIN;
|
|
|
|
/* not enough parameters */
|
|
RECV(":server 332");
|
|
CHECK_ERROR_PARAMS("332", 0, 2);
|
|
RECV(":server 332 alice");
|
|
CHECK_ERROR_PARAMS("332", 1, 2);
|
|
|
|
STRCMP_EQUAL(NULL, ptr_server->channels->topic);
|
|
|
|
RECV(":server 332 alice #test");
|
|
CHECK_CHAN("--", "Topic for #test is \"\"",
|
|
"irc_332,irc_numeric,nick_server,log3");
|
|
|
|
RECV(":server 332 alice #test :\002the new topic ");
|
|
CHECK_CHAN("--", "Topic for #test is \"the new topic \"",
|
|
"irc_332,irc_numeric,nick_server,log3");
|
|
STRCMP_EQUAL("\002the new topic ",
|
|
ptr_server->channels->topic);
|
|
}
|
|
|
|
/*
|
|
* Test functions:
|
|
* irc_protocol_cb_333 (infos about topic (nick / date))
|
|
*/
|
|
|
|
TEST(IrcProtocolWithServer, 333)
|
|
{
|
|
SRV_INIT_JOIN;
|
|
|
|
/* not enough parameters */
|
|
RECV(":server 333");
|
|
CHECK_ERROR_PARAMS("333", 0, 3);
|
|
RECV(":server 333 alice");
|
|
CHECK_ERROR_PARAMS("333", 1, 3);
|
|
RECV(":server 333 alice #test");
|
|
CHECK_ERROR_PARAMS("333", 2, 3);
|
|
|
|
RECV(":server 333 alice #test nick!user_\00304red@host_\00304red");
|
|
CHECK_NO_MSG;
|
|
RECV(":server 333 alice #test nick!user_\00304red@host_\00304red 1205428096");
|
|
CHECK_CHAN("--",
|
|
"Topic set by nick (user_red@host_red) on Thu, 13 Mar 2008 17:08:16",
|
|
"irc_333,irc_numeric,nick_server,log3");
|
|
RECV(":server 333 alice #test 1205428096 ");
|
|
CHECK_CHAN("--", "Topic set on Thu, 13 Mar 2008 17:08:16",
|
|
"irc_333,irc_numeric,nick_server,log3");
|
|
|
|
/* channel not found */
|
|
RECV(":server 333 alice #xyz nick!user_\00304red@host_\00304red");
|
|
CHECK_NO_MSG;
|
|
RECV(":server 333 alice #xyz nick!user_\00304red@host_\00304red 1205428096");
|
|
CHECK_SRV("--",
|
|
"Topic for #xyz set by nick (user_red@host_red) on "
|
|
"Thu, 13 Mar 2008 17:08:16",
|
|
"irc_333,irc_numeric,nick_server,log3");
|
|
RECV(":server 333 alice #xyz 1205428096");
|
|
CHECK_SRV("--", "Topic for #xyz set on Thu, 13 Mar 2008 17:08:16",
|
|
"irc_333,irc_numeric,nick_server,log3");
|
|
}
|
|
|
|
/*
|
|
* Test functions:
|
|
* irc_protocol_cb_338 (whois, host)
|
|
*/
|
|
|
|
TEST(IrcProtocolWithServer, 338)
|
|
{
|
|
SRV_INIT;
|
|
|
|
/* not enough parameters */
|
|
RECV(":server 338");
|
|
CHECK_ERROR_PARAMS("338", 0, 3);
|
|
RECV(":server 338 alice");
|
|
CHECK_ERROR_PARAMS("338", 1, 3);
|
|
RECV(":server 338 alice bob");
|
|
CHECK_ERROR_PARAMS("338", 2, 3);
|
|
|
|
RECV(":server 338 alice bob host_\00304red : \002actually using host ");
|
|
CHECK_SRV("--", "[bob] actually using host host_red",
|
|
"irc_338,irc_numeric,nick_server,log3");
|
|
|
|
/* on Rizon server */
|
|
RECV(":server 338 alice bob :\002is actually bob_\00304red@example_\00304red.com [1.2.3.4]");
|
|
CHECK_SRV("--", "[bob] is actually bob_red@example_red.com [1.2.3.4]",
|
|
"irc_338,irc_numeric,nick_server,log3");
|
|
}
|
|
|
|
/*
|
|
* Test functions:
|
|
* irc_protocol_cb_341 (inviting)
|
|
*/
|
|
|
|
TEST(IrcProtocolWithServer, 341)
|
|
{
|
|
SRV_INIT;
|
|
|
|
/* not enough parameters */
|
|
RECV(":server 341");
|
|
CHECK_ERROR_PARAMS("341", 0, 3);
|
|
RECV(":server 341 alice");
|
|
CHECK_ERROR_PARAMS("341", 1, 3);
|
|
RECV(":server 341 alice bob");
|
|
CHECK_ERROR_PARAMS("341", 2, 3);
|
|
|
|
RECV(":server 341 alice bob #test");
|
|
CHECK_SRV("--", "alice has invited bob to #test",
|
|
"irc_341,irc_numeric,nick_alice,log3");
|
|
RECV(":server 341 alice bob : #test ");
|
|
CHECK_SRV("--", "alice has invited bob to #test ",
|
|
"irc_341,irc_numeric,nick_alice,log3");
|
|
}
|
|
|
|
/*
|
|
* Test functions:
|
|
* irc_protocol_cb_344 (channel reop / whois (geo info))
|
|
*/
|
|
|
|
TEST(IrcProtocolWithServer, 344)
|
|
{
|
|
SRV_INIT_JOIN;
|
|
|
|
/* not enough parameters */
|
|
RECV(":server 344");
|
|
CHECK_ERROR_PARAMS("344", 0, 3);
|
|
RECV(":server 344 alice");
|
|
CHECK_ERROR_PARAMS("344", 1, 3);
|
|
RECV(":server 344 alice #test");
|
|
CHECK_ERROR_PARAMS("344", 2, 3);
|
|
|
|
/* channel reop (IRCnet) */
|
|
RECV(":server 344 alice #test nick!user@host");
|
|
CHECK_SRV("--", "Channel reop #test: nick!user@host",
|
|
"irc_344,irc_numeric,nick_server,log3");
|
|
RECV(":server 344 alice #test : nick!user@host ");
|
|
CHECK_SRV("--", "Channel reop #test: nick!user@host ",
|
|
"irc_344,irc_numeric,nick_server,log3");
|
|
|
|
/* channel reop (IRCnet), channel not found */
|
|
RECV(":server 344 alice #xyz nick!user@host");
|
|
CHECK_SRV("--", "Channel reop #xyz: nick!user@host",
|
|
"irc_344,irc_numeric,nick_server,log3");
|
|
RECV(":server 344 alice #xyz : nick!user@host ");
|
|
CHECK_SRV("--", "Channel reop #xyz: nick!user@host ",
|
|
"irc_344,irc_numeric,nick_server,log3");
|
|
|
|
/* whois, geo info (UnrealIRCd) */
|
|
RECV(":server 344 alice bob FR : \002is connecting from France ");
|
|
CHECK_SRV("--", "[bob] is connecting from France (FR)",
|
|
"irc_344,irc_numeric,nick_server,log3");
|
|
|
|
/* whois, geo info (UnrealIRCd), no country code */
|
|
RECV(":server 344 alice bob : \002is connecting from France ");
|
|
CHECK_SRV("--", "[bob] is connecting from France ",
|
|
"irc_344,irc_numeric,nick_server,log3");
|
|
}
|
|
|
|
/*
|
|
* Test functions:
|
|
* irc_protocol_cb_345 (end of channel reop)
|
|
*/
|
|
|
|
TEST(IrcProtocolWithServer, 345)
|
|
{
|
|
SRV_INIT_JOIN;
|
|
|
|
/* not enough parameters */
|
|
RECV(":server 345");
|
|
CHECK_ERROR_PARAMS("345", 0, 3);
|
|
RECV(":server 345 alice");
|
|
CHECK_ERROR_PARAMS("345", 1, 3);
|
|
RECV(":server 345 alice #test");
|
|
CHECK_ERROR_PARAMS("345", 2, 3);
|
|
|
|
RECV(":server 345 alice #test end");
|
|
CHECK_SRV("--", "#test: end", "irc_345,irc_numeric,nick_server,log3");
|
|
RECV(":server 345 alice #test : \002End of Channel Reop List ");
|
|
CHECK_SRV("--", "#test: End of Channel Reop List ",
|
|
"irc_345,irc_numeric,nick_server,log3");
|
|
|
|
/* channel not found */
|
|
RECV(":server 345 alice #xyz end");
|
|
CHECK_SRV("--", "#xyz: end", "irc_345,irc_numeric,nick_server,log3");
|
|
RECV(":server 345 alice #xyz :\002End of Channel Reop List");
|
|
CHECK_SRV("--", "#xyz: End of Channel Reop List",
|
|
"irc_345,irc_numeric,nick_server,log3");
|
|
}
|
|
|
|
/*
|
|
* Test functions:
|
|
* irc_protocol_cb_346 (channel invite list)
|
|
*/
|
|
|
|
TEST(IrcProtocolWithServer, 346)
|
|
{
|
|
SRV_INIT_JOIN;
|
|
|
|
/* not enough parameters */
|
|
RECV(":server 346");
|
|
CHECK_ERROR_PARAMS("346", 0, 3);
|
|
RECV(":server 346 alice");
|
|
CHECK_ERROR_PARAMS("346", 1, 3);
|
|
RECV(":server 346 alice #test");
|
|
CHECK_ERROR_PARAMS("346", 2, 3);
|
|
|
|
RECV(":server 346 alice #test invitemask");
|
|
CHECK_CHAN("--", "[#test] [1] invitemask invited",
|
|
"irc_346,irc_numeric,nick_server,log3");
|
|
RECV(":server 346 alice #test invitemask nick!user_\00304red@host_\00304red");
|
|
CHECK_CHAN("--", "[#test] [2] invitemask invited by nick (user_red@host_red)",
|
|
"irc_346,irc_numeric,nick_server,log3");
|
|
RECV(":server 346 alice #test invitemask nick!user_\00304red@host_\00304red 1205590879 ");
|
|
CHECK_CHAN("--",
|
|
"[#test] [3] invitemask invited by nick (user_red@host_red) "
|
|
"on Sat, 15 Mar 2008 14:21:19",
|
|
"irc_346,irc_numeric,nick_server,log3");
|
|
|
|
/* channel not found */
|
|
RECV(":server 346 alice #xyz invitemask");
|
|
CHECK_SRV("--", "[#xyz] invitemask invited",
|
|
"irc_346,irc_numeric,nick_server,log3");
|
|
RECV(":server 346 alice #xyz invitemask nick!user_\00304red@host_\00304red");
|
|
CHECK_SRV("--", "[#xyz] invitemask invited by nick (user_red@host_red)",
|
|
"irc_346,irc_numeric,nick_server,log3");
|
|
RECV(":server 346 alice #xyz invitemask nick!user_\00304red@host_\00304red 1205590879");
|
|
CHECK_SRV("--",
|
|
"[#xyz] invitemask invited by nick (user_red@host_red) "
|
|
"on Sat, 15 Mar 2008 14:21:19",
|
|
"irc_346,irc_numeric,nick_server,log3");
|
|
}
|
|
|
|
/*
|
|
* Test functions:
|
|
* irc_protocol_cb_347 (end of channel invite list)
|
|
*/
|
|
|
|
TEST(IrcProtocolWithServer, 347)
|
|
{
|
|
SRV_INIT_JOIN;
|
|
|
|
/* not enough parameters */
|
|
RECV(":server 347");
|
|
CHECK_ERROR_PARAMS("347", 0, 2);
|
|
RECV(":server 347 alice");
|
|
CHECK_ERROR_PARAMS("347", 1, 2);
|
|
|
|
RECV(":server 347 alice #test");
|
|
CHECK_CHAN("--", "[#test]", "irc_347,irc_numeric,nick_server,log3");
|
|
RECV(":server 347 alice #test end");
|
|
CHECK_CHAN("--", "[#test] end", "irc_347,irc_numeric,nick_server,log3");
|
|
RECV(":server 347 alice #test : \002End of Channel Invite List ");
|
|
CHECK_CHAN("--", "[#test] End of Channel Invite List ",
|
|
"irc_347,irc_numeric,nick_server,log3");
|
|
|
|
/* channel not found */
|
|
RECV(":server 347 alice #xyz");
|
|
CHECK_SRV("--", "[#xyz]", "irc_347,irc_numeric,nick_server,log3");
|
|
RECV(":server 347 alice #xyz end");
|
|
CHECK_SRV("--", "[#xyz] end", "irc_347,irc_numeric,nick_server,log3");
|
|
RECV(":server 347 alice #xyz :\002End of Channel Invite List");
|
|
CHECK_SRV("--", "[#xyz] End of Channel Invite List",
|
|
"irc_347,irc_numeric,nick_server,log3");
|
|
}
|
|
|
|
/*
|
|
* Test functions:
|
|
* irc_protocol_cb_348 (channel exception list)
|
|
*/
|
|
|
|
TEST(IrcProtocolWithServer, 348)
|
|
{
|
|
SRV_INIT_JOIN;
|
|
|
|
/* not enough parameters */
|
|
RECV(":server 348");
|
|
CHECK_ERROR_PARAMS("348", 0, 3);
|
|
RECV(":server 348 alice");
|
|
CHECK_ERROR_PARAMS("348", 1, 3);
|
|
RECV(":server 348 alice #test");
|
|
CHECK_ERROR_PARAMS("348", 2, 3);
|
|
|
|
RECV(":server 348 alice #test nick1!user1@host1");
|
|
CHECK_CHAN("--", "[#test] [1] exception nick1!user1@host1",
|
|
"irc_348,irc_numeric,nick_server,log3");
|
|
RECV(":server 348 alice #test nick1!user_\00304red@host_\00304red "
|
|
"nick2!user_\00302blue@host_\00302blue");
|
|
CHECK_CHAN("--",
|
|
"[#test] [2] exception nick1!user_red@host_red "
|
|
"by nick2 (user_blue@host_blue)",
|
|
"irc_348,irc_numeric,nick_server,log3");
|
|
RECV(":server 348 alice #test nick1!user_\00304red@host_\00304red "
|
|
"nick2!user_\00302blue@host_\00302blue 1205585109 ");
|
|
CHECK_CHAN("--",
|
|
"[#test] [3] exception nick1!user_red@host_red "
|
|
"by nick2 (user_blue@host_blue) on Sat, 15 Mar 2008 12:45:09",
|
|
"irc_348,irc_numeric,nick_server,log3");
|
|
|
|
/* channel not found */
|
|
RECV(":server 348 alice #xyz nick1!user_\00304red@host_\00304red");
|
|
CHECK_SRV("--", "[#xyz] exception nick1!user_red@host_red",
|
|
"irc_348,irc_numeric,nick_server,log3");
|
|
RECV(":server 348 alice #xyz nick1!user_\00304red@host_\00304red "
|
|
"nick2!user_\00302blue@host_\00302blue");
|
|
CHECK_SRV("--",
|
|
"[#xyz] exception nick1!user_red@host_red "
|
|
"by nick2 (user_blue@host_blue)",
|
|
"irc_348,irc_numeric,nick_server,log3");
|
|
RECV(":server 348 alice #xyz nick1!user_\00304red@host_\00304red "
|
|
"nick2!user_\00302blue@host_\00302blue 1205585109");
|
|
CHECK_SRV("--",
|
|
"[#xyz] exception nick1!user_red@host_red "
|
|
"by nick2 (user_blue@host_blue) on Sat, 15 Mar 2008 12:45:09",
|
|
"irc_348,irc_numeric,nick_server,log3");
|
|
}
|
|
|
|
/*
|
|
* Test functions:
|
|
* irc_protocol_cb_349 (end of channel exception list)
|
|
*/
|
|
|
|
TEST(IrcProtocolWithServer, 349)
|
|
{
|
|
SRV_INIT_JOIN;
|
|
|
|
/* not enough parameters */
|
|
RECV(":server 349");
|
|
CHECK_ERROR_PARAMS("349", 0, 2);
|
|
RECV(":server 349 alice");
|
|
CHECK_ERROR_PARAMS("349", 1, 2);
|
|
|
|
RECV(":server 349 alice #test");
|
|
CHECK_CHAN("--", "[#test]", "irc_349,irc_numeric,nick_server,log3");
|
|
RECV(":server 349 alice #test end");
|
|
CHECK_CHAN("--", "[#test] end", "irc_349,irc_numeric,nick_server,log3");
|
|
RECV(":server 349 alice #test :\002End of Channel Exception List ");
|
|
CHECK_CHAN("--", "[#test] End of Channel Exception List ",
|
|
"irc_349,irc_numeric,nick_server,log3");
|
|
|
|
/* channel not found */
|
|
RECV(":server 349 alice #xyz");
|
|
CHECK_SRV("--", "[#xyz]", "irc_349,irc_numeric,nick_server,log3");
|
|
RECV(":server 349 alice #xyz end");
|
|
CHECK_SRV("--", "[#xyz] end", "irc_349,irc_numeric,nick_server,log3");
|
|
RECV(":server 349 alice #xyz :\002End of Channel Exception List");
|
|
CHECK_SRV("--", "[#xyz] End of Channel Exception List",
|
|
"irc_349,irc_numeric,nick_server,log3");
|
|
}
|
|
|
|
/*
|
|
* Test functions:
|
|
* irc_protocol_cb_350 (whois, gateway)
|
|
*/
|
|
|
|
TEST(IrcProtocolWithServer, 350)
|
|
{
|
|
SRV_INIT_JOIN;
|
|
|
|
/* not enough parameters */
|
|
RECV(":server 350");
|
|
CHECK_ERROR_PARAMS("350", 0, 2);
|
|
RECV(":server 350 alice");
|
|
CHECK_ERROR_PARAMS("350", 1, 2);
|
|
|
|
/* non-standard parameters (using whois_nick_msg callback) */
|
|
RECV(":server 350 alice bob : \002something here ");
|
|
CHECK_SRV("--", "[bob] something here ",
|
|
"irc_350,irc_numeric,nick_server,log3");
|
|
RECV(":server 350 alice bob * : something here ");
|
|
CHECK_SRV("--", "[bob] something here ",
|
|
"irc_350,irc_numeric,nick_server,log3");
|
|
|
|
/* non-standard parameters (using default whois callback) */
|
|
RECV(":server 350 alice bob");
|
|
CHECK_SRV("--", "bob", "irc_350,irc_numeric,nick_server,log3");
|
|
|
|
/* standard parameters */
|
|
RECV(":server 350 alice bob * * : \002is connected via the WebIRC gateway ");
|
|
CHECK_SRV("--", "[bob] is connected via the WebIRC gateway ",
|
|
"irc_350,irc_numeric,nick_server,log3");
|
|
RECV(":server 350 alice bob example.com * :is connected via the WebIRC gateway");
|
|
CHECK_SRV("--", "[bob] (example.com) is connected via the WebIRC gateway",
|
|
"irc_350,irc_numeric,nick_server,log3");
|
|
RECV(":server 350 alice bob * 1.2.3.4 :is connected via the WebIRC gateway");
|
|
CHECK_SRV("--", "[bob] (1.2.3.4) is connected via the WebIRC gateway",
|
|
"irc_350,irc_numeric,nick_server,log3");
|
|
RECV(":server 350 alice bob example.com 1.2.3.4 :is connected via the WebIRC gateway");
|
|
CHECK_SRV("--",
|
|
"[bob] (example.com, 1.2.3.4) is connected via the WebIRC gateway",
|
|
"irc_350,irc_numeric,nick_server,log3");
|
|
}
|
|
|
|
/*
|
|
* Test functions:
|
|
* irc_protocol_cb_351 (server version)
|
|
*/
|
|
|
|
TEST(IrcProtocolWithServer, 351)
|
|
{
|
|
SRV_INIT;
|
|
|
|
/* not enough parameters */
|
|
RECV(":server 351");
|
|
CHECK_ERROR_PARAMS("351", 0, 3);
|
|
RECV(":server 351 alice");
|
|
CHECK_ERROR_PARAMS("351", 1, 3);
|
|
RECV(":server 351 alice dancer-ircd-1.0");
|
|
CHECK_ERROR_PARAMS("351", 2, 3);
|
|
|
|
RECV(":server 351 alice dancer-ircd-1.0 server");
|
|
CHECK_SRV("--", "dancer-ircd-1.0 server",
|
|
"irc_351,irc_numeric,nick_server,log3");
|
|
RECV(":server 351 alice dancer-ircd-1.0 server : iMZ \002dncrTS/v4 ");
|
|
CHECK_SRV("--", "dancer-ircd-1.0 server ( iMZ dncrTS/v4 )",
|
|
"irc_351,irc_numeric,nick_server,log3");
|
|
}
|
|
|
|
/*
|
|
* Test functions:
|
|
* irc_protocol_cb_352 (who)
|
|
*/
|
|
|
|
TEST(IrcProtocolWithServer, 352)
|
|
{
|
|
struct t_irc_nick *ptr_nick, *ptr_nick2;
|
|
|
|
SRV_INIT_JOIN2;
|
|
|
|
/* not enough parameters */
|
|
RECV(":server 352");
|
|
CHECK_ERROR_PARAMS("352", 0, 3);
|
|
RECV(":server 352 alice");
|
|
CHECK_ERROR_PARAMS("352", 1, 3);
|
|
RECV(":server 352 alice #test");
|
|
CHECK_ERROR_PARAMS("352", 2, 3);
|
|
|
|
/* not enough parameters, but silently ignored */
|
|
RECV(":server 352 alice #test user");
|
|
CHECK_NO_MSG;
|
|
RECV(":server 352 alice #test user host");
|
|
CHECK_NO_MSG;
|
|
RECV(":server 352 alice #test user host server");
|
|
CHECK_NO_MSG;
|
|
|
|
ptr_nick = ptr_server->channels->nicks;
|
|
ptr_nick2 = ptr_server->channels->last_nick;
|
|
|
|
STRCMP_EQUAL("user_a@host_a", ptr_nick->host);
|
|
STRCMP_EQUAL("user_b@host_b", ptr_nick2->host);
|
|
LONGS_EQUAL(0, ptr_nick->away);
|
|
LONGS_EQUAL(0, ptr_nick2->away);
|
|
STRCMP_EQUAL(NULL, ptr_nick->realname);
|
|
STRCMP_EQUAL(NULL, ptr_nick2->realname);
|
|
|
|
RECV(":server 352 alice #test user_\00304red host_\00304red server bob");
|
|
CHECK_SRV("--", "[#test] bob (user_red@host_red) ()",
|
|
"irc_352,irc_numeric,nick_server,log3");
|
|
STRCMP_EQUAL("user_\00304red@host_\00304red", ptr_nick2->host);
|
|
LONGS_EQUAL(0, ptr_nick2->away);
|
|
STRCMP_EQUAL(NULL, ptr_nick2->realname);
|
|
|
|
RECV(":server 352 alice #test user3 host3 server bob *");
|
|
CHECK_SRV("--", "[#test] bob (user3@host3) * ()",
|
|
"irc_352,irc_numeric,nick_server,log3");
|
|
STRCMP_EQUAL("user3@host3", ptr_nick2->host);
|
|
LONGS_EQUAL(0, ptr_nick2->away);
|
|
STRCMP_EQUAL(NULL, ptr_nick2->realname);
|
|
|
|
RECV(":server 352 alice #test user4 host4 server bob * :0 \002real name 1 ");
|
|
CHECK_SRV("--", "[#test] bob (user4@host4) * 0 (real name 1 )",
|
|
"irc_352,irc_numeric,nick_server,log3");
|
|
STRCMP_EQUAL("user4@host4", ptr_nick2->host);
|
|
LONGS_EQUAL(0, ptr_nick2->away);
|
|
STRCMP_EQUAL("\002real name 1 ", ptr_nick2->realname);
|
|
|
|
RECV(":server 352 alice #test user5 host5 server bob H@ :0 real name 2");
|
|
CHECK_SRV("--", "[#test] bob (user5@host5) H@ 0 (real name 2)",
|
|
"irc_352,irc_numeric,nick_server,log3");
|
|
STRCMP_EQUAL("user5@host5", ptr_nick2->host);
|
|
LONGS_EQUAL(0, ptr_nick2->away);
|
|
STRCMP_EQUAL("real name 2", ptr_nick2->realname);
|
|
|
|
RECV(":server 352 alice #test user6 host6 server bob G@ :0 real name 3");
|
|
CHECK_SRV("--", "[#test] bob (user6@host6) G@ 0 (real name 3)",
|
|
"irc_352,irc_numeric,nick_server,log3");
|
|
STRCMP_EQUAL("user6@host6", ptr_nick2->host);
|
|
LONGS_EQUAL(1, ptr_nick2->away);
|
|
STRCMP_EQUAL("real name 3", ptr_nick2->realname);
|
|
|
|
RECV(":server 352 alice #test user7 host7 server bob * :0 real name 4");
|
|
CHECK_SRV("--", "[#test] bob (user7@host7) * 0 (real name 4)",
|
|
"irc_352,irc_numeric,nick_server,log3");
|
|
STRCMP_EQUAL("user7@host7", ptr_nick2->host);
|
|
LONGS_EQUAL(1, ptr_nick2->away);
|
|
STRCMP_EQUAL("real name 4", ptr_nick2->realname);
|
|
|
|
RECV(":server 352 alice #test user_\00304red host_\00304red server bob H@ :0 real name \00302blue");
|
|
CHECK_SRV("--", "[#test] bob (user_red@host_red) H@ 0 (real name blue)",
|
|
"irc_352,irc_numeric,nick_server,log3");
|
|
STRCMP_EQUAL("user_\00304red@host_\00304red", ptr_nick2->host);
|
|
LONGS_EQUAL(0, ptr_nick2->away);
|
|
STRCMP_EQUAL("real name \00302blue", ptr_nick2->realname);
|
|
|
|
RECV(":server 352 alice #test user8 host8 server bob H@ :0");
|
|
CHECK_SRV("--", "[#test] bob (user8@host8) H@ 0 ()",
|
|
"irc_352,irc_numeric,nick_server,log3");
|
|
STRCMP_EQUAL("user8@host8", ptr_nick2->host);
|
|
LONGS_EQUAL(0, ptr_nick2->away);
|
|
STRCMP_EQUAL("real name \00302blue", ptr_nick2->realname);
|
|
|
|
/* nothing should have changed in the first nick */
|
|
STRCMP_EQUAL("user_a@host_a", ptr_nick->host);
|
|
LONGS_EQUAL(0, ptr_nick->away);
|
|
STRCMP_EQUAL(NULL, ptr_nick->realname);
|
|
|
|
/* channel not found */
|
|
RECV(":server 352 alice #xyz user");
|
|
CHECK_NO_MSG;
|
|
RECV(":server 352 alice #xyz user host");
|
|
CHECK_NO_MSG;
|
|
RECV(":server 352 alice #xyz user host server");
|
|
CHECK_NO_MSG;
|
|
RECV(":server 352 alice #xyz user host server bob");
|
|
CHECK_SRV("--", "[#xyz] bob (user@host) ()",
|
|
"irc_352,irc_numeric,nick_server,log3");
|
|
RECV(":server 352 alice #xyz user host server bob *");
|
|
CHECK_SRV("--", "[#xyz] bob (user@host) * ()",
|
|
"irc_352,irc_numeric,nick_server,log3");
|
|
RECV(":server 352 alice #xyz user host server bob * :0 nick");
|
|
CHECK_SRV("--", "[#xyz] bob (user@host) * 0 (nick)",
|
|
"irc_352,irc_numeric,nick_server,log3");
|
|
RECV(":server 352 alice #xyz user host server bob H@ :0 nick");
|
|
CHECK_SRV("--", "[#xyz] bob (user@host) H@ 0 (nick)",
|
|
"irc_352,irc_numeric,nick_server,log3");
|
|
RECV(":server 352 alice #xyz user host server bob G@ :0 nick");
|
|
CHECK_SRV("--", "[#xyz] bob (user@host) G@ 0 (nick)",
|
|
"irc_352,irc_numeric,nick_server,log3");
|
|
}
|
|
|
|
/*
|
|
* Test functions:
|
|
* irc_protocol_cb_353 (list of users on a channel)
|
|
*/
|
|
|
|
TEST(IrcProtocolWithServer, 353)
|
|
{
|
|
struct t_irc_channel *ptr_channel;
|
|
|
|
SRV_INIT_JOIN2;
|
|
|
|
ptr_channel = ptr_server->channels;
|
|
|
|
STRCMP_EQUAL("alice", ptr_channel->nicks->name);
|
|
STRCMP_EQUAL("bob", ptr_channel->nicks->next_nick->name);
|
|
POINTERS_EQUAL(NULL, ptr_channel->nicks->next_nick->next_nick);
|
|
|
|
/* not enough parameters */
|
|
RECV(":server 353");
|
|
CHECK_ERROR_PARAMS("353", 0, 3);
|
|
RECV(":server 353 alice");
|
|
CHECK_ERROR_PARAMS("353", 1, 3);
|
|
RECV(":server 353 alice #test");
|
|
CHECK_ERROR_PARAMS("353", 2, 3);
|
|
RECV(":server 353 alice =");
|
|
CHECK_ERROR_PARAMS("353", 2, 3);
|
|
RECV(":server 353 alice = #test");
|
|
CHECK_ERROR_PARSE("353", ":server 353 alice = #test");
|
|
|
|
RECV(":server 353 alice #test :alice");
|
|
CHECK_NO_MSG;
|
|
STRCMP_EQUAL("alice", ptr_channel->nicks->name);
|
|
STRCMP_EQUAL("bob", ptr_channel->nicks->next_nick->name);
|
|
POINTERS_EQUAL(NULL, ptr_channel->nicks->next_nick->next_nick);
|
|
|
|
RECV(":server 353 alice #test :alice bob @carol +dan!user_\00304red@host_\00304red ");
|
|
CHECK_NO_MSG;
|
|
STRCMP_EQUAL("alice", ptr_channel->nicks->name);
|
|
STRCMP_EQUAL("bob", ptr_channel->nicks->next_nick->name);
|
|
STRCMP_EQUAL("carol", ptr_channel->nicks->next_nick->next_nick->name);
|
|
STRCMP_EQUAL("@", ptr_channel->nicks->next_nick->next_nick->prefix);
|
|
STRCMP_EQUAL("dan",
|
|
ptr_channel->nicks->next_nick->next_nick->next_nick->name);
|
|
STRCMP_EQUAL("+",
|
|
ptr_channel->nicks->next_nick->next_nick->next_nick->prefix);
|
|
STRCMP_EQUAL("user_\00304red@host_\00304red",
|
|
ptr_channel->nicks->next_nick->next_nick->next_nick->host);
|
|
POINTERS_EQUAL(NULL,
|
|
ptr_channel->nicks->next_nick->next_nick->next_nick->next_nick);
|
|
|
|
RECV(":server 353 alice = #test :alice");
|
|
CHECK_NO_MSG;
|
|
STRCMP_EQUAL("alice", ptr_channel->nicks->name);
|
|
STRCMP_EQUAL("bob", ptr_channel->nicks->next_nick->name);
|
|
STRCMP_EQUAL("carol", ptr_channel->nicks->next_nick->next_nick->name);
|
|
STRCMP_EQUAL("@", ptr_channel->nicks->next_nick->next_nick->prefix);
|
|
STRCMP_EQUAL("dan",
|
|
ptr_channel->nicks->next_nick->next_nick->next_nick->name);
|
|
STRCMP_EQUAL("+",
|
|
ptr_channel->nicks->next_nick->next_nick->next_nick->prefix);
|
|
STRCMP_EQUAL("user_\00304red@host_\00304red",
|
|
ptr_channel->nicks->next_nick->next_nick->next_nick->host);
|
|
POINTERS_EQUAL(NULL,
|
|
ptr_channel->nicks->next_nick->next_nick->next_nick->next_nick);
|
|
|
|
RECV(":server 353 alice = #test :alice bob @carol +dan!user_\00304red@host_\00304red");
|
|
CHECK_NO_MSG;
|
|
STRCMP_EQUAL("alice", ptr_channel->nicks->name);
|
|
STRCMP_EQUAL("bob", ptr_channel->nicks->next_nick->name);
|
|
STRCMP_EQUAL("carol", ptr_channel->nicks->next_nick->next_nick->name);
|
|
STRCMP_EQUAL("@", ptr_channel->nicks->next_nick->next_nick->prefix);
|
|
STRCMP_EQUAL("dan",
|
|
ptr_channel->nicks->next_nick->next_nick->next_nick->name);
|
|
STRCMP_EQUAL("+",
|
|
ptr_channel->nicks->next_nick->next_nick->next_nick->prefix);
|
|
STRCMP_EQUAL("user_\00304red@host_\00304red",
|
|
ptr_channel->nicks->next_nick->next_nick->next_nick->host);
|
|
POINTERS_EQUAL(NULL,
|
|
ptr_channel->nicks->next_nick->next_nick->next_nick->next_nick);
|
|
|
|
/* with option irc.look.color_nicks_in_names enabled */
|
|
config_file_option_set (irc_config_look_color_nicks_in_names, "on", 1);
|
|
RECV(":server 353 alice = #test :alice bob @carol +dan!user@host");
|
|
config_file_option_unset (irc_config_look_color_nicks_in_names);
|
|
|
|
/* channel not found */
|
|
RECV(":server 353 alice #xyz :alice");
|
|
CHECK_SRV("--", "Nicks #xyz: [alice]",
|
|
"irc_353,irc_numeric,nick_server,log3");
|
|
RECV(":server 353 alice #xyz :alice bob @carol +dan!user@host");
|
|
CHECK_SRV("--", "Nicks #xyz: [alice bob @carol +dan]",
|
|
"irc_353,irc_numeric,nick_server,log3");
|
|
|
|
/* channel not found */
|
|
RECV(":server 353 alice = #xyz :alice");
|
|
CHECK_SRV("--", "Nicks #xyz: [alice]",
|
|
"irc_353,irc_numeric,nick_server,log3");
|
|
RECV(":server 353 alice = #xyz :alice bob @carol +dan!user@host");
|
|
CHECK_SRV("--", "Nicks #xyz: [alice bob @carol +dan]",
|
|
"irc_353,irc_numeric,nick_server,log3");
|
|
}
|
|
|
|
/*
|
|
* Test functions:
|
|
* irc_protocol_cb_354 (WHOX output)
|
|
*/
|
|
|
|
TEST(IrcProtocolWithServer, 354)
|
|
{
|
|
struct t_irc_nick *ptr_nick, *ptr_nick2;
|
|
|
|
/* assume "account-notify" capability is enabled in server */
|
|
hashtable_set (ptr_server->cap_list, "account-notify", NULL);
|
|
|
|
SRV_INIT_JOIN2;
|
|
|
|
/* not enough parameters */
|
|
RECV(":server 354");
|
|
CHECK_ERROR_PARAMS("354", 0, 2);
|
|
RECV(":server 354 alice");
|
|
CHECK_ERROR_PARAMS("354", 1, 2);
|
|
|
|
ptr_nick = ptr_server->channels->nicks;
|
|
ptr_nick2 = ptr_server->channels->last_nick;
|
|
|
|
STRCMP_EQUAL("user_a@host_a", ptr_nick->host);
|
|
STRCMP_EQUAL("user_b@host_b", ptr_nick2->host);
|
|
LONGS_EQUAL(0, ptr_nick->away);
|
|
LONGS_EQUAL(0, ptr_nick2->away);
|
|
STRCMP_EQUAL(NULL, ptr_nick->account);
|
|
STRCMP_EQUAL(NULL, ptr_nick2->account);
|
|
STRCMP_EQUAL(NULL, ptr_nick->realname);
|
|
STRCMP_EQUAL(NULL, ptr_nick2->realname);
|
|
|
|
RECV(":server 354 alice #test");
|
|
CHECK_SRV("--", "[#test]", "irc_354,irc_numeric,nick_server,log3");
|
|
STRCMP_EQUAL("user_b@host_b", ptr_nick2->host);
|
|
LONGS_EQUAL(0, ptr_nick2->away);
|
|
STRCMP_EQUAL(NULL, ptr_nick2->account);
|
|
STRCMP_EQUAL(NULL, ptr_nick2->realname);
|
|
|
|
RECV(":server 354 alice #test user2");
|
|
CHECK_SRV("--", "[#test] user2", "irc_354,irc_numeric,nick_server,log3");
|
|
STRCMP_EQUAL("user_b@host_b", ptr_nick2->host);
|
|
LONGS_EQUAL(0, ptr_nick2->away);
|
|
STRCMP_EQUAL(NULL, ptr_nick2->account);
|
|
STRCMP_EQUAL(NULL, ptr_nick2->realname);
|
|
|
|
RECV(":server 354 alice #test user2 :trailing parameter");
|
|
CHECK_SRV("--", "[#test] user2 trailing parameter",
|
|
"irc_354,irc_numeric,nick_server,log3");
|
|
STRCMP_EQUAL("user_b@host_b", ptr_nick2->host);
|
|
LONGS_EQUAL(0, ptr_nick2->away);
|
|
STRCMP_EQUAL(NULL, ptr_nick2->account);
|
|
STRCMP_EQUAL(NULL, ptr_nick2->realname);
|
|
|
|
RECV(":server 354 alice #test user2 host2");
|
|
CHECK_SRV("--", "[#test] user2 host2", "irc_354,irc_numeric,nick_server,log3");
|
|
STRCMP_EQUAL("user_b@host_b", ptr_nick2->host);
|
|
LONGS_EQUAL(0, ptr_nick2->away);
|
|
STRCMP_EQUAL(NULL, ptr_nick2->account);
|
|
STRCMP_EQUAL(NULL, ptr_nick2->realname);
|
|
|
|
RECV(":server 354 alice #test user2 host2 server");
|
|
CHECK_SRV("--", "[#test] user2 host2 server",
|
|
"irc_354,irc_numeric,nick_server,log3");
|
|
STRCMP_EQUAL("user_b@host_b", ptr_nick2->host);
|
|
LONGS_EQUAL(0, ptr_nick2->away);
|
|
STRCMP_EQUAL(NULL, ptr_nick2->account);
|
|
STRCMP_EQUAL(NULL, ptr_nick2->realname);
|
|
|
|
RECV(":server 354 alice #test user2 host2 server bob");
|
|
CHECK_SRV("--", "[#test] user2 host2 server bob",
|
|
"irc_354,irc_numeric,nick_server,log3");
|
|
STRCMP_EQUAL("user_b@host_b", ptr_nick2->host);
|
|
LONGS_EQUAL(0, ptr_nick2->away);
|
|
STRCMP_EQUAL(NULL, ptr_nick2->account);
|
|
STRCMP_EQUAL(NULL, ptr_nick2->realname);
|
|
|
|
RECV(":server 354 alice #test user2 host2 server bob *");
|
|
CHECK_SRV("--", "[#test] user2 host2 server bob *",
|
|
"irc_354,irc_numeric,nick_server,log3");
|
|
STRCMP_EQUAL("user_b@host_b", ptr_nick2->host);
|
|
LONGS_EQUAL(0, ptr_nick2->away);
|
|
STRCMP_EQUAL(NULL, ptr_nick2->account);
|
|
STRCMP_EQUAL(NULL, ptr_nick2->realname);
|
|
|
|
RECV(":server 354 alice #test user2 host2 server bob H@ 0");
|
|
CHECK_SRV("--", "[#test] user2 host2 server bob H@ 0",
|
|
"irc_354,irc_numeric,nick_server,log3");
|
|
STRCMP_EQUAL("user_b@host_b", ptr_nick2->host);
|
|
LONGS_EQUAL(0, ptr_nick2->away);
|
|
STRCMP_EQUAL(NULL, ptr_nick2->account);
|
|
STRCMP_EQUAL(NULL, ptr_nick2->realname);
|
|
|
|
RECV(":server 354 alice #test user2 host2 server bob * 0 \002account2");
|
|
CHECK_SRV("--", "[#test] bob [account2] (user2@host2) * 0 ()",
|
|
"irc_354,irc_numeric,nick_server,log3");
|
|
STRCMP_EQUAL("user2@host2", ptr_nick2->host);
|
|
LONGS_EQUAL(0, ptr_nick2->away);
|
|
STRCMP_EQUAL("\002account2", ptr_nick2->account);
|
|
STRCMP_EQUAL(NULL, ptr_nick2->realname);
|
|
|
|
RECV(":server 354 alice #test user3 host3 server bob * 0 \002account3 "
|
|
": \002real name 2 ");
|
|
CHECK_SRV("--", "[#test] bob [account3] (user3@host3) * 0 ( real name 2 )",
|
|
"irc_354,irc_numeric,nick_server,log3");
|
|
STRCMP_EQUAL("user3@host3", ptr_nick2->host);
|
|
LONGS_EQUAL(0, ptr_nick2->away);
|
|
STRCMP_EQUAL("\002account3", ptr_nick2->account);
|
|
STRCMP_EQUAL(" \002real name 2 ", ptr_nick2->realname);
|
|
|
|
RECV(":server 354 alice #test user4 host4 server bob H@ 0 account4 "
|
|
":real name 3");
|
|
CHECK_SRV("--",
|
|
"[#test] bob [account4] (user4@host4) H@ 0 (real name 3)",
|
|
"irc_354,irc_numeric,nick_server,log3");
|
|
STRCMP_EQUAL("user4@host4", ptr_nick2->host);
|
|
LONGS_EQUAL(0, ptr_nick2->away);
|
|
STRCMP_EQUAL("account4", ptr_nick2->account);
|
|
STRCMP_EQUAL("real name 3", ptr_nick2->realname);
|
|
|
|
RECV(":server 354 alice #test user5 host5 server bob G@ 0 account5 "
|
|
":real name 4");
|
|
CHECK_SRV("--",
|
|
"[#test] bob [account5] (user5@host5) G@ 0 (real name 4)",
|
|
"irc_354,irc_numeric,nick_server,log3");
|
|
STRCMP_EQUAL("user5@host5", ptr_nick2->host);
|
|
LONGS_EQUAL(1, ptr_nick2->away);
|
|
STRCMP_EQUAL("account5", ptr_nick2->account);
|
|
STRCMP_EQUAL("real name 4", ptr_nick2->realname);
|
|
|
|
RECV(":server 354 alice #test user6 host6 server bob * 0 account6 "
|
|
":real name 5");
|
|
CHECK_SRV("--",
|
|
"[#test] bob [account6] (user6@host6) * 0 (real name 5)",
|
|
"irc_354,irc_numeric,nick_server,log3");
|
|
STRCMP_EQUAL("user6@host6", ptr_nick2->host);
|
|
LONGS_EQUAL(1, ptr_nick2->away);
|
|
STRCMP_EQUAL("account6", ptr_nick2->account);
|
|
STRCMP_EQUAL("real name 5", ptr_nick2->realname);
|
|
|
|
RECV(":server 354 alice #test user_\00304red host_\00304red server bob "
|
|
"H@ 0 account_\00304red :real name \00302blue");
|
|
CHECK_SRV("--",
|
|
"[#test] bob [account_red] (user_red@host_red) H@ 0 "
|
|
"(real name blue)",
|
|
"irc_354,irc_numeric,nick_server,log3");
|
|
STRCMP_EQUAL("user_\00304red@host_\00304red", ptr_nick2->host);
|
|
LONGS_EQUAL(0, ptr_nick2->away);
|
|
STRCMP_EQUAL("account_\00304red", ptr_nick2->account);
|
|
STRCMP_EQUAL("real name \00302blue", ptr_nick2->realname);
|
|
|
|
/* nothing should have changed in the first nick */
|
|
STRCMP_EQUAL("user_a@host_a", ptr_nick->host);
|
|
LONGS_EQUAL(0, ptr_nick->away);
|
|
STRCMP_EQUAL(NULL, ptr_nick->account);
|
|
STRCMP_EQUAL(NULL, ptr_nick->realname);
|
|
|
|
/* channel not found */
|
|
RECV(":server 354 alice #xyz");
|
|
CHECK_SRV("--", "[#xyz]", "irc_354,irc_numeric,nick_server,log3");
|
|
RECV(":server 354 alice #xyz user2");
|
|
CHECK_SRV("--", "[#xyz] user2", "irc_354,irc_numeric,nick_server,log3");
|
|
RECV(":server 354 alice #xyz user2 host2");
|
|
CHECK_SRV("--", "[#xyz] user2 host2", "irc_354,irc_numeric,nick_server,log3");
|
|
RECV(":server 354 alice #xyz user2 host2 server");
|
|
CHECK_SRV("--", "[#xyz] user2 host2 server",
|
|
"irc_354,irc_numeric,nick_server,log3");
|
|
RECV(":server 354 alice #xyz user2 host2 server bob");
|
|
CHECK_SRV("--", "[#xyz] user2 host2 server bob",
|
|
"irc_354,irc_numeric,nick_server,log3");
|
|
RECV(":server 354 alice #xyz user2 host2 server bob *");
|
|
CHECK_SRV("--", "[#xyz] user2 host2 server bob *",
|
|
"irc_354,irc_numeric,nick_server,log3");
|
|
RECV(":server 354 alice #xyz user2 host2 server bob G@ 0");
|
|
CHECK_SRV("--", "[#xyz] user2 host2 server bob G@ 0",
|
|
"irc_354,irc_numeric,nick_server,log3");
|
|
RECV(":server 354 alice #xyz user2 host2 server bob H@ 0 account");
|
|
CHECK_SRV("--", "[#xyz] bob [account] (user2@host2) H@ 0 ()",
|
|
"irc_354,irc_numeric,nick_server,log3");
|
|
RECV(":server 354 alice #xyz user2 host2 server bob G@ 0 account "
|
|
":real name");
|
|
CHECK_SRV("--", "[#xyz] bob [account] (user2@host2) G@ 0 (real name)",
|
|
"irc_354,irc_numeric,nick_server,log3");
|
|
|
|
hashtable_remove (ptr_server->cap_list, "account-notify");
|
|
}
|
|
|
|
/*
|
|
* Test functions:
|
|
* irc_protocol_get_string_channel_nicks
|
|
* irc_protocol_get_string_channel_nicks_count
|
|
* irc_protocol_cb_366 (end of /names list)
|
|
*/
|
|
|
|
TEST(IrcProtocolWithServer, 366)
|
|
{
|
|
SRV_INIT_JOIN;
|
|
|
|
/* not enough parameters */
|
|
RECV(":server 366");
|
|
CHECK_ERROR_PARAMS("366", 0, 3);
|
|
RECV(":server 366 alice");
|
|
CHECK_ERROR_PARAMS("366", 1, 3);
|
|
RECV(":server 366 alice #test");
|
|
CHECK_ERROR_PARAMS("366", 2, 3);
|
|
|
|
RECV(":server 366 alice #test end");
|
|
CHECK_CHAN("--", "Channel #test: 1 nick (0 ops, 0 voiced, 1 regular)",
|
|
"irc_366,irc_numeric,nick_server,log3");
|
|
RECV(":server 366 alice #test : \002End of /NAMES list ");
|
|
CHECK_CHAN("--", "Channel #test: 1 nick (0 ops, 0 voiced, 1 regular)",
|
|
"irc_366,irc_numeric,nick_server,log3");
|
|
|
|
RECV(":server 353 alice = #test :bob");
|
|
RECV(":server 366 alice #test :End of /NAMES list");
|
|
CHECK_CHAN("--", "Channel #test: 2 nicks (0 ops, 0 voiced, 2 regular)",
|
|
"irc_366,irc_numeric,nick_server,log3");
|
|
|
|
RECV(":server 353 alice = #test :@carol");
|
|
RECV(":server 366 alice #test :End of /NAMES list");
|
|
CHECK_CHAN("--", "Channel #test: 3 nicks (1 op, 0 voiced, 2 regular)",
|
|
"irc_366,irc_numeric,nick_server,log3");
|
|
|
|
RECV(":server 353 alice = #test :+dan!user@host");
|
|
RECV(":server 366 alice #test :End of /NAMES list");
|
|
CHECK_CHAN("--", "Channel #test: 4 nicks (1 op, 1 voiced, 2 regular)",
|
|
"irc_366,irc_numeric,nick_server,log3");
|
|
|
|
RECV(":server 353 alice = #test :@evans");
|
|
RECV(":server 366 alice #test :End of /NAMES list");
|
|
CHECK_CHAN("--", "Channel #test: 5 nicks (2 ops, 1 voiced, 2 regular)",
|
|
"irc_366,irc_numeric,nick_server,log3");
|
|
|
|
RECV(":server 353 alice = #test :+fred");
|
|
RECV(":server 366 alice #test :End of /NAMES list");
|
|
CHECK_CHAN("--", "Channel #test: 6 nicks (2 ops, 2 voiced, 2 regular)",
|
|
"irc_366,irc_numeric,nick_server,log3");
|
|
|
|
RECV(":server 353 alice = #test :greg");
|
|
RECV(":server 366 alice #test :End of /NAMES list");
|
|
CHECK_CHAN("--", "Channel #test: 7 nicks (2 ops, 2 voiced, 3 regular)",
|
|
"irc_366,irc_numeric,nick_server,log3");
|
|
|
|
RECV(":server 005 alice " IRC_MSG_005 " :are supported");
|
|
|
|
RECV(":server 353 alice = #test :%harry");
|
|
RECV(":server 366 alice #test :End of /NAMES list");
|
|
CHECK_CHAN("--",
|
|
"Channel #test: 8 nicks (2 ops, 1 halfop, 2 voiced, 3 regular)",
|
|
"irc_366,irc_numeric,nick_server,log3");
|
|
|
|
RECV(":server 353 alice = #test :%ian");
|
|
RECV(":server 366 alice #test :End of /NAMES list");
|
|
CHECK_CHAN("--",
|
|
"Channel #test: 9 nicks (2 ops, 2 halfops, 2 voiced, 3 regular)",
|
|
"irc_366,irc_numeric,nick_server,log3");
|
|
|
|
RECV(":server 005 alice PREFIX=(qaohv)~&@%+ :are supported");
|
|
|
|
RECV(":server 353 alice = #test :~jessica");
|
|
RECV(":server 366 alice #test :End of /NAMES list");
|
|
CHECK_CHAN(
|
|
"--",
|
|
"Channel #test: 10 nicks (1 owner, 0 admins, 2 ops, 2 halfops, 2 voiced, 3 regular)",
|
|
"irc_366,irc_numeric,nick_server,log3");
|
|
|
|
RECV(":server 353 alice = #test :&karl");
|
|
RECV(":server 366 alice #test :End of /NAMES list");
|
|
CHECK_CHAN(
|
|
"--",
|
|
"Channel #test: 11 nicks (1 owner, 1 admin, 2 ops, 2 halfops, 2 voiced, 3 regular)",
|
|
"irc_366,irc_numeric,nick_server,log3");
|
|
|
|
RECV(":server 353 alice = #test :&mike");
|
|
RECV(":server 366 alice #test :End of /NAMES list");
|
|
CHECK_CHAN(
|
|
"--",
|
|
"Channel #test: 12 nicks (1 owner, 2 admins, 2 ops, 2 halfops, 2 voiced, 3 regular)",
|
|
"irc_366,irc_numeric,nick_server,log3");
|
|
|
|
RECV(":server 353 alice = #test :~olivia");
|
|
RECV(":server 366 alice #test :End of /NAMES list");
|
|
CHECK_CHAN(
|
|
"--",
|
|
"Channel #test: 13 nicks (2 owners, 2 admins, 2 ops, 2 halfops, 2 voiced, 3 regular)",
|
|
"irc_366,irc_numeric,nick_server,log3");
|
|
|
|
RECV(":server 005 alice PREFIX=(zqaohv)?~&@%+ :are supported");
|
|
|
|
RECV(":server 353 alice = #test :?peggy");
|
|
RECV(":server 366 alice #test :End of /NAMES list");
|
|
CHECK_CHAN(
|
|
"--",
|
|
"Channel #test: 14 nicks (1 +z, 2 owners, 2 admins, 2 ops, 2 halfops, 2 voiced, 3 regular)",
|
|
"irc_366,irc_numeric,nick_server,log3");
|
|
|
|
RECV(":server 353 alice = #test :?robert");
|
|
RECV(":server 366 alice #test :End of /NAMES list");
|
|
CHECK_CHAN(
|
|
"--",
|
|
"Channel #test: 15 nicks (2 +z, 2 owners, 2 admins, 2 ops, 2 halfops, 2 voiced, 3 regular)",
|
|
"irc_366,irc_numeric,nick_server,log3");
|
|
|
|
/* channel not found */
|
|
RECV(":server 366 alice #xyz end");
|
|
CHECK_SRV("--", "#xyz: end", "irc_366,irc_numeric,nick_server,log3");
|
|
RECV(":server 366 alice #xyz : End of /NAMES list ");
|
|
CHECK_SRV("--", "#xyz: End of /NAMES list ",
|
|
"irc_366,irc_numeric,nick_server,log3");
|
|
}
|
|
|
|
/*
|
|
* Test functions:
|
|
* irc_protocol_cb_367 (banlist)
|
|
*/
|
|
|
|
TEST(IrcProtocolWithServer, 367)
|
|
{
|
|
SRV_INIT_JOIN;
|
|
|
|
/* not enough parameters */
|
|
RECV(":server 367");
|
|
CHECK_ERROR_PARAMS("367", 0, 3);
|
|
RECV(":server 367 alice");
|
|
CHECK_ERROR_PARAMS("367", 1, 3);
|
|
RECV(":server 367 alice #test");
|
|
CHECK_ERROR_PARAMS("367", 2, 3);
|
|
|
|
RECV(":server 367 alice #test nick1!user1@host1_\00304red");
|
|
CHECK_CHAN("--", "[#test] [1] nick1!user1@host1_red banned",
|
|
"irc_367,irc_numeric,nick_server,log3");
|
|
RECV(":server 367 alice #test nick1!user1_\00304red@host1_\00304red "
|
|
"nick2!user2_\00304red@host2_\00304red ");
|
|
CHECK_CHAN("--",
|
|
"[#test] [2] nick1!user1_red@host1_red banned by nick2 (user2_red@host2_red)",
|
|
"irc_367,irc_numeric,nick_server,log3");
|
|
RECV(":server 367 alice #test nick1!user1_\00304red@host1_\00304red "
|
|
"nick2!user2_\00304red@host2_\00304red 1205585109 ");
|
|
CHECK_CHAN("--",
|
|
"[#test] [3] nick1!user1_red@host1_red banned "
|
|
"by nick2 (user2_red@host2_red) on Sat, 15 Mar 2008 12:45:09",
|
|
"irc_367,irc_numeric,nick_server,log3");
|
|
|
|
/* channel not found */
|
|
RECV(":server 367 alice #xyz nick1!user1_\00304red@host1_\00304red");
|
|
CHECK_SRV("--", "[#xyz] nick1!user1_red@host1_red banned",
|
|
"irc_367,irc_numeric,nick_server,log3");
|
|
RECV(":server 367 alice #xyz nick1!user1_\00304red@host1_\00304red "
|
|
"nick2!user2_\00304red@host2_\00304red");
|
|
CHECK_SRV("--", "[#xyz] nick1!user1_red@host1_red banned by nick2 (user2_red@host2_red)",
|
|
"irc_367,irc_numeric,nick_server,log3");
|
|
RECV(":server 367 alice #xyz nick1!user1_\00304red@host1_\00304red "
|
|
"nick2!user2_\00304red@host2_\00304red 1205585109");
|
|
CHECK_SRV("--", "[#xyz] nick1!user1_red@host1_red banned by nick2 (user2_red@host2_red) "
|
|
"on Sat, 15 Mar 2008 12:45:09",
|
|
"irc_367,irc_numeric,nick_server,log3");
|
|
}
|
|
|
|
/*
|
|
* Test functions:
|
|
* irc_protocol_cb_368 (end of banlist)
|
|
*/
|
|
|
|
TEST(IrcProtocolWithServer, 368)
|
|
{
|
|
SRV_INIT_JOIN;
|
|
|
|
/* not enough parameters */
|
|
RECV(":server 368");
|
|
CHECK_ERROR_PARAMS("368", 0, 2);
|
|
RECV(":server 368 alice");
|
|
CHECK_ERROR_PARAMS("368", 1, 2);
|
|
|
|
RECV(":server 368 alice #test");
|
|
CHECK_CHAN("--", "[#test]", "irc_368,irc_numeric,nick_server,log3");
|
|
RECV(":server 368 alice #test end");
|
|
CHECK_CHAN("--", "[#test] end", "irc_368,irc_numeric,nick_server,log3");
|
|
RECV(":server 368 alice #test : \002End of Channel Ban List ");
|
|
CHECK_CHAN("--", "[#test] End of Channel Ban List ",
|
|
"irc_368,irc_numeric,nick_server,log3");
|
|
|
|
/* channel not found */
|
|
RECV(":server 368 alice #xyz");
|
|
CHECK_SRV("--", "[#xyz]", "irc_368,irc_numeric,nick_server,log3");
|
|
RECV(":server 368 alice #xyz end");
|
|
CHECK_SRV("--", "[#xyz] end", "irc_368,irc_numeric,nick_server,log3");
|
|
RECV(":server 368 alice #xyz :\002End of Channel Ban List");
|
|
CHECK_SRV("--", "[#xyz] End of Channel Ban List",
|
|
"irc_368,irc_numeric,nick_server,log3");
|
|
}
|
|
|
|
/*
|
|
* Test functions:
|
|
* irc_protocol_cb_401 (no such nick/channel)
|
|
*/
|
|
|
|
TEST(IrcProtocolWithServer, 401)
|
|
{
|
|
SRV_INIT_JOIN;
|
|
|
|
/* not enough parameters */
|
|
RECV(":server 401");
|
|
CHECK_ERROR_PARAMS("401", 0, 2);
|
|
RECV(":server 401 alice");
|
|
CHECK_ERROR_PARAMS("401", 1, 2);
|
|
|
|
RECV(":server 401 alice bob");
|
|
CHECK_SRV("--", "bob", "irc_401,irc_numeric,nick_server,log3");
|
|
RECV(":server 401 alice bob : \002No such nick/channel ");
|
|
CHECK_SRV("--", "bob: No such nick/channel ",
|
|
"irc_401,irc_numeric,nick_server,log3");
|
|
|
|
RECV(":server 401 alice #unknown :\002No such nick/channel");
|
|
CHECK_SRV("--", "#unknown: No such nick/channel",
|
|
"irc_401,irc_numeric,nick_server,log3");
|
|
}
|
|
|
|
/*
|
|
* Test functions:
|
|
* irc_protocol_cb_402 (no such server)
|
|
*/
|
|
|
|
TEST(IrcProtocolWithServer, 402)
|
|
{
|
|
SRV_INIT_JOIN;
|
|
|
|
/* not enough parameters */
|
|
RECV(":server 402");
|
|
CHECK_ERROR_PARAMS("402", 0, 2);
|
|
RECV(":server 402 alice");
|
|
CHECK_ERROR_PARAMS("402", 1, 2);
|
|
|
|
RECV(":server 402 alice server");
|
|
CHECK_SRV("--", "server", "irc_402,irc_numeric,nick_server,log3");
|
|
RECV(":server 402 alice server : \002No such server ");
|
|
CHECK_SRV("--", "server: No such server ",
|
|
"irc_402,irc_numeric,nick_server,log3");
|
|
}
|
|
|
|
/*
|
|
* Test functions:
|
|
* irc_protocol_cb_403 (no such channel)
|
|
*/
|
|
|
|
TEST(IrcProtocolWithServer, 403)
|
|
{
|
|
SRV_INIT_JOIN;
|
|
|
|
/* not enough parameters */
|
|
RECV(":server 403");
|
|
CHECK_ERROR_PARAMS("403", 0, 2);
|
|
RECV(":server 403 alice");
|
|
CHECK_ERROR_PARAMS("403", 1, 2);
|
|
|
|
RECV(":server 403 alice #test2");
|
|
CHECK_SRV("--", "#test2", "irc_403,irc_numeric,nick_server,log3");
|
|
RECV(":server 403 alice #test2 : \002No such channel ");
|
|
CHECK_SRV("--", "#test2: No such channel ",
|
|
"irc_403,irc_numeric,nick_server,log3");
|
|
}
|
|
|
|
/*
|
|
* Test functions:
|
|
* irc_protocol_cb_404 (cannot send to channel)
|
|
*/
|
|
|
|
TEST(IrcProtocolWithServer, 404)
|
|
{
|
|
SRV_INIT_JOIN;
|
|
|
|
/* not enough parameters */
|
|
RECV(":server 404");
|
|
CHECK_ERROR_PARAMS("404", 0, 2);
|
|
RECV(":server 404 alice");
|
|
CHECK_ERROR_PARAMS("404", 1, 2);
|
|
|
|
RECV(":server 404 alice #test");
|
|
CHECK_SRV("--", "#test", "irc_404,irc_numeric,nick_server,log3");
|
|
RECV(":server 404 alice #test : \002Cannot send to channel ");
|
|
CHECK_CHAN("--", "#test: Cannot send to channel ",
|
|
"irc_404,irc_numeric,nick_server,log3");
|
|
RECV(":server 404 alice #test2 :\002Cannot send to channel");
|
|
CHECK_SRV("--", "#test2: Cannot send to channel",
|
|
"irc_404,irc_numeric,nick_server,log3");
|
|
}
|
|
|
|
/*
|
|
* Test functions:
|
|
* irc_protocol_cb_405 (too many channels)
|
|
*/
|
|
|
|
TEST(IrcProtocolWithServer, 405)
|
|
{
|
|
SRV_INIT_JOIN;
|
|
|
|
/* not enough parameters */
|
|
RECV(":server 405");
|
|
CHECK_ERROR_PARAMS("405", 0, 2);
|
|
RECV(":server 405 alice");
|
|
CHECK_ERROR_PARAMS("405", 1, 2);
|
|
|
|
RECV(":server 405 alice #test2");
|
|
CHECK_SRV("--", "#test2", "irc_405,irc_numeric,nick_server,log3");
|
|
RECV(":server 405 alice #test2 : \002You have joined too many channels ");
|
|
CHECK_SRV("--", "#test2: You have joined too many channels ",
|
|
"irc_405,irc_numeric,nick_server,log3");
|
|
}
|
|
|
|
/*
|
|
* Test functions:
|
|
* irc_protocol_cb_406 (was no such nick)
|
|
*/
|
|
|
|
TEST(IrcProtocolWithServer, 406)
|
|
{
|
|
SRV_INIT_JOIN;
|
|
|
|
/* not enough parameters */
|
|
RECV(":server 406");
|
|
CHECK_ERROR_PARAMS("406", 0, 2);
|
|
RECV(":server 406 alice");
|
|
CHECK_ERROR_PARAMS("406", 1, 2);
|
|
|
|
RECV(":server 406 alice bob");
|
|
CHECK_SRV("--", "bob", "irc_406,irc_numeric,nick_server,log3");
|
|
RECV(":server 406 alice bob : \002There was no such nick ");
|
|
CHECK_SRV("--", "bob: There was no such nick ",
|
|
"irc_406,irc_numeric,nick_server,log3");
|
|
}
|
|
|
|
/*
|
|
* Test functions:
|
|
* irc_protocol_cb_407 (too many targets)
|
|
*/
|
|
|
|
TEST(IrcProtocolWithServer, 407)
|
|
{
|
|
SRV_INIT_JOIN;
|
|
|
|
/* not enough parameters */
|
|
RECV(":server 407");
|
|
CHECK_ERROR_PARAMS("407", 0, 2);
|
|
RECV(":server 407 alice");
|
|
CHECK_ERROR_PARAMS("407", 1, 2);
|
|
|
|
RECV(":server 407 alice bob@host");
|
|
CHECK_SRV("--", "bob@host", "irc_407,irc_numeric,nick_server,log3");
|
|
RECV(":server 407 alice bob@host : \002Duplicate recipients. No message delivered ");
|
|
CHECK_SRV("--", "bob@host: Duplicate recipients. No message delivered ",
|
|
"irc_407,irc_numeric,nick_server,log3");
|
|
}
|
|
|
|
/*
|
|
* Test functions:
|
|
* irc_protocol_cb_409 (no origin)
|
|
*/
|
|
|
|
TEST(IrcProtocolWithServer, 409)
|
|
{
|
|
SRV_INIT_JOIN;
|
|
|
|
/* not enough parameters */
|
|
RECV(":server 409");
|
|
CHECK_ERROR_PARAMS("409", 0, 2);
|
|
RECV(":server 409 alice");
|
|
CHECK_ERROR_PARAMS("409", 1, 2);
|
|
|
|
RECV(":server 409 alice : \002No origin specified ");
|
|
CHECK_SRV("--", " No origin specified ",
|
|
"irc_409,irc_numeric,nick_server,log3");
|
|
}
|
|
|
|
/*
|
|
* Test functions:
|
|
* irc_protocol_cb_411 (no recipient)
|
|
*/
|
|
|
|
TEST(IrcProtocolWithServer, 411)
|
|
{
|
|
SRV_INIT_JOIN;
|
|
|
|
/* not enough parameters */
|
|
RECV(":server 411");
|
|
CHECK_ERROR_PARAMS("411", 0, 2);
|
|
RECV(":server 411 alice");
|
|
CHECK_ERROR_PARAMS("411", 1, 2);
|
|
|
|
RECV(":server 411 alice : \002No recipient given (PRIVMSG) ");
|
|
CHECK_SRV("--", " No recipient given (PRIVMSG) ",
|
|
"irc_411,irc_numeric,nick_server,log3");
|
|
}
|
|
|
|
/*
|
|
* Test functions:
|
|
* irc_protocol_cb_412 (no text to send)
|
|
*/
|
|
|
|
TEST(IrcProtocolWithServer, 412)
|
|
{
|
|
SRV_INIT_JOIN;
|
|
|
|
/* not enough parameters */
|
|
RECV(":server 412");
|
|
CHECK_ERROR_PARAMS("412", 0, 2);
|
|
RECV(":server 412 alice");
|
|
CHECK_ERROR_PARAMS("412", 1, 2);
|
|
|
|
RECV(":server 412 alice : \002No text to send ");
|
|
CHECK_SRV("--", " No text to send ",
|
|
"irc_412,irc_numeric,nick_server,log3");
|
|
}
|
|
|
|
/*
|
|
* Test functions:
|
|
* irc_protocol_cb_413 (no toplevel)
|
|
*/
|
|
|
|
TEST(IrcProtocolWithServer, 413)
|
|
{
|
|
SRV_INIT_JOIN;
|
|
|
|
/* not enough parameters */
|
|
RECV(":server 413");
|
|
CHECK_ERROR_PARAMS("413", 0, 2);
|
|
RECV(":server 413 alice");
|
|
CHECK_ERROR_PARAMS("413", 1, 2);
|
|
|
|
RECV(":server 413 alice mask");
|
|
CHECK_SRV("--", "mask", "irc_413,irc_numeric,nick_server,log3");
|
|
RECV(":server 413 alice mask : \002No toplevel domain specified ");
|
|
CHECK_SRV("--", "mask: No toplevel domain specified ",
|
|
"irc_413,irc_numeric,nick_server,log3");
|
|
}
|
|
|
|
/*
|
|
* Test functions:
|
|
* irc_protocol_cb_414 (wildcard in toplevel domain)
|
|
*/
|
|
|
|
TEST(IrcProtocolWithServer, 414)
|
|
{
|
|
SRV_INIT_JOIN;
|
|
|
|
/* not enough parameters */
|
|
RECV(":server 414");
|
|
CHECK_ERROR_PARAMS("414", 0, 2);
|
|
RECV(":server 414 alice");
|
|
CHECK_ERROR_PARAMS("414", 1, 2);
|
|
|
|
RECV(":server 414 alice mask");
|
|
CHECK_SRV("--", "mask", "irc_414,irc_numeric,nick_server,log3");
|
|
RECV(":server 414 alice mask : \002Wildcard in toplevel domain ");
|
|
CHECK_SRV("--", "mask: Wildcard in toplevel domain ",
|
|
"irc_414,irc_numeric,nick_server,log3");
|
|
}
|
|
|
|
/*
|
|
* Test functions:
|
|
* irc_protocol_cb_415 (cannot send to channel)
|
|
*/
|
|
|
|
TEST(IrcProtocolWithServer, 415)
|
|
{
|
|
SRV_INIT_JOIN;
|
|
|
|
/* not enough parameters */
|
|
RECV(":server 415");
|
|
CHECK_ERROR_PARAMS("415", 0, 2);
|
|
RECV(":server 415 alice");
|
|
CHECK_ERROR_PARAMS("415", 1, 2);
|
|
|
|
RECV(":server 415 alice #test");
|
|
CHECK_SRV("--", "#test", "irc_415,irc_numeric,nick_server,log3");
|
|
RECV(":server 415 alice #test : \002Cannot send message to channel (+R) ");
|
|
CHECK_CHAN("--", "#test: Cannot send message to channel (+R) ",
|
|
"irc_415,irc_numeric,nick_server,log3");
|
|
RECV(":server 415 alice #test2 :\002Cannot send message to channel (+R)");
|
|
CHECK_SRV("--", "#test2: Cannot send message to channel (+R)",
|
|
"irc_415,irc_numeric,nick_server,log3");
|
|
}
|
|
|
|
/*
|
|
* Test functions:
|
|
* irc_protocol_cb_421 (unknown command)
|
|
*/
|
|
|
|
TEST(IrcProtocolWithServer, 421)
|
|
{
|
|
SRV_INIT_JOIN;
|
|
|
|
/* not enough parameters */
|
|
RECV(":server 421");
|
|
CHECK_ERROR_PARAMS("421", 0, 2);
|
|
RECV(":server 421 alice");
|
|
CHECK_ERROR_PARAMS("421", 1, 2);
|
|
|
|
RECV(":server 421 alice UNKNOWN");
|
|
CHECK_SRV("--", "UNKNOWN", "irc_421,irc_numeric,nick_server,log3");
|
|
RECV(":server 421 alice UNKNOWN : \002Unknown command ");
|
|
CHECK_SRV("--", "UNKNOWN: Unknown command ",
|
|
"irc_421,irc_numeric,nick_server,log3");
|
|
}
|
|
|
|
/*
|
|
* Test functions:
|
|
* irc_protocol_cb_422 (MOTD is missing)
|
|
*/
|
|
|
|
TEST(IrcProtocolWithServer, 422)
|
|
{
|
|
SRV_INIT_JOIN;
|
|
|
|
/* not enough parameters */
|
|
RECV(":server 422");
|
|
CHECK_ERROR_PARAMS("422", 0, 2);
|
|
RECV(":server 422 alice");
|
|
CHECK_ERROR_PARAMS("422", 1, 2);
|
|
|
|
RECV(":server 422 alice : \002MOTD file is missing ");
|
|
CHECK_SRV("--", " MOTD file is missing ",
|
|
"irc_422,irc_numeric,nick_server,log3");
|
|
}
|
|
|
|
/*
|
|
* Test functions:
|
|
* irc_protocol_cb_423 (no administrative info)
|
|
*/
|
|
|
|
TEST(IrcProtocolWithServer, 423)
|
|
{
|
|
SRV_INIT_JOIN;
|
|
|
|
/* not enough parameters */
|
|
RECV(":server 423");
|
|
CHECK_ERROR_PARAMS("423", 0, 2);
|
|
RECV(":server 423 alice");
|
|
CHECK_ERROR_PARAMS("423", 1, 2);
|
|
|
|
RECV(":server 423 alice server");
|
|
CHECK_SRV("--", "server", "irc_423,irc_numeric,nick_server,log3");
|
|
RECV(":server 423 alice server : \002No administrative info available ");
|
|
CHECK_SRV("--", "server: No administrative info available ",
|
|
"irc_423,irc_numeric,nick_server,log3");
|
|
}
|
|
|
|
/*
|
|
* Test functions:
|
|
* irc_protocol_cb_424 (file error)
|
|
*/
|
|
|
|
TEST(IrcProtocolWithServer, 424)
|
|
{
|
|
SRV_INIT_JOIN;
|
|
|
|
/* not enough parameters */
|
|
RECV(":server 424");
|
|
CHECK_ERROR_PARAMS("424", 0, 2);
|
|
RECV(":server 424 alice");
|
|
CHECK_ERROR_PARAMS("424", 1, 2);
|
|
|
|
RECV(":server 424 alice : \002File error doing read on /path/to/file ");
|
|
CHECK_SRV("--", " File error doing read on /path/to/file ",
|
|
"irc_424,irc_numeric,nick_server,log3");
|
|
}
|
|
|
|
/*
|
|
* Test functions:
|
|
* irc_protocol_cb_431 (no nickname given)
|
|
*/
|
|
|
|
TEST(IrcProtocolWithServer, 431)
|
|
{
|
|
SRV_INIT_JOIN;
|
|
|
|
/* not enough parameters */
|
|
RECV(":server 431");
|
|
CHECK_ERROR_PARAMS("431", 0, 2);
|
|
RECV(":server 431 alice");
|
|
CHECK_ERROR_PARAMS("431", 1, 2);
|
|
|
|
RECV(":server 431 alice : \002No nickname given ");
|
|
CHECK_SRV("--", " No nickname given ",
|
|
"irc_431,irc_numeric,nick_server,log3");
|
|
}
|
|
|
|
/*
|
|
* Test functions:
|
|
* irc_protocol_cb_432 (erroneous nickname, not connected)
|
|
*/
|
|
|
|
TEST(IrcProtocolWithServer, 432_not_connected)
|
|
{
|
|
RECV(":server 432 * alice error");
|
|
CHECK_SRV("--", "* alice error", "");
|
|
CHECK_SRV("=!=",
|
|
"irc: nickname \"nick1\" is invalid, trying nickname \"nick2\"",
|
|
"");
|
|
|
|
RECV(":server 432 * :alice error");
|
|
CHECK_SRV("--", "* alice error", "");
|
|
CHECK_SRV("=!=",
|
|
"irc: nickname \"nick2\" is invalid, trying nickname \"nick3\"",
|
|
"");
|
|
|
|
RECV(":server 432 * alice : \002Erroneous Nickname ");
|
|
CHECK_SRV("--", "* alice Erroneous Nickname ", "");
|
|
CHECK_SRV("=!=",
|
|
"irc: nickname \"nick3\" is invalid, trying nickname \"nick1_\"",
|
|
"");
|
|
|
|
RECV(":server 432 * alice1 :\002Erroneous Nickname");
|
|
CHECK_SRV("--", "* alice1 Erroneous Nickname", "");
|
|
CHECK_SRV("=!=",
|
|
"irc: nickname \"nick1_\" is invalid, "
|
|
"trying nickname \"nick1__\"",
|
|
"");
|
|
}
|
|
|
|
/*
|
|
* Test functions:
|
|
* irc_protocol_cb_432 (erroneous nickname, connected)
|
|
*/
|
|
|
|
TEST(IrcProtocolWithServer, 432_connected)
|
|
{
|
|
SRV_INIT_JOIN;
|
|
|
|
/* not enough parameters */
|
|
RECV(":server 432");
|
|
CHECK_ERROR_PARAMS("432", 0, 2);
|
|
RECV(":server 432 alice");
|
|
CHECK_ERROR_PARAMS("432", 1, 2);
|
|
|
|
RECV(":server 432 alice test%+");
|
|
CHECK_SRV("--", "test%+", "irc_432,irc_numeric,nick_server,log3");
|
|
RECV(":server 432 alice test%+ error");
|
|
CHECK_SRV("--", "test%+: error", "irc_432,irc_numeric,nick_server,log3");
|
|
RECV(":server 432 alice test%+ : \002Erroneous Nickname ");
|
|
CHECK_SRV("--", "test%+: Erroneous Nickname ",
|
|
"irc_432,irc_numeric,nick_server,log3");
|
|
|
|
/*
|
|
* special case: erroneous nick is a channel: check that the message is
|
|
* still displayed on the server buffer
|
|
*/
|
|
RECV(":server 432 alice #test : \002Erroneous Nickname ");
|
|
CHECK_SRV("--", "#test: Erroneous Nickname ",
|
|
"irc_432,irc_numeric,nick_server,log3");
|
|
}
|
|
|
|
/*
|
|
* Test functions:
|
|
* irc_protocol_cb_433 (nickname already in use, not connected)
|
|
*/
|
|
|
|
TEST(IrcProtocolWithServer, 433_not_connected)
|
|
{
|
|
RECV(":server 433 * alice error");
|
|
CHECK_SRV("--",
|
|
"irc: nickname \"nick1\" is already in use, "
|
|
"trying nickname \"nick2\"",
|
|
"");
|
|
|
|
RECV(":server 433 * alice : Nickname is already in use. ");
|
|
CHECK_SRV("--",
|
|
"irc: nickname \"nick2\" is already in use, "
|
|
"trying nickname \"nick3\"",
|
|
"");
|
|
|
|
RECV(":server 433 * alice1 :Nickname is already in use.");
|
|
CHECK_SRV("--",
|
|
"irc: nickname \"nick3\" is already in use, "
|
|
"trying nickname \"nick1_\"",
|
|
"");
|
|
}
|
|
|
|
/*
|
|
* Test functions:
|
|
* irc_protocol_cb_433 (nickname already in use, connected)
|
|
*/
|
|
|
|
TEST(IrcProtocolWithServer, 433_connected)
|
|
{
|
|
SRV_INIT_JOIN;
|
|
|
|
/* not enough parameters */
|
|
RECV(":server 433");
|
|
CHECK_ERROR_PARAMS("433", 0, 2);
|
|
RECV(":server 433 alice");
|
|
CHECK_ERROR_PARAMS("433", 1, 2);
|
|
|
|
RECV(":server 433 alice test");
|
|
CHECK_SRV("--", "test", "irc_433,irc_numeric,nick_server,log3");
|
|
RECV(":server 433 alice test error");
|
|
CHECK_SRV("--", "test: error", "irc_433,irc_numeric,nick_server,log3");
|
|
RECV(":server 433 alice test : \002Nickname is already in use. ");
|
|
CHECK_SRV("--", "test: Nickname is already in use. ",
|
|
"irc_433,irc_numeric,nick_server,log3");
|
|
|
|
/*
|
|
* special case: nickname already used looks like a channel (it should
|
|
* never happen in practice): check that the message is still displayed
|
|
* on the server buffer
|
|
*/
|
|
RECV(":server 433 alice #test : \002Nickname is already in use. ");
|
|
CHECK_SRV("--", "#test: Nickname is already in use. ",
|
|
"irc_433,irc_numeric,nick_server,log3");
|
|
}
|
|
|
|
/*
|
|
* Test functions:
|
|
* irc_protocol_cb_436 (nickname collision)
|
|
*/
|
|
|
|
TEST(IrcProtocolWithServer, 436)
|
|
{
|
|
SRV_INIT_JOIN;
|
|
|
|
/* not enough parameters */
|
|
RECV(":server 436");
|
|
CHECK_ERROR_PARAMS("436", 0, 2);
|
|
RECV(":server 436 alice");
|
|
CHECK_ERROR_PARAMS("436", 1, 2);
|
|
|
|
RECV(":server 436 alice bob");
|
|
CHECK_SRV("--", "bob", "irc_436,irc_numeric,nick_server,log3");
|
|
RECV(":server 436 alice bob error");
|
|
CHECK_SRV("--", "bob: error", "irc_436,irc_numeric,nick_server,log3");
|
|
RECV(":server 436 alice bob : \002Nickname collision KILL ");
|
|
CHECK_SRV("--", "bob: Nickname collision KILL ",
|
|
"irc_436,irc_numeric,nick_server,log3");
|
|
}
|
|
|
|
/*
|
|
* Test functions:
|
|
* irc_protocol_cb_437 (nick/channel temporarily unavailable, not connected)
|
|
*/
|
|
|
|
TEST(IrcProtocolWithServer, 437_not_connected)
|
|
{
|
|
RECV(":server 437 * alice error");
|
|
CHECK_SRV("--", "* alice error", "irc_437,irc_numeric,nick_server,log3");
|
|
RECV(":server 437 * alice : \002Nick/channel is temporarily unavailable ");
|
|
CHECK_SRV("--", "* alice Nick/channel is temporarily unavailable ",
|
|
"irc_437,irc_numeric,nick_server,log3");
|
|
RECV(":server 437 * alice1 :\002Nick/channel is temporarily unavailable");
|
|
CHECK_SRV("--", "* alice1 Nick/channel is temporarily unavailable",
|
|
"irc_437,irc_numeric,nick_server,log3");
|
|
}
|
|
|
|
/*
|
|
* Test functions:
|
|
* irc_protocol_cb_437 (nick/channel temporarily unavailable, connected)
|
|
*/
|
|
|
|
TEST(IrcProtocolWithServer, 437_connected)
|
|
{
|
|
SRV_INIT_JOIN;
|
|
|
|
/* not enough parameters */
|
|
RECV(":server 437");
|
|
CHECK_ERROR_PARAMS("437", 0, 2);
|
|
RECV(":server 437 alice");
|
|
CHECK_ERROR_PARAMS("437", 1, 2);
|
|
|
|
RECV(":server 437 * alice");
|
|
CHECK_SRV("--", "* alice", "irc_437,irc_numeric,nick_server,log3");
|
|
RECV(":server 437 * alice error");
|
|
CHECK_SRV("--", "* alice error", "irc_437,irc_numeric,nick_server,log3");
|
|
RECV(":server 437 * alice : \002Nick/channel is temporarily unavailable ");
|
|
CHECK_SRV("--", "* alice Nick/channel is temporarily unavailable ",
|
|
"irc_437,irc_numeric,nick_server,log3");
|
|
RECV(":server 437 alice #test :\002Cannot change nickname while banned on channel");
|
|
CHECK_SRV("--", "#test: Cannot change nickname while banned on channel",
|
|
"irc_437,irc_numeric,nick_server,log3");
|
|
}
|
|
|
|
/*
|
|
* Test functions:
|
|
* irc_protocol_cb_438 (not authorized to change nickname)
|
|
*/
|
|
|
|
TEST(IrcProtocolWithServer, 438)
|
|
{
|
|
SRV_INIT;
|
|
|
|
/* not enough parameters */
|
|
RECV(":server 438");
|
|
CHECK_ERROR_PARAMS("438", 0, 2);
|
|
RECV(":server 438 alice");
|
|
CHECK_ERROR_PARAMS("438", 1, 2);
|
|
|
|
RECV(":server 438 alice alice2");
|
|
CHECK_SRV("--", "alice alice2", "irc_438,irc_numeric,nick_server,log3");
|
|
RECV(":server 438 alice alice2 error");
|
|
CHECK_SRV("--", "error (alice => alice2)",
|
|
"irc_438,irc_numeric,nick_server,log3");
|
|
RECV(":server 438 alice alice2 : \002Nick change too fast. "
|
|
"Please wait 30 seconds. ");
|
|
CHECK_SRV("--",
|
|
" Nick change too fast. Please wait 30 seconds. (alice => alice2)",
|
|
"irc_438,irc_numeric,nick_server,log3");
|
|
}
|
|
|
|
/*
|
|
* Test functions:
|
|
* irc_protocol_cb_441 (user not in channel)
|
|
*/
|
|
|
|
TEST(IrcProtocolWithServer, 441)
|
|
{
|
|
SRV_INIT_JOIN;
|
|
|
|
/* not enough parameters */
|
|
RECV(":server 441");
|
|
CHECK_ERROR_PARAMS("441", 0, 2);
|
|
RECV(":server 441 alice");
|
|
CHECK_ERROR_PARAMS("441", 1, 2);
|
|
|
|
RECV(":server 441 alice bob");
|
|
CHECK_SRV("--", "bob", "irc_441,irc_numeric,nick_server,log3");
|
|
RECV(":server 441 alice bob #test2");
|
|
CHECK_SRV("--", "bob: #test2", "irc_441,irc_numeric,nick_server,log3");
|
|
RECV(":server 441 alice bob #test2 : \002They aren't on that channel ");
|
|
CHECK_SRV("--", "bob: #test2 They aren't on that channel ",
|
|
"irc_441,irc_numeric,nick_server,log3");
|
|
}
|
|
|
|
/*
|
|
* Test functions:
|
|
* irc_protocol_cb_442 (not on channel)
|
|
*/
|
|
|
|
TEST(IrcProtocolWithServer, 442)
|
|
{
|
|
SRV_INIT_JOIN;
|
|
|
|
/* not enough parameters */
|
|
RECV(":server 442");
|
|
CHECK_ERROR_PARAMS("442", 0, 2);
|
|
RECV(":server 442 alice");
|
|
CHECK_ERROR_PARAMS("442", 1, 2);
|
|
|
|
RECV(":server 442 alice #test2");
|
|
CHECK_SRV("--", "#test2", "irc_442,irc_numeric,nick_server,log3");
|
|
RECV(":server 442 alice #test2 : \002You're not on that channel ");
|
|
CHECK_SRV("--", "#test2: You're not on that channel ",
|
|
"irc_442,irc_numeric,nick_server,log3");
|
|
}
|
|
|
|
/*
|
|
* Test functions:
|
|
* irc_protocol_cb_443 (user already on channel)
|
|
*/
|
|
|
|
TEST(IrcProtocolWithServer, 443)
|
|
{
|
|
SRV_INIT_JOIN;
|
|
|
|
/* not enough parameters */
|
|
RECV(":server 443");
|
|
CHECK_ERROR_PARAMS("443", 0, 2);
|
|
RECV(":server 443 alice");
|
|
CHECK_ERROR_PARAMS("443", 1, 2);
|
|
|
|
RECV(":server 443 alice bob");
|
|
CHECK_SRV("--", "bob", "irc_443,irc_numeric,nick_server,log3");
|
|
RECV(":server 443 alice bob #test2");
|
|
CHECK_SRV("--", "bob: #test2", "irc_443,irc_numeric,nick_server,log3");
|
|
RECV(":server 443 alice bob #test2 : \002is already on channel ");
|
|
CHECK_SRV("--", "bob: #test2 is already on channel ",
|
|
"irc_443,irc_numeric,nick_server,log3");
|
|
}
|
|
|
|
/*
|
|
* Test functions:
|
|
* irc_protocol_cb_444 (user not logged in)
|
|
*/
|
|
|
|
TEST(IrcProtocolWithServer, 444)
|
|
{
|
|
SRV_INIT_JOIN;
|
|
|
|
/* not enough parameters */
|
|
RECV(":server 444");
|
|
CHECK_ERROR_PARAMS("444", 0, 2);
|
|
RECV(":server 444 alice");
|
|
CHECK_ERROR_PARAMS("444", 1, 2);
|
|
|
|
RECV(":server 444 alice bob");
|
|
CHECK_SRV("--", "bob", "irc_444,irc_numeric,nick_server,log3");
|
|
RECV(":server 444 alice bob error");
|
|
CHECK_SRV("--", "bob: error", "irc_444,irc_numeric,nick_server,log3");
|
|
RECV(":server 444 alice bob : \002User not logged in ");
|
|
CHECK_SRV("--", "bob: User not logged in ",
|
|
"irc_444,irc_numeric,nick_server,log3");
|
|
}
|
|
|
|
/*
|
|
* Test functions:
|
|
* irc_protocol_cb_445 (SUMMON has been disabled)
|
|
*/
|
|
|
|
TEST(IrcProtocolWithServer, 445)
|
|
{
|
|
SRV_INIT_JOIN;
|
|
|
|
/* not enough parameters */
|
|
RECV(":server 445");
|
|
CHECK_ERROR_PARAMS("445", 0, 2);
|
|
RECV(":server 445 alice");
|
|
CHECK_ERROR_PARAMS("445", 1, 2);
|
|
|
|
RECV(":server 445 alice : \002SUMMON has been disabled ");
|
|
CHECK_SRV("--", " SUMMON has been disabled ",
|
|
"irc_445,irc_numeric,nick_server,log3");
|
|
}
|
|
|
|
/*
|
|
* Test functions:
|
|
* irc_protocol_cb_446 (USERS has been disabled)
|
|
*/
|
|
|
|
TEST(IrcProtocolWithServer, 446)
|
|
{
|
|
SRV_INIT_JOIN;
|
|
|
|
/* not enough parameters */
|
|
RECV(":server 446");
|
|
CHECK_ERROR_PARAMS("446", 0, 2);
|
|
RECV(":server 446 alice");
|
|
CHECK_ERROR_PARAMS("446", 1, 2);
|
|
|
|
RECV(":server 446 alice : \002USERS has been disabled ");
|
|
CHECK_SRV("--", " USERS has been disabled ",
|
|
"irc_446,irc_numeric,nick_server,log3");
|
|
}
|
|
|
|
/*
|
|
* Test functions:
|
|
* irc_protocol_cb_451 (you are not registered)
|
|
*/
|
|
|
|
TEST(IrcProtocolWithServer, 451)
|
|
{
|
|
SRV_INIT_JOIN;
|
|
|
|
/* not enough parameters */
|
|
RECV(":server 451");
|
|
CHECK_ERROR_PARAMS("451", 0, 2);
|
|
RECV(":server 451 alice");
|
|
CHECK_ERROR_PARAMS("451", 1, 2);
|
|
|
|
RECV(":server 451 alice : \002You have not registered ");
|
|
CHECK_SRV("--", " You have not registered ",
|
|
"irc_451,irc_numeric,nick_server,log3");
|
|
}
|
|
|
|
/*
|
|
* Test functions:
|
|
* irc_protocol_cb_461 (not enough parameters)
|
|
*/
|
|
|
|
TEST(IrcProtocolWithServer, 461)
|
|
{
|
|
SRV_INIT_JOIN;
|
|
|
|
/* not enough parameters */
|
|
RECV(":server 461");
|
|
CHECK_ERROR_PARAMS("461", 0, 2);
|
|
RECV(":server 461 alice");
|
|
CHECK_ERROR_PARAMS("461", 1, 2);
|
|
|
|
RECV(":server 461 alice PRIVMSG");
|
|
CHECK_SRV("--", "PRIVMSG", "irc_461,irc_numeric,nick_server,log3");
|
|
RECV(":server 461 alice PRIVMSG : \002Not enough parameters ");
|
|
CHECK_SRV("--", "PRIVMSG: Not enough parameters ",
|
|
"irc_461,irc_numeric,nick_server,log3");
|
|
}
|
|
|
|
/*
|
|
* Test functions:
|
|
* irc_protocol_cb_462 (you may not register)
|
|
*/
|
|
|
|
TEST(IrcProtocolWithServer, 462)
|
|
{
|
|
SRV_INIT_JOIN;
|
|
|
|
/* not enough parameters */
|
|
RECV(":server 462");
|
|
CHECK_ERROR_PARAMS("462", 0, 2);
|
|
RECV(":server 462 alice");
|
|
CHECK_ERROR_PARAMS("462", 1, 2);
|
|
|
|
RECV(":server 462 alice : \002You may not reregister ");
|
|
CHECK_SRV("--", " You may not reregister ",
|
|
"irc_462,irc_numeric,nick_server,log3");
|
|
}
|
|
|
|
/*
|
|
* Test functions:
|
|
* irc_protocol_cb_463 (host not privileged)
|
|
*/
|
|
|
|
TEST(IrcProtocolWithServer, 463)
|
|
{
|
|
SRV_INIT_JOIN;
|
|
|
|
/* not enough parameters */
|
|
RECV(":server 463");
|
|
CHECK_ERROR_PARAMS("463", 0, 2);
|
|
RECV(":server 463 alice");
|
|
CHECK_ERROR_PARAMS("463", 1, 2);
|
|
|
|
RECV(":server 463 alice : \002Your host isn't among the privileged ");
|
|
CHECK_SRV("--", " Your host isn't among the privileged ",
|
|
"irc_463,irc_numeric,nick_server,log3");
|
|
}
|
|
|
|
/*
|
|
* Test functions:
|
|
* irc_protocol_cb_464 (password incorrect)
|
|
*/
|
|
|
|
TEST(IrcProtocolWithServer, 464)
|
|
{
|
|
SRV_INIT_JOIN;
|
|
|
|
/* not enough parameters */
|
|
RECV(":server 464");
|
|
CHECK_ERROR_PARAMS("464", 0, 2);
|
|
RECV(":server 464 alice");
|
|
CHECK_ERROR_PARAMS("464", 1, 2);
|
|
|
|
RECV(":server 464 alice : \002Password incorrect ");
|
|
CHECK_SRV("--", " Password incorrect ",
|
|
"irc_464,irc_numeric,nick_server,log3");
|
|
}
|
|
|
|
/*
|
|
* Test functions:
|
|
* irc_protocol_cb_465 (banned from this server)
|
|
*/
|
|
|
|
TEST(IrcProtocolWithServer, 465)
|
|
{
|
|
SRV_INIT_JOIN;
|
|
|
|
/* not enough parameters */
|
|
RECV(":server 465");
|
|
CHECK_ERROR_PARAMS("465", 0, 2);
|
|
RECV(":server 465 alice");
|
|
CHECK_ERROR_PARAMS("465", 1, 2);
|
|
|
|
RECV(":server 465 alice : \002You are banned from this server ");
|
|
CHECK_SRV("--", " You are banned from this server ",
|
|
"irc_465,irc_numeric,nick_server,log3");
|
|
}
|
|
|
|
/*
|
|
* Test functions:
|
|
* irc_protocol_cb_467 (channel key already set)
|
|
*/
|
|
|
|
TEST(IrcProtocolWithServer, 467)
|
|
{
|
|
SRV_INIT_JOIN;
|
|
|
|
/* not enough parameters */
|
|
RECV(":server 467");
|
|
CHECK_ERROR_PARAMS("467", 0, 2);
|
|
RECV(":server 467 alice");
|
|
CHECK_ERROR_PARAMS("467", 1, 2);
|
|
|
|
RECV(":server 467 alice #test2");
|
|
CHECK_SRV("--", "#test2", "irc_467,irc_numeric,nick_server,log3");
|
|
RECV(":server 467 alice #test2 : \002Channel key already set ");
|
|
CHECK_SRV("--", "#test2: Channel key already set ",
|
|
"irc_467,irc_numeric,nick_server,log3");
|
|
}
|
|
|
|
/*
|
|
* Test functions:
|
|
* irc_protocol_cb_470 (forwarding to another channel)
|
|
*/
|
|
|
|
TEST(IrcProtocolWithServer, 470)
|
|
{
|
|
SRV_INIT;
|
|
|
|
/* not enough parameters */
|
|
RECV(":server 470");
|
|
CHECK_ERROR_PARAMS("470", 0, 2);
|
|
RECV(":server 470 alice");
|
|
CHECK_ERROR_PARAMS("470", 1, 2);
|
|
|
|
RECV(":server 470 alice #test");
|
|
CHECK_SRV("--", "#test", "irc_470,irc_numeric,nick_server,log3");
|
|
RECV(":server 470 alice #test #test2");
|
|
CHECK_SRV("--", "#test: #test2", "irc_470,irc_numeric,nick_server,log3");
|
|
RECV(":server 470 alice #test #test2 forwarding");
|
|
CHECK_SRV("--", "#test: #test2 forwarding",
|
|
"irc_470,irc_numeric,nick_server,log3");
|
|
RECV(":server 470 alice #test #test2 : \002Forwarding to another channel ");
|
|
CHECK_SRV("--", "#test: #test2 Forwarding to another channel ",
|
|
"irc_470,irc_numeric,nick_server,log3");
|
|
}
|
|
|
|
/*
|
|
* Test functions:
|
|
* irc_protocol_cb_471 (channel is already full)
|
|
*/
|
|
|
|
TEST(IrcProtocolWithServer, 471)
|
|
{
|
|
SRV_INIT_JOIN;
|
|
|
|
/* not enough parameters */
|
|
RECV(":server 471");
|
|
CHECK_ERROR_PARAMS("471", 0, 2);
|
|
RECV(":server 471 alice");
|
|
CHECK_ERROR_PARAMS("471", 1, 2);
|
|
|
|
RECV(":server 471 alice #test2");
|
|
CHECK_SRV("--", "#test2", "irc_471,irc_numeric,nick_server,log3");
|
|
RECV(":server 471 alice #test2 : \002Cannot join channel (+l) ");
|
|
CHECK_SRV("--", "#test2: Cannot join channel (+l) ",
|
|
"irc_471,irc_numeric,nick_server,log3");
|
|
}
|
|
|
|
/*
|
|
* Test functions:
|
|
* irc_protocol_cb_472 (unknown mode char to me)
|
|
*/
|
|
|
|
TEST(IrcProtocolWithServer, 472)
|
|
{
|
|
SRV_INIT_JOIN;
|
|
|
|
/* not enough parameters */
|
|
RECV(":server 472");
|
|
CHECK_ERROR_PARAMS("472", 0, 2);
|
|
RECV(":server 472 alice");
|
|
CHECK_ERROR_PARAMS("472", 1, 2);
|
|
|
|
RECV(":server 472 alice x");
|
|
CHECK_SRV("--", "x", "irc_472,irc_numeric,nick_server,log3");
|
|
RECV(":server 472 alice x : \002is unknown mode char to me ");
|
|
CHECK_SRV("--", "x: is unknown mode char to me ",
|
|
"irc_472,irc_numeric,nick_server,log3");
|
|
}
|
|
|
|
/*
|
|
* Test functions:
|
|
* irc_protocol_cb_473 (cannot join (invite only))
|
|
*/
|
|
|
|
TEST(IrcProtocolWithServer, 473)
|
|
{
|
|
SRV_INIT_JOIN;
|
|
|
|
/* not enough parameters */
|
|
RECV(":server 473");
|
|
CHECK_ERROR_PARAMS("473", 0, 2);
|
|
RECV(":server 473 alice");
|
|
CHECK_ERROR_PARAMS("473", 1, 2);
|
|
|
|
RECV(":server 473 alice #test2");
|
|
CHECK_SRV("--", "#test2", "irc_473,irc_numeric,nick_server,log3");
|
|
RECV(":server 473 alice #test2 : \002Cannot join channel (+i) ");
|
|
CHECK_SRV("--", "#test2: Cannot join channel (+i) ",
|
|
"irc_473,irc_numeric,nick_server,log3");
|
|
}
|
|
|
|
/*
|
|
* Test functions:
|
|
* irc_protocol_cb_474 (cannot join (banned))
|
|
*/
|
|
|
|
TEST(IrcProtocolWithServer, 474)
|
|
{
|
|
SRV_INIT_JOIN;
|
|
|
|
/* not enough parameters */
|
|
RECV(":server 474");
|
|
CHECK_ERROR_PARAMS("474", 0, 2);
|
|
RECV(":server 474 alice");
|
|
CHECK_ERROR_PARAMS("474", 1, 2);
|
|
|
|
RECV(":server 474 alice #test2");
|
|
CHECK_SRV("--", "#test2", "irc_474,irc_numeric,nick_server,log3");
|
|
RECV(":server 474 alice #test2 : \002Cannot join channel (+b) ");
|
|
CHECK_SRV("--", "#test2: Cannot join channel (+b) ",
|
|
"irc_474,irc_numeric,nick_server,log3");
|
|
}
|
|
|
|
/*
|
|
* Test functions:
|
|
* irc_protocol_cb_475 (cannot join (bad key))
|
|
*/
|
|
|
|
TEST(IrcProtocolWithServer, 475)
|
|
{
|
|
SRV_INIT_JOIN;
|
|
|
|
/* not enough parameters */
|
|
RECV(":server 475");
|
|
CHECK_ERROR_PARAMS("475", 0, 2);
|
|
RECV(":server 475 alice");
|
|
CHECK_ERROR_PARAMS("475", 1, 2);
|
|
|
|
RECV(":server 475 alice #test2");
|
|
CHECK_SRV("--", "#test2", "irc_475,irc_numeric,nick_server,log3");
|
|
RECV(":server 475 alice #test2 : \002Cannot join channel (+k) ");
|
|
CHECK_SRV("--", "#test2: Cannot join channel (+k) ",
|
|
"irc_475,irc_numeric,nick_server,log3");
|
|
}
|
|
|
|
/*
|
|
* Test functions:
|
|
* irc_protocol_cb_476 (bad channel mask)
|
|
*/
|
|
|
|
TEST(IrcProtocolWithServer, 476)
|
|
{
|
|
SRV_INIT_JOIN;
|
|
|
|
/* not enough parameters */
|
|
RECV(":server 476");
|
|
CHECK_ERROR_PARAMS("476", 0, 2);
|
|
RECV(":server 476 alice");
|
|
CHECK_ERROR_PARAMS("476", 1, 2);
|
|
|
|
RECV(":server 476 alice #test2");
|
|
CHECK_SRV("--", "#test2", "irc_476,irc_numeric,nick_server,log3");
|
|
RECV(":server 476 alice #test2 : \002Bad Channel Mask ");
|
|
CHECK_SRV("--", "#test2: Bad Channel Mask ",
|
|
"irc_476,irc_numeric,nick_server,log3");
|
|
}
|
|
|
|
/*
|
|
* Test functions:
|
|
* irc_protocol_cb_477 (channel doesn't support modes)
|
|
*/
|
|
|
|
TEST(IrcProtocolWithServer, 477)
|
|
{
|
|
SRV_INIT_JOIN;
|
|
|
|
/* not enough parameters */
|
|
RECV(":server 477");
|
|
CHECK_ERROR_PARAMS("477", 0, 2);
|
|
RECV(":server 477 alice");
|
|
CHECK_ERROR_PARAMS("477", 1, 2);
|
|
|
|
RECV(":server 477 alice #test2");
|
|
CHECK_SRV("--", "#test2", "irc_477,irc_numeric,nick_server,log3");
|
|
RECV(":server 477 alice #test2 : \002Channel doesn't support modes ");
|
|
CHECK_SRV("--", "#test2: Channel doesn't support modes ",
|
|
"irc_477,irc_numeric,nick_server,log3");
|
|
}
|
|
|
|
/*
|
|
* Test functions:
|
|
* irc_protocol_cb_481 (you're not an IRC operator)
|
|
*/
|
|
|
|
TEST(IrcProtocolWithServer, 481)
|
|
{
|
|
SRV_INIT_JOIN;
|
|
|
|
/* not enough parameters */
|
|
RECV(":server 481");
|
|
CHECK_ERROR_PARAMS("481", 0, 2);
|
|
RECV(":server 481 alice");
|
|
CHECK_ERROR_PARAMS("481", 1, 2);
|
|
|
|
RECV(":server 481 alice : \002Permission Denied- You're not an IRC operator ");
|
|
CHECK_SRV("--", " Permission Denied- You're not an IRC operator ",
|
|
"irc_481,irc_numeric,nick_server,log3");
|
|
}
|
|
|
|
/*
|
|
* Test functions:
|
|
* irc_protocol_cb_482 (you're not channel operator)
|
|
*/
|
|
|
|
TEST(IrcProtocolWithServer, 482)
|
|
{
|
|
SRV_INIT_JOIN;
|
|
|
|
/* not enough parameters */
|
|
RECV(":server 482");
|
|
CHECK_ERROR_PARAMS("482", 0, 2);
|
|
RECV(":server 482 alice");
|
|
CHECK_ERROR_PARAMS("482", 1, 2);
|
|
|
|
RECV(":server 482 alice #test2");
|
|
CHECK_SRV("--", "#test2", "irc_482,irc_numeric,nick_server,log3");
|
|
RECV(":server 482 alice #test2 : \002You're not channel operator ");
|
|
CHECK_SRV("--", "#test2: You're not channel operator ",
|
|
"irc_482,irc_numeric,nick_server,log3");
|
|
}
|
|
|
|
/*
|
|
* Test functions:
|
|
* irc_protocol_cb_483 (you can't kill a server!)
|
|
*/
|
|
|
|
TEST(IrcProtocolWithServer, 483)
|
|
{
|
|
SRV_INIT_JOIN;
|
|
|
|
/* not enough parameters */
|
|
RECV(":server 483");
|
|
CHECK_ERROR_PARAMS("483", 0, 2);
|
|
RECV(":server 483 alice");
|
|
CHECK_ERROR_PARAMS("483", 1, 2);
|
|
|
|
RECV(":server 483 alice : \002You cant kill a server! ");
|
|
CHECK_SRV("--", " You cant kill a server! ",
|
|
"irc_483,irc_numeric,nick_server,log3");
|
|
}
|
|
|
|
/*
|
|
* Test functions:
|
|
* irc_protocol_cb_484 (your connection is restricted!)
|
|
*/
|
|
|
|
TEST(IrcProtocolWithServer, 484)
|
|
{
|
|
SRV_INIT_JOIN;
|
|
|
|
/* not enough parameters */
|
|
RECV(":server 484");
|
|
CHECK_ERROR_PARAMS("484", 0, 2);
|
|
RECV(":server 484 alice");
|
|
CHECK_ERROR_PARAMS("484", 1, 2);
|
|
|
|
RECV(":server 484 alice : \002Your connection is restricted! ");
|
|
CHECK_SRV("--", " Your connection is restricted! ",
|
|
"irc_484,irc_numeric,nick_server,log3");
|
|
}
|
|
|
|
/*
|
|
* Test functions:
|
|
* irc_protocol_cb_485 (not the original channel operator)
|
|
*/
|
|
|
|
TEST(IrcProtocolWithServer, 485)
|
|
{
|
|
SRV_INIT_JOIN;
|
|
|
|
/* not enough parameters */
|
|
RECV(":server 485");
|
|
CHECK_ERROR_PARAMS("485", 0, 2);
|
|
RECV(":server 485 alice");
|
|
CHECK_ERROR_PARAMS("485", 1, 2);
|
|
|
|
RECV(":server 485 alice : \002You're not the original channel operator ");
|
|
CHECK_SRV("--", " You're not the original channel operator ",
|
|
"irc_485,irc_numeric,nick_server,log3");
|
|
}
|
|
|
|
/*
|
|
* Test functions:
|
|
* irc_protocol_cb_491 (no O-lines for your host)
|
|
*/
|
|
|
|
TEST(IrcProtocolWithServer, 491)
|
|
{
|
|
SRV_INIT_JOIN;
|
|
|
|
/* not enough parameters */
|
|
RECV(":server 491");
|
|
CHECK_ERROR_PARAMS("491", 0, 2);
|
|
RECV(":server 491 alice");
|
|
CHECK_ERROR_PARAMS("491", 1, 2);
|
|
|
|
RECV(":server 491 alice : \002No O-lines for your host ");
|
|
CHECK_SRV("--", " No O-lines for your host ",
|
|
"irc_491,irc_numeric,nick_server,log3");
|
|
}
|
|
|
|
/*
|
|
* Test functions:
|
|
* irc_protocol_cb_501 (unknown mode flag)
|
|
*/
|
|
|
|
TEST(IrcProtocolWithServer, 501)
|
|
{
|
|
SRV_INIT_JOIN;
|
|
|
|
/* not enough parameters */
|
|
RECV(":server 501");
|
|
CHECK_ERROR_PARAMS("501", 0, 2);
|
|
RECV(":server 501 alice");
|
|
CHECK_ERROR_PARAMS("501", 1, 2);
|
|
|
|
RECV(":server 501 alice : \002Unknown MODE flag ");
|
|
CHECK_SRV("--", " Unknown MODE flag ",
|
|
"irc_501,irc_numeric,nick_server,log3");
|
|
}
|
|
|
|
/*
|
|
* Test functions:
|
|
* irc_protocol_cb_502 (can't change mode for other users)
|
|
*/
|
|
|
|
TEST(IrcProtocolWithServer, 502)
|
|
{
|
|
SRV_INIT_JOIN;
|
|
|
|
/* not enough parameters */
|
|
RECV(":server 502");
|
|
CHECK_ERROR_PARAMS("502", 0, 2);
|
|
RECV(":server 502 alice");
|
|
CHECK_ERROR_PARAMS("502", 1, 2);
|
|
|
|
RECV(":server 502 alice : \002Cant change mode for other users ");
|
|
CHECK_SRV("--", " Cant change mode for other users ",
|
|
"irc_502,irc_numeric,nick_server,log3");
|
|
}
|
|
|
|
/*
|
|
* Test functions:
|
|
* irc_protocol_cb_524 (help not found)
|
|
*/
|
|
|
|
TEST(IrcProtocolWithServer, 524)
|
|
{
|
|
SRV_INIT;
|
|
|
|
/* not enough parameters */
|
|
RECV(":server 524");
|
|
CHECK_ERROR_PARAMS("524", 0, 2);
|
|
RECV(":server 524 alice");
|
|
CHECK_ERROR_PARAMS("524", 1, 2);
|
|
|
|
RECV(":server 524 alice UNKNOWN");
|
|
CHECK_SRV("--", "UNKNOWN", "irc_524,irc_numeric,nick_server,log3");
|
|
RECV(":server 524 alice UNKNOWN : \002Help not found ");
|
|
CHECK_SRV("--", "UNKNOWN: Help not found ",
|
|
"irc_524,irc_numeric,nick_server,log3");
|
|
}
|
|
|
|
/*
|
|
* Test functions:
|
|
* irc_protocol_cb_569 (whois, connecting from)
|
|
*/
|
|
|
|
TEST(IrcProtocolWithServer, 569)
|
|
{
|
|
SRV_INIT_JOIN;
|
|
|
|
/* not enough parameters */
|
|
RECV(":server 569");
|
|
CHECK_ERROR_PARAMS("569", 0, 2);
|
|
RECV(":server 569 alice");
|
|
CHECK_ERROR_PARAMS("569", 1, 2);
|
|
|
|
/* whois, connecting from (UnrealIRCd) */
|
|
RECV(":server 569 alice bob 12345 : \002is connecting from AS12345 [Hoster] ");
|
|
CHECK_SRV("--", "[bob] is connecting from AS12345 [Hoster] (12345)",
|
|
"irc_569,irc_numeric,nick_server,log3");
|
|
|
|
/* whois, connecting from (UnrealIRCd), no ASN */
|
|
RECV(":server 569 alice bob :\002is connecting from AS12345 [Hoster]");
|
|
CHECK_SRV("--", "[bob] is connecting from AS12345 [Hoster]",
|
|
"irc_569,irc_numeric,nick_server,log3");
|
|
}
|
|
|
|
/*
|
|
* Test functions:
|
|
* irc_protocol_cb_704 (start of HELP/HELPOP)
|
|
*/
|
|
|
|
TEST(IrcProtocolWithServer, 704)
|
|
{
|
|
SRV_INIT;
|
|
|
|
/* not enough parameters */
|
|
RECV(":server 704");
|
|
CHECK_ERROR_PARAMS("704", 0, 2);
|
|
RECV(":server 704 alice");
|
|
CHECK_ERROR_PARAMS("704", 1, 2);
|
|
|
|
RECV(":server 704 alice MODE");
|
|
CHECK_SRV("--", "MODE", "irc_704,irc_numeric,nick_server,log3");
|
|
RECV(":server 704 alice MODE "
|
|
": MODE <target> [<modestring> [<mode arguments>...]] ");
|
|
CHECK_SRV("--", "MODE: MODE <target> [<modestring> [<mode arguments>...]] ",
|
|
"irc_704,irc_numeric,nick_server,log3");
|
|
}
|
|
|
|
/*
|
|
* Test functions:
|
|
* irc_protocol_cb_705 (body of HELP/HELPOP)
|
|
*/
|
|
|
|
TEST(IrcProtocolWithServer, 705)
|
|
{
|
|
SRV_INIT;
|
|
|
|
/* not enough parameters */
|
|
RECV(":server 705");
|
|
CHECK_ERROR_PARAMS("705", 0, 2);
|
|
RECV(":server 705 alice");
|
|
CHECK_ERROR_PARAMS("705", 1, 2);
|
|
|
|
RECV(":server 705 alice MODE");
|
|
CHECK_SRV("--", "MODE", "irc_705,irc_numeric,nick_server,log3");
|
|
RECV(":server 705 alice MODE : \002Sets and removes modes from the given target. ");
|
|
CHECK_SRV("--", "MODE: Sets and removes modes from the given target. ",
|
|
"irc_705,irc_numeric,nick_server,log3");
|
|
}
|
|
|
|
/*
|
|
* Test functions:
|
|
* irc_protocol_cb_706 (end of HELP/HELPOP)
|
|
*/
|
|
|
|
TEST(IrcProtocolWithServer, 706)
|
|
{
|
|
SRV_INIT;
|
|
|
|
/* not enough parameters */
|
|
RECV(":server 706");
|
|
CHECK_ERROR_PARAMS("706", 0, 2);
|
|
RECV(":server 706 alice");
|
|
CHECK_ERROR_PARAMS("706", 1, 2);
|
|
|
|
RECV(":server 706 alice MODE");
|
|
CHECK_SRV("--", "MODE", "irc_706,irc_numeric,nick_server,log3");
|
|
RECV(":server 706 alice MODE : \002End of /HELPOP ");
|
|
CHECK_SRV("--", "MODE: End of /HELPOP ",
|
|
"irc_706,irc_numeric,nick_server,log3");
|
|
}
|
|
|
|
/*
|
|
* Test functions:
|
|
* irc_protocol_cb_710 (knock: has asked for an invite)
|
|
*/
|
|
|
|
TEST(IrcProtocolWithServer, 710)
|
|
{
|
|
SRV_INIT_JOIN;
|
|
|
|
/* not enough parameters */
|
|
RECV(":server 710");
|
|
CHECK_ERROR_PARAMS("710", 0, 3);
|
|
RECV(":server 710 #test");
|
|
CHECK_ERROR_PARAMS("710", 1, 3);
|
|
RECV(":server 710 #test #test");
|
|
CHECK_ERROR_PARAMS("710", 2, 3);
|
|
|
|
RECV(":server 710 #test #test nick1!user1@host1");
|
|
CHECK_CHAN("--", "nick1 (user1@host1) has asked for an invite",
|
|
"irc_710,irc_numeric,notify_message,nick_nick1,host_user1@host1,log3");
|
|
RECV(":server 710 #test #test nick1!user1@host1 : \002has asked for an invite. ");
|
|
CHECK_CHAN("--", "nick1 (user1@host1) has asked for an invite. ",
|
|
"irc_710,irc_numeric,notify_message,nick_nick1,host_user1@host1,log3");
|
|
|
|
/* channel not found */
|
|
RECV(":server 710 #xyz #xyz nick1!user1@host1");
|
|
CHECK_ERROR_PARSE("710", ":server 710 #xyz #xyz nick1!user1@host1");
|
|
RECV(":server 710 #xyz #xyz nick1!user1@host1 : \002has asked for an invite. ");
|
|
CHECK_ERROR_PARSE("710", ":server 710 #xyz #xyz nick1!user1@host1 : \002has asked for an invite. ");
|
|
}
|
|
|
|
/*
|
|
* Test functions:
|
|
* irc_protocol_cb_711 (knock: has been delivered)
|
|
*/
|
|
|
|
TEST(IrcProtocolWithServer, 711)
|
|
{
|
|
SRV_INIT;
|
|
|
|
/* not enough parameters */
|
|
RECV(":server 711");
|
|
CHECK_ERROR_PARAMS("711", 0, 3);
|
|
RECV(":server 711 alice");
|
|
CHECK_ERROR_PARAMS("711", 1, 3);
|
|
RECV(":server 711 alice #test");
|
|
CHECK_ERROR_PARAMS("711", 2, 3);
|
|
|
|
RECV(":server 711 alice #test : \002Your KNOCK has been delivered. ");
|
|
CHECK_SRV("--", "#test: Your KNOCK has been delivered. ",
|
|
"irc_711,irc_numeric,nick_server,log3");
|
|
}
|
|
|
|
/*
|
|
* Test functions:
|
|
* irc_protocol_cb_712 (knock: too many knocks)
|
|
*/
|
|
|
|
TEST(IrcProtocolWithServer, 712)
|
|
{
|
|
SRV_INIT;
|
|
|
|
/* not enough parameters */
|
|
RECV(":server 712");
|
|
CHECK_ERROR_PARAMS("712", 0, 3);
|
|
RECV(":server 712 alice");
|
|
CHECK_ERROR_PARAMS("712", 1, 3);
|
|
RECV(":server 712 alice #test");
|
|
CHECK_ERROR_PARAMS("712", 2, 3);
|
|
|
|
RECV(":server 712 alice #test : \002Too many KNOCKs (channel). ");
|
|
CHECK_SRV("--", "#test: Too many KNOCKs (channel). ",
|
|
"irc_712,irc_numeric,nick_server,log3");
|
|
}
|
|
|
|
/*
|
|
* Test functions:
|
|
* irc_protocol_cb_713 (knock: channel is open)
|
|
*/
|
|
|
|
TEST(IrcProtocolWithServer, 713)
|
|
{
|
|
SRV_INIT;
|
|
|
|
/* not enough parameters */
|
|
RECV(":server 713");
|
|
CHECK_ERROR_PARAMS("713", 0, 3);
|
|
RECV(":server 713 alice");
|
|
CHECK_ERROR_PARAMS("713", 1, 3);
|
|
RECV(":server 713 alice #test");
|
|
CHECK_ERROR_PARAMS("713", 2, 3);
|
|
|
|
RECV(":server 713 alice #test : \002Channel is open. ");
|
|
CHECK_SRV("--", "#test: Channel is open. ",
|
|
"irc_713,irc_numeric,nick_server,log3");
|
|
}
|
|
|
|
/*
|
|
* Test functions:
|
|
* irc_protocol_cb_714 (knock: already on that channel)
|
|
*/
|
|
|
|
TEST(IrcProtocolWithServer, 714)
|
|
{
|
|
SRV_INIT_JOIN;
|
|
|
|
/* not enough parameters */
|
|
RECV(":server 714");
|
|
CHECK_ERROR_PARAMS("714", 0, 3);
|
|
RECV(":server 714 alice");
|
|
CHECK_ERROR_PARAMS("714", 1, 3);
|
|
RECV(":server 714 alice #test");
|
|
CHECK_ERROR_PARAMS("714", 2, 3);
|
|
|
|
RECV(":server 714 alice #test : \002You are already on that channel. ");
|
|
CHECK_SRV("--", "#test: You are already on that channel. ",
|
|
"irc_714,irc_numeric,nick_server,log3");
|
|
}
|
|
|
|
/*
|
|
* Test functions:
|
|
* irc_protocol_cb_716 (nick is in +g mode)
|
|
*/
|
|
|
|
TEST(IrcProtocolWithServer, 716)
|
|
{
|
|
SRV_INIT_JOIN;
|
|
|
|
/* not enough parameters */
|
|
RECV(":server 716");
|
|
CHECK_ERROR_PARAMS("716", 0, 2);
|
|
RECV(":server 716 alice");
|
|
CHECK_ERROR_PARAMS("716", 1, 2);
|
|
|
|
RECV(":server 716 alice bob : \002is in +g mode and must manually allow you to "
|
|
"message them. Your message was discarded. ");
|
|
CHECK_SRV("--",
|
|
"bob: is in +g mode and must manually allow you to message them. "
|
|
"Your message was discarded. ",
|
|
"irc_716,irc_numeric,nick_server,log3");
|
|
|
|
/* open private buffer */
|
|
RECV(":bob!user@host PRIVMSG alice :hi Alice!");
|
|
|
|
RECV(":server 716 alice bob : \002is in +g mode and must manually allow you to "
|
|
"message them. Your message was discarded. ");
|
|
CHECK_PV("bob", "--",
|
|
"bob: is in +g mode and must manually allow you to message them. "
|
|
"Your message was discarded. ",
|
|
"irc_716,irc_numeric,nick_server,log3");
|
|
}
|
|
|
|
/*
|
|
* Test functions:
|
|
* irc_protocol_cb_717 (nick has been informed that you messaged them)
|
|
*/
|
|
|
|
TEST(IrcProtocolWithServer, 717)
|
|
{
|
|
SRV_INIT_JOIN;
|
|
|
|
/* not enough parameters */
|
|
RECV(":server 717");
|
|
CHECK_ERROR_PARAMS("717", 0, 2);
|
|
RECV(":server 717 alice");
|
|
CHECK_ERROR_PARAMS("717", 1, 2);
|
|
|
|
RECV(":server 717 alice bob : \002has been informed that you messaged them. ");
|
|
CHECK_SRV("--", "bob: has been informed that you messaged them. ",
|
|
"irc_717,irc_numeric,nick_server,log3");
|
|
|
|
/* open private buffer */
|
|
RECV(":bob!user@host PRIVMSG alice :hi Alice!");
|
|
RECV(":server 717 alice bob : \002has been informed that you messaged them. ");
|
|
CHECK_PV("bob", "--",
|
|
"bob: has been informed that you messaged them. ",
|
|
"irc_717,irc_numeric,nick_server,log3");
|
|
}
|
|
|
|
/*
|
|
* Test functions:
|
|
* irc_protocol_cb_728 (quietlist)
|
|
*/
|
|
|
|
TEST(IrcProtocolWithServer, 728)
|
|
{
|
|
SRV_INIT_JOIN;
|
|
|
|
/* not enough parameters */
|
|
RECV(":server 728");
|
|
CHECK_ERROR_PARAMS("728", 0, 4);
|
|
RECV(":server 728 alice");
|
|
CHECK_ERROR_PARAMS("728", 1, 4);
|
|
RECV(":server 728 alice #test");
|
|
CHECK_ERROR_PARAMS("728", 2, 4);
|
|
RECV(":server 728 alice #test q");
|
|
CHECK_ERROR_PARAMS("728", 3, 4);
|
|
|
|
RECV(":server 728 alice #test q nick1!user1_\00304red@host1_\00304red");
|
|
CHECK_CHAN("--", "[#test] nick1!user1_red@host1_red quieted",
|
|
"irc_728,irc_numeric,nick_server,log3");
|
|
RECV(":server 728 alice #test q nick1!user1_\00304red@host1_\00304red "
|
|
"alice!user_\00304red@host_\00304red");
|
|
CHECK_CHAN("--", "[#test] nick1!user1_red@host1_red quieted by alice (user_red@host_red)",
|
|
"irc_728,irc_numeric,nick_server,log3");
|
|
RECV(":server 728 alice #test q nick1!user1_\00304red@host1_\00304red "
|
|
"alice!user_\00304red@host_\00304red 1351350090 ");
|
|
CHECK_CHAN("--",
|
|
"[#test] nick1!user1_red@host1_red quieted by alice (user_red@host_red) "
|
|
"on Sat, 27 Oct 2012 15:01:30",
|
|
"irc_728,irc_numeric,nick_server,log3");
|
|
|
|
/* channel not found */
|
|
RECV(":server 728 alice #xyz q nick1!user1_\00304red@host1_\00304red");
|
|
CHECK_SRV("--", "[#xyz] nick1!user1_red@host1_red quieted",
|
|
"irc_728,irc_numeric,nick_server,log3");
|
|
RECV(":server 728 alice #xyz q nick1!user1_\00304red@host1_\00304red alice!user_\00304red@host_\00304red");
|
|
CHECK_SRV("--", "[#xyz] nick1!user1_red@host1_red quieted by alice (user_red@host_red)",
|
|
"irc_728,irc_numeric,nick_server,log3");
|
|
RECV(":server 728 alice #xyz q nick1!user1_\00304red@host1_\00304red alice!user_\00304red@host_\00304red "
|
|
"1351350090 ");
|
|
CHECK_SRV("--", "[#xyz] nick1!user1_red@host1_red quieted by alice (user_red@host_red) "
|
|
"on Sat, 27 Oct 2012 15:01:30",
|
|
"irc_728,irc_numeric,nick_server,log3");
|
|
}
|
|
|
|
/*
|
|
* Test functions:
|
|
* irc_protocol_cb_729 (end of quietlist)
|
|
*/
|
|
|
|
TEST(IrcProtocolWithServer, 729)
|
|
{
|
|
SRV_INIT_JOIN;
|
|
|
|
/* not enough parameters */
|
|
RECV(":server 729");
|
|
CHECK_ERROR_PARAMS("729", 0, 3);
|
|
RECV(":server 729 alice");
|
|
CHECK_ERROR_PARAMS("729", 1, 3);
|
|
RECV(":server 729 alice #test");
|
|
CHECK_ERROR_PARAMS("729", 2, 3);
|
|
|
|
RECV(":server 729 alice #test q");
|
|
CHECK_CHAN("--", "[#test]", "irc_729,irc_numeric,nick_server,log3");
|
|
RECV(":server 729 alice #test q end");
|
|
CHECK_CHAN("--", "[#test] end", "irc_729,irc_numeric,nick_server,log3");
|
|
RECV(":server 729 alice #test q : \002End of Channel Quiet List ");
|
|
CHECK_CHAN("--", "[#test] End of Channel Quiet List ",
|
|
"irc_729,irc_numeric,nick_server,log3");
|
|
|
|
/* channel not found */
|
|
RECV(":server 729 alice #xyz q");
|
|
CHECK_SRV("--", "[#xyz]", "irc_729,irc_numeric,nick_server,log3");
|
|
RECV(":server 729 alice #xyz q end");
|
|
CHECK_SRV("--", "[#xyz] end", "irc_729,irc_numeric,nick_server,log3");
|
|
RECV(":server 729 alice #xyz q : \002End of Channel Quiet List ");
|
|
CHECK_SRV("--", "[#xyz] End of Channel Quiet List ",
|
|
"irc_729,irc_numeric,nick_server,log3");
|
|
}
|
|
|
|
/*
|
|
* Test functions:
|
|
* irc_protocol_cb_730 (monitored nicks are online (RPL_MONONLINE))
|
|
* irc_protocol_cb_731 (monitored nicks are offline (RPL_MONOFFLINE))
|
|
*/
|
|
|
|
TEST(IrcProtocolWithServer, 730)
|
|
{
|
|
SRV_INIT;
|
|
|
|
/* not enough parameters */
|
|
RECV(":server 730");
|
|
CHECK_ERROR_PARAMS("730", 0, 2);
|
|
RECV(":server 730 alice");
|
|
CHECK_ERROR_PARAMS("730", 1, 2);
|
|
RECV(":server 731");
|
|
CHECK_ERROR_PARAMS("731", 0, 2);
|
|
RECV(":server 731 alice");
|
|
CHECK_ERROR_PARAMS("731", 1, 2);
|
|
|
|
/* without notify */
|
|
RECV(":server 730 alice : nick1!user1@host1,nick2!user2@host2 ");
|
|
CHECK_SRV("--", "notify: nick1 (user1@host1) is connected",
|
|
"irc_notify,irc_notify_join,nick_nick1,notify_message,log3");
|
|
CHECK_SRV("--", "notify: nick2 (user2@host2) is connected",
|
|
"irc_notify,irc_notify_join,nick_nick2,notify_message,log3");
|
|
RECV(":server 730 alice :nick1!user1@host1,nick2!user2@host2");
|
|
CHECK_SRV("--", "notify: nick1 (user1@host1) is connected",
|
|
"irc_notify,irc_notify_join,nick_nick1,notify_message,log3");
|
|
CHECK_SRV("--", "notify: nick2 (user2@host2) is connected",
|
|
"irc_notify,irc_notify_join,nick_nick2,notify_message,log3");
|
|
|
|
RECV(":server 731 alice : nick1!user1@host1,nick2!user2@host2 ");
|
|
CHECK_SRV("--", "notify: nick1 (user1@host1) is offline",
|
|
"irc_notify,irc_notify_quit,nick_nick1,notify_message,log3");
|
|
CHECK_SRV("--", "notify: nick2 (user2@host2) is offline",
|
|
"irc_notify,irc_notify_quit,nick_nick2,notify_message,log3");
|
|
RECV(":server 731 alice :nick1!user1@host1,nick2!user2@host2");
|
|
CHECK_SRV("--", "notify: nick1 (user1@host1) is offline",
|
|
"irc_notify,irc_notify_quit,nick_nick1,notify_message,log3");
|
|
CHECK_SRV("--", "notify: nick2 (user2@host2) is offline",
|
|
"irc_notify,irc_notify_quit,nick_nick2,notify_message,log3");
|
|
|
|
/* with notify on nick1 */
|
|
run_cmd_quiet ("/notify add nick1 " IRC_FAKE_SERVER);
|
|
|
|
RECV(":server 730 alice : nick1!user1@host1,nick2!user2@host2 ");
|
|
CHECK_SRV("--", "notify: nick1 (user1@host1) is connected",
|
|
"irc_notify,irc_notify_join,nick_nick1,notify_message,log3");
|
|
CHECK_SRV("--", "notify: nick2 (user2@host2) is connected",
|
|
"irc_notify,irc_notify_join,nick_nick2,notify_message,log3");
|
|
RECV(":server 730 alice :nick1!user1@host1,nick2!user2@host2");
|
|
CHECK_SRV("--", "notify: nick2 (user2@host2) is connected",
|
|
"irc_notify,irc_notify_join,nick_nick2,notify_message,log3");
|
|
|
|
RECV(":server 731 alice : nick1!user1@host1,nick2!user2@host2 ");
|
|
CHECK_SRV("--", "notify: nick1 (user1@host1) has quit",
|
|
"irc_notify,irc_notify_quit,nick_nick1,notify_message,log3");
|
|
CHECK_SRV("--", "notify: nick2 (user2@host2) is offline",
|
|
"irc_notify,irc_notify_quit,nick_nick2,notify_message,log3");
|
|
RECV(":server 731 alice :nick1!user1@host1,nick2!user2@host2");
|
|
CHECK_SRV("--", "notify: nick2 (user2@host2) is offline",
|
|
"irc_notify,irc_notify_quit,nick_nick2,notify_message,log3");
|
|
|
|
RECV(":server 730 alice :nick1!user1@host1,nick2!user2@host2");
|
|
CHECK_SRV("--", "notify: nick1 (user1@host1) has connected",
|
|
"irc_notify,irc_notify_join,nick_nick1,notify_message,log3");
|
|
CHECK_SRV("--", "notify: nick2 (user2@host2) is connected",
|
|
"irc_notify,irc_notify_join,nick_nick2,notify_message,log3");
|
|
|
|
run_cmd_quiet ("/mute /notify del nick1 " IRC_FAKE_SERVER);
|
|
|
|
/* with notify on nick1 and nick2 */
|
|
run_cmd_quiet ("/notify add nick1 " IRC_FAKE_SERVER);
|
|
run_cmd_quiet ("/notify add nick2 " IRC_FAKE_SERVER);
|
|
|
|
RECV(":server 730 alice :nick1!user1@host1,nick2!user2@host2");
|
|
CHECK_SRV("--", "notify: nick1 (user1@host1) is connected",
|
|
"irc_notify,irc_notify_join,nick_nick1,notify_message,log3");
|
|
CHECK_SRV("--", "notify: nick2 (user2@host2) is connected",
|
|
"irc_notify,irc_notify_join,nick_nick2,notify_message,log3");
|
|
|
|
RECV(":server 731 alice :nick1!user1@host1,nick2!user2@host2");
|
|
CHECK_SRV("--", "notify: nick1 (user1@host1) has quit",
|
|
"irc_notify,irc_notify_quit,nick_nick1,notify_message,log3");
|
|
CHECK_SRV("--", "notify: nick2 (user2@host2) has quit",
|
|
"irc_notify,irc_notify_quit,nick_nick2,notify_message,log3");
|
|
|
|
RECV(":server 730 alice :nick1!user1@host1,nick2!user2@host2");
|
|
CHECK_SRV("--", "notify: nick1 (user1@host1) has connected",
|
|
"irc_notify,irc_notify_join,nick_nick1,notify_message,log3");
|
|
CHECK_SRV("--", "notify: nick2 (user2@host2) has connected",
|
|
"irc_notify,irc_notify_join,nick_nick2,notify_message,log3");
|
|
|
|
run_cmd_quiet ("/mute /notify del nick1 " IRC_FAKE_SERVER);
|
|
run_cmd_quiet ("/mute /notify del nick2 " IRC_FAKE_SERVER);
|
|
}
|
|
|
|
/*
|
|
* Test functions:
|
|
* irc_protocol_cb_732 (list of monitored nicks (RPL_MONLIST))
|
|
*/
|
|
|
|
TEST(IrcProtocolWithServer, 732)
|
|
{
|
|
SRV_INIT;
|
|
|
|
/* not enough parameters */
|
|
RECV(":server 732");
|
|
CHECK_ERROR_PARAMS("732", 0, 1);
|
|
|
|
RECV(":server 732 alice");
|
|
CHECK_SRV("--", "", "irc_732,irc_numeric,nick_server,log3");
|
|
RECV(":server 732 alice : nick1!user1@host1,nick2!user2@host2 ");
|
|
CHECK_SRV("--", "nick1!user1@host1,nick2!user2@host2",
|
|
"irc_732,irc_numeric,nick_server,log3");
|
|
}
|
|
|
|
/*
|
|
* Test functions:
|
|
* irc_protocol_cb_733 (end of a monitor list (RPL_ENDOFMONLIST))
|
|
*/
|
|
|
|
TEST(IrcProtocolWithServer, 733)
|
|
{
|
|
SRV_INIT;
|
|
|
|
/* not enough parameters */
|
|
RECV(":server 733");
|
|
CHECK_ERROR_PARAMS("733", 0, 1);
|
|
|
|
RECV(":server 733 alice");
|
|
CHECK_SRV("--", "", "irc_733,irc_numeric,nick_server,log3");
|
|
RECV(":server 733 alice end");
|
|
CHECK_SRV("--", "end", "irc_733,irc_numeric,nick_server,log3");
|
|
RECV(":server 733 alice : End of MONITOR list ");
|
|
CHECK_SRV("--", " End of MONITOR list ", "irc_733,irc_numeric,nick_server,log3");
|
|
}
|
|
|
|
/*
|
|
* Test functions:
|
|
* irc_protocol_cb_734 (monitor list is full (ERR_MONLISTFULL))
|
|
*/
|
|
|
|
TEST(IrcProtocolWithServer, 734)
|
|
{
|
|
SRV_INIT;
|
|
|
|
/* not enough parameters */
|
|
RECV(":server 734");
|
|
CHECK_ERROR_PARAMS("734", 0, 3);
|
|
RECV(":server 734 alice");
|
|
CHECK_ERROR_PARAMS("734", 1, 3);
|
|
RECV(":server 734 alice 10");
|
|
CHECK_ERROR_PARAMS("734", 2, 3);
|
|
|
|
RECV(":server 734 alice 10 nick1,nick2");
|
|
CHECK_SRV("=!=", " (10)", "irc_734,irc_numeric,nick_server,log3");
|
|
RECV(":server 734 alice 10 nick1,nick2 full");
|
|
CHECK_SRV("=!=", "full (10)", "irc_734,irc_numeric,nick_server,log3");
|
|
RECV(":server 734 alice 10 nick1,nick2 : \002Monitor list is full ");
|
|
CHECK_SRV("=!=", " Monitor list is full (10)",
|
|
"irc_734,irc_numeric,nick_server,log3");
|
|
}
|
|
|
|
/*
|
|
* Test functions:
|
|
* irc_protocol_cb_742 (mode cannot be set)
|
|
*/
|
|
|
|
TEST(IrcProtocolWithServer, 742)
|
|
{
|
|
SRV_INIT_JOIN;
|
|
|
|
/* not enough parameters */
|
|
RECV(":server 742");
|
|
CHECK_ERROR_PARAMS("742", 0, 2);
|
|
RECV(":server 742 alice");
|
|
CHECK_ERROR_PARAMS("742", 1, 2);
|
|
|
|
RECV(":server 742 alice #test");
|
|
CHECK_SRV("--", "#test", "irc_742,irc_numeric,nick_server,log3");
|
|
RECV(":server 742 alice #test n nstlk : \002MODE cannot be set due to channel "
|
|
"having an active MLOCK restriction policy ");
|
|
CHECK_CHAN("--",
|
|
"#test: n nstlk MODE cannot be set due to channel having "
|
|
"an active MLOCK restriction policy ",
|
|
"irc_742,irc_numeric,nick_server,log3");
|
|
RECV(":server 742 alice #test2 n nstlk :\002MODE cannot be set due to channel "
|
|
"having an active MLOCK restriction policy");
|
|
CHECK_SRV("--",
|
|
"#test2: n nstlk MODE cannot be set due to channel having "
|
|
"an active MLOCK restriction policy",
|
|
"irc_742,irc_numeric,nick_server,log3");
|
|
}
|
|
|
|
/*
|
|
* Test functions:
|
|
* irc_protocol_cb_900 (logged in as (SASL))
|
|
*/
|
|
|
|
TEST(IrcProtocolWithServer, 900)
|
|
{
|
|
SRV_INIT;
|
|
|
|
/* not enough parameters */
|
|
RECV(":server 900");
|
|
CHECK_ERROR_PARAMS("900", 0, 4);
|
|
RECV(":server 900 alice");
|
|
CHECK_ERROR_PARAMS("900", 1, 4);
|
|
RECV(":server 900 alice alice!user@host");
|
|
CHECK_ERROR_PARAMS("900", 2, 4);
|
|
RECV(":server 900 alice alice!user@host alice");
|
|
CHECK_ERROR_PARAMS("900", 3, 4);
|
|
|
|
RECV(":server 900 alice alice!user@host alice logged");
|
|
CHECK_SRV("--", "logged (alice!user@host)",
|
|
"irc_900,irc_numeric,nick_server,log3");
|
|
RECV(":server 900 alice alice!user@host alice : "
|
|
"\002You are now logged in as mynick ");
|
|
CHECK_SRV("--", " You are now logged in as mynick (alice!user@host)",
|
|
"irc_900,irc_numeric,nick_server,log3");
|
|
RECV(":server 900 * * alice : \002You are now logged in as mynick ");
|
|
CHECK_SRV("--", " You are now logged in as mynick ",
|
|
"irc_900,irc_numeric,nick_server,log3");
|
|
}
|
|
|
|
/*
|
|
* Test functions:
|
|
* irc_protocol_cb_901 (you are now logged out)
|
|
*/
|
|
|
|
TEST(IrcProtocolWithServer, 901)
|
|
{
|
|
SRV_INIT;
|
|
|
|
/* not enough parameters */
|
|
RECV(":server 901");
|
|
CHECK_ERROR_PARAMS("901", 0, 3);
|
|
RECV(":server 901 alice");
|
|
CHECK_ERROR_PARAMS("901", 1, 3);
|
|
RECV(":server 901 alice nick!user@host");
|
|
CHECK_ERROR_PARAMS("901", 2, 3);
|
|
|
|
RECV(":server 901 alice nick!user@host logged");
|
|
CHECK_SRV("--", "logged", "irc_901,irc_numeric,nick_server,log3");
|
|
RECV(":server 901 alice nick!user@host : \002You are now logged out ");
|
|
CHECK_SRV("--", " You are now logged out ",
|
|
"irc_901,irc_numeric,nick_server,log3");
|
|
}
|
|
|
|
/*
|
|
* Test functions:
|
|
* irc_protocol_cb_903 (SASL OK)
|
|
* irc_protocol_cb_907 (SASL OK)
|
|
*/
|
|
|
|
TEST(IrcProtocolWithServer, 903_907)
|
|
{
|
|
SRV_INIT;
|
|
|
|
/* not enough parameters */
|
|
RECV(":server 903");
|
|
CHECK_ERROR_PARAMS("903", 0, 1);
|
|
|
|
/* not enough parameters */
|
|
RECV(":server 907");
|
|
CHECK_ERROR_PARAMS("907", 0, 1);
|
|
|
|
RECV(":server 903 alice ok");
|
|
CHECK_SRV("--", "ok", "irc_903,irc_numeric,nick_server,log3");
|
|
RECV(":server 903 alice : \002SASL authentication successful ");
|
|
CHECK_SRV("--", " SASL authentication successful ",
|
|
"irc_903,irc_numeric,nick_server,log3");
|
|
RECV(":server 903 * : SASL authentication successful ");
|
|
CHECK_SRV("--", " SASL authentication successful ",
|
|
"irc_903,irc_numeric,nick_server,log3");
|
|
|
|
|
|
RECV(":server 907 alice ok");
|
|
CHECK_SRV("--", "ok", "irc_907,irc_numeric,nick_server,log3");
|
|
RECV(":server 907 alice : \002SASL authentication successful ");
|
|
CHECK_SRV("--", " SASL authentication successful ",
|
|
"irc_907,irc_numeric,nick_server,log3");
|
|
}
|
|
|
|
/*
|
|
* Test functions:
|
|
* irc_protocol_cb_902 (SASL failed)
|
|
* irc_protocol_cb_904 (SASL failed)
|
|
* irc_protocol_cb_905 (SASL failed)
|
|
* irc_protocol_cb_906 (SASL failed)
|
|
*/
|
|
|
|
TEST(IrcProtocolWithServer, 902_904_905_906)
|
|
{
|
|
SRV_INIT;
|
|
|
|
/* not enough parameters */
|
|
RECV(":server 902");
|
|
CHECK_ERROR_PARAMS("902", 0, 1);
|
|
|
|
/* not enough parameters */
|
|
RECV(":server 904");
|
|
CHECK_ERROR_PARAMS("904", 0, 1);
|
|
|
|
/* not enough parameters */
|
|
RECV(":server 905");
|
|
CHECK_ERROR_PARAMS("905", 0, 1);
|
|
|
|
/* not enough parameters */
|
|
RECV(":server 906");
|
|
CHECK_ERROR_PARAMS("906", 0, 1);
|
|
|
|
RECV(":server 902 alice error");
|
|
CHECK_SRV("--", "error", "irc_902,irc_numeric,nick_server,log3");
|
|
RECV(":server 902 alice : \002SASL authentication failed ");
|
|
CHECK_SRV("--", " SASL authentication failed ",
|
|
"irc_902,irc_numeric,nick_server,log3");
|
|
|
|
RECV(":server 904 alice error");
|
|
CHECK_SRV("--", "error", "irc_904,irc_numeric,nick_server,log3");
|
|
RECV(":server 904 alice : \002SASL authentication failed ");
|
|
CHECK_SRV("--", " SASL authentication failed ",
|
|
"irc_904,irc_numeric,nick_server,log3");
|
|
|
|
RECV(":server 905 alice error");
|
|
CHECK_SRV("--", "error", "irc_905,irc_numeric,nick_server,log3");
|
|
RECV(":server 905 alice : \002SASL authentication failed ");
|
|
CHECK_SRV("--", " SASL authentication failed ",
|
|
"irc_905,irc_numeric,nick_server,log3");
|
|
|
|
RECV(":server 906 alice error");
|
|
CHECK_SRV("--", "error", "irc_906,irc_numeric,nick_server,log3");
|
|
RECV(":server 906 alice : \002SASL authentication failed ");
|
|
CHECK_SRV("--", " SASL authentication failed ",
|
|
"irc_906,irc_numeric,nick_server,log3");
|
|
}
|
|
|
|
/*
|
|
* Test functions:
|
|
* irc_protocol_cb_936 (censored word)
|
|
*/
|
|
|
|
TEST(IrcProtocolWithServer, 936)
|
|
{
|
|
SRV_INIT_JOIN;
|
|
|
|
/* not enough parameters */
|
|
RECV(":server 936");
|
|
CHECK_ERROR_PARAMS("936", 0, 2);
|
|
RECV(":server 936 alice");
|
|
CHECK_ERROR_PARAMS("936", 1, 2);
|
|
|
|
RECV(":server 936 alice #test");
|
|
CHECK_SRV("--", "#test", "irc_936,irc_numeric,nick_server,log3");
|
|
RECV(":server 936 alice #test CENSORED_WORD "
|
|
": \002Your message contained a censored word, and was blocked ");
|
|
CHECK_CHAN("--",
|
|
"#test: CENSORED_WORD Your message contained a censored word, "
|
|
"and was blocked ",
|
|
"irc_936,irc_numeric,nick_server,log3");
|
|
}
|
|
|
|
/*
|
|
* Test functions:
|
|
* irc_protocol_cb_server_mode_reason
|
|
*
|
|
* Messages:
|
|
* 973: whois (secure connection)
|
|
* 974: whois (secure connection)
|
|
* 975: whois (secure connection)
|
|
*/
|
|
|
|
TEST(IrcProtocolWithServer, server_mode_reason)
|
|
{
|
|
SRV_INIT;
|
|
|
|
/* not enough parameters */
|
|
RECV(":server 973");
|
|
CHECK_ERROR_PARAMS("973", 0, 1);
|
|
|
|
RECV(":server 973 alice");
|
|
CHECK_NO_MSG;
|
|
RECV(":server 973 alice mode");
|
|
CHECK_SRV("--", "mode", "irc_973,irc_numeric,nick_server,log3");
|
|
RECV(":server 973 alice mode test");
|
|
CHECK_SRV("--", "mode: test", "irc_973,irc_numeric,nick_server,log3");
|
|
RECV(":server 973 alice mode : test ");
|
|
CHECK_SRV("--", "mode: test ", "irc_973,irc_numeric,nick_server,log3");
|
|
|
|
RECV(":server 974 alice");
|
|
CHECK_NO_MSG;
|
|
RECV(":server 974 alice mode");
|
|
CHECK_SRV("--", "mode", "irc_974,irc_numeric,nick_server,log3");
|
|
RECV(":server 974 alice mode test");
|
|
CHECK_SRV("--", "mode: test", "irc_974,irc_numeric,nick_server,log3");
|
|
RECV(":server 974 alice mode : test ");
|
|
CHECK_SRV("--", "mode: test ", "irc_974,irc_numeric,nick_server,log3");
|
|
|
|
RECV(":server 975 alice");
|
|
CHECK_NO_MSG;
|
|
RECV(":server 975 alice mode");
|
|
CHECK_SRV("--", "mode", "irc_975,irc_numeric,nick_server,log3");
|
|
RECV(":server 975 alice mode test");
|
|
CHECK_SRV("--", "mode: test", "irc_975,irc_numeric,nick_server,log3");
|
|
RECV(":server 975 alice mode : test ");
|
|
CHECK_SRV("--", "mode: test ", "irc_975,irc_numeric,nick_server,log3");
|
|
|
|
RECV(":server 973 bob");
|
|
CHECK_SRV("--", "bob", "irc_973,irc_numeric,nick_server,log3");
|
|
RECV(":server 973 bob mode");
|
|
CHECK_SRV("--", "bob: mode", "irc_973,irc_numeric,nick_server,log3");
|
|
RECV(":server 973 bob mode test");
|
|
CHECK_SRV("--", "bob: mode test", "irc_973,irc_numeric,nick_server,log3");
|
|
RECV(":server 973 bob mode : test ");
|
|
CHECK_SRV("--", "bob: mode test ", "irc_973,irc_numeric,nick_server,log3");
|
|
|
|
RECV(":server 974 bob");
|
|
CHECK_SRV("--", "bob", "irc_974,irc_numeric,nick_server,log3");
|
|
RECV(":server 974 bob mode");
|
|
CHECK_SRV("--", "bob: mode", "irc_974,irc_numeric,nick_server,log3");
|
|
RECV(":server 974 bob mode test");
|
|
CHECK_SRV("--", "bob: mode test", "irc_974,irc_numeric,nick_server,log3");
|
|
RECV(":server 974 bob mode : test ");
|
|
CHECK_SRV("--", "bob: mode test ", "irc_974,irc_numeric,nick_server,log3");
|
|
|
|
RECV(":server 975 bob");
|
|
CHECK_SRV("--", "bob", "irc_975,irc_numeric,nick_server,log3");
|
|
RECV(":server 975 bob mode");
|
|
CHECK_SRV("--", "bob: mode", "irc_975,irc_numeric,nick_server,log3");
|
|
RECV(":server 975 bob mode test");
|
|
CHECK_SRV("--", "bob: mode test", "irc_975,irc_numeric,nick_server,log3");
|
|
RECV(":server 975 bob mode : test ");
|
|
CHECK_SRV("--", "bob: mode test ", "irc_975,irc_numeric,nick_server,log3");
|
|
}
|