Add tests for cases exercising the atomic replacement mechanism
authorJohn Darrington <john@darrington.wattle.id.au>
Sat, 17 Oct 2015 16:04:10 +0000 (18:04 +0200)
committerJohn Darrington <john@darrington.wattle.id.au>
Sat, 17 Oct 2015 18:39:23 +0000 (20:39 +0200)
Add a test case when writing to a fifo.
Add some test cases for situations where file creation fails.  Failure
to create a file should be reported gracefully.

tests/automake.mk
tests/data/file.at [new file with mode: 0644]

index b140caa31c98842b4930b43bee8839dcb4bdbfb7..72bb16796e8d05a7f2afb08c2ce1ab28f1d4c76d 100644 (file)
@@ -279,6 +279,7 @@ TESTSUITE_AT = \
        tests/data/data-out.at \
        tests/data/datasheet-test.at \
        tests/data/dictionary.at \
+       tests/data/file.at \
        tests/data/format-guesser.at \
        tests/data/pc+-file-reader.at \
        tests/data/por-file.at \
diff --git a/tests/data/file.at b/tests/data/file.at
new file mode 100644 (file)
index 0000000..b9b81de
--- /dev/null
@@ -0,0 +1,82 @@
+AT_BANNER([files handling])
+
+AT_SETUP([Write error - directory exists])
+
+mkdir foobar.sav
+
+AT_DATA([file.sps], [dnl
+DATA LIST NOTABLE/x 1.
+BEGIN DATA.
+5
+END DATA.
+SAVE OUTFILE='foobar.sav'.
+])
+
+AT_CHECK([pspp -O format=csv file.sps], [1], [dnl
+error: Opening foobar.sav for writing: Is a directory.
+
+error: Error opening `foobar.sav' for writing as a system file: Is a directory.
+])
+
+AT_CLEANUP
+
+
+AT_SETUP([Write error - no permission])
+
+mkdir  directory
+touch directory/foobar.sav
+chmod 000 directory
+
+AT_DATA([file.sps], [dnl
+DATA LIST NOTABLE/x 1.
+BEGIN DATA.
+5
+END DATA.
+SAVE OUTFILE='directory/foobar.sav'.
+])
+
+AT_CHECK([pspp -O format=csv file.sps], [1], [dnl
+error: Creating temporary file to replace directory/foobar.sav: Permission denied.
+
+error: Error opening `directory/foobar.sav' for writing as a system file: Permission denied.
+])
+
+AT_CLEANUP
+
+
+
+AT_SETUP([Write error - temp file disappeared])
+
+AT_DATA([file.sps], [dnl
+DATA LIST NOTABLE/x 1.
+BEGIN DATA.
+5
+END DATA.
+XSAVE OUTFILE='foobar.sav'.
+HOST COMMAND=[['rm foobar.sav.tmp*']].
+EXECUTE.
+])
+
+AT_CHECK([pspp -O format=csv file.sps], [1], [ignore])
+
+AT_CLEANUP
+
+
+
+AT_SETUP([Write fifo])
+
+AT_DATA([file.sps], [dnl
+DATA LIST NOTABLE/x 1.
+BEGIN DATA.
+5
+END DATA.
+SAVE OUTFILE='foobar.sav'.
+])
+
+mkfifo foobar.sav
+cat foobar.sav > /dev/null & 
+pid=$!
+
+AT_CHECK([pspp -O format=csv file.sps], [0], [ignore])
+
+AT_CLEANUP