Annotation of embedaddon/curl/tests/unit/unit1305.c, revision 1.1.1.1

1.1       misho       1: /***************************************************************************
                      2:  *                                  _   _ ____  _
                      3:  *  Project                     ___| | | |  _ \| |
                      4:  *                             / __| | | | |_) | |
                      5:  *                            | (__| |_| |  _ <| |___
                      6:  *                             \___|\___/|_| \_\_____|
                      7:  *
                      8:  * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, et al.
                      9:  *
                     10:  * This software is licensed as described in the file COPYING, which
                     11:  * you should have received as part of this distribution. The terms
                     12:  * are also available at https://curl.haxx.se/docs/copyright.html.
                     13:  *
                     14:  * You may opt to use, copy, modify, merge, publish, distribute and/or sell
                     15:  * copies of the Software, and permit persons to whom the Software is
                     16:  * furnished to do so, under the terms of the COPYING file.
                     17:  *
                     18:  * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
                     19:  * KIND, either express or implied.
                     20:  *
                     21:  ***************************************************************************/
                     22: #include "curlcheck.h"
                     23: 
                     24: #ifdef HAVE_NETINET_IN_H
                     25: #  include <netinet/in.h>
                     26: #endif
                     27: #ifdef HAVE_NETDB_H
                     28: #  include <netdb.h>
                     29: #endif
                     30: #ifdef HAVE_ARPA_INET_H
                     31: #  include <arpa/inet.h>
                     32: #endif
                     33: 
                     34: #define ENABLE_CURLX_PRINTF
                     35: #include "curlx.h"
                     36: 
                     37: #include "hash.h"
                     38: #include "hostip.h"
                     39: 
                     40: #include "memdebug.h" /* LAST include file */
                     41: 
                     42: static struct Curl_easy *data;
                     43: static struct curl_hash hp;
                     44: static char *data_key;
                     45: static struct Curl_dns_entry *data_node;
                     46: 
                     47: static CURLcode unit_setup(void)
                     48: {
                     49:   int rc;
                     50:   data = curl_easy_init();
                     51:   if(!data)
                     52:     return CURLE_OUT_OF_MEMORY;
                     53: 
                     54:   rc = Curl_mk_dnscache(&hp);
                     55:   if(rc) {
                     56:     curl_easy_cleanup(data);
                     57:     curl_global_cleanup();
                     58:     return CURLE_OUT_OF_MEMORY;
                     59:   }
                     60:   return CURLE_OK;
                     61: }
                     62: 
                     63: static void unit_stop(void)
                     64: {
                     65:   if(data_node) {
                     66:     Curl_freeaddrinfo(data_node->addr);
                     67:     free(data_node);
                     68:   }
                     69:   free(data_key);
                     70:   Curl_hash_destroy(&hp);
                     71: 
                     72:   curl_easy_cleanup(data);
                     73:   curl_global_cleanup();
                     74: }
                     75: 
                     76: static Curl_addrinfo *fake_ai(void)
                     77: {
                     78:   static Curl_addrinfo *ai;
                     79: 
                     80:   ai = calloc(1, sizeof(Curl_addrinfo));
                     81:   if(!ai)
                     82:     return NULL;
                     83: 
                     84:   ai->ai_canonname = strdup("dummy");
                     85:   if(!ai->ai_canonname) {
                     86:     free(ai);
                     87:     return NULL;
                     88:   }
                     89: 
                     90:   ai->ai_addr = calloc(1, sizeof(struct sockaddr_in));
                     91:   if(!ai->ai_addr) {
                     92:     free(ai->ai_canonname);
                     93:     free(ai);
                     94:     return NULL;
                     95:   }
                     96: 
                     97:   ai->ai_family = AF_INET;
                     98:   ai->ai_addrlen = sizeof(struct sockaddr_in);
                     99: 
                    100:   return ai;
                    101: }
                    102: 
                    103: static CURLcode create_node(void)
                    104: {
                    105:   data_key = aprintf("%s:%d", "dummy", 0);
                    106:   if(!data_key)
                    107:     return CURLE_OUT_OF_MEMORY;
                    108: 
                    109:   data_node = calloc(1, sizeof(struct Curl_dns_entry));
                    110:   if(!data_node)
                    111:     return CURLE_OUT_OF_MEMORY;
                    112: 
                    113:   data_node->addr = fake_ai();
                    114:   if(!data_node->addr)
                    115:     return CURLE_OUT_OF_MEMORY;
                    116: 
                    117:   return CURLE_OK;
                    118: }
                    119: 
                    120: 
                    121: UNITTEST_START
                    122: 
                    123:   struct Curl_dns_entry *nodep;
                    124:   size_t key_len;
                    125: 
                    126:   /* Test 1305 exits without adding anything to the hash */
                    127:   if(strcmp(arg, "1305") != 0) {
                    128:     CURLcode rc = create_node();
                    129:     abort_unless(rc == CURLE_OK, "data node creation failed");
                    130:     key_len = strlen(data_key);
                    131: 
                    132:     data_node->inuse = 1; /* hash will hold the reference */
                    133:     nodep = Curl_hash_add(&hp, data_key, key_len + 1, data_node);
                    134:     abort_unless(nodep, "insertion into hash failed");
                    135:     /* Freeing will now be done by Curl_hash_destroy */
                    136:     data_node = NULL;
                    137:   }
                    138: 
                    139: UNITTEST_STOP

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>