diff --git a/bench.rb b/bench.rb new file mode 100644 index 000000000..553b875df --- /dev/null +++ b/bench.rb @@ -0,0 +1,56 @@ +require 'rubygems' +require 'benchwarmer' +require 'right_aws' + +$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), 'lib')) +require 'fog/aws' + +data = File.open(File.expand_path('~/.s3conf/s3config.yml')).read +config = YAML.load(data) +fog = Fog::AWS::S3.new( + :aws_access_key_id => config['aws_access_key_id'], + :aws_secret_access_key => config['aws_secret_access_key'] +) +raws = RightAws::S3Interface.new( + config['aws_access_key_id'], + config['aws_secret_access_key'] +) +raws.logger.level = 3 # ERROR + +Benchmark.bm(25) do |bench| + bench.report('fog.put_bucket') do + fog.put_bucket('fogbench') + end + bench.report('raws.create_bucket') do + raws.create_bucket('rawsbench') + end + + print '-' * 64 << "\n" + + bench.report('fog.put_object') do + file = File.open(File.dirname(__FILE__) + '/spec/lorem.txt', 'r') + fog.put_object('fogbench', 'lorem', file) + end + bench.report('raws.put') do + file = File.open(File.dirname(__FILE__) + '/spec/lorem.txt', 'r') + raws.put('rawsbench', 'lorem', file) + end + + print '-' * 64 << "\n" + + bench.report('fog.delete_object') do + fog.delete_object('fogbench', 'lorem') + end + bench.report('raws.delete') do + raws.delete('rawsbench', 'lorem') + end + + print '-' * 64 << "\n" + + bench.report('fog.delete_bucket') do + fog.delete_bucket('fogbench') + end + bench.report('raws.delete_bucket') do + raws.delete_bucket('rawsbench') + end +end \ No newline at end of file diff --git a/lib/fog/aws.rb b/lib/fog/aws.rb index 14d97c274..d168e01e9 100644 --- a/lib/fog/aws.rb +++ b/lib/fog/aws.rb @@ -34,13 +34,16 @@ module Fog host = "#{uri.host}#{uri.port == 80 ? "" : ":#{uri.port}"}" @headers.merge!({'Host' => host}) request = "#{method} #{path} HTTP/1.1\r\n" - request << "#{headers.collect {|k,v| "#{k}: #{v}\r\n"}.join('')}\r\n" + for key, value in headers + request << "#{key}: #{value}\r\n" + end + request << "\r\n" request << "#{@body}\r\n" if @body send_data(request) end def receive_data(data) - p data + # p data unless @data if data =~ /\AHTTP\/1\.[01] ([\d]{3})/ @response.status = $1.to_i @@ -48,7 +51,7 @@ module Fog @response.status = 0 end @headers, @data = data.split("\r\n\r\n") - @headers.split("\r\n").each do |header| + for header in @headers.split("\r\n") if data = header.match(/(.*):\s(.*)/) @response.headers[data[1]] = data[2] end