From 60a31e86ee57d5d1f3b25bde6d2ea1e718f0353b Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Tue, 8 Nov 2011 22:11:21 +0000 Subject: [PATCH] get_paths: expand and improve tests get_paths may take a Hash for its optional arguments and now supports the optional :pathcount argument. There may now be a default @zone for MogileFS::MogileFS objects as well (specified via :zone). --- lib/mogilefs/mogilefs.rb | 24 ++++++++++++++++++----- test/test_mogilefs.rb | 50 ++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 69 insertions(+), 5 deletions(-) diff --git a/lib/mogilefs/mogilefs.rb b/lib/mogilefs/mogilefs.rb index 1850723..f132dd7 100644 --- a/lib/mogilefs/mogilefs.rb +++ b/lib/mogilefs/mogilefs.rb @@ -23,6 +23,7 @@ class MogileFS::MogileFS < MogileFS::Client def initialize(args = {}) @domain = args[:domain] + @zone = args[:zone] @get_file_data_timeout = 5 @@ -73,9 +74,22 @@ class MogileFS::MogileFS < MogileFS::Client ## # Get the paths for +key+. - def get_paths(key, noverify = true, zone = nil) - opts = { :domain => @domain, :key => key, - :noverify => noverify ? 1 : 0, :zone => zone } + def get_paths(key, *args) + opts = { + :domain => @domain, + :key => key, + :noverify => args[0], + :zone => args[1], + } + if Hash === args[0] + args = args[0] + opts[:noverify] = args[:noverify] + opts[:zone] = args[:zone] + pathcount = args[:pathcount] and opts[:pathcount] = pathcount.to_i + end + + opts[:zone] ||= @zone + opts[:noverify] = opts[:noverify] ? 1 : 0 @backend.respond_to?(:_get_paths) and return @backend._get_paths(opts) res = @backend.get_paths(opts) (1..res['paths'].to_i).map { |i| res["path#{i}"] }.compact @@ -84,8 +98,8 @@ class MogileFS::MogileFS < MogileFS::Client ## # Get the URIs for +key+. - def get_uris(key, noverify = true, zone = nil) - get_paths(key, noverify, zone).map! { |path| URI.parse(path) } + def get_uris(key, *args) + get_paths(key, *args).map! { |path| URI.parse(path) } end ## diff --git a/test/test_mogilefs.rb b/test/test_mogilefs.rb index 6e9ec7f..d85cbf8 100644 --- a/test/test_mogilefs.rb +++ b/test/test_mogilefs.rb @@ -518,6 +518,56 @@ class TestMogileFS__MogileFS < TestMogileFS assert_equal 'readonly mogilefs', e.message end + def test_get_paths_args + sock = TCPServer.new("127.0.0.1", 0) + args = { :hosts => [ "127.0.0.1:#{sock.addr[1]}" ], :domain => "foo" } + c = MogileFS::MogileFS.new(args) + received = [] + th = Thread.new do + a = sock.accept + 6.times do + line = a.gets + received << line + a.write("OK paths=2&path1=http://0/a&path2=http://0/b\r\n") + end + a.close + end + expect = %w(http://0/a http://0/b) + assert_equal expect, c.get_paths("f") + assert_equal expect, c.get_paths("f",true,"alt") + assert_equal expect, c.get_paths("f",:noverify=>true,:zone=>"alt") + assert_equal expect, + c.get_paths("f",:noverify=>true,:zone=>"alt",:pathcount=>666) + c.instance_variable_set(:@zone, "alt") + assert_equal expect, c.get_paths("f") + assert_equal expect, c.get_paths("f", :zone=>"zzz") + th.join + + backend = c.instance_variable_get(:@backend) + expect = { "domain"=>"foo", "key"=>"f", "noverify"=>"0", "zone"=>"" } + tmp = backend.url_decode(received[0].split(/\s+/)[1]) + assert_equal expect, tmp + expect["noverify"] = "1" + expect["zone"] = "alt" + tmp = backend.url_decode(received[1].split(/\s+/)[1]) + assert_equal expect, tmp + + tmp = backend.url_decode(received[2].split(/\s+/)[1]) + assert_equal expect, tmp + + expect["pathcount"] = "666" + tmp = backend.url_decode(received[3].split(/\s+/)[1]) + assert_equal expect, tmp + + expect = { "domain"=>"foo", "key"=>"f", "noverify"=>"0", "zone"=>"alt" } + tmp = backend.url_decode(received[4].split(/\s+/)[1]) + + expect = { "domain"=>"foo", "key"=>"f", "noverify"=>"0", "zone"=>"zzz" } + tmp = backend.url_decode(received[5].split(/\s+/)[1]) + ensure + sock.close + end + def test_sleep @backend.sleep = {} assert_nothing_raised do -- 2.11.4.GIT