tstRTFileAppend-1.cpp revision 7a5f93342a1ef3f1fb8ee93ed0e65e312cd32c0a
63f06dce77bb2d9b1c5aa5deeb47a1069987fd1end * IPRT Testcase - File Appending.
63f06dce77bb2d9b1c5aa5deeb47a1069987fd1end * Copyright (C) 2009-2010 Oracle Corporation
63f06dce77bb2d9b1c5aa5deeb47a1069987fd1end * This file is part of VirtualBox Open Source Edition (OSE), as
63f06dce77bb2d9b1c5aa5deeb47a1069987fd1end * available from http://www.virtualbox.org. This file is free software;
63f06dce77bb2d9b1c5aa5deeb47a1069987fd1end * you can redistribute it and/or modify it under the terms of the GNU
63f06dce77bb2d9b1c5aa5deeb47a1069987fd1end * General Public License (GPL) as published by the Free Software
63f06dce77bb2d9b1c5aa5deeb47a1069987fd1end * Foundation, in version 2 as it comes in the "COPYING" file of the
63f06dce77bb2d9b1c5aa5deeb47a1069987fd1end * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
3f08db06526d6901aa08c110b5bc7dde6bc39905nd * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
63f06dce77bb2d9b1c5aa5deeb47a1069987fd1end * The contents of this file may alternatively be used under the terms
63f06dce77bb2d9b1c5aa5deeb47a1069987fd1end * of the Common Development and Distribution License Version 1.0
3f08db06526d6901aa08c110b5bc7dde6bc39905nd * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
63f06dce77bb2d9b1c5aa5deeb47a1069987fd1end * VirtualBox OSE distribution, in which case the provisions of the
63f06dce77bb2d9b1c5aa5deeb47a1069987fd1end * CDDL are applicable instead of those of the GPL.
63f06dce77bb2d9b1c5aa5deeb47a1069987fd1end * You may elect to license modified versions of this file under the
bc9d4698fce0238d2f6f2682e99423ebb1149976rbowen * terms and conditions of either the GPL or the CDDL or both.
d474d8ef01ec5c2a09341cd148851ed383c3287crbowen/*******************************************************************************
63f06dce77bb2d9b1c5aa5deeb47a1069987fd1end* Header Files *
4b575a6b6704b516f22d65a3ad35696d7b9ba372rpluem*******************************************************************************/
63f06dce77bb2d9b1c5aa5deeb47a1069987fd1end * Open it write only and do some appending.
63f06dce77bb2d9b1c5aa5deeb47a1069987fd1end * Checking that read fails and that the file position changes after the write.
63f06dce77bb2d9b1c5aa5deeb47a1069987fd1end RTTESTI_CHECK_RC(rc = RTFileSeek(hFile, off, RTFILE_SEEK_CURRENT, &offActual), VINF_SUCCESS);
e1e8390280254f7f0580d701e583f670643d4f3fnilgun RTTESTI_CHECK_MSG(offActual == 0 || RT_FAILURE(rc), ("offActual=%llu", offActual));
63f06dce77bb2d9b1c5aa5deeb47a1069987fd1end RTTESTI_CHECK_RC(RTFileWrite(hFile, "0123456789", 10, NULL), VINF_SUCCESS);
63f06dce77bb2d9b1c5aa5deeb47a1069987fd1end RTTESTI_CHECK_RC(rc = RTFileSeek(hFile, off, RTFILE_SEEK_CURRENT, &offActual), VINF_SUCCESS);
63f06dce77bb2d9b1c5aa5deeb47a1069987fd1end RTTESTI_CHECK_MSG(offActual == 10 || RT_FAILURE(rc), ("offActual=%llu", offActual));
63f06dce77bb2d9b1c5aa5deeb47a1069987fd1end RTTestIPrintf(RTTESTLVL_INFO, "off=%llu after first write\n", offActual);
63f06dce77bb2d9b1c5aa5deeb47a1069987fd1end RTTESTI_CHECK_MSG(rc == VERR_ACCESS_DENIED || rc == VERR_INVALID_HANDLE, ("rc=%Rrc\n", rc));
63f06dce77bb2d9b1c5aa5deeb47a1069987fd1end RTTESTI_CHECK_RC(rc = RTFileSeek(hFile, off, RTFILE_SEEK_BEGIN, &offActual), VINF_SUCCESS);
623eebe956d9c2d6d073ed3eae855b56030b40e9noodl RTTESTI_CHECK_MSG(offActual == 5 || RT_FAILURE(rc), ("offActual=%llu", offActual));
63f06dce77bb2d9b1c5aa5deeb47a1069987fd1end * Open it write only and do some more appending.
cd34a6fbf0a2619544a72eadb73f309370bf6682wrowe * Checking the initial position and that it changes after the write.
08cf4a15275e4cb65a424b3a1db5410bfb51085cjim RTTESTI_CHECK_RC(rc = RTFileSeek(hFile, off, RTFILE_SEEK_CURRENT, &offActual), VINF_SUCCESS);
f6066dc0a6ad0432b74774e290c04c3cc4aa2dafrbowen RTTESTI_CHECK_MSG(offActual == 0 || RT_FAILURE(rc), ("offActual=%llu", offActual));
78f97ce162b66a0dbfd7af4dcd9984f162569b04minfrin RTTestIPrintf(RTTESTLVL_INFO, "off=%llu on 2nd open\n", offActual);
63f06dce77bb2d9b1c5aa5deeb47a1069987fd1end RTTESTI_CHECK_RC(rc = RTFileWrite(hFile, "abcdefghij", 10, &cb), VINF_SUCCESS);
7906201913b68fe78b9d6a22ab33bf21d82c490eminfrin RTTESTI_CHECK_RC(rc = RTFileSeek(hFile, off, RTFILE_SEEK_CURRENT, &offActual), VINF_SUCCESS);
7906201913b68fe78b9d6a22ab33bf21d82c490eminfrin RTTESTI_CHECK_MSG(offActual == 20 || RT_FAILURE(rc), ("offActual=%llu", offActual));
63f06dce77bb2d9b1c5aa5deeb47a1069987fd1end RTTestIPrintf(RTTESTLVL_INFO, "off=%llu after 2nd write\n", offActual);
63f06dce77bb2d9b1c5aa5deeb47a1069987fd1end * Open it read/write.
4ed26c413f67a5aae20b95909828f30bb5dc2286poirier * Check the initial position and read stuff. Then append some more and
1ac39787115a288f5e848344b1b1e8dccb1c58f1nd * check the new position and see that read returns 0/EOF. Finally,
63f06dce77bb2d9b1c5aa5deeb47a1069987fd1end * do some seeking and read from a new position.
63f06dce77bb2d9b1c5aa5deeb47a1069987fd1end RTTESTI_CHECK_RC(rc = RTFileSeek(hFile, off, RTFILE_SEEK_CURRENT, &offActual), VINF_SUCCESS);
d0828c8a321dc5e9ea60550f052294669c08cf93jim RTTESTI_CHECK_MSG(offActual == 0 || RT_FAILURE(rc), ("offActual=%llu", offActual));
d0828c8a321dc5e9ea60550f052294669c08cf93jim RTTestIPrintf(RTTESTLVL_INFO, "off=%llu on 3rd open\n", offActual);
63f06dce77bb2d9b1c5aa5deeb47a1069987fd1end RTTESTI_CHECK_RC(rc = RTFileRead(hFile, szBuf, 10, &cb), VINF_SUCCESS);
63f06dce77bb2d9b1c5aa5deeb47a1069987fd1end RTTESTI_CHECK_MSG(RT_FAILURE(rc) || !memcmp(szBuf, "0123456789", 10), ("read the wrong stuff: %.10s - expected 0123456789\n", szBuf));
2704de98885368683621b01c8f8f4e4b01557611takashi RTTESTI_CHECK_RC(rc = RTFileSeek(hFile, off, RTFILE_SEEK_CURRENT, &offActual), VINF_SUCCESS);
d0828c8a321dc5e9ea60550f052294669c08cf93jim RTTESTI_CHECK_MSG(offActual == 10 || RT_FAILURE(rc), ("offActual=%llu", offActual));
2704de98885368683621b01c8f8f4e4b01557611takashi RTTestIPrintf(RTTESTLVL_INFO, "off=%llu on 1st open\n", offActual);
1d980e5489836e977ba59b419e27b0ec875c4bd3takashi RTTESTI_CHECK_RC(RTFileWrite(hFile, "klmnopqrst", 10, NULL), VINF_SUCCESS);
1d980e5489836e977ba59b419e27b0ec875c4bd3takashi RTTESTI_CHECK_RC(rc = RTFileSeek(hFile, off, RTFILE_SEEK_CURRENT, &offActual), VINF_SUCCESS);
1d980e5489836e977ba59b419e27b0ec875c4bd3takashi RTTESTI_CHECK_MSG(offActual == 30 || RT_FAILURE(rc), ("offActual=%llu", offActual));
4ed26c413f67a5aae20b95909828f30bb5dc2286poirier RTTestIPrintf(RTTESTLVL_INFO, "off=%llu after 3rd write\n", offActual);
cd6c8de3bedcc401ee230159b0439fa20f44488etakashi RTTESTI_CHECK_RC(rc = RTFileRead(hFile, szBuf, 1, NULL), VERR_EOF);
63f06dce77bb2d9b1c5aa5deeb47a1069987fd1end RTTESTI_CHECK_RC(rc = RTFileRead(hFile, szBuf, 1, &cb), VINF_SUCCESS);
1de1266f0ea387d6373be8415745dfd2ab876341jim RTTESTI_CHECK_RC(rc = RTFileSeek(hFile, off, RTFILE_SEEK_BEGIN, &offActual), VINF_SUCCESS);
27d778df0b517e1578f907d2e51eb961cd8ee5fbjim RTTESTI_CHECK_MSG(offActual == 15 || RT_FAILURE(rc), ("offActual=%llu", offActual));
63f06dce77bb2d9b1c5aa5deeb47a1069987fd1end RTTESTI_CHECK_RC(rc = RTFileRead(hFile, szBuf, 10, NULL), VINF_SUCCESS);
63f06dce77bb2d9b1c5aa5deeb47a1069987fd1end RTTESTI_CHECK_MSG(RT_FAILURE(rc) || !memcmp(szBuf, "fghijklmno", 10), ("read the wrong stuff: %.10s - expected fghijklmno\n", szBuf));
438b4817913a5ff55d9cad4c7ddf133330b4466ejim RTTESTI_CHECK_RC(rc = RTFileSeek(hFile, off, RTFILE_SEEK_CURRENT, &offActual), VINF_SUCCESS);
1d980e5489836e977ba59b419e27b0ec875c4bd3takashi RTTESTI_CHECK_MSG(offActual == 25 || RT_FAILURE(rc), ("offActual=%llu", offActual));
e5ce3ac0e9b720c0fa23782e29168a0810697fdetakashi RTTestIPrintf(RTTESTLVL_INFO, "off=%llu after 2nd read\n", offActual);
4126704c4950bfd46d32ad54e3b106ac6d868a73sf * Open it read only + append and check that we cannot write to it.
5f4e50966b2b9b58436a1651cbe588d1b595657ewrowe RTTESTI_CHECK_MSG(rc == VERR_ACCESS_DENIED || rc == VERR_INVALID_HANDLE, ("rc=%Rrc\n", rc));
50cb7e2b30597f481fee57bac945190f06ebcc58jorton RTTESTI_CHECK_RC(RTFileDelete("tstFileAppend-1.tst"), VINF_SUCCESS);
1de1266f0ea387d6373be8415745dfd2ab876341jim int rc = RTTestInitAndCreate("tstRTFileAppend-1", &hTest);