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>