Allow get_file_data to accept a block for large files
[ruby-mogilefs-client.git] / test / setup.rb
blobd6826c742835703511a197d3da5fd3bca35b292a
1 require 'test/unit'
3 require 'fileutils'
4 require 'tmpdir'
5 require 'stringio'
7 require 'rubygems'
8 require 'test/zentest_assertions'
10 $TESTING = true
12 require 'mogilefs'
14 class FakeBackend
16   attr_reader :lasterr, :lasterrstr
18   def initialize
19     @responses = Hash.new { |h,k| h[k] = [] }
20     @lasterr = nil
21     @lasterrstr = nil
22   end
24   def method_missing(meth, *args)
25     meth = meth.to_s
26     if meth =~ /(.*)=$/ then
27       @responses[$1] << args.first
28     else
29       response = @responses[meth].shift
30       case response
31       when Array then
32         @lasterr = response.first
33         @lasterrstr = response.last
34         return nil
35       end
36       return response
37     end
38   end
40 end
42 class FakeSocket
44   attr_reader :read_s
45   attr_reader :write_s
46   attr_reader :sync
48   def initialize(read = '', write = StringIO.new)
49     @read_s = read.class.method_defined?(:sysread) ? read : StringIO.new(read)
50     @write_s = write
51     @closed = false
52     @sync = false
53   end
55   def sync=(do_sync)
56     @write_s.sync = do_sync
57     @read_s.sync = do_sync
58   end
60   def closed?
61     @closed
62   end
64   def close
65     @closed = true
66     return nil
67   end
69   def gets
70     @read_s.gets
71   end
73   def peeraddr
74     ['AF_INET', 6001, 'localhost', '127.0.0.1']
75   end
77   def read(bytes)
78     @read_s.read bytes
79   end
81   def sysread(bytes, buf = '')
82     @read_s.sysread bytes, buf
83   end
85   def recv_nonblock(bytes, flags = 0)
86     ret = @read_s.sysread(bytes)
87     # Ruby doesn't expose pread(2)
88     if (flags & Socket::MSG_PEEK) != 0
89       @read_s.sysseek(-ret.size, IO::SEEK_CUR)
90     end
91     ret
92   end
93   alias_method :recv, :recv_nonblock
95   def write(data)
96     @write_s.write data
97   end
99   def syswrite(data)
100     @write_s.syswrite data
101   end
105 class MogileFS::Client
106   attr_writer :readonly
109 class TCPSocket
111   class << self
113     attr_accessor :connections
114     attr_accessor :sockets
116     alias old_new new
118     def new(host, port)
119       raise Errno::ECONNREFUSED if @sockets.empty?
120       @connections << [host, port]
121       @sockets.pop
122     end
124     alias open new
126   end
130 class TestMogileFS < Test::Unit::TestCase
132   undef_method :default_test
134   def setup
135     @tempdir = File.join Dir.tmpdir, "test_mogilefs_#{$$}"
136     @root = File.join @tempdir, 'root'
137     FileUtils.mkdir_p @root
139     @client = @klass.new :hosts => ['kaa:6001'], :domain => 'test',
140                                   :root => @root
141     @backend = FakeBackend.new
142     @client.instance_variable_set '@backend', @backend
144     TCPSocket.sockets = []
145     TCPSocket.connections = []
146   end
148   def teardown
149     FileUtils.rm_rf @tempdir
150   end