summaryrefslogtreecommitdiff
path: root/test/testfile.c
diff options
context:
space:
mode:
authormturk <mturk@13f79535-47bb-0310-9956-ffa450edef68>2010-12-10 16:52:09 +0000
committermturk <mturk@13f79535-47bb-0310-9956-ffa450edef68>2010-12-10 16:52:09 +0000
commitc299c110bade0ab4dfa9afbf788779620ce135c2 (patch)
tree77a32491e11fb84fa41ba8a674ca72cf87c44b11 /test/testfile.c
parent7ce118e893130b6998693a3f6b7613c4852e8529 (diff)
downloadlibapr-c299c110bade0ab4dfa9afbf788779620ce135c2.tar.gz
Add apr_file_trunc test case. It currently fails for APR_FOPEN_BUFFERED because write buffer is flushed after ftruncate call
git-svn-id: http://svn.apache.org/repos/asf/apr/apr/trunk@1044432 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'test/testfile.c')
-rw-r--r--test/testfile.c57
1 files changed, 57 insertions, 0 deletions
diff --git a/test/testfile.c b/test/testfile.c
index 2b4658669..dad214e35 100644
--- a/test/testfile.c
+++ b/test/testfile.c
@@ -810,6 +810,62 @@ static void test_truncate(abts_case *tc, void *data)
ABTS_INT_EQUAL(tc, APR_SUCCESS, rv);
}
+static void test_file_trunc(abts_case *tc, void *data)
+{
+ apr_status_t rv;
+ apr_file_t *f;
+ const char *fname = "data/testtruncate.dat";
+ const char *s;
+ apr_size_t nbytes;
+ apr_finfo_t finfo;
+
+ apr_file_remove(fname, p);
+
+ /* Test unbuffered */
+ rv = apr_file_open(&f, fname,
+ APR_FOPEN_CREATE | APR_FOPEN_READ |
+ APR_FOPEN_WRITE,
+ APR_UREAD | APR_UWRITE, p);
+ ABTS_INT_EQUAL(tc, APR_SUCCESS, rv);
+
+ s = "some data";
+ nbytes = strlen(s);
+ rv = apr_file_write(f, s, &nbytes);
+ ABTS_INT_EQUAL(tc, APR_SUCCESS, rv);
+ ABTS_SIZE_EQUAL(tc, strlen(s), nbytes);
+ rv = apr_file_trunc(f, 4);
+ ABTS_INT_EQUAL(tc, APR_SUCCESS, rv);
+ rv = apr_file_close(f);
+ ABTS_INT_EQUAL(tc, APR_SUCCESS, rv);
+ rv = apr_stat(&finfo, fname, APR_FINFO_SIZE, p);
+ ABTS_INT_EQUAL(tc, APR_SUCCESS, rv);
+ ABTS_ASSERT(tc, "File size mismatch, expected 4", finfo.size == 4);
+
+ rv = apr_file_remove(fname, p);
+ ABTS_INT_EQUAL(tc, APR_SUCCESS, rv);
+ /* Test buffered */
+ rv = apr_file_open(&f, fname,
+ APR_FOPEN_CREATE | APR_FOPEN_READ |
+ APR_FOPEN_WRITE | APR_FOPEN_BUFFERED,
+ APR_UREAD | APR_UWRITE, p);
+ ABTS_INT_EQUAL(tc, APR_SUCCESS, rv);
+
+ nbytes = strlen(s);
+ rv = apr_file_write(f, s, &nbytes);
+ ABTS_INT_EQUAL(tc, APR_SUCCESS, rv);
+ ABTS_SIZE_EQUAL(tc, strlen(s), nbytes);
+ rv = apr_file_trunc(f, 4);
+ ABTS_INT_EQUAL(tc, APR_SUCCESS, rv);
+ rv = apr_file_close(f);
+ ABTS_INT_EQUAL(tc, APR_SUCCESS, rv);
+ rv = apr_stat(&finfo, fname, APR_FINFO_SIZE, p);
+ ABTS_INT_EQUAL(tc, APR_SUCCESS, rv);
+ ABTS_ASSERT(tc, "File size mismatch, expected 4", finfo.size == 4);
+
+ rv = apr_file_remove(fname, p);
+ ABTS_INT_EQUAL(tc, APR_SUCCESS, rv);
+}
+
static void test_bigfprintf(abts_case *tc, void *data)
{
apr_file_t *f;
@@ -1003,6 +1059,7 @@ abts_suite *testfile(abts_suite *suite)
abts_run_test(suite, test_bigread, NULL);
abts_run_test(suite, test_mod_neg, NULL);
abts_run_test(suite, test_truncate, NULL);
+ abts_run_test(suite, test_file_trunc, NULL);
abts_run_test(suite, test_bigfprintf, NULL);
abts_run_test(suite, test_fail_write_flush, NULL);
abts_run_test(suite, test_fail_read_flush, NULL);