Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

235 lines
6.4 KiB

/*++
Copyright (c) 1989-2001 Microsoft Corporation
Module Name:
ip6test.c
Abstract:
test driver
Author:
Jiandong Ruan
Revision History:
--*/
#include <nt.h>
#include <ntrtl.h>
#include <nturtl.h>
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
#include "ip6util.h"
BOOL
SmbLookupHost(
WCHAR *host,
PSMB_IP_ADDRESS ipaddr
);
struct {
WCHAR *src;
WCHAR *dest;
} test_cases[] = {
{ L"::1", L"::1" },
{ L"::", L"::" },
{ L"fe80::2b0:d0ff:fe1d:e082", L"fe80::2b0:d0ff:fe1d:e082" },
{ L"::0123", L"::123" },
{ L"0::0123", L"::123" },
{ L"::04567:0123", L"::4567:123" },
{ L"0::4567:0123", L"::4567:123" },
{ L"::089Ab:4567:0123", L"::89ab:4567:123" },
{ L"0::89Ab:4567:0123", L"::89ab:4567:123" },
{ L"::cDeF:089Ab:4567:0123", L"::cDeF:89ab:4567:123" },
{ L"0::0cDeF:089Ab:4567:0123", L"::cDeF:89ab:4567:123" },
{ L"0123::", L"123::" },
{ L"0123::0", L"123::" },
{ L"0123:4567::", L"123:4567::" },
{ L"0123:4567::0", L"123:4567::" },
{ L"0123:4567:89aB::", L"123:4567:89ab::" },
{ L"0123:4567:89aB::0", L"123:4567:89ab::" },
{ L"0123:4567:89aB:cDeF::", L"123:4567:89ab:cdef::" },
{ L"0123:4567:89aB:cDeF::0", L"123:4567:89ab:cdef::" },
{ L"0ea8::001", L"ea8::1" },
{ L"2ea8::001", L"2ea8::1" },
{ L"0:2ea8::f01", L"0:2ea8::f01" },
{ L"0:2ea8::0:f01", L"0:2ea8::f01" },
{ L"0:2ea8:0::f01", L"0:2ea8::f01" },
{ L"0:2ea8::f01:00", L"0:2ea8::f01:0" },
{ L"fedc::f01", L"fedc::f01" },
{ L"0fedc::f01", L"fedc::f01" },
{ L"0fedc::ba98:f01", L"fedc::ba98:f01" },
{ L"0FEDC::BA98:fffe:f01", L"fedc::ba98:fffe:f01" },
{ L"0fedc::0fffc:fffd:0fffe:f01", L"fedc::fffc:fffd:fffe:f01" },
{ L"0fedc:0fffc:fffd:0fffe::f01", L"fedc:fffc:fffd:fffe::f01" },
{ L"0fedc:0fffc:fffd::f01", L"fedc:fffc:fffd::f01" },
{ L"0fedc:0fffc::f01", L"fedc:fffc::f01" },
{ L"0ea8::0::001", NULL },
{ L"001fedc:001fffc::f01", NULL },
{ L"001fedc::001fffc::f01", NULL },
{ L"0fedc::0001ba98:fffd:0fffe:f01", NULL },
{ L"0fedc::ba98:001fffd:0fffe:f01", NULL },
{ L"0fedc::00ba98:fffd:0010000:f01", NULL }
};
#define CASE_NUMBER (sizeof(test_cases)/sizeof(test_cases[0]))
#define WSTR_LOOPBACK L"::1"
void test_host_lookup(void);
void test_inet_functions(void);
void _cdecl main(void)
{
test_inet_functions();
test_host_lookup();
}
void test_inet_functions(void)
{
WCHAR Buffer[40];
WCHAR Buffer2[40];
SMB_IP6_ADDRESS loopback, addr;
int i, j;
UNICODE_STRING uc1, uc2;
ip6addr_getloopback(&loopback);
hton_ip6addr(&loopback);
//
// Test inet_ntoa6W and inet_addr6W
//
if (inet_ntoa6W(Buffer, 40, &loopback) && wcscmp(Buffer, WSTR_LOOPBACK) != 0) {
printf ("inet_ntoa6W on loopback: [failed]\n");
}
for (i = 0; i < CASE_NUMBER; i++) {
if (inet_addr6W(test_cases[i].src, &addr)) {
if (test_cases[i].dest == NULL) {
printf ("inet_addr6W on %ws: [failed]\n", test_cases[i].src);
printf ("\tExpected behavior: inet_addr6W should have returned FALSE\n");
continue;
}
RtlInitUnicodeString(&uc2, test_cases[i].dest);
uc1.Buffer = Buffer2;
uc1.MaximumLength = sizeof(Buffer2);
RtlUpcaseUnicodeString(&uc1, &uc2, FALSE);
Buffer2[uc1.Length/sizeof(WCHAR)] = 0;
if (!inet_ntoa6W(Buffer, 40, &addr)) {
printf ("inet_ntoa6W on %-40ws: [failed]\n", test_cases[i].src);
printf ("\tExpected behavior: inet_ntoa6W should have returned TRUE, %ws\n",
Buffer2);
continue;
}
if (wcscmp(Buffer, Buffer2) != 0) {
printf ("inet_addr6W and inet_ntoa6W on %-40ws [failed]\n", test_cases[i].src);
printf ("\tinet_addr6W returns:\n");
putchar('\t');
putchar('\t');
for (j = 0; j < 8; j++) {
if (j != 0) {
putchar(':');
}
printf ("%04x", htons(addr.sin6_addr[j]));
}
putchar('\n');
printf ("\tinet_ntoa returns: %ws (Expected %ws)\n", Buffer, Buffer2);
}
} else {
if (test_cases[i].dest != NULL) {
printf ("inet_addr6W on %ws: [failed]\n", test_cases[i].src);
printf ("\tExpected behavior: inet_addr6W should have returned TRUE\n");
continue;
}
}
}
}
void test_host_lookup(void)
{
SMB_IP_ADDRESS addr;
FILE *fp;
int i;
WCHAR Buffer[40], Buffer2[40];
if (SmbLookupHost(L"localhost", &addr)) {
if (!inet_ntoa6W(Buffer, 40, &addr.ip6)) {
printf ("etc/hosts [failed]\n");
}
printf ("%ws localhost\n", Buffer);
}
wcscpy(Buffer2, L"::1");
fp = fopen("hosts", "w+");
if (fp == NULL) {
printf ("failed to create file\n");
return;
}
fprintf(fp, " # some comments \n");
fprintf(fp, "# some comments \n");
fprintf(fp, "# \t\tsome comments\n");
fprintf(fp, "%ws Jruan-Dev # some comments", Buffer2);
fclose(fp);
if (SmbLookupHost(L"jruan-dev", &addr)) {
if (!inet_ntoa6W(Buffer, 40, &addr.ip6)) {
printf ("etc/hosts on %-40ws: [failed]\n", Buffer2);
printf ("\tExpected behavior: inet_ntoa6W should have returned TRUE, %ws\n", Buffer2);
} else {
if (wcscmp(Buffer, Buffer2) != 0) {
printf ("etc/hosts on [failed]\n");
printf ("\tExpected: \"%ws\" Get \"%ws\"\n", Buffer2, Buffer);
}
}
} else {
printf ("etc/hosts [failed]\n");
}
}
FILE*
Smb_fopen(
PWCHAR path,
PWCHAR mode
)
{
FILE *fp;
UNREFERENCED_PARAMETER(path);
UNREFERENCED_PARAMETER(mode);
fp = fopen ("hosts", "r");
return fp;
}
void
Smb_fclose(
FILE* fp
)
{
if (fp) {
fclose(fp);
}
}
int
Smb_fgetc(
FILE* fp
)
{
return fgetc(fp);
}