remove 'open-uri' dependency
[ruby-mogilefs-client.git] / test / setup.rb
blob94b7f15f13a4f82a070898fd6f89d7220978594f
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     @sync = do_sync
57     @write_s.sync = do_sync
58     @read_s.sync = do_sync
59   end
61   def closed?
62     @closed
63   end
65   def close
66     @closed = true
67     return nil
68   end
70   def gets
71     @read_s.gets
72   end
74   def peeraddr
75     ['AF_INET', 6001, 'localhost', '127.0.0.1']
76   end
78   def read(bytes = nil)
79     @read_s.read bytes
80   end
82   def sysread(bytes, buf = '')
83     @read_s.sysread bytes, buf
84   end
86   def recv_nonblock(bytes, flags = 0)
87     ret = @read_s.sysread(bytes)
88     # Ruby doesn't expose pread(2)
89     if (flags & Socket::MSG_PEEK) != 0
90       if @read_s.respond_to?(:sysseek)
91         @read_s.sysseek(-ret.size, IO::SEEK_CUR)
92       else
93         @read_s.seek(-ret.size, IO::SEEK_CUR)
94       end
95     end
96     ret
97   end
98   alias_method :recv, :recv_nonblock
100   def write(data)
101     @write_s.write data
102   end
104   def syswrite(data)
105     @write_s.syswrite data
106   end
110 class MogileFS::Client
111   attr_writer :readonly
114 class TCPSocket
116   class << self
118     attr_accessor :connections
119     attr_accessor :sockets
121     alias old_new new
123     def new(host, port)
124       raise Errno::ECONNREFUSED if @sockets.empty?
125       @connections << [host, port]
126       @sockets.pop
127     end
129     alias open new
131   end
135 class TestMogileFS < Test::Unit::TestCase
137   undef_method :default_test
139   def setup
140     @tempdir = File.join Dir.tmpdir, "test_mogilefs_#{$$}"
141     @root = File.join @tempdir, 'root'
142     FileUtils.mkdir_p @root
144     @client = @klass.new :hosts => ['kaa:6001'], :domain => 'test',
145                                   :root => @root
146     @backend = FakeBackend.new
147     @client.instance_variable_set '@backend', @backend
149     TCPSocket.sockets = []
150     TCPSocket.connections = []
151   end
153   def teardown
154     FileUtils.rm_rf @tempdir
155   end