PUT is no longer atomic, remove temporary file use
[mogstored_rack.git] / test / test_unit_mogstored_rack.rb
blob038f5f227e4a28b16e4d4cd6c0c899ba3f43cc25
1 # -*- encoding: binary -*-
2 require "test/unit"
3 require "tmpdir"
4 require "fileutils"
5 require "mogstored_rack"
7 class TestUnitMogstoredRack < Test::Unit::TestCase
8   attr_reader :req
10   def setup
11     @docroot = Dir.mktmpdir(["mogstored_rack", ".docroot"])
12   end
14   def test_defaults
15     req = Rack::MockRequest.new(MogstoredRack.new(@docroot))
16     all_methods(req)
17   end
19   def test_fsync_true
20     req = Rack::MockRequest.new(MogstoredRack.new(@docroot, :fsync=>true))
21     all_methods(req)
22   end
24   def all_methods(req)
25     assert_equal 200, req.get("/").status # needed to pass "mogadm check"
26     assert ! File.directory?("#@docroot/dev666")
28     r = req.request("PUT", "/dev666/666.fid", :input => StringIO.new("AAAA"))
29     assert_equal 403, r.status
31     assert ! File.directory?("#@docroot/dev666")
33     assert_equal 204, req.request("MKCOL", "/dev666").status
34     assert File.directory?("#@docroot/dev666")
36     io = StringIO.new("HELLO")
37     r = req.request("PUT", "/dev666/666.fid", :input => io)
38     assert_equal 201, r.status
39     assert_equal "HELLO", IO.read("#@docroot/dev666/666.fid")
41     # invalid MD5
42     io = StringIO.new("WORLD")
43     md5 = [ Digest::MD5.new.digest ].pack("m").strip!
44     opts = { :input => io, "HTTP_CONTENT_MD5" => md5 }
45     r = req.request("PUT", "/dev666/666.fid", opts)
46     assert_equal 400, r.status
48     # valid MD5
49     io = StringIO.new("VALID")
50     md5 = [ Digest::MD5.digest("VALID") ].pack("m").strip!
51     opts = { :input => io, "HTTP_CONTENT_MD5" => md5 }
52     r = req.request("PUT", "/dev666/666.fid", opts)
53     assert_equal 201, r.status
54     assert_equal "VALID", IO.read("#@docroot/dev666/666.fid")
56     r = req.request("GET", "/dev666/666.fid")
57     assert_equal 200, r.status
58     assert_equal "VALID", r.body
60     r = req.request("DELETE", "/dev666/666.fid")
61     assert_equal 204, r.status
62     assert ! File.exist?("#@docroot/dev666/666.fid")
63   end
65   def teardown
66     FileUtils.rmtree(@docroot)
67   end
68 end