fsp/tests/parsecheck.c
2005-02-13 18:05:06 +00:00

106 lines
2.7 KiB
C

#include "tweak.h"
#include "server_def.h"
#include "s_extern.h"
#include <stdlib.h>
#ifdef HAVE_UNISTD_H
#include <unistd.h>
#endif
#include "my-string.h"
int dbug=1;
const char *testcases[]={
"", ".","/",
"\nonlypwd",
"filename","/filename","//filename",
"dirname/filename","//dirname/filename","//dirname//filename",
"dir1name/dir2name/","//dir1name//dir2name//",
"filename\npasswd","filename\nsymlink\npasswd",
"file/.dir","../updir","file/../dir",
NULL};
PPATH testresults[]={
{".",".",1,".",1,NULL}, {NULL}, {".",".",1,".",1,NULL},
{".",".",1,".",1,"onlypwd"},
{"filename","filename",8,".",1,NULL} , {"filename","filename",8,".",1,NULL} , {"filename","filename",8,".",1,NULL},
{"dirname/filename","filename",8,"dirname",7,NULL} , {"dirname/filename","filename",8,"dirname",7,NULL} , {"dirname//filename","filename",8,"dirname",7,NULL},
{"dir1name/dir2name/",".",1,"dir1name/dir2name",17}, {"dir1name//dir2name//",".",1,"dir1name//dir2name",18},
{"filename","filename",8,".",1,"passwd"}, {"filename","filename",8,".",1,"passwd"},
{NULL},{NULL},{NULL},
};
static void print_path(PPATH *pp)
{
printf("fullpath: %s ",pp->fullp);
if(strcmp(pp->fullp,pp->d_ptr))
{
printf("d_ptr: %s (%d) ",pp->d_ptr,pp->d_len);
} else
printf("(%d) ",pp->d_len);
printf("f_ptr: %s (%d) ",pp->f_ptr,pp->f_len);
if(pp->passwd)
printf("passwd: %s",pp->passwd);
}
/* returns: 0 okay, 1 different */
static int compareresults(PPATH *p1,PPATH *p2)
{
if(p1->fullp==NULL && p2->fullp==NULL) return 0;
if(p1->fullp==NULL || p2->fullp==NULL) return -1;
if(strcmp(p1->fullp,p2->fullp)) return -1;
if(p1->f_len!=p2->f_len) return -1;
if(strcmp(p1->f_ptr,p2->f_ptr)) return -1;
if(p1->d_len!=p2->d_len) return -1;
if(strncmp(p1->d_ptr,p2->d_ptr,p1->d_len)) return -1;
if(p1->passwd==NULL && p2->passwd==NULL)
return 0;
if(p1->passwd==NULL || p2->passwd==NULL) return -1;
if(strcmp(p1->passwd,p2->passwd)) return -1;
return 0;
}
static int runtestcase(void)
{
int rc=0;
int i=0;
PPATH pp;
const char *err;
const char *test;
for(;testcases[i];i++)
{
test=strdup(testcases[i]);
pp.fullp=NULL;
err=parse_path(test,strlen(test)+1,&pp);
printf("parsing: '%s'",test);
if(err)
{
printf(" parse err: '%s'. ",err);
pp.fullp=NULL;
} else
printf(" parsed okay. ");
if(compareresults(&pp,&testresults[i]))
{
printf("!!!TEST FAILED!!!\a\n");
rc=1;
} else
printf(" Test passed.\n");
if(!err)
{
printf(" ");
print_path(&pp);
printf("\n");
}
free(test);
}
return rc;
}
int main(int argc,const char *argv[])
{
return runtestcase();
}