src/test/irc_net.c
author Tero Marttila <terom@fixme.fi>
Mon, 04 May 2009 20:55:04 +0300
branchnew-transport
changeset 168 a58ad50911fc
permissions -rw-r--r--
refactor test.c into tests/*
#include "irc_net.h"
#include "test.h"

struct irc_net* setup_irc_net_unregistered (struct transport_test *tp)
{
    struct irc_net *net;
    struct irc_net_info net_info = {
        .register_info = {
            "nick", "user", "realname"
        },
    };
    struct error_info err;

    // create the irc_net
    net_info.transport = transport_test_cast(tp);
    assert_success(irc_net_create(&net, &net_info, &err));

    // test register output
    assert_transport_data(tp, "NICK nick\r\nUSER user 0 * realname\r\n");
    
    // ok
    return net; 
}

void test_irc_net_welcome (struct transport_test *tp, struct irc_net *net)
{
    // registration reply
    transport_test_push_fmt(tp, "001 mynick :Blaa blaa blaa\r\n");
    assert(net->conn->registered);
    assert_strcmp(net->conn->nickname, "mynick");

}

struct irc_net* setup_irc_net (struct transport_test *tp)
{
    struct irc_net *net;   

    net = setup_irc_net_unregistered(tp);
    test_irc_net_welcome(tp, net);
    
    // ok
    return net;
}

void test_irc_net (void)
{
    struct transport_test *tp = setup_transport_test();

    // XXX: test connected/connecting/disconnected/etc stuff
    
    // create the network
    log_info("test irc_net_create");
    struct irc_net *net = setup_irc_net_unregistered(tp);

    // send the registration reply
    log_info("test irc_conn_on_RPL_WELCOME");
    test_irc_net_welcome(tp, net);

    // test errors by setting EOF
    log_info("test irc_net_error");
    transport_test_push_eof(tp);
    assert(net->conn == NULL);

    // cleanup
    irc_net_destroy(net);
}