Fork us on GitHub Follow us on Facebook Follow us on Twitter

Changeset e1b4ae0 in mainline


Ignore:
Timestamp:
2017-09-11T07:05:21Z (3 years ago)
Author:
Jiri Svoboda <jiri@…>
Branches:
master
Children:
9713b0b
Parents:
975d528
Message:

Start adding tests for TCP conn module. Make sure all connections have been freed at the end of a test.

Location:
uspace
Files:
1 added
10 edited

Legend:

Unmodified
Added
Removed
  • uspace/lib/nettl/src/amap.c

    r975d528 re1b4ae0  
    9797{
    9898        log_msg(LOG_DEFAULT, LVL_DEBUG2, "amap_destroy()");
     99
     100        assert(list_empty(&map->repla));
     101        assert(list_empty(&map->laddr));
     102        assert(list_empty(&map->llink));
    99103        free(map);
    100104}
  • uspace/lib/nettl/src/portrng.c

    r975d528 re1b4ae0  
    180180 * @param pnum Port number
    181181 */
     182#include <stdio.h>
    182183void portrng_free_port(portrng_t *pr, uint16_t pnum)
    183184{
     185        log_msg(LOG_DEFAULT, LVL_DEBUG2, "portrng_free_port(%u)", pnum);
    184186        log_msg(LOG_DEFAULT, LVL_DEBUG2, "portrng_free_port() - begin");
    185187        list_foreach(pr->used, lprng, portrng_port_t, port) {
     188                log_msg(LOG_DEFAULT, LVL_DEBUG2, "portrng_free_port - check port %u", port->pn);
    186189                if (port->pn == pnum) {
     190                        log_msg(LOG_DEFAULT, LVL_DEBUG2, "portrng_free_port - OK");
    187191                        list_remove(&port->lprng);
    188192                        free(port);
     193                        log_msg(LOG_DEFAULT, LVL_DEBUG2, "portrng_free_port() - end");
    189194                        return;
    190195                }
    191196        }
    192197
     198        log_msg(LOG_DEFAULT, LVL_DEBUG2, "portrng_free_port - FAIL");
    193199        assert(false);
    194         log_msg(LOG_DEFAULT, LVL_DEBUG2, "portrng_free_port() - end");
    195200}
    196201
  • uspace/srv/net/tcp/Makefile

    r975d528 re1b4ae0  
    5757TEST_SOURCES = \
    5858        $(SOURCES_COMMON) \
     59        test/conn.c \
    5960        test/iqueue.c \
    6061        test/main.c \
  • uspace/srv/net/tcp/conn.c

    r975d528 re1b4ae0  
    5959#define TIME_WAIT_TIMEOUT       (2*MAX_SEGMENT_LIFETIME)
    6060
     61/** List of all allocated connections */
    6162static LIST_INITIALIZE(conn_list);
    6263/** Taken after tcp_conn_t lock */
    6364static FIBRIL_MUTEX_INITIALIZE(conn_list_lock);
     65/** Connection association map */
    6466static amap_t *amap;
     67static FIBRIL_MUTEX_INITIALIZE(amap_lock);
    6568
    6669static void tcp_conn_seg_process(tcp_conn_t *, tcp_segment_t *);
     
    8588
    8689        return EOK;
     90}
     91
     92/** Finalize connections. */
     93void tcp_conns_fini(void)
     94{
     95        amap_destroy(amap);
     96        amap = NULL;
     97
     98        assert(list_empty(&conn_list));
    8799}
    88100
     
    156168        if (epp != NULL)
    157169                conn->ident = *epp;
     170
     171        fibril_mutex_lock(&conn_list_lock);
     172        list_append(&conn->link, &conn_list);
     173        fibril_mutex_unlock(&conn_list_lock);
    158174
    159175        return conn;
     
    192208        tcp_tqueue_fini(&conn->retransmit);
    193209
     210        fibril_mutex_lock(&conn_list_lock);
     211        list_remove(&conn->link);
     212        fibril_mutex_unlock(&conn_list_lock);
     213
    194214        if (conn->rcv_buf != NULL)
    195215                free(conn->rcv_buf);
     
    263283        log_msg(LOG_DEFAULT, LVL_DEBUG, "%s: tcp_conn_delete(%p)", conn->name, conn);
    264284
     285        assert(conn->mapped == false);
    265286        assert(conn->deleted == false);
    266287        conn->deleted = true;
     
    280301
    281302        tcp_conn_addref(conn);
    282         fibril_mutex_lock(&conn_list_lock);
     303        fibril_mutex_lock(&amap_lock);
    283304
    284305        log_msg(LOG_DEFAULT, LVL_DEBUG, "tcp_conn_add: conn=%p", conn);
     
    287308        if (rc != EOK) {
    288309                tcp_conn_delref(conn);
    289                 fibril_mutex_unlock(&conn_list_lock);
     310                fibril_mutex_unlock(&amap_lock);
    290311                return rc;
    291312        }
    292313
    293314        conn->ident = aepp;
    294         list_append(&conn->link, &conn_list);
    295         fibril_mutex_unlock(&conn_list_lock);
     315        conn->mapped = true;
     316        fibril_mutex_unlock(&amap_lock);
    296317
    297318        return EOK;
     
    304325void tcp_conn_remove(tcp_conn_t *conn)
    305326{
    306         if (!link_used(&conn->link))
    307                 return;
    308 
    309         fibril_mutex_lock(&conn_list_lock);
     327        if (!conn->mapped)
     328                return;
     329
     330        fibril_mutex_lock(&amap_lock);
    310331        amap_remove(amap, &conn->ident);
    311         list_remove(&conn->link);
    312         fibril_mutex_unlock(&conn_list_lock);
     332        conn->mapped = false;
     333        fibril_mutex_unlock(&amap_lock);
    313334        tcp_conn_delref(conn);
    314335}
     
    400421        log_msg(LOG_DEFAULT, LVL_DEBUG, "tcp_conn_find_ref(%p)", epp);
    401422
    402         fibril_mutex_lock(&conn_list_lock);
     423        fibril_mutex_lock(&amap_lock);
    403424
    404425        rc = amap_find_match(amap, epp, &arg);
    405426        if (rc != EOK) {
    406427                assert(rc == ENOENT);
    407                 fibril_mutex_unlock(&conn_list_lock);
     428                fibril_mutex_unlock(&amap_lock);
    408429                return NULL;
    409430        }
     
    412433        tcp_conn_addref(conn);
    413434
    414         fibril_mutex_unlock(&conn_list_lock);
     435        fibril_mutex_unlock(&amap_lock);
    415436        log_msg(LOG_DEFAULT, LVL_DEBUG, "tcp_conn_find_ref: got conn=%p",
    416437            conn);
     
    424445void tcp_conn_reset(tcp_conn_t *conn)
    425446{
     447        assert(fibril_mutex_is_locked(&conn->lock));
     448
    426449        log_msg(LOG_DEFAULT, LVL_DEBUG, "%s: tcp_conn_reset()", conn->name);
    427450        conn->reset = true;
     
    12231246
    12241247                /* Need to remove and re-insert connection with new identity */
    1225                 fibril_mutex_lock(&conn_list_lock);
     1248                fibril_mutex_lock(&amap_lock);
    12261249
    12271250                if (inet_addr_is_any(&conn->ident.remote.addr))
     
    12391262                        assert(rc == ENOMEM);
    12401263                        log_msg(LOG_DEFAULT, LVL_ERROR, "Out of memory.");
    1241                         fibril_mutex_unlock(&conn_list_lock);
     1264                        fibril_mutex_unlock(&amap_lock);
    12421265                        tcp_conn_unlock(conn);
    12431266                        return;
     
    12451268
    12461269                amap_remove(amap, &oldepp);
    1247                 fibril_mutex_unlock(&conn_list_lock);
     1270                fibril_mutex_unlock(&amap_lock);
    12481271
    12491272                conn->name = (char *) "a";
  • uspace/srv/net/tcp/conn.h

    r975d528 re1b4ae0  
    4141
    4242extern int tcp_conns_init(void);
     43extern void tcp_conns_fini(void);
    4344extern tcp_conn_t *tcp_conn_new(inet_ep2_t *);
    4445extern void tcp_conn_delete(tcp_conn_t *);
  • uspace/srv/net/tcp/tcp_type.h

    r975d528 re1b4ae0  
    239239        /** Connection identification (local and remote endpoint) */
    240240        inet_ep2_t ident;
     241        /** Connection is in association map */
     242        bool mapped;
    241243
    242244        /** Active or passive connection */
     
    369371/** TCP client */
    370372typedef struct tcp_client {
    371         /** Client callbac session */
     373        /** Client callback session */
    372374        async_sess_t *sess;
    373375        /** Client's connections */
  • uspace/srv/net/tcp/test/iqueue.c

    r975d528 re1b4ae0  
    5656        tcp_iqueue_init(&iqueue, conn);
    5757        rc = tcp_iqueue_get_ready_seg(&iqueue, &rseg);
    58         PCUT_ASSERT_INT_EQUALS(ENOENT, rc);
     58        PCUT_ASSERT_ERRNO_VAL(ENOENT, rc);
    5959
    6060        tcp_conn_delete(conn);
     
    8989        tcp_iqueue_init(&iqueue, conn);
    9090        rc = tcp_iqueue_get_ready_seg(&iqueue, &rseg);
    91         PCUT_ASSERT_INT_EQUALS(ENOENT, rc);
     91        PCUT_ASSERT_ERRNO_VAL(ENOENT, rc);
    9292
    9393        seg->seq = 10;
    9494        tcp_iqueue_insert_seg(&iqueue, seg);
    9595        rc = tcp_iqueue_get_ready_seg(&iqueue, &rseg);
    96         PCUT_ASSERT_INT_EQUALS(EOK, rc);
     96        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    9797
    9898        seg->seq = 15;
    9999        tcp_iqueue_insert_seg(&iqueue, seg);
    100100        rc = tcp_iqueue_get_ready_seg(&iqueue, &rseg);
    101         PCUT_ASSERT_INT_EQUALS(ENOENT, rc);
     101        PCUT_ASSERT_ERRNO_VAL(ENOENT, rc);
    102102        tcp_iqueue_remove_seg(&iqueue, seg);
    103103
     
    137137        tcp_iqueue_init(&iqueue, conn);
    138138        rc = tcp_iqueue_get_ready_seg(&iqueue, &rseg);
    139         PCUT_ASSERT_INT_EQUALS(ENOENT, rc);
     139        PCUT_ASSERT_ERRNO_VAL(ENOENT, rc);
    140140
    141141        /* Test reception in ascending order */
     
    146146
    147147        rc = tcp_iqueue_get_ready_seg(&iqueue, &rseg);
    148         PCUT_ASSERT_INT_EQUALS(EOK, rc);
     148        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    149149        PCUT_ASSERT_TRUE(rseg == seg1);
    150150
    151151        rc = tcp_iqueue_get_ready_seg(&iqueue, &rseg);
    152         PCUT_ASSERT_INT_EQUALS(EOK, rc);
     152        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    153153        PCUT_ASSERT_TRUE(rseg == seg2);
    154154
     
    160160
    161161        rc = tcp_iqueue_get_ready_seg(&iqueue, &rseg);
    162         PCUT_ASSERT_INT_EQUALS(EOK, rc);
    163         PCUT_ASSERT_TRUE(rseg == seg2);
     162        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     163        PCUT_ASSERT_EQUALS(seg2, rseg);
    164164
    165165        rc = tcp_iqueue_get_ready_seg(&iqueue, &rseg);
    166         PCUT_ASSERT_INT_EQUALS(EOK, rc);
    167         PCUT_ASSERT_TRUE(rseg == seg1);
     166        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     167        PCUT_ASSERT_EQUALS(seg1, rseg);
    168168
    169169        rc = tcp_iqueue_get_ready_seg(&iqueue, &rseg);
    170         PCUT_ASSERT_INT_EQUALS(ENOENT, rc);
     170        PCUT_ASSERT_ERRNO_VAL(ENOENT, rc);
    171171
    172172        tcp_segment_delete(seg1);
  • uspace/srv/net/tcp/test/main.c

    r975d528 re1b4ae0  
    5757PCUT_INIT
    5858
     59PCUT_IMPORT(conn);
    5960PCUT_IMPORT(iqueue);
    6061PCUT_IMPORT(pdu);
  • uspace/srv/net/tcp/test/pdu.c

    r975d528 re1b4ae0  
    6262
    6363        rc = tcp_pdu_encode(&epp, seg, &pdu);
    64         PCUT_ASSERT_INT_EQUALS(EOK, rc);
     64        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    6565        rc = tcp_pdu_decode(pdu, &depp, &dseg);
    66         PCUT_ASSERT_INT_EQUALS(EOK, rc);
     66        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    6767
    6868        test_seg_same(seg, dseg);
     
    100100
    101101        rc = tcp_pdu_encode(&epp, seg, &pdu);
    102         PCUT_ASSERT_INT_EQUALS(EOK, rc);
     102        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    103103        rc = tcp_pdu_decode(pdu, &depp, &dseg);
    104         PCUT_ASSERT_INT_EQUALS(EOK, rc);
     104        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
    105105
    106106        test_seg_same(seg, dseg);
  • uspace/srv/net/tcp/test/tqueue.c

    r975d528 re1b4ae0  
    5757        /* We will be calling functions that perform logging */
    5858        rc = log_init("test-tcp");
    59         PCUT_ASSERT_INT_EQUALS(EOK, rc);
    60 }
     59        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     60
     61        rc = tcp_conns_init();
     62        PCUT_ASSERT_ERRNO_VAL(EOK, rc);
     63}
     64
     65PCUT_TEST_AFTER
     66{
     67        tcp_conns_fini();
     68}
     69
    6170
    6271/** Test  */
     
    7584        seg_cnt = 0;
    7685
     86        tcp_conn_lock(conn);
     87        tcp_conn_reset(conn);
     88        tcp_conn_unlock(conn);
    7789        tcp_conn_delete(conn);
    7890        PCUT_ASSERT_EQUALS(0, seg_cnt);
Note: See TracChangeset for help on using the changeset viewer.