spec/filesystem_spec.rb in libuv-2.0.12 vs spec/filesystem_spec.rb in libuv-3.0.0

- old
+ new

@@ -5,171 +5,152 @@ describe Libuv::Filesystem do before :each do @log = [] @general_failure = [] - @loop = Libuv::Loop.default - @filesystem = @loop.filesystem - @timeout = @loop.timer do - @loop.stop + @reactor = Libuv::Reactor.default + @filesystem = @reactor.filesystem + @timeout = @reactor.timer do + @reactor.stop @general_failure << "test timed out" end @timeout.start(4000) - @logger = proc { |level, errorid, error| + @reactor.notifier do |error, context| begin - @general_failure << "Log called: #{level}: #{errorid}\n#{error.message}\n#{error.backtrace.join("\n")}\n" - rescue Exception - @general_failure << 'error in logger' + @general_failure << "Log called: #{context}\n#{error.message}\n#{error.backtrace.join("\n") if error.backtrace}\n" + rescue Exception => e + @general_failure << "error in logger #{e.inspect}" end - } + end @thefile = "test-file.txt" - @loop.all(@filesystem, @timeout).catch do |reason| + @reactor.all(@filesystem, @timeout).catch do |reason| @general_failure << reason.inspect end end describe 'directory navigation' do it "should list the contents of a folder" do - @loop.run { |logger| - logger.progress &@logger - + @reactor.run { |reactor| currentDir = Dir.pwd - listing = @filesystem.readdir(currentDir) + listing = @filesystem.readdir(currentDir, wait: false) listing.then do |result| @log = result end listing.catch do |error| @general_failure << error end listing.finally do @timeout.close - @loop.stop + @reactor.stop end } expect(@general_failure).to eq([]) expect((@log.length > 0)).to eq(true) end end describe 'file manipulation' do it "should create and write to a file" do - @loop.run { |logger| - logger.progress &@logger - - file = @loop.file(@thefile, File::CREAT|File::WRONLY) - file.progress do - file.write('write some data to a file').then do - file.chmod(777).then do - file.close - @timeout.close - @loop.stop - @log = :success - end - end - end - file.catch do |error| + @reactor.run { |reactor| + file = @reactor.file(@thefile, File::CREAT|File::WRONLY) + begin + file.write('write some data to a file') + file.chmod(777) + @timeout.close + @reactor.stop + @log = :success + rescue => error @general_failure << error @timeout.close + @reactor.stop + ensure file.close - @loop.stop end } expect(@general_failure).to eq([]) expect(@log).to eq(:success) end it "should return stats on the file" do - @loop.run { |logger| - logger.progress &@logger - - file = @loop.file(@thefile, File::RDONLY) - file.progress do - file.stat.then do |stats| - file.close - @timeout.close - @loop.stop - @log << stats[:st_mtim][:tv_sec] - end - end - file.catch do |error| + @reactor.run { |reactor| + file = @reactor.file(@thefile, File::RDONLY) + begin + stats = file.stat + @timeout.close + @reactor.stop + @log << stats[:st_mtim][:tv_sec] + rescue => error @general_failure << error @timeout.close + @reactor.stop + ensure file.close - @loop.stop end } expect(@general_failure).to eq([]) expect(@log[0]).to be_kind_of(Integer) expect(@log.length).to eql(1) end it "should read from a file" do - @loop.run { |logger| - logger.progress &@logger - - file = @loop.file(@thefile, File::RDONLY) - file.progress do - file.read(100).then do |result| - file.close - @timeout.close - @loop.stop - @log = result - end - end - file.catch do |error| + @reactor.run { |reactor| + file = @reactor.file(@thefile, File::RDONLY) + begin + result = file.read(100) + @timeout.close + @reactor.stop + @log = result + rescue => error @general_failure << error @timeout.close file.close - @loop.stop + @reactor.stop + ensure + file.close end } expect(@general_failure).to eq([]) expect(@log).to eq('write some data to a file') end it "should delete a file" do - @loop.run { |logger| - logger.progress &@logger - - op = @loop.filesystem.unlink(@thefile) + @reactor.run { |reactor| + op = @reactor.filesystem.unlink(@thefile, wait: false) op.then do @timeout.close - @loop.stop + @reactor.stop @log = :success end op.catch do |error| @general_failure << error @timeout.close - @loop.stop + @reactor.stop end } expect(@general_failure).to eq([]) expect(@log).to eq(:success) end end describe 'file streaming' do it "should send a file over a stream", :network => true do - @loop.run { |logger| - logger.progress &@logger + @reactor.run { |reactor| + @server = @reactor.tcp + @client = @reactor.tcp - @server = @loop.tcp - @client = @loop.tcp - @server.bind('127.0.0.1', 34570) do |client| client.progress do |data| - file = @loop.file('.rspec', File::RDONLY) - file.progress do - file.send_file(client).then(proc { + file = @reactor.file('.rspec', File::RDONLY) do + file.send_file(client, wait: false).then(proc { file.close client.close }, proc { |error| @general_failure << error }) @@ -182,17 +163,17 @@ end client.start_read client.finally do @timeout.close @server.close - @loop.stop + @reactor.stop end end # catch errors @server.catch do |reason| @general_failure << reason.inspect - @loop.stop + @reactor.stop end # start listening @server.listen(5) @@ -207,11 +188,11 @@ end # catch errors @client.catch do |reason| @general_failure << reason.inspect @server.close - @loop.stop + @reactor.stop end } expect(@general_failure).to eq([]) # Windows GIT adds the carriage return @@ -221,21 +202,18 @@ expect(@log).to eq(["--format progress\n"]) end end it "should send a file as a HTTP chunked response", :network => true do - @loop.run { |logger| - logger.progress &@logger + @reactor.run { |reactor| + @server = @reactor.tcp + @client = @reactor.tcp - @server = @loop.tcp - @client = @loop.tcp - @server.bind('127.0.0.1', 34568) do |client| client.progress do |data| - file = @loop.file('.rspec', File::RDONLY) - file.progress do - file.send_file(client, :http).then(proc { + file = @reactor.file('.rspec', File::RDONLY) do + file.send_file(client, using: :http, wait: false).then(proc { file.close client.close }, proc { |error| @general_failure << error }) @@ -248,17 +226,17 @@ end client.start_read client.finally do @timeout.close @server.close - @loop.stop + @reactor.stop end end # catch errors @server.catch do |reason| @general_failure << reason.inspect - @loop.stop + @reactor.stop end # start listening @server.listen(5) @@ -273,10 +251,10 @@ end # catch errors @client.catch do |reason| @general_failure << reason.inspect @server.close - @loop.stop + @reactor.stop end } expect(@general_failure).to eq([])