You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@apr.apache.org by rb...@apache.org on 2002/11/10 03:44:51 UTC
cvs commit: apr/test Makefile.in test_apr.h testall.c testfile.c
rbb 2002/11/09 18:44:51
Modified: test Makefile.in test_apr.h testall.c testfile.c
Log:
Migrate testfile to the new test suite.
Revision Changes Path
1.101 +2 -2 apr/test/Makefile.in
Index: Makefile.in
===================================================================
RCS file: /home/cvs/apr/test/Makefile.in,v
retrieving revision 1.100
retrieving revision 1.101
diff -u -r1.100 -r1.101
--- Makefile.in 24 Oct 2002 00:20:33 -0000 1.100
+++ Makefile.in 10 Nov 2002 02:44:50 -0000 1.101
@@ -165,8 +165,8 @@
testmutexscope@EXEEXT@: testmutexscope.lo $(LOCAL_LIBS)
$(LINK) testmutexscope.lo $(LOCAL_LIBS) $(ALL_LIBS)
-testall: testall.lo testtime.lo teststr.lo testvsn.lo testipsub.lo testmmap.lo testud.lo testtable.lo testsleep.lo testpools.lo testfmt.lo CuTest.lo $(LOCAL_LIBS)
- $(LINK) testall.lo testtime.lo teststr.lo testvsn.lo testipsub.lo testmmap.lo testud.lo testtable.lo testsleep.lo testpools.lo testfmt.lo CuTest.lo $(LOCAL_LIBS) $(ALL_LIBS)
+testall: testall.lo testtime.lo teststr.lo testvsn.lo testipsub.lo testmmap.lo testud.lo testtable.lo testsleep.lo testpools.lo testfmt.lo testfile.lo CuTest.lo $(LOCAL_LIBS)
+ $(LINK) testall.lo testtime.lo teststr.lo testvsn.lo testipsub.lo testmmap.lo testud.lo testtable.lo testsleep.lo testpools.lo testfmt.lo testfile.lo CuTest.lo $(LOCAL_LIBS) $(ALL_LIBS)
# DO NOT REMOVE
1.19 +1 -0 apr/test/test_apr.h
Index: test_apr.h
===================================================================
RCS file: /home/cvs/apr/test/test_apr.h,v
retrieving revision 1.18
retrieving revision 1.19
diff -u -r1.18 -r1.19
--- test_apr.h 24 Oct 2002 00:20:33 -0000 1.18
+++ test_apr.h 10 Nov 2002 02:44:50 -0000 1.19
@@ -76,6 +76,7 @@
CuSuite *testsleep(void);
CuSuite *testpool(void);
CuSuite *testfmt(void);
+CuSuite *testfile(void);
1.12 +1 -0 apr/test/testall.c
Index: testall.c
===================================================================
RCS file: /home/cvs/apr/test/testall.c,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -r1.11 -r1.12
--- testall.c 24 Oct 2002 00:20:33 -0000 1.11
+++ testall.c 10 Nov 2002 02:44:50 -0000 1.12
@@ -74,6 +74,7 @@
testsleep,
testpool,
testfmt,
+ testfile,
NULL
};
1.53 +289 -453 apr/test/testfile.c
Index: testfile.c
===================================================================
RCS file: /home/cvs/apr/test/testfile.c,v
retrieving revision 1.52
retrieving revision 1.53
diff -u -r1.52 -r1.53
--- testfile.c 10 Nov 2002 02:08:16 -0000 1.52
+++ testfile.c 10 Nov 2002 02:44:50 -0000 1.53
@@ -52,10 +52,6 @@
* <http://www.apache.org/>.
*/
-#include <assert.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
#include "apr_file_io.h"
#include "apr_file_info.h"
#include "apr_network_io.h"
@@ -65,496 +61,302 @@
#include "apr_lib.h"
#include "test_apr.h"
-struct view_fileinfo
+#define FILENAME "data/file_datafile.txt"
+#define TESTSTR "This is the file data file."
+
+#define TESTREAD_BLKSIZE 1024
+#define APR_BUFFERSIZE 4096 /* This should match APR's buffer size. */
+
+
+static apr_file_t *filetest = NULL;
+
+static void test_open_noreadwrite(CuTest *tc)
{
- apr_int32_t bits;
- char *description;
-} vfi[] = {
- {APR_FINFO_MTIME, "MTIME"},
- {APR_FINFO_CTIME, "CTIME"},
- {APR_FINFO_ATIME, "ATIME"},
- {APR_FINFO_SIZE, "SIZE"},
- {APR_FINFO_DEV, "DEV"},
- {APR_FINFO_INODE, "INODE"},
- {APR_FINFO_NLINK, "NLINK"},
- {APR_FINFO_TYPE, "TYPE"},
- {APR_FINFO_USER, "USER"},
- {APR_FINFO_GROUP, "GROUP"},
- {APR_FINFO_UPROT, "UPROT"},
- {APR_FINFO_GPROT, "GPROT"},
- {APR_FINFO_WPROT, "WPROT"},
- {0, NULL}
-};
-
-void test_filedel(apr_pool_t *);
-static void test_read(apr_pool_t *);
-static void test_read_seek(apr_int32_t, apr_pool_t *);
-static void test_mod_neg(apr_pool_t *, apr_int32_t);
+ apr_status_t rv;
+ apr_file_t *thefile = NULL;
-int main(void)
+ rv = apr_file_open(&thefile, FILENAME,
+ APR_CREATE | APR_EXCL,
+ APR_UREAD | APR_UWRITE | APR_GREAD, p);
+ CuAssertTrue(tc, rv != APR_SUCCESS);
+ CuAssertIntEquals(tc, APR_EACCES, rv);
+#if 0
+ /* I consider this a bug, if we are going to return an error, we shouldn't
+ * allocate the file pointer. But, this would make us fail the text, so
+ * I am commenting it out for now.
+ */
+ CuAssertPtrEquals(tc, NULL, thefile);
+#endif
+}
+
+static void test_open_excl(CuTest *tc)
{
- apr_pool_t *pool;
+ apr_status_t rv;
apr_file_t *thefile = NULL;
- apr_finfo_t finfo;
- apr_socket_t *testsock = NULL;
- apr_pollfd_t *sdset = NULL;
- apr_status_t status;
- apr_int32_t flag = APR_READ | APR_WRITE | APR_CREATE;
- apr_size_t nbytes = 0;
- apr_off_t zer = 0;
- char *buf;
- const char *str;
- char *filename = "test.fil";
- char *teststr;
- apr_uid_t uid;
- apr_gid_t gid;
-#if APR_FILES_AS_SOCKETS
- apr_int32_t num;
+
+ rv = apr_file_open(&thefile, FILENAME,
+ APR_CREATE | APR_EXCL | APR_WRITE,
+ APR_UREAD | APR_UWRITE | APR_GREAD, p);
+ CuAssertTrue(tc, rv != APR_SUCCESS);
+ CuAssertIntEquals(tc, 1, APR_STATUS_IS_EEXIST(rv));
+#if 0
+ /* I consider this a bug, if we are going to return an error, we shouldn't
+ * allocate the file pointer. But, this would make us fail the text, so
+ * I am commenting it out for now.
+ */
+ CuAssertPtrEquals(tc, NULL, thefile);
#endif
+}
- printf("APR File Functions Test\n=======================\n\n");
-
- STD_TEST_NEQ("Initializing APR", apr_initialize())
- atexit(apr_terminate);
- STD_TEST_NEQ("Creating the main pool we'll use",
- apr_pool_create(&pool, NULL))
- STD_TEST_NEQ("Creating the second pool we'll use",
- apr_pool_create(&pool, NULL))
-
+static void test_open_read(CuTest *tc)
+{
+ apr_status_t rv;
- fprintf(stdout, "Testing file functions.\n");
+ rv = apr_file_open(&filetest, FILENAME,
+ APR_READ,
+ APR_UREAD | APR_UWRITE | APR_GREAD, p);
+ CuAssertIntEquals(tc, rv, APR_SUCCESS);
+ CuAssertPtrNotNull(tc, filetest);
+}
- STD_TEST_NEQ(" Opening file",
- apr_file_open(&thefile, filename, flag,
- APR_UREAD | APR_UWRITE | APR_GREAD, pool))
+static void test_read(CuTest *tc)
+{
+ apr_status_t rv;
+ apr_size_t nbytes = 256;
+ char *str = apr_palloc(p, nbytes + 1);
- printf("%-60s", " Checking filename");
- if (thefile == NULL){
- MSG_AND_EXIT("\nBad file descriptor")
- }
- apr_file_name_get(&str, thefile);
- printf("%s\n", str);
- if (strcmp(str, filename) != 0){
- MSG_AND_EXIT("Wrong filename\n")
- }
+ rv = apr_file_read(filetest, str, &nbytes);
+ CuAssertIntEquals(tc, APR_SUCCESS, rv);
+ CuAssertIntEquals(tc, strlen(TESTSTR), nbytes);
+ CuAssertStrEquals(tc, TESTSTR, str);
+}
+
+static void test_filename(CuTest *tc)
+{
+ const char *str;
+ apr_status_t rv;
+
+ rv = apr_file_name_get(&str, filetest);
+ CuAssertIntEquals(tc, rv, APR_SUCCESS);
+ CuAssertStrEquals(tc, FILENAME, str);
+}
- nbytes = strlen("this is a test");
- STD_TEST_NEQ(" Writing to the file",
- apr_file_write(thefile, "this is a test", &nbytes))
- TEST_NEQ(" Checking we wrote everything", nbytes,
- strlen("this is a test"), "OK", "Failed to write everything")
-
- zer = 0;
- STD_TEST_NEQ(" Moving to the start of file",
- apr_file_seek(thefile, SEEK_SET, &zer))
-
-#if APR_FILES_AS_SOCKETS
- printf(" This platform supports files_like_sockets, testing...\n");
- STD_TEST_NEQ(" Making file look like a socket",
- apr_socket_from_file(&testsock, thefile))
-
- apr_poll_setup(&sdset, 1, pool);
- apr_poll_socket_add(sdset, testsock, APR_POLLIN);
- num = 1;
- STD_TEST_NEQ_NONFATAL(" Checking for incoming data",
- apr_poll(sdset, 1, &num, apr_time_from_sec(1)));
- if (num == 0) {
- printf("** This platform doesn't return readability on a regular file.**\n");
- }
- printf(" End of files as sockets test.\n");
-#endif
+static void test_fileclose(CuTest *tc)
+{
+ char *str;
+ apr_status_t rv;
+ apr_size_t one = 1;
- nbytes = strlen("this is a test");
- buf = (char *)apr_palloc(pool, nbytes + 1);
- STD_TEST_NEQ(" Reading from the file",
- apr_file_read(thefile, buf, &nbytes))
- TEST_NEQ(" Checking what we read", nbytes, strlen("this is a test"),
- "OK", "We didn't read properly.\n")
- STD_TEST_NEQ(" Adding user data to the file",
- apr_file_data_set(thefile, "This is a test",
- "test", apr_pool_cleanup_null))
- STD_TEST_NEQ(" Getting user data from the file",
- apr_file_data_get((void **)&teststr, "test", thefile))
- TEST_NEQ(" Checking the data we got", strcmp(teststr, "This is a test"), 0,
- "OK", "Got the data, but it was wrong")
-
- printf("%-60s", " Getting fileinfo");
- status = apr_file_info_get(&finfo, APR_FINFO_NORM, thefile);
- if (status == APR_INCOMPLETE) {
- int i;
- printf("INCOMPLETE\n");
- for (i = 0; vfi[i].bits; ++i)
- if (vfi[i].bits & ~finfo.valid)
- fprintf(stderr, "\t Missing %s\n", vfi[i].description);
- }
- else if (status != APR_SUCCESS) {
- printf("OK\n");
- MSG_AND_EXIT("Couldn't get the fileinfo")
- }
- else {
- printf("OK\n");
- }
- gid = finfo.group;
- uid = finfo.user;
+ rv = apr_file_close(filetest);
+ CuAssertIntEquals(tc, rv, APR_SUCCESS);
+ /* We just closed the file, so this should fail */
+ rv = apr_file_read(filetest, str, &one);
+ CuAssertIntEquals(tc, APR_EBADF, rv);
+}
- STD_TEST_NEQ(" Closing the file", apr_file_close(thefile))
+static void test_file_remove(CuTest *tc)
+{
+ apr_status_t rv;
- printf("%-60s", " Stat'ing file");
- status = apr_stat(&finfo, filename, APR_FINFO_NORM, pool);
- if (status == APR_INCOMPLETE) {
- int i;
- printf("INCOMPLETE\n");
- for (i = 0; vfi[i].bits; ++i)
- if (vfi[i].bits & ~finfo.valid)
- fprintf(stderr, "\t Missing %s\n", vfi[i].description);
- }
- else if (status != APR_SUCCESS) {
- printf("Failed\n");
- MSG_AND_EXIT("Couldn't stat the file")
- }
- else {
- printf("OK\n");
- }
-
- if (finfo.valid & APR_FINFO_GROUP) {
- STD_TEST_NEQ(" Getting groupname",
- apr_group_name_get(&buf, finfo.group, pool))
- STD_TEST_NEQ(" Comparing group ID's",
- apr_compare_groups(finfo.group, gid))
- printf(" (gid's for %s match)\n", buf);
- }
+ rv = apr_file_remove(FILENAME, p);
+ CuAssertIntEquals(tc, APR_SUCCESS, rv);
- if (finfo.valid & APR_FINFO_USER) {
- STD_TEST_NEQ(" Getting username",
- apr_get_username(&buf, finfo.user, pool))
- STD_TEST_NEQ(" Comparing users",
- apr_compare_users(finfo.user, uid))
- printf(" (uid's for %s match)\n", buf);
- }
+ rv = apr_file_open(&filetest, FILENAME, APR_READ,
+ APR_UREAD | APR_UWRITE | APR_GREAD, p);
+ CuAssertIntEquals(tc, 1, APR_STATUS_IS_ENOENT(rv));
+}
- STD_TEST_NEQ(" Deleting the file", apr_file_remove(filename, pool))
- TEST_EQ(" Making sure it's gone",
- apr_file_open(&thefile, filename, APR_READ,
- APR_UREAD | APR_UWRITE | APR_GREAD, pool),
- APR_SUCCESS, "OK", "Failed")
+static void test_open_write(CuTest *tc)
+{
+ apr_status_t rv;
- test_filedel(pool);
- test_read(pool);
- test_mod_neg(pool, 0); /* unbuffered */
- test_mod_neg(pool, APR_BUFFERED);
+ filetest = NULL;
+ rv = apr_file_open(&filetest, FILENAME,
+ APR_WRITE,
+ APR_UREAD | APR_UWRITE | APR_GREAD, p);
+ CuAssertIntEquals(tc, APR_ENOENT, rv);
+}
- apr_pool_destroy(pool);
+static void test_open_writecreate(CuTest *tc)
+{
+ apr_status_t rv;
- printf("\nAll tests passed OK\n");
- return 0;
+ filetest = NULL;
+ rv = apr_file_open(&filetest, FILENAME,
+ APR_WRITE | APR_CREATE,
+ APR_UREAD | APR_UWRITE | APR_GREAD, p);
+ CuAssertIntEquals(tc, APR_SUCCESS, rv);
}
-void test_filedel(apr_pool_t *pool)
+static void test_write(CuTest *tc)
{
- apr_file_t *thefile = NULL;
- apr_int32_t flag = APR_READ | APR_WRITE | APR_CREATE;
-
- STD_TEST_NEQ(" Creating the file",
- apr_file_open(&thefile, "testdel", flag,
- APR_UREAD | APR_UWRITE | APR_GREAD, pool))
- STD_TEST_NEQ(" Closing the file",
- apr_file_close(thefile))
- STD_TEST_NEQ(" Removing the file", apr_file_remove("testdel", pool))
- TEST_EQ(" Checking it's gone",
- apr_file_open(&thefile, "testdel", APR_READ,
- APR_UREAD | APR_UWRITE | APR_GREAD, pool),
- APR_SUCCESS,
- "OK", "Failed")
+ apr_status_t rv;
+ apr_size_t bytes = strlen(TESTSTR);
+
+ rv = apr_file_write(filetest, TESTSTR, &bytes);
+ CuAssertIntEquals(tc, APR_SUCCESS, rv);
}
-#define TESTREAD_BLKSIZE 1024
-#define APR_BUFFERSIZE 4096 /* This should match APR's buffer size. */
+static void test_open_readwrite(CuTest *tc)
+{
+ apr_status_t rv;
+
+ apr_file_close(filetest);
+ filetest = NULL;
+ rv = apr_file_open(&filetest, FILENAME,
+ APR_READ | APR_WRITE,
+ APR_UREAD | APR_UWRITE | APR_GREAD, p);
+ CuAssertIntEquals(tc, rv, APR_SUCCESS);
+ CuAssertPtrNotNull(tc, filetest);
+}
-static void create_testread(apr_pool_t *p, const char *fname)
+static void test_seek(CuTest *tc)
{
- apr_file_t *f = NULL;
apr_status_t rv;
- char buf[TESTREAD_BLKSIZE];
- apr_size_t nbytes;
+ apr_off_t offset = 5;
+ apr_size_t nbytes = 256;
+ char *str = apr_palloc(p, nbytes + 1);
- /* Create a test file with known content.
- */
+ rv = apr_file_seek(filetest, SEEK_SET, &offset);
+ CuAssertIntEquals(tc, APR_SUCCESS, rv);
- rv = apr_file_open(&f, fname, APR_CREATE | APR_WRITE | APR_TRUNCATE, APR_UREAD | APR_UWRITE, p);
- if (rv) {
- fprintf(stderr, "apr_file_open()->%d/%s\n",
- rv, apr_strerror(rv, buf, sizeof buf));
- exit(1);
- }
- nbytes = 4;
- rv = apr_file_write(f, "abc\n", &nbytes);
- assert(!rv && nbytes == 4);
- memset(buf, 'a', sizeof buf);
- nbytes = sizeof buf;
- rv = apr_file_write(f, buf, &nbytes);
- assert(!rv && nbytes == sizeof buf);
- nbytes = 2;
- rv = apr_file_write(f, "\n\n", &nbytes);
- assert(!rv && nbytes == 2);
- rv = apr_file_close(f);
- assert(!rv);
-}
+ rv = apr_file_read(filetest, str, &nbytes);
+ CuAssertIntEquals(tc, APR_SUCCESS, rv);
+ CuAssertIntEquals(tc, strlen(TESTSTR) - 5, nbytes);
+ CuAssertStrEquals(tc, TESTSTR + 5, str);
+}
-static char read_one(apr_file_t *f, int expected)
+
+static void test_userdata_set(CuTest *tc)
{
- char bytes[3];
- apr_status_t rv;
- static int counter = 0;
- apr_size_t nbytes;
-
- counter += 1;
-
- bytes[0] = bytes[2] = 0x01;
- if (counter % 2) {
- rv = apr_file_getc(bytes + 1, f);
- }
- else {
- nbytes = 1;
- rv = apr_file_read(f, bytes + 1, &nbytes);
- assert(nbytes == 1);
- }
- assert(!rv);
- assert(bytes[0] == 0x01 && bytes[2] == 0x01);
- if (expected != -1) {
- assert(bytes[1] == expected);
- }
- return bytes[1];
+ apr_status_t rv;
+
+ rv = apr_file_data_set(filetest, "This is a test",
+ "test", apr_pool_cleanup_null);
+ CuAssertIntEquals(tc, APR_SUCCESS, rv);
}
-static int test_read_guts(apr_pool_t *p, const char *fname, apr_int32_t extra_flags)
+static void test_userdata_get(CuTest *tc)
{
- apr_file_t *f = NULL;
apr_status_t rv;
- apr_size_t nbytes;
- char buf[1024];
- int i;
+ char *teststr;
- rv = apr_file_open(&f, fname, APR_READ | extra_flags, 0, p);
- assert(!rv);
- read_one(f, 'a');
- read_one(f, 'b');
- rv = apr_file_ungetc('b', f);
- assert(!rv);
- /* Note: some implementations move the file ptr back;
- * others just save up to one char; it isn't
- * portable to unget more than once.
- */
- /* Don't do this: rv = apr_file_ungetc('a', f); */
- read_one(f, 'b');
- read_one(f, 'c');
- read_one(f, '\n');
- for (i = 0; i < TESTREAD_BLKSIZE; i++) {
- read_one(f, 'a');
- }
- read_one(f, '\n');
- read_one(f, '\n');
- rv = apr_file_getc(buf, f);
- assert(rv == APR_EOF);
- rv = apr_file_close(f);
- assert(!rv);
+ rv = apr_file_data_get((void **)&teststr, "test", filetest);
+ CuAssertIntEquals(tc, APR_SUCCESS, rv);
+ CuAssertStrEquals(tc, "This is a test", teststr);
+}
- f = NULL;
- rv = apr_file_open(&f, fname, APR_READ | extra_flags, 0, p);
- assert(!rv);
- rv = apr_file_gets(buf, 10, f);
- assert(!rv);
- assert(!strcmp(buf, "abc\n"));
- /* read first 800 of TESTREAD_BLKSIZE 'a's
- */
- rv = apr_file_gets(buf, 801, f);
- assert(!rv);
- assert(strlen(buf) == 800);
- for (i = 0; i < 800; i++) {
- assert(buf[i] == 'a');
- }
- /* read rest of the 'a's and the first newline
- */
- rv = apr_file_gets(buf, sizeof buf, f);
- assert(!rv);
- assert(strlen(buf) == TESTREAD_BLKSIZE - 800 + 1);
- for (i = 0; i < TESTREAD_BLKSIZE - 800; i++) {
- assert(buf[i] == 'a');
- }
- assert(buf[TESTREAD_BLKSIZE - 800] == '\n');
- /* read the last newline
- */
- rv = apr_file_gets(buf, sizeof buf, f);
- assert(!rv);
- assert(!strcmp(buf, "\n"));
- /* get APR_EOF
- */
- rv = apr_file_gets(buf, sizeof buf, f);
- assert(rv == APR_EOF);
- /* get APR_EOF with apr_file_getc
- */
- rv = apr_file_getc(buf, f);
- assert(rv == APR_EOF);
- /* get APR_EOF with apr_file_read
- */
- nbytes = sizeof buf;
- rv = apr_file_read(f, buf, &nbytes);
- assert(rv == APR_EOF);
- rv = apr_file_close(f);
- assert(!rv);
- return (1);
+static void test_userdata_getnokey(CuTest *tc)
+{
+ apr_status_t rv;
+ char *teststr;
+
+ rv = apr_file_data_get((void **)&teststr, "nokey", filetest);
+ CuAssertIntEquals(tc, APR_SUCCESS, rv);
+ CuAssertPtrEquals(tc, NULL, teststr);
}
-static void test_bigread(apr_pool_t *p, const char *fname, apr_int32_t extra_flags)
+static void test_getc(CuTest *tc)
{
apr_file_t *f = NULL;
apr_status_t rv;
- char buf[APR_BUFFERSIZE * 2];
- apr_size_t nbytes;
+ char ch;
- /* Create a test file with known content.
- */
- rv = apr_file_open(&f, fname, APR_CREATE | APR_WRITE | APR_TRUNCATE, APR_UREAD | APR_UWRITE, p);
- if (rv) {
- fprintf(stderr, "apr_file_open()->%d/%s\n",
- rv, apr_strerror(rv, buf, sizeof buf));
- exit(1);
- }
- nbytes = APR_BUFFERSIZE;
- memset(buf, 0xFE, nbytes);
- rv = apr_file_write(f, buf, &nbytes);
- assert(!rv && nbytes == APR_BUFFERSIZE);
- rv = apr_file_close(f);
- assert(!rv);
+ rv = apr_file_open(&f, FILENAME, APR_READ, 0, p);
+ CuAssertIntEquals(tc, APR_SUCCESS, rv);
- f = NULL;
- rv = apr_file_open(&f, fname, APR_READ | extra_flags, 0, p);
- assert(!rv);
- nbytes = sizeof buf;
- rv = apr_file_read(f, buf, &nbytes);
- assert(!rv);
- assert(nbytes == APR_BUFFERSIZE);
- rv = apr_file_close(f);
- assert(!rv);
+ apr_file_getc(&ch, f);
+ CuAssertIntEquals(tc, APR_SUCCESS, rv);
+ CuAssertIntEquals(tc, (int)TESTSTR[0], (int)ch);
+ apr_file_close(f);
}
-static void test_read(apr_pool_t *p)
+static void test_ungetc(CuTest *tc)
{
- const char *fname = "testread.dat";
+ apr_file_t *f = NULL;
apr_status_t rv;
+ char ch;
- printf("Testing file read functions.\n");
-
- create_testread(p, fname);
- printf("%-60s", " Buffered file tests");
- if (test_read_guts(p, fname, APR_BUFFERED))
- printf("OK\n");
- printf("%-60s", " Unbuffered file tests");
- test_read_guts(p, fname, 0);
- printf("OK\n");
- printf("%-60s", " More buffered file tests");
- test_bigread(p, fname, APR_BUFFERED);
- printf("OK\n");
- printf("%-60s", " More unbuffered file tests");
- test_bigread(p, fname, 0);
- printf("OK\n");
- printf("%-60s", " Even more buffered file tests");
- test_read_seek(APR_BUFFERED, p);
- printf("OK\n");
- printf("%-60s", " Even more unbuffered file tests");
- test_read_seek(0, p);
- printf("OK\n");
- rv = apr_file_remove(fname, p);
- assert(!rv);
- printf("%-60s", " All read tests");
- printf("OK\n");
+ rv = apr_file_open(&f, FILENAME, APR_READ, 0, p);
+ CuAssertIntEquals(tc, APR_SUCCESS, rv);
+
+ apr_file_getc(&ch, f);
+ CuAssertIntEquals(tc, APR_SUCCESS, rv);
+ CuAssertIntEquals(tc, (int)TESTSTR[0], (int)ch);
+
+ apr_file_ungetc('X', f);
+ CuAssertIntEquals(tc, APR_SUCCESS, rv);
+
+ apr_file_getc(&ch, f);
+ CuAssertIntEquals(tc, APR_SUCCESS, rv);
+ CuAssertIntEquals(tc, 'X', (int)ch);
+
+ apr_file_close(f);
}
-static void test_read_seek(apr_int32_t moreflags, apr_pool_t *p)
+static void test_gets(CuTest *tc)
{
- const char *fname = "readseek.dat";
+ apr_file_t *f = NULL;
apr_status_t rv;
- apr_file_t *f;
- apr_size_t nbytes;
- const char *str1, *str2, *str3;
- char buf[8192];
- apr_off_t seek_amt;
-
- /* create the content */
-
- rv = apr_file_open(&f, fname, APR_CREATE | APR_WRITE, APR_UREAD | APR_UWRITE, p);
- assert(!rv);
+ char *str = apr_palloc(p, 256);
- str1 = "abcdefghijklmnopqrstuvwxyz\n";
- str2 = "1234567890\n";
- str3 = "1234567890-=+_)(*&^%$#@!\n";
+ rv = apr_file_open(&f, FILENAME, APR_READ, 0, p);
+ CuAssertIntEquals(tc, APR_SUCCESS, rv);
- nbytes = strlen(str1);
- rv = apr_file_write(f, str1, &nbytes);
- assert(!rv && nbytes == strlen(str1));
+ rv = apr_file_gets(str, 256, f);
+ /* Only one line in the test file, so we should get the EOF on the first
+ * call to gets.
+ */
+ CuAssertIntEquals(tc, APR_EOF, rv);
+ CuAssertStrEquals(tc, TESTSTR, str);
- nbytes = strlen(str2);
- rv = apr_file_write(f, str2, &nbytes);
- assert(!rv && nbytes == strlen(str2));
+ apr_file_close(f);
+}
- nbytes = strlen(str3);
- rv = apr_file_write(f, str3, &nbytes);
- assert(!rv && nbytes == strlen(str3));
+static void test_bigread(CuTest *tc)
+{
+ apr_file_t *f = NULL;
+ apr_status_t rv;
+ char buf[APR_BUFFERSIZE * 2];
+ apr_size_t nbytes;
- nbytes = strlen(str1);
- rv = apr_file_write(f, str1, &nbytes);
- assert(!rv && nbytes == strlen(str1));
+ /* Create a test file with known content.
+ */
+ rv = apr_file_open(&f, "data/created_file",
+ APR_CREATE | APR_WRITE | APR_TRUNCATE,
+ APR_UREAD | APR_UWRITE, p);
+ CuAssertIntEquals(tc, APR_SUCCESS, rv);
- nbytes = strlen(str2);
- rv = apr_file_write(f, str2, &nbytes);
- assert(!rv && nbytes == strlen(str2));
+ nbytes = APR_BUFFERSIZE;
+ memset(buf, 0xFE, nbytes);
- nbytes = strlen(str3);
- rv = apr_file_write(f, str3, &nbytes);
- assert(!rv && nbytes == strlen(str3));
+ rv = apr_file_write(f, buf, &nbytes);
+ CuAssertIntEquals(tc, APR_SUCCESS, rv);
+ CuAssertIntEquals(tc, APR_BUFFERSIZE, nbytes);
rv = apr_file_close(f);
- assert(!rv);
+ CuAssertIntEquals(tc, APR_SUCCESS, rv);
- rv = apr_file_open(&f, fname, APR_READ | moreflags, 0, p);
- assert(!rv);
-
- rv = apr_file_gets(buf, sizeof buf, f);
- assert(!rv);
- assert(!strcmp(buf, str1));
-
- rv = apr_file_gets(buf, sizeof buf, f);
- assert(!rv);
- assert(!strcmp(buf, str2));
+ f = NULL;
+ rv = apr_file_open(&f, "data/created_file", APR_READ, 0, p);
+ CuAssertIntEquals(tc, APR_SUCCESS, rv);
nbytes = sizeof buf;
rv = apr_file_read(f, buf, &nbytes);
- assert(!rv);
- assert(nbytes == strlen(str3) + strlen(str1) + strlen(str2) + strlen(str3));
- assert(!memcmp(buf, str3, strlen(str3)));
-
- /* seek back a couple of strings */
- seek_amt = -(apr_off_t)(nbytes - strlen(str3) - strlen(str1));
- rv = apr_file_seek(f, APR_CUR, &seek_amt);
- assert(!rv);
- /* seek_amt should be updated with the current offset into the file */
- assert(seek_amt == strlen(str1) + strlen(str2) + strlen(str3) + strlen(str1));
-
- rv = apr_file_gets(buf, sizeof buf, f);
- assert(!rv);
- assert(!strcmp(buf, str2));
-
- rv = apr_file_gets(buf, sizeof buf, f);
- assert(!rv);
- assert(!strcmp(buf, str3));
+ CuAssertIntEquals(tc, APR_SUCCESS, rv);
+ CuAssertIntEquals(tc, APR_BUFFERSIZE, nbytes);
rv = apr_file_close(f);
- assert(!rv);
+ CuAssertIntEquals(tc, APR_SUCCESS, rv);
- rv = apr_file_remove(fname, p);
- assert(!rv);
+ rv = apr_file_remove("data/created_file", p);
+ CuAssertIntEquals(tc, APR_SUCCESS, rv);
}
-static void test_mod_neg(apr_pool_t *p, apr_int32_t flags)
+/* This is a horrible name for this function. We are testing APR, not how
+ * Apache uses APR. And, this function tests _way_ too much stuff.
+ */
+static void test_mod_neg(CuTest *tc)
{
apr_status_t rv;
apr_file_t *f;
@@ -563,74 +365,108 @@
apr_size_t nbytes;
char buf[8192];
apr_off_t cur;
- const char *fname = "modneg.dat";
+ const char *fname = "data/modneg.dat";
- printf(" Testing mod_negotiation-style file access (%sbuffered)...\n",
- !flags ? "un" : "");
-
- rv = apr_file_open(&f, fname, APR_CREATE | APR_WRITE, APR_UREAD | APR_UWRITE, p);
- assert(!rv);
+ rv = apr_file_open(&f, fname,
+ APR_CREATE | APR_WRITE, APR_UREAD | APR_UWRITE, p);
+ CuAssertIntEquals(tc, APR_SUCCESS, rv);
s = "body56789\n";
nbytes = strlen(s);
rv = apr_file_write(f, s, &nbytes);
- assert(!rv);
- assert(nbytes == strlen(s));
+ CuAssertIntEquals(tc, APR_SUCCESS, rv);
+ CuAssertIntEquals(tc, strlen(s), nbytes);
for (i = 0; i < 7980; i++) {
s = "0";
nbytes = strlen(s);
rv = apr_file_write(f, s, &nbytes);
- assert(!rv);
- assert(nbytes == strlen(s));
+ CuAssertIntEquals(tc, APR_SUCCESS, rv);
+ CuAssertIntEquals(tc, strlen(s), nbytes);
}
s = "end456789\n";
nbytes = strlen(s);
rv = apr_file_write(f, s, &nbytes);
- assert(!rv);
- assert(nbytes == strlen(s));
+ CuAssertIntEquals(tc, APR_SUCCESS, rv);
+ CuAssertIntEquals(tc, strlen(s), nbytes);
for (i = 0; i < 10000; i++) {
s = "1";
nbytes = strlen(s);
rv = apr_file_write(f, s, &nbytes);
- assert(!rv);
- assert(nbytes == strlen(s));
+ CuAssertIntEquals(tc, APR_SUCCESS, rv);
+ CuAssertIntEquals(tc, strlen(s), nbytes);
}
rv = apr_file_close(f);
- assert(!rv);
+ CuAssertIntEquals(tc, APR_SUCCESS, rv);
- rv = apr_file_open(&f, fname, APR_READ | flags, 0, p);
- assert(!rv);
+ rv = apr_file_open(&f, fname, APR_READ, 0, p);
+ CuAssertIntEquals(tc, APR_SUCCESS, rv);
rv = apr_file_gets(buf, 11, f);
- assert(!rv);
- assert(!strcmp(buf, "body56789\n"));
+ CuAssertIntEquals(tc, APR_SUCCESS, rv);
+ CuAssertStrEquals(tc, "body56789\n", buf);
cur = 0;
rv = apr_file_seek(f, APR_CUR, &cur);
- assert(!rv);
- assert(cur == 10);
+ CuAssertIntEquals(tc, APR_SUCCESS, rv);
+ CuAssertIntEquals(tc, 10, cur);
nbytes = sizeof(buf);
rv = apr_file_read(f, buf, &nbytes);
- assert(!rv);
- assert(nbytes == sizeof(buf));
+ CuAssertIntEquals(tc, APR_SUCCESS, rv);
+ CuAssertIntEquals(tc, nbytes, sizeof(buf));
cur = -((apr_off_t)nbytes - 7980);
rv = apr_file_seek(f, APR_CUR, &cur);
- assert(!rv);
- assert(cur == 7990);
+ CuAssertIntEquals(tc, APR_SUCCESS, rv);
+ CuAssertIntEquals(tc, 7990, cur);
rv = apr_file_gets(buf, 11, f);
- assert(!rv);
- assert(!strcmp(buf, "end456789\n"));
+ CuAssertIntEquals(tc, APR_SUCCESS, rv);
+ CuAssertStrEquals(tc, "end456789\n", buf);
rv = apr_file_close(f);
- assert(!rv);
+ CuAssertIntEquals(tc, APR_SUCCESS, rv);
rv = apr_file_remove(fname, p);
- assert(!rv);
+ CuAssertIntEquals(tc, APR_SUCCESS, rv);
+}
+
+CuSuite *testfile(void)
+{
+ CuSuite *suite = CuSuiteNew("Test File I/O");
+
+ SUITE_ADD_TEST(suite, test_open_noreadwrite);
+ SUITE_ADD_TEST(suite, test_open_excl);
+ SUITE_ADD_TEST(suite, test_open_read);
+ SUITE_ADD_TEST(suite, test_read);
+ SUITE_ADD_TEST(suite, test_seek);
+ SUITE_ADD_TEST(suite, test_filename);
+ SUITE_ADD_TEST(suite, test_fileclose);
+ SUITE_ADD_TEST(suite, test_file_remove);
+ SUITE_ADD_TEST(suite, test_open_write);
+ SUITE_ADD_TEST(suite, test_open_writecreate);
+ SUITE_ADD_TEST(suite, test_write);
+ SUITE_ADD_TEST(suite, test_userdata_set);
+ SUITE_ADD_TEST(suite, test_userdata_get);
+ SUITE_ADD_TEST(suite, test_userdata_getnokey);
+ SUITE_ADD_TEST(suite, test_getc);
+ SUITE_ADD_TEST(suite, test_ungetc);
+ SUITE_ADD_TEST(suite, test_gets);
+ SUITE_ADD_TEST(suite, test_bigread);
+ SUITE_ADD_TEST(suite, test_mod_neg);
+
+ return suite;
}
+
+#ifdef SINGLE_PROG
+CuSuite *getsuite(void)
+{
+ return testfile();
+}
+#endif
+
+