aboutsummaryrefslogtreecommitdiffstats
path: root/activesupport/test
diff options
context:
space:
mode:
authorMichael Koziarski <michael@koziarski.com>2007-02-27 23:16:06 +0000
committerMichael Koziarski <michael@koziarski.com>2007-02-27 23:16:06 +0000
commit203932ec88974acf8d86541cf0357cf9fc013143 (patch)
tree828e0ce42dee5058d023725788b40f124e4e2cc5 /activesupport/test
parentdf7ca38d7dc2419a564c223071b92c5570cf7a58 (diff)
downloadrails-203932ec88974acf8d86541cf0357cf9fc013143.tar.gz
rails-203932ec88974acf8d86541cf0357cf9fc013143.tar.bz2
rails-203932ec88974acf8d86541cf0357cf9fc013143.zip
Add File.atomic_write to prevent users from seeing half written files. Useful for situations like Page Caching and the like. [Koz]
git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@6262 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
Diffstat (limited to 'activesupport/test')
-rw-r--r--activesupport/test/core_ext/file_test.rb29
1 files changed, 29 insertions, 0 deletions
diff --git a/activesupport/test/core_ext/file_test.rb b/activesupport/test/core_ext/file_test.rb
new file mode 100644
index 0000000000..a7a8324125
--- /dev/null
+++ b/activesupport/test/core_ext/file_test.rb
@@ -0,0 +1,29 @@
+require File.dirname(__FILE__) + '/../abstract_unit'
+
+class AtomicWriteTest < Test::Unit::TestCase
+
+ def test_atomic_write_without_errors
+ contents = "Atomic Text"
+ File.atomic_write(file_name) do |file|
+ file.write(contents)
+ assert !File.exists?(file_name)
+ end
+ assert File.exists?(file_name)
+ assert_equal contents, File.read(file_name)
+ ensure
+ File.unlink(file_name)
+ end
+
+ def test_atomic_write_doesnt_write_when_block_raises
+ File.atomic_write(file_name) do |file|
+ file.write("testing")
+ raise "something bad"
+ end
+ rescue
+ assert !File.exists?(file_name)
+ end
+
+ def file_name
+ "atomic.file"
+ end
+end