aboutsummaryrefslogtreecommitdiff
path: root/source/tests/test_utils.c
diff options
context:
space:
mode:
Diffstat (limited to 'source/tests/test_utils.c')
-rw-r--r--source/tests/test_utils.c226
1 files changed, 226 insertions, 0 deletions
diff --git a/source/tests/test_utils.c b/source/tests/test_utils.c
new file mode 100644
index 0000000..b83fccc
--- /dev/null
+++ b/source/tests/test_utils.c
@@ -0,0 +1,226 @@
+#include <unistd.h>
+#include <time.h>
+
+#include "tests.h"
+
+#include "utils.h"
+#include "crypt.h"
+#include "math.h"
+#include "xor_strings_gen.h"
+
+
+BOOL test_math(void)
+{
+ ERRETCP( __moddi3 (100, 50) == 0 );
+ ERRETCP( __moddi3 (10000, 11) != 0 );
+ ERRETCP( __umoddi3(10000, 11) != 0 );
+ ERRETCP( __divdi3 (100, 2) == 50);
+ ERRETCP( __divdi3 (1, 1) == 1 );
+ ERRETCP( __divdi3 (100, 3) == 33);
+ ERRETCP( __divdi3 (1000,9000) == 0 );
+ ERRETCP( __moddi3 (LONG_LONG_MAX, LONG_LONG_MAX) == 0 );
+ ERRETCP( __moddi3 (LONG_LONG_MIN, LONG_LONG_MIN) == 0 );
+ ERRETCP( __umoddi3 (LONG_LONG_MAX, LONG_LONG_MAX) == 0 );
+ ERRETCP( __umoddi3 (ULONG_LONG_MAX,ULONG_LONG_MAX) == 0 );
+ ERRETCP( __divdi3 (LONG_LONG_MAX,LONG_LONG_MAX ) == 1 );
+ ERRETCP( __divdi3 (LONG_LONG_MIN,LONG_LONG_MIN ) == 1 );
+ ERRETCP( __udivdi3 (LONG_LONG_MAX,LONG_LONG_MAX ) == 1 );
+ ERRETCP( __udivdi3 (ULONG_LONG_MAX,ULONG_LONG_MAX) == 1 );
+ ERRETCP( __pow(2,0) == 1 );
+ ERRETCP( __pow(2,1) == 2 );
+ ERRETCP( __pow(2,10) == 1024 );
+ return TRUE;
+}
+
+BOOL test_utils(void)
+{
+ char buf1[64], buf2[64], buf3[64];
+
+ memset(buf1, '\0', 64);
+ memset(buf2, '\0', 64);
+ memset(buf3, '\0', 64);
+
+ __xultoa(0, (char*)buf1, 10);
+ __xultoa(ULONG_MAX, (char*)buf2, 10);
+ __xultoa(LONG_MAX, (char*)buf3, 10);
+ ERRETCP( strcmp(buf1, "0") == 0 );
+ ERRETCP( strcmp(buf2, "4294967295") == 0 );
+ ERRETCP( strcmp(buf3, "2147483647") == 0 );
+ ERRETCP( strlen(buf1) == strlen("0") );
+ ERRETCP( strlen(buf2) == strlen("4294967295") );
+ ERRETCP( strlen(buf3) == strlen("2147483647") );
+
+ memset(buf1, '\0', 64);
+ memset(buf2, '\0', 64);
+ memset(buf3, '\0', 64);
+
+ __xltoa(LONG_MAX, (char*)buf1, 10);
+ __xltoa(LONG_MIN, (char*)buf2, 10);
+ __xltoa(0, (char*)buf3, 10);
+ ERRETCP( strcmp(buf1, "2147483647") == 0 );
+ ERRETCP( strcmp(buf2, "-2147483648") == 0 );
+ ERRETCP( strcmp(buf3, "0") == 0 );
+ ERRETCP( strlen(buf1) == strlen("2147483647") );
+ ERRETCP( strlen(buf2) == strlen("-2147483648") );
+ ERRETCP( strlen(buf3) == strlen("0") );
+
+ char* buf4 = "AA1122334455667788990";
+ SIZE_T siz = 0;
+ char* result = __xbintostr((BYTE*)buf4, strlen(buf4), 2, &siz);
+ ERRETCP( siz == strlen("4141 3131 3232 3333 3434 3535 3636 3737 3838 3939 30") );
+ ERRETCP( strcmp(result, "4141 3131 3232 3333 3434 3535 3636 3737 3838 3939 30") == 0 );
+ __xfree(result);
+
+ BYTE* buf5 = COMPAT(calloc)(256, sizeof(char));
+ for (int i = 0; i < 256; ++i)
+ buf5[i] = i;
+ result = __xbintostr(buf5, 256, 0, NULL);
+ ERRETCP( strlen(result) == 256*2 );
+ ERRETCP( strcmp(result, "000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F" \
+ "202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F" \
+ "404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F" \
+ "606162636465666768696A6B6C6D6E6F707172737475767778797A7B7C7D7E7F" \
+ "808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9F" \
+ "A0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBF" \
+ "C0C1C2C3C4C5C6C7C8C9CACBCCCDCECFD0D1D2D3D4D5D6D7D8D9DADBDCDDDEDF" \
+ "E0E1E2E3E4E5E6E7E8E9EAEBECEDEEEFF0F1F2F3F4F5F6F7F8F9FAFBFCFDFEFF") == 0 );
+ __xfree(result);
+
+
+ char* buf6 = strdup("This is a TOP SECRET message!");
+ char* buf7 = strdup(buf6);
+ unsigned int key = 0;
+
+ while(key == 0) key = xor32_randomkey();
+
+ xor32_byte_crypt((unsigned char*)buf7, strlen(buf6), key);
+ ERRETCP( strcmp(buf6, buf7) != 0 )
+
+ xor32_byte_crypt((unsigned char*)buf7, strlen(buf6), key);
+ ERRETCP( strlen(buf6) == strlen(buf7) );
+ ERRETCP( strcmp(buf6, buf7) == 0 );
+ free(buf7);
+
+ char buf9[COMPAT(strlen)(buf6)+1];
+ char buf10[COMPAT(strlen)(buf6)+1];
+
+ COMPAT(memcpy)(&buf9[0], buf6, strlen(buf6));
+ buf9[COMPAT(strlen)(buf6)] = '\0';
+ xor32_byte_crypt((unsigned char*)&buf9[0], COMPAT(strlen)(buf6), key);
+
+ memcpy(&buf10[0], &buf9[0], COMPAT(strlen)(buf6));
+ buf10[COMPAT(strlen)(buf6)] = '\0';
+ xor32_byte_crypt((unsigned char*)&buf10[0], COMPAT(strlen)(buf6), key);
+
+ ERRETCP( strlen(buf6) == strlen(buf10) );
+ ERRETCP( strcmp(buf6, buf9) != 0 );
+ ERRETCP( strcmp(buf6, buf10) == 0 );
+ free(buf6);
+
+ buf6 = strdup("We want to search a _substring_ in this _string_ !!");
+ ERRETCP( COMPAT(strnstr)(buf6, "_substring_", strlen(buf6)) != NULL );
+ ERRETCP( COMPAT(strnstr)(buf6, "_string_ !!", strlen(buf6)) != NULL );
+ ERRETCP( COMPAT(strnstr)(buf6, "_noonexistant_", strlen(buf6)) == NULL );
+ free(buf6);
+
+ buf6 = test_randstring(65535);
+ ERRETCP( COMPAT(strnstr)(buf6, "this string should not be found or you got bad luck", strlen(buf6)) == NULL );
+ COMPAT(free)(buf6);
+
+ buf6 = strdup("We test if _SubString_ works with strnistr(...)");
+ ERRETCP( COMPAT(strnistr)(buf6, "_substring_", strlen(buf6)) != NULL );
+ ERRETCP( COMPAT(strnistr)(buf6, "_sUBsTrinG_", strlen(buf6)) != NULL );
+ ERRETCP( COMPAT(strnistr)(buf6, "_NOTsubstring_", strlen(buf6)) == NULL );
+ ERRETCP( COMPAT(strnistr)(buf6, "STRNISTR(...)", strlen(buf6)) != NULL );
+ ERRETCP( COMPAT(strnistr)(buf6, "STRNISTR(...)!", strlen(buf6)) == NULL );
+ free(buf6);
+
+ buf6 = test_randstring(65535);
+ buf7 = test_randstring(4096);
+ ERRETCP( COMPAT(strnistr)(buf6, buf7, strlen(buf6)) == NULL );
+ ERRETCP( COMPAT(strnstr)(buf6, buf7, strlen(buf6)) == NULL );
+ COMPAT(free)(buf6);
+ COMPAT(free)(buf7);
+
+ char* garbage = __genGarbageFormatStr(512);
+ ERRETCP( garbage != NULL );
+ ERRETCP( strlen(garbage) > 500 );
+ COMPAT(free)(garbage);
+
+ struct LogicalDrives devs[32];
+ DWORD devnum = dwEnumDrives(&devs[0], sizeof(devs)/sizeof(devs[0]));
+ for (DWORD i = 0; i < devnum; ++i) {
+ ERRETCPDW( devs[i].devType > 0, devs[i].devType );
+ size_t len = strnlen(devs[i].name, MAX_PATH);
+ ERRETCP( len > 0 && len <= MAX_PATH );
+ if (devs[i].devType == 2 || devs[i].devType == 3) /* DRIVE_REMOVABLE || DRIVE_FIXED */
+ {
+ ERRETCP( devs[i].bytesPerSectorsPerCluster > 0 );
+ ERRETCP( devs[i].totalClusters > 0 );
+ }
+ }
+
+/*
+ // TODO: __pseudoRandom needs an update (not "Random" at all)
+ const unsigned max_rnd = 256;
+ const unsigned rnd_siz = 128;
+ unsigned char rnd[max_rnd][rnd_siz];
+ memset(&rnd[0][0], 0, sizeof(rnd));
+ for (unsigned i = 0; i < max_rnd; ++i) {
+ __pseudoRandom(rnd[i], rnd_siz);
+ }
+ for (unsigned i = 0; i < max_rnd; ++i) {
+ for (unsigned j = 0; j < max_rnd; ++j) {
+ if (i == j)
+ continue;
+ ERRETCP( memcmp(&rnd[i][0], &rnd[j][0], rnd_siz) != 0 );
+ }
+ }
+*/
+
+ char tok_str[] = "This is a sentence seperated with whitespaces without punctuation";
+ const unsigned tok_nmb = 9;
+ char* tok_next = tok_str;
+ char* tok_cur = NULL;
+ unsigned tok_n = 0;
+ while ((tok_cur = qtok(tok_next, &tok_next)) != NULL && *tok_cur) {
+ tok_n++;
+ }
+ ERRETCP( tok_n == tok_nmb );
+
+ char* str_numbers[] = { "32", "64", "128", "256", "512", "-1", "2700000", "-2700000", "1024e" };
+ for (unsigned i = 0; i < sizeof(str_numbers)/sizeof(str_numbers[0]); ++i) {
+ char* saveptr = NULL;
+ long nmb = COMPAT(strtol)(str_numbers[i], &saveptr, 10);
+ ERRETCPDW( nmb != 0, nmb );
+ long rnmb = strtol(str_numbers[i], &saveptr, 10);
+ ERRETCPDW( nmb == rnmb, rnmb );
+ }
+ char* str_not_numbers[] = { "abcdef", "abc1024", "a32b32", "a string" };
+ for (unsigned i = 0; i < sizeof(str_not_numbers)/sizeof(str_not_numbers[0]); ++i) {
+ char* saveptr = NULL;
+ long nmb = COMPAT(strtol)(str_not_numbers[i], &saveptr, 10);
+ ERRETCPDW( nmb == 0, nmb );
+ long rnmb = strtol(str_not_numbers[i], &saveptr, 10);
+ ERRETCPDW( nmb == rnmb, rnmb );
+ }
+ const unsigned max_hex = 64;
+ for (unsigned i = 0; i < max_hex; ++i) {
+ char* tmp_hex = test_randhexstring(6);
+ long nmb = COMPAT(strtol)(tmp_hex, NULL, 16);
+ long rnmb = strtol(tmp_hex, NULL, 16);
+ ERRETCPDW( nmb == rnmb, rnmb );
+ COMPAT(free)(tmp_hex);
+ }
+
+#if defined(i386) || defined(i686)
+ atomic_val aval = 0;
+ ERRETCPDW( aval == 0, aval );
+ atomic_inc(&aval);
+ ERRETCPDW( aval == 1, aval );
+ atomic_val retval = atomic_xchg(&aval, 2);
+ ERRETCPDW( aval == 2, aval );
+ ERRETCPDW( retval == 1, retval );
+#endif
+ return TRUE;
+}