diff options
Diffstat (limited to 'tests')
-rw-r--r-- | tests/Makefile.am | 28 | ||||
-rw-r--r-- | tests/base64.c | 18 | ||||
-rw-r--r-- | tests/send_to_self.c | 48 | ||||
-rw-r--r-- | tests/xml_parse_and_print.c | 29 | ||||
-rw-r--r-- | tests/xml_print_and_parse.c | 64 |
5 files changed, 154 insertions, 33 deletions
diff --git a/tests/Makefile.am b/tests/Makefile.am index 7aba0b7..93c0b82 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -1,20 +1,24 @@ -AM_CFLAGS = -Werror -Wall -Wextra -pedantic -std=gnu99 \ - -Wno-pointer-sign +AM_CFLAGS = -Werror -Wall -Wextra -pedantic -std=gnu99 -COMMON_FLAGS = $(AM_CFLAGS) $(LIBXML_CFLAGS) \ +COMMON_FLAGS = $(AM_CFLAGS) $(LIBXML_CFLAGS) $(EXPAT_CFLAGS) \ $(GNUTLS_CFLAGS) $(LIBDANE_CFLAGS) $(OPENSSL_CFLAGS) \ $(GSASL_CFLAGS) $(UNBOUND_CFLAGS) $(CARES_CFLAGS) $(GPGME_CFLAGS) \ $(ICU_I18N_CFLAGS) $(LIBGCRYPT_CFLAGS) $(CURL_CFLAGS) \ $(NICE_CFLAGS) $(GLIB_CFLAGS) $(SRTP_CFLAGS) \ - -I$(top_srcdir)/src -COMMON_LIBS = $(LIBXML_LIBS) \ - $(GNUTLS_LIBS) $(LIBDANE_LIBS) $(OPENSSL_LIBS) \ - $(GSASL_LIBS) $(UNBOUND_LIBS) $(CARES_LIBS) $(GPGME_LIBS) $(ICU_I18N_LIBS) \ - $(LIBGCRYPT_LIBS) $(CURL_LIBS) $(NICE_LIBS) $(GLIB_LIBS) $(SRTP_LIBS) \ - -L$(top_builddir)/src -lrexmpp + $(PORTAUDIO_CFLAGS) $(OPUS_CFLAGS) $(NETTLE_CFLAGS) +COMMON_LDADD = -L$(top_builddir)/src -lrexmpp send_to_self_CFLAGS = $(COMMON_FLAGS) -send_to_self_LDADD = $(COMMON_LIBS) +xml_parse_and_print_CFLAGS = $(COMMON_FLAGS) +xml_print_and_parse_CFLAGS = $(COMMON_FLAGS) +base64_CFLAGS = $(COMMON_FLAGS) -check_PROGRAMS = send_to_self -TESTS = send_to_self +send_to_self_LDADD = $(COMMON_LDADD) +xml_parse_and_print_LDADD = $(COMMON_LDADD) +xml_print_and_parse_LDADD = $(COMMON_LDADD) +base64_LDADD = $(COMMON_LDADD) + +check_PROGRAMS = send_to_self \ + xml_parse_and_print xml_print_and_parse base64 +TESTS = send_to_self \ + xml_parse_and_print xml_print_and_parse base64 diff --git a/tests/base64.c b/tests/base64.c new file mode 100644 index 0000000..b69ba0e --- /dev/null +++ b/tests/base64.c @@ -0,0 +1,18 @@ +#include <string.h> +#include "rexmpp_base64.h" + +int main () { + char *original_plain = "test string"; + char *original_base64 = "dGVzdCBzdHJpbmc="; + char *encoded, *decoded; + size_t encoded_len, decoded_len; + if (rexmpp_base64_to(original_plain, strlen(original_plain), + &encoded, &encoded_len)) { + return -1; + } + if (rexmpp_base64_from(original_base64, strlen(original_base64), + &decoded, &decoded_len)) { + return -1; + } + return strcmp(original_plain, decoded) || strcmp(original_base64, encoded); +} diff --git a/tests/send_to_self.c b/tests/send_to_self.c index 9c8c514..2fcb80f 100644 --- a/tests/send_to_self.c +++ b/tests/send_to_self.c @@ -16,7 +16,6 @@ that it's the expected message. #include <stdio.h> #include <errno.h> #include <syslog.h> -#include <gsasl.h> #include <rexmpp.h> #include <rexmpp_sasl.h> @@ -62,37 +61,34 @@ int my_sasl_property_cb (rexmpp_t *s, rexmpp_sasl_property prop) { return -1; } -int my_xml_in_cb (rexmpp_t *s, xmlNodePtr node) { +int my_xml_in_cb (rexmpp_t *s, rexmpp_xml_t *node) { (void)s; - char *xml_buf = rexmpp_xml_serialize(node); + char *xml_buf = rexmpp_xml_serialize(node, 0); printf("recv: %s\n", xml_buf); free(xml_buf); if (stage == TEST_MESSAGE_SENT && rexmpp_xml_match(node, "jabber:client", "message")) { - xmlNodePtr body = rexmpp_xml_find_child(node, "jabber:client", "body"); + rexmpp_xml_t *body = rexmpp_xml_find_child(node, "jabber:client", "body"); if (body != NULL) { - char *txt = xmlNodeGetContent(body); + char *txt = rexmpp_xml_text_child(body); if (txt != NULL) { if (strcmp(txt, msg_text) == 0) { stage = TEST_MESSAGE_RECEIVED; } - free(txt); } } } return 0; } -int my_xml_out_cb (rexmpp_t *s, xmlNodePtr node) { +int my_xml_out_cb (rexmpp_t *s, rexmpp_xml_t *node) { (void)s; - char *xml_buf = rexmpp_xml_serialize(node); + char *xml_buf = rexmpp_xml_serialize(node, 0); printf("send: %s\n", xml_buf); free(xml_buf); return 0; } -int main (int argc, char **argv) { - (void)argc; - (void)argv; +int main () { jid = getenv("JID"); pass = getenv("PASS"); char *tls_policy = getenv("TLS_POLICY"); @@ -125,8 +121,10 @@ int main (int argc, char **argv) { fd_set read_fds, write_fds; int nfds; - struct timeval tv; - struct timeval *mtv; + struct timespec tv; + struct timespec *mtv; + struct timeval tv_ms; + struct timeval *mtv_ms; int n = 0; do { @@ -141,11 +139,13 @@ int main (int argc, char **argv) { } if (stage == TEST_CONNECTING && s.stream_state == REXMPP_STREAM_READY) { - xmlNodePtr msg = rexmpp_xml_add_id(&s, xmlNewNode(NULL, "message")); - xmlNewNs(msg, "jabber:client", NULL); - xmlNewProp(msg, "to", jid); - xmlNewProp(msg, "type", "chat"); - xmlNewTextChild(msg, NULL, "body", msg_text); + rexmpp_xml_t *msg = + rexmpp_xml_add_id(rexmpp_xml_new_elem("message", "jabber:client")); + rexmpp_xml_add_attr(msg, "to", jid); + rexmpp_xml_add_attr(msg, "type", "chat"); + rexmpp_xml_t *body = rexmpp_xml_new_elem("body", NULL); + rexmpp_xml_add_text(body, msg_text); + rexmpp_xml_add_child(msg, body); rexmpp_send(&s, msg); stage = TEST_MESSAGE_SENT; } else if (stage == TEST_MESSAGE_RECEIVED) { @@ -170,10 +170,16 @@ int main (int argc, char **argv) { FD_ZERO(&write_fds); nfds = rexmpp_fds(&s, &read_fds, &write_fds); tv.tv_sec = TIMEOUT; - tv.tv_usec = 0; - mtv = rexmpp_timeout(&s, (struct timeval*)&tv, (struct timeval*)&tv); + tv.tv_nsec = 0; + mtv = rexmpp_timeout(&s, &tv, &tv); + mtv_ms = NULL; + if (mtv != NULL) { + tv_ms.tv_sec = mtv->tv_sec; + tv_ms.tv_usec = mtv->tv_nsec / 1000; + mtv_ms = &tv_ms; + } - n = select(nfds, &read_fds, &write_fds, NULL, mtv); + n = select(nfds, &read_fds, &write_fds, NULL, mtv_ms); if (n == -1) { printf("select error: %s\n", strerror(errno)); break; diff --git a/tests/xml_parse_and_print.c b/tests/xml_parse_and_print.c new file mode 100644 index 0000000..c76b06f --- /dev/null +++ b/tests/xml_parse_and_print.c @@ -0,0 +1,29 @@ +#include <string.h> +#include <stdlib.h> +#include "rexmpp_xml.h" + +int main () { + int ret = 0; + + char *str = "<foo bar=\"baz\">" + "<qux xmlns=\"urn:test\">a b c d</qux>" + "<quux e=\"f\" g=\"h\"/>" + "</foo>"; + rexmpp_xml_t *xml = rexmpp_xml_parse (str, strlen(str)); + + printf("Input:\n%s\n\n", str); + if (xml == NULL) { + ret = -1; + } else { + char *str_new = rexmpp_xml_serialize (xml, 0); + if (str_new == NULL) { + ret = -2; + } else { + printf("Output:\n%s\n", str_new); + ret = strcmp(str, str_new); + free(str_new); + } + rexmpp_xml_free(xml); + } + return ret; +} diff --git a/tests/xml_print_and_parse.c b/tests/xml_print_and_parse.c new file mode 100644 index 0000000..9bd7a3f --- /dev/null +++ b/tests/xml_print_and_parse.c @@ -0,0 +1,64 @@ +#include <string.h> +#include <stdlib.h> +#include "rexmpp_xml.h" + +int main () { + int ret = 0; + + rexmpp_xml_attr_t + foo_attributes = { .qname = {"bar", NULL}, + .value = "baz", + .next = NULL }, + quux_attributes_g = { .qname = {"g", NULL}, + .value = "h", + .next = NULL }, + quux_attributes = + { .qname = {"e", NULL}, + .value = "f", + .next = &quux_attributes_g }; + rexmpp_xml_t + quux = { .type = REXMPP_XML_ELEMENT, + .alt.elem = + { .qname = {"quux", NULL}, + .attributes = &quux_attributes, + .children = NULL + }, + .next = NULL + }, + qux_text = { .type = REXMPP_XML_TEXT, + .alt.text = "a b c d", + .next = NULL }, + qux = { .type = REXMPP_XML_ELEMENT, + .alt.elem = + { .qname = {"qux", "urn:dummy"}, + .attributes = NULL, + .children = &qux_text + }, + .next = &quux + }, + xml = + { .type = REXMPP_XML_ELEMENT, + .alt.elem = + { .qname = {"foo", NULL}, + .attributes = &foo_attributes, + .children = &qux + }, + .next = NULL + }; + + char *str_new = rexmpp_xml_serialize (&xml, 0); + if (str_new == NULL) { + ret = -1; + } else { + rexmpp_xml_t *xml_new = rexmpp_xml_parse (str_new, strlen(str_new)); + if (xml_new == NULL) { + ret = -2; + } else { + /* Compare the XML structures. */ + ret = (rexmpp_xml_eq(&xml, xml_new) == 0); + rexmpp_xml_free(xml_new); + } + free(str_new); + } + return ret; +} |