changeset 28201:2da9e4266742

Add a test for qq's qq_encrypt function. Refs #10191. The string of length 7 demonstrates the bug: 7+16=23, but the qq_encrypt function at least thinks that it is writing 24 bytes
author Mark Doliner <mark@kingant.net>
date Fri, 04 Sep 2009 06:23:41 +0000
parents 187014c2bc6e
children 72b9fb05bf26
files libpurple/tests/Makefile.am libpurple/tests/check_libpurple.c libpurple/tests/test_qq.c libpurple/tests/tests.h
diffstat 4 files changed, 113 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/libpurple/tests/Makefile.am	Fri Sep 04 05:26:22 2009 +0000
+++ b/libpurple/tests/Makefile.am	Fri Sep 04 06:23:41 2009 +0000
@@ -11,6 +11,7 @@
 	    tests.h \
 		test_cipher.c \
 		test_jabber_jutil.c \
+		test_qq.c \
 		test_yahoo_util.c \
 		test_util.c \
 		$(top_builddir)/libpurple/util.h
@@ -28,6 +29,7 @@
         @CHECK_LIBS@ \
 		$(GLIB_LIBS) \
 		$(top_builddir)/libpurple/protocols/jabber/libjabber.la \
+		$(top_builddir)/libpurple/protocols/qq/libqq.la \
 		$(top_builddir)/libpurple/protocols/yahoo/libymsg.la \
 		$(top_builddir)/libpurple/libpurple.la
 
--- a/libpurple/tests/check_libpurple.c	Fri Sep 04 05:26:22 2009 +0000
+++ b/libpurple/tests/check_libpurple.c	Fri Sep 04 06:23:41 2009 +0000
@@ -76,6 +76,7 @@
 
 	srunner_add_suite(sr, cipher_suite());
 	srunner_add_suite(sr, jabber_jutil_suite());
+	srunner_add_suite(sr, qq_suite());
 	srunner_add_suite(sr, yahoo_util_suite());
 	srunner_add_suite(sr, util_suite());
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libpurple/tests/test_qq.c	Fri Sep 04 06:23:41 2009 +0000
@@ -0,0 +1,105 @@
+#include <string.h>
+
+#include "tests.h"
+#include "../protocols/qq/qq_crypt.h"
+
+START_TEST(test_qq_encrypt)
+{
+	const guint8 * const key = (guint8 *)"hamburger";
+	guint8 crypted[80];
+	gint ret;
+
+	ret = qq_encrypt(crypted, (const guint8 * const)"a", 1, key);
+	assert_int_equal(16, ret);
+
+	ret = qq_encrypt(crypted, (const guint8 * const)"aa", 2, key);
+	assert_int_equal(16, ret);
+
+	ret = qq_encrypt(crypted, (const guint8 * const)"aaa", 3, key);
+	assert_int_equal(16, ret);
+
+	ret = qq_encrypt(crypted, (const guint8 * const)"aaaa", 4, key);
+	assert_int_equal(16, ret);
+
+	ret = qq_encrypt(crypted, (const guint8 * const)"aaaaa", 5, key);
+	assert_int_equal(16, ret);
+
+	ret = qq_encrypt(crypted, (const guint8 * const)"aaaaaa", 6, key);
+	assert_int_equal(16, ret);
+
+	ret = qq_encrypt(crypted, (const guint8 * const)"aaaaaaa", 7, key);
+	assert_int_equal(24, ret);
+
+	ret = qq_encrypt(crypted, (const guint8 * const)"aaaaaaaa", 8, key);
+	assert_int_equal(24, ret);
+
+	ret = qq_encrypt(crypted, (const guint8 * const)"aaaaaaaaa", 9, key);
+	assert_int_equal(24, ret);
+
+	ret = qq_encrypt(crypted, (const guint8 * const)"aaaaaaaaaa", 10, key);
+	assert_int_equal(24, ret);
+
+	ret = qq_encrypt(crypted,
+			(const guint8 * const)"aaaaaaaaaaa", 11, key);
+	assert_int_equal(24, ret);
+
+	ret = qq_encrypt(crypted,
+			(const guint8 * const)"aaaaaaaaaaaa", 12, key);
+	assert_int_equal(24, ret);
+
+	ret = qq_encrypt(crypted,
+			(const guint8 * const)"aaaaaaaaaaaaa", 13, key);
+	assert_int_equal(24, ret);
+
+	ret = qq_encrypt(crypted,
+			(const guint8 * const)"aaaaaaaaaaaaaa", 14, key);
+	assert_int_equal(24, ret);
+
+	ret = qq_encrypt(crypted,
+			(const guint8 * const)"aaaaaaaaaaaaaaa", 15, key);
+	assert_int_equal(32, ret);
+
+	ret = qq_encrypt(crypted,
+			(const guint8 * const)"aaaaaaaaaaaaaaaa", 16, key);
+	assert_int_equal(32, ret);
+
+	ret = qq_encrypt(crypted,
+			(const guint8 * const)"aaaaaaaaaaaaaaaaa", 17, key);
+	assert_int_equal(32, ret);
+
+	ret = qq_encrypt(crypted,
+			(const guint8 * const)"aaaaaaaaaaaaaaaaaa", 18, key);
+	assert_int_equal(32, ret);
+
+	ret = qq_encrypt(crypted,
+			(const guint8 * const)"aaaaaaaaaaaaaaaaaaa", 19, key);
+	assert_int_equal(32, ret);
+
+	/*
+	fprintf(stderr, "crypted=%s\n", crypted);
+	assert_string_equal_free("plain",
+			yahoo_codes_to_html("plain"));
+	*/
+}
+END_TEST
+
+START_TEST(test_qq_decrypt)
+{
+}
+END_TEST
+
+Suite *
+qq_suite(void)
+{
+	Suite *s;
+	TCase *tc;
+
+	s = suite_create("QQ");
+
+	tc = tcase_create("QQ Crypt Functions");
+	tcase_add_test(tc, test_qq_encrypt);
+	tcase_add_test(tc, test_qq_decrypt);
+	suite_add_tcase(s, tc);
+
+	return s;
+}
--- a/libpurple/tests/tests.h	Fri Sep 04 05:26:22 2009 +0000
+++ b/libpurple/tests/tests.h	Fri Sep 04 06:23:41 2009 +0000
@@ -10,10 +10,15 @@
 Suite * master_suite(void);
 Suite * cipher_suite(void);
 Suite * jabber_jutil_suite(void);
+Suite * qq_suite(void);
 Suite * yahoo_util_suite(void);
 Suite * util_suite(void);
 
 /* helper macros */
+#define assert_int_equal(expected, actual) { \
+	fail_if(expected != actual, "Expecting '%d' but got '%d'", expected, actual); \
+}
+
 #define assert_string_equal(expected, actual) { \
 	const gchar *a = actual; \
 	fail_unless(strcmp(expected, a) == 0, "Expecting '%s' but got '%s'", expected, a); \