src/test/tcp.c
author Tero Marttila <terom@fixme.fi>
Wed, 27 May 2009 23:57:48 +0300
branchnew-lib-errors
changeset 217 7728d6ec3abf
parent 185 259b5841a0e6
permissions -rw-r--r--
nexus.c compiles
185
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     1
/*
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     2
 * Test interoperability of tcp_client/tcp_server
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     3
 */
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     4
#include "../tcp.h"
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     5
#include "test.h"
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     6
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     7
struct test_tcp_ctx {
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     8
    service_t *service;
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     9
    bool on_service_error;
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    10
    bool on_client_connect;
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    11
    bool on_service_client_error;
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    12
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    13
    transport_t *service_client, *client;
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    14
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    15
    char data;
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    16
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    17
    bool eof;
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    18
};
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    19
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    20
static void on_service_error (service_t *service, const error_t *err, void *arg)
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    21
{
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    22
    struct test_tcp_ctx *ctx = arg;
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    23
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    24
    log_debug("%s", error_msg(err));
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    25
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    26
    assert(service == ctx->service);
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    27
    assert(!ctx->on_service_error);
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    28
   
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    29
    ctx->on_service_error = true;
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    30
}
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    31
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    32
static void on_service_client_connect (transport_t *transport, void *arg)
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    33
{
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    34
    struct test_tcp_ctx *ctx = arg;
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    35
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    36
    log_debug("%p", transport);
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    37
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    38
    assert(!ctx->service_client);
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    39
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    40
    ctx->service_client = transport;
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    41
}
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    42
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    43
static void on_service_client_read (transport_t *transport, void *arg)
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    44
{
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    45
    struct test_tcp_ctx *ctx = arg;
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    46
    char byte;
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    47
    int ret;
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    48
    error_t err;
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    49
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    50
    log_debug("%p", transport);
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    51
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    52
    assert(ctx->service_client == transport);
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    53
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    54
    if ((ret = transport_read(transport, &byte, sizeof(byte), &err)) == 1) {
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    55
        assert(byte == ctx->data);
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    56
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    57
        ctx->data = 0;
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    58
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    59
    } else if (ERROR_CODE(&err) == ERR_EOF) {
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    60
        assert(ctx->eof);
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    61
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    62
        ctx->eof = false;
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    63
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    64
    } else {
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    65
        FATAL_ERROR(&err, "xxx");
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    66
    }
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    67
}
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    68
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    69
static void on_service_client_error (transport_t *transport, const error_t *err, void *arg)
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    70
{
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    71
    struct test_tcp_ctx *ctx = arg;
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    72
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    73
    log_debug("%p: %s", transport, error_msg(err));
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    74
    
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    75
    assert(ctx->service_client = transport);
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    76
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    77
    ctx->on_service_client_error = true;
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    78
}
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    79
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    80
static void on_client_connect (transport_t *transport, void *arg)
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    81
{
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    82
    struct test_tcp_ctx *ctx = arg;
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    83
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    84
    log_debug("%p", transport);
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    85
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    86
    assert(transport == ctx->client);
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    87
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    88
    ctx->on_client_connect = true;
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    89
}
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    90
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    91
static void on_client_read (transport_t *transport, void *arg)
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    92
{
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    93
    struct test_tcp_ctx *ctx = arg;
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    94
    char byte;
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    95
    int ret;
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    96
    error_t err;
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    97
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    98
    log_debug("%p", transport);
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    99
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   100
    assert(transport == ctx->client);
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   101
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   102
    if ((ret = transport_read(transport, &byte, sizeof(byte), &err)) == 1) {
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   103
        assert(byte == ctx->data);
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   104
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   105
        ctx->data = 0;
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   106
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   107
    } else if (ERROR_CODE(&err) == ERR_EOF) {
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   108
        assert(ctx->eof);
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   109
        
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   110
        ctx->eof = false;
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   111
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   112
    } else {
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   113
        FATAL_ERROR(&err, "xxx");
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   114
    }
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   115
}
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   116
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   117
static void on_client_error (transport_t *transport, const error_t *err, void *arg)
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   118
{
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   119
    struct test_tcp_ctx *ctx = arg;
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   120
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   121
    log_debug("%p", transport);
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   122
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   123
    assert(transport == ctx->client);
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   124
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   125
    // XXX
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   126
}
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   127
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   128
static struct service_callbacks test_tcp_service_callbacks = {
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   129
    .on_error   = on_service_error,
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   130
};
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   131
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   132
static struct transport_callbacks test_tcp_service_transport_callbacks = {
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   133
    .on_connect = on_service_client_connect,
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   134
    .on_read    = on_service_client_read,
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   135
    .on_write   = NULL,
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   136
    .on_error   = on_service_client_error,
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   137
};
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   138
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   139
static struct transport_callbacks test_tcp_client_callbacks = {
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   140
    .on_connect = on_client_connect,
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   141
    .on_read    = on_client_read,
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   142
    .on_error   = on_client_error,
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   143
};
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   144
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   145
void test_tcp (void)
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   146
{
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   147
    struct test_tcp_ctx ctx; memset(&ctx, 0, sizeof(ctx));
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   148
    struct service_info serv_info = { 
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   149
        &test_tcp_service_callbacks, &ctx, 
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   150
        { &test_tcp_service_transport_callbacks, &ctx, TRANSPORT_READ } 
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   151
    };
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   152
    struct transport_info client_info = {
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   153
        &test_tcp_client_callbacks, &ctx, TRANSPORT_READ
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   154
    };
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   155
    struct event_base *ev_base = _test_ctx.ev_base;
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   156
    error_t err;
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   157
    
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   158
    // create the service
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   159
    assert_success(tcp_listen(&serv_info, &ctx.service, "localhost", "3232", &err));
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   160
    
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   161
    // connect client -> server
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   162
    assert_success(tcp_connect(&client_info, &ctx.client, "localhost", "3232", &err));
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   163
    event_base_loop(ev_base, EVLOOP_ONCE);
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   164
    assert(ctx.service_client);
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   165
    assert(ctx.on_client_connect);
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   166
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   167
    // send client -> server
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   168
    ctx.data = 'A';
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   169
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   170
    assert(transport_write(ctx.client, &ctx.data, sizeof(ctx.data), &err) == 1);
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   171
    event_base_loop(ev_base, EVLOOP_ONCE);
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   172
    assert(!ctx.data);
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   173
    
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   174
    // send server -> client
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   175
    ctx.data = 'B';
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   176
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   177
    assert(transport_write(ctx.service_client, &ctx.data, sizeof(ctx.data), &err) == 1);
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   178
    event_base_loop(ev_base, EVLOOP_ONCE);
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   179
    assert(!ctx.data);
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   180
    
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   181
    // close client-side connection
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   182
    ctx.eof = true;
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   183
    transport_destroy(ctx.client);
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   184
    event_base_loop(ev_base, EVLOOP_ONCE);
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   185
    assert(ctx.on_service_client_error || !ctx.eof);
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   186
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   187
    // cleanup
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   188
    transport_destroy(ctx.service_client);
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   189
    service_destroy(ctx.service);
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   190
}
259b5841a0e6 add a crude test_tcp, fix some tcp_server bugs, add missing service_destroy function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   191