1
0
mirror of https://gitlab.gnome.org/GNOME/libxml2.git synced 2025-10-23 01:52:48 +03:00

This change started out as a simple desire to speed up the

execution time of testapi.c, which was being delayed by
nameserver requests for non-existent URL's.  From there it
just sort of grew, and grew....
* nanohttp.c, nanoftp.c: changed the processing of URL's
  to use the uri.c routines instead of custom code.
* include/libxml/xmlerror.h: added code XML_FTP_URL_SYNTAX
* uri.c: added accepting ipV6 addresses, in accordance with
  RFC's 2732 and 2373 (TODO: allow ipV4 within ipV6)
* gentest.py, testapi.c: fixed a few problems with the
  testing of the nanoftp and nanohttp routines.
* include/libxml/xmlversion.h: minor change to fix a
  warning on the docs generation
* regenerated the docs
This commit is contained in:
William M. Brack
2005-02-13 08:18:52 +00:00
parent a22da29921
commit 015ccb2c74
38 changed files with 450 additions and 818 deletions

288
testapi.c
View File

@@ -193,6 +193,14 @@ int main(int argc, char **argv) {
*/
void xmlErrMemory(xmlParserCtxtPtr ctxt, const char *extra);
/*
We need some "remote" addresses, but want to avoid getting into
name resolution delays, so we use these
*/
#define REMOTE1GOOD "http://localhost/"
#define REMOTE1BAD "http://missing. example.org/"
#define REMOTE2GOOD "ftp://localhost/foo"
#define gen_nb_void_ptr 2
static void *gen_void_ptr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
@@ -392,8 +400,8 @@ static const char *gen_filepath(int no, int nr ATTRIBUTE_UNUSED) {
if (no == 2) return("test/ent2");
if (no == 3) return("test/valid/REC-xml-19980210.xml");
if (no == 4) return("test/valid/dtds/xhtml1-strict.dtd");
if (no == 5) return("http://missing.example.org/");
if (no == 6) return("http://missing. example.org/");
if (no == 5) return(REMOTE1GOOD);
if (no == 6) return(REMOTE1BAD);
return(NULL);
}
static void des_filepath(int no ATTRIBUTE_UNUSED, const char *val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
@@ -413,9 +421,9 @@ static void des_eaten_name(int no ATTRIBUTE_UNUSED, xmlChar *val ATTRIBUTE_UNUSE
static const char *gen_fileoutput(int no, int nr ATTRIBUTE_UNUSED) {
if (no == 0) return("/missing.xml");
if (no == 1) return("<foo/>");
if (no == 2) return("ftp://missing.example.org/foo");
if (no == 3) return("http://missing.example.org/");
if (no == 4) return("http://missing. example.org/");
if (no == 2) return(REMOTE2GOOD);
if (no == 3) return(REMOTE1GOOD);
if (no == 4) return(REMOTE1BAD);
return(NULL);
}
static void des_fileoutput(int no ATTRIBUTE_UNUSED, const char *val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
@@ -464,8 +472,8 @@ static xmlParserInputBufferPtr gen_xmlParserInputBufferPtr(int no, int nr ATTRIB
if (no == 2) return(xmlParserInputBufferCreateFilename("test/ent2", XML_CHAR_ENCODING_NONE));
if (no == 3) return(xmlParserInputBufferCreateFilename("test/valid/REC-xml-19980210.xml", XML_CHAR_ENCODING_NONE));
if (no == 4) return(xmlParserInputBufferCreateFilename("test/valid/dtds/xhtml1-strict.dtd", XML_CHAR_ENCODING_NONE));
if (no == 5) return(xmlParserInputBufferCreateFilename("http://missing.example.org/", XML_CHAR_ENCODING_NONE));
if (no == 6) return(xmlParserInputBufferCreateFilename("http://missing. example.org/", XML_CHAR_ENCODING_NONE));
if (no == 5) return(xmlParserInputBufferCreateFilename(REMOTE1GOOD, XML_CHAR_ENCODING_NONE));
if (no == 6) return(xmlParserInputBufferCreateFilename(REMOTE1BAD, XML_CHAR_ENCODING_NONE));
return(NULL);
}
static void des_xmlParserInputBufferPtr(int no ATTRIBUTE_UNUSED, xmlParserInputBufferPtr val, int nr ATTRIBUTE_UNUSED) {
@@ -642,8 +650,8 @@ static void des_xmlOutputBufferPtr(int no ATTRIBUTE_UNUSED, xmlOutputBufferPtr v
#ifdef LIBXML_FTP_ENABLED
#define gen_nb_xmlNanoFTPCtxtPtr 4
static void *gen_xmlNanoFTPCtxtPtr(int no, int nr ATTRIBUTE_UNUSED) {
if (no == 0) return(xmlNanoFTPNewCtxt("ftp://example.com/"));
if (no == 1) return(xmlNanoFTPNewCtxt("http://example.com/"));
if (no == 0) return(xmlNanoFTPNewCtxt(REMOTE2GOOD));
if (no == 1) return(xmlNanoFTPNewCtxt(REMOTE1GOOD));
if (no == 2) return(xmlNanoFTPNewCtxt("foo"));
return(NULL);
}
@@ -656,10 +664,16 @@ static void des_xmlNanoFTPCtxtPtr(int no ATTRIBUTE_UNUSED, void *val, int nr ATT
#ifdef LIBXML_HTTP_ENABLED
#define gen_nb_xmlNanoHTTPCtxtPtr 1
static void *gen_xmlNanoHTTPCtxtPtr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
static void *gen_xmlNanoHTTPCtxtPtr(int no, int nr ATTRIBUTE_UNUSED) {
if (no == 0) return(xmlNanoHTTPOpen(REMOTE1GOOD, NULL));
if (no == 1) return(xmlNanoHTTPOpen(REMOTE2GOOD, NULL));
if (no == 2) return(xmlNanoHTTPOpen(REMOTE1BAD, NULL));
return(NULL);
}
static void des_xmlNanoHTTPCtxtPtr(int no ATTRIBUTE_UNUSED, void *val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
static void des_xmlNanoHTTPCtxtPtr(int no ATTRIBUTE_UNUSED, void *val, int nr ATTRIBUTE_UNUSED) {
if (val != NULL) {
xmlNanoHTTPClose(val);
}
}
#endif
@@ -667,7 +681,7 @@ static void des_xmlNanoHTTPCtxtPtr(int no ATTRIBUTE_UNUSED, void *val ATTRIBUTE_
static xmlCharEncoding gen_xmlCharEncoding(int no, int nr ATTRIBUTE_UNUSED) {
if (no == 0) return(XML_CHAR_ENCODING_UTF8);
if (no == 1) return(XML_CHAR_ENCODING_NONE);
if (no == 0) return(XML_CHAR_ENCODING_8859_1);
if (no == 2) return(XML_CHAR_ENCODING_8859_1);
return(XML_CHAR_ENCODING_ERROR);
}
static void des_xmlCharEncoding(int no ATTRIBUTE_UNUSED, xmlCharEncoding val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
@@ -800,8 +814,15 @@ static void desret_xmlRelaxNGParserCtxtPtr(xmlRelaxNGParserCtxtPtr val) {
#ifdef LIBXML_HTML_ENABLED
static void desret_const_htmlEntityDesc_ptr(const htmlEntityDesc * val ATTRIBUTE_UNUSED) {
}
static void desret_xmlNanoHTTPCtxtPtr(void *val) {
xmlNanoHTTPClose(val);
}
#endif
#ifdef LIBXML_FTP_ENABLED
static void desret_xmlNanoFTPCtxtPtr(void *val) {
xmlNanoFTPClose(val);
}
#endif
/* cut and pasted from autogenerated to avoid troubles */
#define gen_nb_const_xmlChar_ptr_ptr 1
static xmlChar ** gen_const_xmlChar_ptr_ptr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
@@ -11527,8 +11548,32 @@ static int
test_xmlNanoFTPNewCtxt(void) {
int test_ret = 0;
#if defined(LIBXML_FTP_ENABLED)
int mem_base;
void * ret_val;
const char * URL; /* The URL used to initialize the context */
int n_URL;
for (n_URL = 0;n_URL < gen_nb_filepath;n_URL++) {
mem_base = xmlMemBlocks();
URL = gen_filepath(n_URL, 0);
ret_val = xmlNanoFTPNewCtxt(URL);
desret_xmlNanoFTPCtxtPtr(ret_val);
call_tests++;
des_filepath(n_URL, URL, 0);
xmlResetLastError();
if (mem_base != xmlMemBlocks()) {
printf("Leak of %d blocks found in xmlNanoFTPNewCtxt",
xmlMemBlocks() - mem_base);
test_ret++;
printf(" %d", n_URL);
printf("\n");
}
}
function_tests++;
#endif
/* missing type support */
return(test_ret);
}
@@ -11548,7 +11593,7 @@ test_xmlNanoFTPOpen(void) {
URL = gen_filepath(n_URL, 0);
ret_val = xmlNanoFTPOpen(URL);
desret_void_ptr(ret_val);
desret_xmlNanoFTPCtxtPtr(ret_val);
call_tests++;
des_filepath(n_URL, URL, 0);
xmlResetLastError();
@@ -11763,7 +11808,7 @@ static int
test_nanoftp(void) {
int test_ret = 0;
if (quiet == 0) printf("Testing nanoftp : 15 of 22 functions ...\n");
if (quiet == 0) printf("Testing nanoftp : 16 of 22 functions ...\n");
test_ret += test_xmlNanoFTPCheckResponse();
test_ret += test_xmlNanoFTPCleanup();
test_ret += test_xmlNanoFTPCloseConnection();
@@ -11847,38 +11892,6 @@ test_xmlNanoHTTPCleanup(void) {
}
static int
test_xmlNanoHTTPClose(void) {
int test_ret = 0;
#if defined(LIBXML_HTTP_ENABLED)
int mem_base;
void * ctx; /* the HTTP context */
int n_ctx;
for (n_ctx = 0;n_ctx < gen_nb_xmlNanoHTTPCtxtPtr;n_ctx++) {
mem_base = xmlMemBlocks();
ctx = gen_xmlNanoHTTPCtxtPtr(n_ctx, 0);
xmlNanoHTTPClose(ctx);
call_tests++;
des_xmlNanoHTTPCtxtPtr(n_ctx, ctx, 0);
xmlResetLastError();
if (mem_base != xmlMemBlocks()) {
printf("Leak of %d blocks found in xmlNanoHTTPClose",
xmlMemBlocks() - mem_base);
test_ret++;
printf(" %d", n_ctx);
printf("\n");
}
}
function_tests++;
#endif
return(test_ret);
}
static int
test_xmlNanoHTTPContentLength(void) {
int test_ret = 0;
@@ -11968,19 +11981,19 @@ test_xmlNanoHTTPFetch(void) {
char ** contentType; /* if available the Content-Type information will be returned at that location */
int n_contentType;
for (n_URL = 0;n_URL < gen_nb_filepath;n_URL++) {
for (n_filename = 0;n_filename < gen_nb_filepath;n_filename++) {
for (n_URL = 0;n_URL < gen_nb_fileoutput;n_URL++) {
for (n_filename = 0;n_filename < gen_nb_fileoutput;n_filename++) {
for (n_contentType = 0;n_contentType < gen_nb_char_ptr_ptr;n_contentType++) {
mem_base = xmlMemBlocks();
URL = gen_filepath(n_URL, 0);
filename = gen_filepath(n_filename, 1);
URL = gen_fileoutput(n_URL, 0);
filename = gen_fileoutput(n_filename, 1);
contentType = gen_char_ptr_ptr(n_contentType, 2);
ret_val = xmlNanoHTTPFetch(URL, filename, contentType);
desret_int(ret_val);
call_tests++;
des_filepath(n_URL, URL, 0);
des_filepath(n_filename, filename, 1);
des_fileoutput(n_URL, URL, 0);
des_fileoutput(n_filename, filename, 1);
des_char_ptr_ptr(n_contentType, contentType, 2);
xmlResetLastError();
if (mem_base != xmlMemBlocks()) {
@@ -12027,151 +12040,6 @@ test_xmlNanoHTTPInit(void) {
}
static int
test_xmlNanoHTTPMethod(void) {
int test_ret = 0;
#if defined(LIBXML_HTTP_ENABLED)
int mem_base;
void * ret_val;
const char * URL; /* The URL to load */
int n_URL;
char * method; /* the HTTP method to use */
int n_method;
char * input; /* the input string if any */
int n_input;
char ** contentType; /* the Content-Type information IN and OUT */
int n_contentType;
char * headers; /* the extra headers */
int n_headers;
int ilen; /* input length */
int n_ilen;
for (n_URL = 0;n_URL < gen_nb_filepath;n_URL++) {
for (n_method = 0;n_method < gen_nb_const_char_ptr;n_method++) {
for (n_input = 0;n_input < gen_nb_const_char_ptr;n_input++) {
for (n_contentType = 0;n_contentType < gen_nb_char_ptr_ptr;n_contentType++) {
for (n_headers = 0;n_headers < gen_nb_const_char_ptr;n_headers++) {
for (n_ilen = 0;n_ilen < gen_nb_int;n_ilen++) {
mem_base = xmlMemBlocks();
URL = gen_filepath(n_URL, 0);
method = gen_const_char_ptr(n_method, 1);
input = gen_const_char_ptr(n_input, 2);
contentType = gen_char_ptr_ptr(n_contentType, 3);
headers = gen_const_char_ptr(n_headers, 4);
ilen = gen_int(n_ilen, 5);
ret_val = xmlNanoHTTPMethod(URL, (const char *)method, (const char *)input, contentType, (const char *)headers, ilen);
desret_void_ptr(ret_val);
call_tests++;
des_filepath(n_URL, URL, 0);
des_const_char_ptr(n_method, (const char *)method, 1);
des_const_char_ptr(n_input, (const char *)input, 2);
des_char_ptr_ptr(n_contentType, contentType, 3);
des_const_char_ptr(n_headers, (const char *)headers, 4);
des_int(n_ilen, ilen, 5);
xmlResetLastError();
if (mem_base != xmlMemBlocks()) {
printf("Leak of %d blocks found in xmlNanoHTTPMethod",
xmlMemBlocks() - mem_base);
test_ret++;
printf(" %d", n_URL);
printf(" %d", n_method);
printf(" %d", n_input);
printf(" %d", n_contentType);
printf(" %d", n_headers);
printf(" %d", n_ilen);
printf("\n");
}
}
}
}
}
}
}
function_tests++;
#endif
return(test_ret);
}
static int
test_xmlNanoHTTPMethodRedir(void) {
int test_ret = 0;
#if defined(LIBXML_HTTP_ENABLED)
int mem_base;
void * ret_val;
const char * URL; /* The URL to load */
int n_URL;
char * method; /* the HTTP method to use */
int n_method;
char * input; /* the input string if any */
int n_input;
char ** contentType; /* the Content-Type information IN and OUT */
int n_contentType;
char ** redir; /* the redirected URL OUT */
int n_redir;
char * headers; /* the extra headers */
int n_headers;
int ilen; /* input length */
int n_ilen;
for (n_URL = 0;n_URL < gen_nb_filepath;n_URL++) {
for (n_method = 0;n_method < gen_nb_const_char_ptr;n_method++) {
for (n_input = 0;n_input < gen_nb_const_char_ptr;n_input++) {
for (n_contentType = 0;n_contentType < gen_nb_char_ptr_ptr;n_contentType++) {
for (n_redir = 0;n_redir < gen_nb_char_ptr_ptr;n_redir++) {
for (n_headers = 0;n_headers < gen_nb_const_char_ptr;n_headers++) {
for (n_ilen = 0;n_ilen < gen_nb_int;n_ilen++) {
mem_base = xmlMemBlocks();
URL = gen_filepath(n_URL, 0);
method = gen_const_char_ptr(n_method, 1);
input = gen_const_char_ptr(n_input, 2);
contentType = gen_char_ptr_ptr(n_contentType, 3);
redir = gen_char_ptr_ptr(n_redir, 4);
headers = gen_const_char_ptr(n_headers, 5);
ilen = gen_int(n_ilen, 6);
ret_val = xmlNanoHTTPMethodRedir(URL, (const char *)method, (const char *)input, contentType, redir, (const char *)headers, ilen);
desret_void_ptr(ret_val);
call_tests++;
des_filepath(n_URL, URL, 0);
des_const_char_ptr(n_method, (const char *)method, 1);
des_const_char_ptr(n_input, (const char *)input, 2);
des_char_ptr_ptr(n_contentType, contentType, 3);
des_char_ptr_ptr(n_redir, redir, 4);
des_const_char_ptr(n_headers, (const char *)headers, 5);
des_int(n_ilen, ilen, 6);
xmlResetLastError();
if (mem_base != xmlMemBlocks()) {
printf("Leak of %d blocks found in xmlNanoHTTPMethodRedir",
xmlMemBlocks() - mem_base);
test_ret++;
printf(" %d", n_URL);
printf(" %d", n_method);
printf(" %d", n_input);
printf(" %d", n_contentType);
printf(" %d", n_redir);
printf(" %d", n_headers);
printf(" %d", n_ilen);
printf("\n");
}
}
}
}
}
}
}
}
function_tests++;
#endif
return(test_ret);
}
static int
test_xmlNanoHTTPMimeType(void) {
int test_ret = 0;
@@ -12225,7 +12093,7 @@ test_xmlNanoHTTPOpen(void) {
contentType = gen_char_ptr_ptr(n_contentType, 1);
ret_val = xmlNanoHTTPOpen(URL, contentType);
desret_void_ptr(ret_val);
desret_xmlNanoHTTPCtxtPtr(ret_val);
call_tests++;
des_filepath(n_URL, URL, 0);
des_char_ptr_ptr(n_contentType, contentType, 1);
@@ -12270,7 +12138,7 @@ test_xmlNanoHTTPOpenRedir(void) {
redir = gen_char_ptr_ptr(n_redir, 2);
ret_val = xmlNanoHTTPOpenRedir(URL, contentType, redir);
desret_void_ptr(ret_val);
desret_xmlNanoHTTPCtxtPtr(ret_val);
call_tests++;
des_filepath(n_URL, URL, 0);
des_char_ptr_ptr(n_contentType, contentType, 1);
@@ -12454,16 +12322,13 @@ static int
test_nanohttp(void) {
int test_ret = 0;
if (quiet == 0) printf("Testing nanohttp : 16 of 17 functions ...\n");
if (quiet == 0) printf("Testing nanohttp : 13 of 17 functions ...\n");
test_ret += test_xmlNanoHTTPAuthHeader();
test_ret += test_xmlNanoHTTPCleanup();
test_ret += test_xmlNanoHTTPClose();
test_ret += test_xmlNanoHTTPContentLength();
test_ret += test_xmlNanoHTTPEncoding();
test_ret += test_xmlNanoHTTPFetch();
test_ret += test_xmlNanoHTTPInit();
test_ret += test_xmlNanoHTTPMethod();
test_ret += test_xmlNanoHTTPMethodRedir();
test_ret += test_xmlNanoHTTPMimeType();
test_ret += test_xmlNanoHTTPOpen();
test_ret += test_xmlNanoHTTPOpenRedir();
@@ -26899,7 +26764,7 @@ test_xmlIOHTTPOpen(void) {
filename = gen_filepath(n_filename, 0);
ret_val = xmlIOHTTPOpen(filename);
desret_void_ptr(ret_val);
desret_xmlNanoHTTPCtxtPtr(ret_val);
call_tests++;
des_filepath(n_filename, filename, 0);
xmlResetLastError();
@@ -26918,16 +26783,6 @@ test_xmlIOHTTPOpen(void) {
}
static int
test_xmlIOHTTPOpenW(void) {
int test_ret = 0;
/* missing type support */
return(test_ret);
}
static int
test_xmlIOHTTPRead(void) {
int test_ret = 0;
@@ -27780,7 +27635,6 @@ test_xmlIO(void) {
test_ret += test_xmlIOHTTPClose();
test_ret += test_xmlIOHTTPMatch();
test_ret += test_xmlIOHTTPOpen();
test_ret += test_xmlIOHTTPOpenW();
test_ret += test_xmlIOHTTPRead();
test_ret += test_xmlNoNetExternalEntityLoader();
test_ret += test_xmlNormalizeWindowsPath();