Converted tests 558 & 559 to use the unit test framework as 1305
Test 558 was just a subset of 559 which is something that can be easily added later.
This commit is contained in:
parent
a8aab6e7d4
commit
fb199cd29d
@ -145,7 +145,9 @@ TEST CASE NUMBERS
|
||||
600 - 699 SCP/SFTP
|
||||
700 - 799 SOCKS4 (even numbers) and SOCK5 (odd numbers)
|
||||
800 - 899 POP3, IMAP, SMTP
|
||||
1000 - 1999 miscellaneous*
|
||||
1000 - 1299 miscellaneous*
|
||||
1300 - 1399 unit tests*
|
||||
1400 - 1999 miscellaneous*
|
||||
2000 - x multiple sequential protocols per test case*
|
||||
|
||||
Since 30-apr-2003, there's nothing in the system that requires us to keep
|
||||
|
@ -59,7 +59,7 @@ EXTRA_DIST = test1 test108 test117 test127 test20 test27 test34 test46 \
|
||||
test1064 test1065 test1066 test1067 test1068 test1069 test1070 test1071 \
|
||||
test1072 test1073 test1074 test1075 test1076 test1077 test1078 test1079 \
|
||||
test1080 test1081 test1082 test1083 test1084 test1085 test633 test634 \
|
||||
test635 test636 test637 test558 test559 test1086 test1087 test1088 \
|
||||
test635 test636 test637 test1086 test1087 test1088 \
|
||||
test574 test575 test576 test577 test1113 test1114 test1089 test1090 \
|
||||
test1091 test1092 test1093 test1094 test1095 test1096 test1097 test560 \
|
||||
test561 test1098 test1099 test562 test563 test1100 test564 test1101 \
|
||||
@ -70,7 +70,7 @@ EXTRA_DIST = test1 test108 test117 test127 test20 test27 test34 test46 \
|
||||
test313 test1115 test578 test579 test1116 test1200 test1201 test1202 \
|
||||
test1203 test1117 test1118 test1119 test1120 test1300 test1301 test1302 \
|
||||
test1303 test320 test321 test322 test323 test324 test1121 test581 test580 \
|
||||
test1304
|
||||
test1304 test1305
|
||||
|
||||
filecheck:
|
||||
@mkdir test-place; \
|
||||
|
26
tests/data/test1305
Normal file
26
tests/data/test1305
Normal file
@ -0,0 +1,26 @@
|
||||
<testcase>
|
||||
<info>
|
||||
<keywords>
|
||||
unittest
|
||||
hash
|
||||
</keywords>
|
||||
</info>
|
||||
|
||||
#
|
||||
# Client-side
|
||||
<client>
|
||||
<server>
|
||||
none
|
||||
</server>
|
||||
<features>
|
||||
unittest
|
||||
</features>
|
||||
<name>
|
||||
internal hash create/add/destroy testing
|
||||
</name>
|
||||
<tool>
|
||||
unit1305
|
||||
</tool>
|
||||
</client>
|
||||
|
||||
</testcase>
|
@ -1,44 +0,0 @@
|
||||
<testcase>
|
||||
#
|
||||
# Server-side
|
||||
<reply>
|
||||
</reply>
|
||||
|
||||
# Client-side
|
||||
<client>
|
||||
<server>
|
||||
none
|
||||
</server>
|
||||
# tool is what to use instead of 'curl'
|
||||
<tool>
|
||||
lib558
|
||||
</tool>
|
||||
# precheck is a command line to run before the test,
|
||||
# to see if we can execute the test or not
|
||||
<precheck>
|
||||
./libtest/lib558 check
|
||||
</precheck>
|
||||
|
||||
<name>
|
||||
internal hash create/destroy testing
|
||||
</name>
|
||||
<command>
|
||||
nothing
|
||||
</command>
|
||||
</client>
|
||||
|
||||
#
|
||||
# Verify data after the test has been "shot"
|
||||
<verify>
|
||||
<stdout mode="text">
|
||||
easy handle init OK
|
||||
creating hash...
|
||||
hash creation OK
|
||||
destroying hash...
|
||||
hash destruction OK
|
||||
destroying easy handle...
|
||||
easy handle destruction OK
|
||||
</stdout>
|
||||
</verify>
|
||||
|
||||
</testcase>
|
@ -1,44 +0,0 @@
|
||||
<testcase>
|
||||
#
|
||||
# Server-side
|
||||
<reply>
|
||||
</reply>
|
||||
|
||||
# Client-side
|
||||
<client>
|
||||
<server>
|
||||
none
|
||||
</server>
|
||||
# tool is what to use instead of 'curl'
|
||||
<tool>
|
||||
lib559
|
||||
</tool>
|
||||
# precheck is a command line to run before the test,
|
||||
# to see if we can execute the test or not
|
||||
<precheck>
|
||||
./libtest/lib559 check
|
||||
</precheck>
|
||||
|
||||
<name>
|
||||
internal hash create/add/destroy testing
|
||||
</name>
|
||||
<command>
|
||||
nothing
|
||||
</command>
|
||||
</client>
|
||||
|
||||
#
|
||||
# Verify data after the test has been "shot"
|
||||
<verify>
|
||||
<stdout mode="text">
|
||||
easy handle init OK
|
||||
creating hash...
|
||||
hash creation OK
|
||||
destroying hash...
|
||||
hash destruction OK
|
||||
destroying easy handle...
|
||||
easy handle destruction OK
|
||||
</stdout>
|
||||
</verify>
|
||||
|
||||
</testcase>
|
@ -65,8 +65,7 @@ endforeach()
|
||||
# lib547
|
||||
# #lib548
|
||||
# lib549 lib552 lib553 lib554 lib555 lib556
|
||||
# lib539 lib557 lib558
|
||||
# #lib559
|
||||
# lib539 lib557
|
||||
# lib560
|
||||
# )
|
||||
|
||||
@ -120,8 +119,3 @@ endforeach()
|
||||
# SET(SOURCE "lib547.c" ${SUPPORTFILES})
|
||||
# ADD_TESTUTIL_IF_NECESSARY(${TEST_NAME})
|
||||
# SETUP_TEST(${TEST_NAME} ${SOURCE})
|
||||
|
||||
# SET(TEST_NAME lib559)
|
||||
# SET(SOURCE "lib558.c" ${SUPPORTFILES})
|
||||
# ADD_TESTUTIL_IF_NECESSARY(${TEST_NAME})
|
||||
# SETUP_TEST(${TEST_NAME} ${SOURCE})
|
||||
|
@ -11,7 +11,7 @@ noinst_PROGRAMS = lib500 lib501 lib502 lib503 lib504 lib505 lib506 \
|
||||
lib574 lib575 lib576 lib577 lib578 lib579 \
|
||||
lib529 lib530 lib532 lib533 lib536 lib537 lib540 lib541 lib542 lib543 \
|
||||
lib544 lib545 lib547 lib548 lib549 lib552 lib553 lib554 lib555 lib556 \
|
||||
lib539 lib557 lib558 lib559 lib560 lib562 lib564 lib565 lib566 lib567 \
|
||||
lib539 lib557 lib560 lib562 lib564 lib565 lib566 lib567 \
|
||||
lib568 lib569 lib570 lib571 lib572 lib573 chkhostname
|
||||
|
||||
chkhostname_SOURCES = chkhostname.c $(top_srcdir)/lib/curl_gethostname.c
|
||||
@ -122,12 +122,6 @@ lib556_SOURCES = lib556.c $(SUPPORTFILES)
|
||||
|
||||
lib557_SOURCES = lib557.c $(SUPPORTFILES)
|
||||
|
||||
lib558_SOURCES = lib558.c $(SUPPORTFILES)
|
||||
lib558_CFLAGS = -DLIB558
|
||||
|
||||
lib559_SOURCES = lib558.c $(SUPPORTFILES)
|
||||
lib559_CFLAGS = -DLIB559
|
||||
|
||||
lib560_SOURCES = lib560.c $(SUPPORTFILES)
|
||||
|
||||
lib574_SOURCES = lib574.c $(SUPPORTFILES)
|
||||
|
@ -1,188 +0,0 @@
|
||||
/*****************************************************************************
|
||||
* _ _ ____ _
|
||||
* Project ___| | | | _ \| |
|
||||
* / __| | | | |_) | |
|
||||
* | (__| |_| | _ <| |___
|
||||
* \___|\___/|_| \_\_____|
|
||||
*
|
||||
*/
|
||||
|
||||
#include "test.h"
|
||||
|
||||
#ifdef HAVE_SYS_SOCKET_H
|
||||
# include <sys/socket.h>
|
||||
#endif
|
||||
#ifdef HAVE_NETINET_IN_H
|
||||
# include <netinet/in.h>
|
||||
#endif
|
||||
#ifdef HAVE_NETDB_H
|
||||
# include <netdb.h>
|
||||
#endif
|
||||
#ifdef HAVE_ARPA_INET_H
|
||||
# include <arpa/inet.h>
|
||||
#endif
|
||||
|
||||
#define ENABLE_CURLX_PRINTF
|
||||
#include "curlx.h"
|
||||
|
||||
#include "hash.h"
|
||||
#include "hostip.h"
|
||||
|
||||
#include "curl_memory.h"
|
||||
#include "memdebug.h"
|
||||
|
||||
/* This source file is used for test # 558 and 559 */
|
||||
|
||||
/*
|
||||
* This hacky test bypasses the library external API,
|
||||
* using internal only libcurl functions. So don't be
|
||||
* surprised if we cannot run it when the library has
|
||||
* been built with hidden symbols, exporting only the
|
||||
* ones in the public API.
|
||||
*/
|
||||
|
||||
#if defined(CURL_HIDDEN_SYMBOLS)
|
||||
# define SKIP_TEST 1
|
||||
#elif defined(WIN32) && !defined(CURL_STATICLIB)
|
||||
# define SKIP_TEST 1
|
||||
#else
|
||||
# undef SKIP_TEST
|
||||
#endif
|
||||
|
||||
|
||||
#if !defined(SKIP_TEST)
|
||||
|
||||
#ifdef LIB559
|
||||
static Curl_addrinfo *fake_ai(void)
|
||||
{
|
||||
Curl_addrinfo *ai;
|
||||
int ss_size;
|
||||
|
||||
ss_size = sizeof (struct sockaddr_in);
|
||||
|
||||
if((ai = calloc(1, sizeof(Curl_addrinfo))) == NULL)
|
||||
return NULL;
|
||||
|
||||
if((ai->ai_canonname = strdup("dummy")) == NULL) {
|
||||
free(ai);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if((ai->ai_addr = calloc(1, ss_size)) == NULL) {
|
||||
free(ai->ai_canonname);
|
||||
free(ai);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
ai->ai_family = AF_INET;
|
||||
ai->ai_addrlen = ss_size;
|
||||
|
||||
return ai;
|
||||
}
|
||||
#endif /* LIB559 */
|
||||
|
||||
|
||||
int test(char *URL)
|
||||
{
|
||||
CURL *easyh = NULL;
|
||||
struct curl_hash *hp = NULL;
|
||||
int result = 0;
|
||||
|
||||
if(!strcmp(URL, "check")) {
|
||||
/* test harness script verifying if this test can run */
|
||||
return 0; /* sure, run this! */
|
||||
}
|
||||
|
||||
easyh = curl_easy_init();
|
||||
if(!easyh) {
|
||||
fprintf(stdout, "easy handle init failed\n");
|
||||
result = TEST_ERR_MAJOR_BAD;
|
||||
goto cleanup;
|
||||
}
|
||||
fprintf(stdout, "easy handle init OK\n");
|
||||
|
||||
fprintf(stdout, "creating hash...\n");
|
||||
hp = Curl_mk_dnscache();
|
||||
if(!hp) {
|
||||
fprintf(stdout, "hash creation failed\n");
|
||||
result = TEST_ERR_MAJOR_BAD;
|
||||
goto cleanup;
|
||||
}
|
||||
fprintf(stdout, "hash creation OK\n");
|
||||
|
||||
/**/
|
||||
#ifdef LIB559
|
||||
{
|
||||
char *data_key;
|
||||
struct Curl_dns_entry *data_node;
|
||||
struct Curl_dns_entry *nodep;
|
||||
size_t key_len;
|
||||
|
||||
data_key = aprintf("%s:%d", "dummy", 0);
|
||||
if(!data_key) {
|
||||
fprintf(stdout, "data key creation failed\n");
|
||||
result = TEST_ERR_MAJOR_BAD;
|
||||
goto cleanup;
|
||||
}
|
||||
key_len = strlen(data_key);
|
||||
|
||||
data_node = calloc(1, sizeof(struct Curl_dns_entry));
|
||||
if(!data_node) {
|
||||
fprintf(stdout, "data node creation failed\n");
|
||||
result = TEST_ERR_MAJOR_BAD;
|
||||
free(data_key);
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
data_node->addr = fake_ai();
|
||||
if(!data_node->addr) {
|
||||
fprintf(stdout, "actual data creation failed\n");
|
||||
result = TEST_ERR_MAJOR_BAD;
|
||||
free(data_node);
|
||||
free(data_key);
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
nodep = Curl_hash_add(hp, data_key, key_len+1, (void *)data_node);
|
||||
if(!nodep) {
|
||||
fprintf(stdout, "insertion into hash failed\n");
|
||||
result = TEST_ERR_MAJOR_BAD;
|
||||
Curl_freeaddrinfo(data_node->addr);
|
||||
free(data_node);
|
||||
free(data_key);
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
free(data_key);
|
||||
}
|
||||
#endif /* LIB559 */
|
||||
/**/
|
||||
|
||||
cleanup:
|
||||
|
||||
fprintf(stdout, "destroying hash...\n");
|
||||
Curl_hash_destroy(hp);
|
||||
fprintf(stdout, "hash destruction OK\n");
|
||||
|
||||
fprintf(stdout, "destroying easy handle...\n");
|
||||
curl_easy_cleanup(easyh);
|
||||
fprintf(stdout, "easy handle destruction OK\n");
|
||||
|
||||
curl_global_cleanup();
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
#else /* !defined(SKIP_TEST) */
|
||||
|
||||
|
||||
int test(char *URL)
|
||||
{
|
||||
(void)URL;
|
||||
fprintf(stdout, "libcurl built with hidden symbols");
|
||||
return 1; /* skip test */
|
||||
}
|
||||
|
||||
|
||||
#endif /* !defined(SKIP_TEST) */
|
@ -3,10 +3,11 @@
|
||||
UNITFILES = curlcheck.h
|
||||
|
||||
# These are all unit test programs
|
||||
noinst_PROGRAMS = unit1300 unit1301 unit1302 unit1303 unit1304
|
||||
noinst_PROGRAMS = unit1300 unit1301 unit1302 unit1303 unit1304 unit1305
|
||||
|
||||
unit1300_SOURCES = unit1300.c $(UNITFILES)
|
||||
unit1301_SOURCES = unit1301.c $(UNITFILES)
|
||||
unit1302_SOURCES = unit1302.c $(UNITFILES)
|
||||
unit1303_SOURCES = unit1303.c $(UNITFILES)
|
||||
unit1304_SOURCES = unit1304.c $(UNITFILES)
|
||||
unit1305_SOURCES = unit1305.c $(UNITFILES)
|
||||
|
131
tests/unit/unit1305.c
Normal file
131
tests/unit/unit1305.c
Normal file
@ -0,0 +1,131 @@
|
||||
/*****************************************************************************
|
||||
* _ _ ____ _
|
||||
* Project ___| | | | _ \| |
|
||||
* / __| | | | |_) | |
|
||||
* | (__| |_| | _ <| |___
|
||||
* \___|\___/|_| \_\_____|
|
||||
*
|
||||
*/
|
||||
|
||||
#include "test.h"
|
||||
|
||||
#ifdef HAVE_SYS_SOCKET_H
|
||||
# include <sys/socket.h>
|
||||
#endif
|
||||
#ifdef HAVE_NETINET_IN_H
|
||||
# include <netinet/in.h>
|
||||
#endif
|
||||
#ifdef HAVE_NETDB_H
|
||||
# include <netdb.h>
|
||||
#endif
|
||||
#ifdef HAVE_ARPA_INET_H
|
||||
# include <arpa/inet.h>
|
||||
#endif
|
||||
|
||||
#define ENABLE_CURLX_PRINTF
|
||||
#include "curlx.h"
|
||||
|
||||
#include "hash.h"
|
||||
#include "hostip.h"
|
||||
#include "curlcheck.h"
|
||||
|
||||
#include "curl_memory.h"
|
||||
#include "memdebug.h" /* LAST include file */
|
||||
|
||||
static struct SessionHandle *data;
|
||||
static struct curl_hash *hp;
|
||||
static char *data_key;
|
||||
static struct Curl_dns_entry *data_node;
|
||||
|
||||
static CURLcode unit_setup( void )
|
||||
{
|
||||
data = curl_easy_init();
|
||||
if (!data)
|
||||
return CURLE_OUT_OF_MEMORY;
|
||||
|
||||
hp = Curl_mk_dnscache();
|
||||
if(!hp) {
|
||||
curl_easy_cleanup(data);
|
||||
curl_global_cleanup();
|
||||
return CURLE_OUT_OF_MEMORY;
|
||||
}
|
||||
return CURLE_OK;
|
||||
}
|
||||
|
||||
static void unit_stop( void )
|
||||
{
|
||||
if (data_node) {
|
||||
Curl_freeaddrinfo(data_node->addr);
|
||||
free(data_node);
|
||||
}
|
||||
if (data_key)
|
||||
free(data_key);
|
||||
|
||||
Curl_hash_destroy(hp);
|
||||
|
||||
curl_easy_cleanup(data);
|
||||
curl_global_cleanup();
|
||||
}
|
||||
|
||||
static Curl_addrinfo *fake_ai(void)
|
||||
{
|
||||
static Curl_addrinfo *ai;
|
||||
int ss_size;
|
||||
|
||||
ss_size = sizeof (struct sockaddr_in);
|
||||
|
||||
if((ai = calloc(1, sizeof(Curl_addrinfo))) == NULL)
|
||||
return NULL;
|
||||
|
||||
if((ai->ai_canonname = strdup("dummy")) == NULL) {
|
||||
free(ai);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if((ai->ai_addr = calloc(1, ss_size)) == NULL) {
|
||||
free(ai->ai_canonname);
|
||||
free(ai);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
ai->ai_family = AF_INET;
|
||||
ai->ai_addrlen = ss_size;
|
||||
|
||||
return ai;
|
||||
}
|
||||
|
||||
static CURLcode create_node(void)
|
||||
{
|
||||
data_key = aprintf("%s:%d", "dummy", 0);
|
||||
if (!data_key)
|
||||
return CURLE_OUT_OF_MEMORY;
|
||||
|
||||
data_node = calloc(1, sizeof(struct Curl_dns_entry));
|
||||
if (!data_node)
|
||||
return CURLE_OUT_OF_MEMORY;
|
||||
|
||||
data_node->addr = fake_ai();
|
||||
if (!data_node->addr)
|
||||
return CURLE_OUT_OF_MEMORY;
|
||||
|
||||
return CURLE_OK;
|
||||
}
|
||||
|
||||
|
||||
UNITTEST_START
|
||||
|
||||
struct Curl_dns_entry *nodep;
|
||||
size_t key_len;
|
||||
|
||||
CURLcode rc = create_node();
|
||||
abort_unless(rc == CURLE_OK, "data node creation failed");
|
||||
key_len = strlen(data_key);
|
||||
|
||||
nodep = Curl_hash_add(hp, data_key, key_len+1, data_node);
|
||||
abort_unless(nodep, "insertion into hash failed");
|
||||
/* Freeing will now be done by Curl_hash_destroy */
|
||||
data_node = NULL;
|
||||
|
||||
/* To do: test retrieval, deletion, edge conditions */
|
||||
|
||||
UNITTEST_STOP
|
Loading…
Reference in New Issue
Block a user