mogilefs-client.git  about / heads / tags
MogileFS client library for Ruby
blob e42185adb1d3c4fc785f89b9bf0a897ddc8863d2 4013 bytes (raw)
$ git show pipeline:test/test_mogilefs_integration.rb	# shows this blob on the CLI

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
 
# -*- encoding: binary -*-
require './test/integration'

class TestMogileFSIntegration < TestMogIntegration
  def setup
    super
    @client = MogileFS::MogileFS.new(:hosts => @trackers, :domain => @domain)
  end

  def test_CRUD
    assert_equal 4, @client.store_content("CRUD", "default", "DATA")
    assert_equal 4, @client.size("CRUD")
    assert_equal "DATA", @client.get_file_data("CRUD")
    assert_equal "DAT", @client.get_file_data("CRUD", nil, 3)
    assert_equal "AT", @client.get_file_data("CRUD", nil, 2, 1)

    sio = StringIO.new("")
    rv = @client.get_file_data("CRUD", sio)
    assert_equal 4, rv
    assert_equal "DATA", sio.string
    assert_equal 8, @client.store_content("CRUD", "default", "MOARDATA")
    assert_equal "MOARDATA", @client.get_file_data("CRUD")
    assert_equal true, @client.delete("CRUD")
    assert_raises(MogileFS::Backend::UnknownKeyError) { @client.delete("CRUD") }

    data = "hello world\n".freeze
    tmp = tmpfile("blob")
    tmp.sync = true
    tmp.write(data)
    tmp.rewind
    assert_equal tmp.size, @client.store_file("blob", nil, tmp)
    assert_equal(data, @client.get_file_data("blob"))

    data = "pipe!\n".freeze
    r, w = IO.pipe
    th = Thread.new do
      w.write(data)
      w.close
    end
    assert_equal data.size, @client.store_file("pipe", nil, r)
    assert_nothing_raised do
      r.close
      th.join
    end
    assert_equal(data, @client.get_file_data("pipe"))

    cbk = MogileFS::Util::StoreContent.new(nil) do |write_callback|
      10.times { write_callback.call("data") }
    end
    assert_nil cbk.length
    nr = @client.store_content('store_content', nil, cbk)
    assert_equal 40, nr
    assert_equal("data" * 10, @client.get_file_data('store_content'))
  end

  def test_store_non_rewindable
    tmp = Object.new
    def tmp.size
      666
    end

    assert_raises(MogileFS::HTTPFile::NonRetryableError) do
      @client.store_file("non_rewindable", nil, tmp)
    end
  end

  def test_file_info
    assert_equal 3, @client.store_content("file_info", "default", "FOO")
    res = @client.file_info("file_info")
    assert_kind_of Integer, res["fid"]
    assert_equal 3, res["length"]
    assert ! res.include?("devids")
    assert_kind_of Integer, res["devcount"]

    res = @client.file_info("file_info", :devices => true)
    assert_kind_of Integer, res["fid"]
    assert_equal 3, res["length"]
    assert_kind_of Integer, res["devcount"]
    devids = res.delete("devids")
    assert_instance_of Array, devids
    devids.each { |devid| assert_kind_of Integer, devid }
    assert_equal res["devcount"], devids.size
  end

  def test_file_debug
    assert_equal 3, @client.store_content("file_debug", "default", "BUG")
    a = @client.file_debug("file_debug")
    b = @client.file_debug(:key => "file_debug")
    fid = @client.file_info("file_debug")["fid"]
    c = @client.file_debug(fid)
    d = @client.file_debug(:fid => fid)

    [ a, b, c, d ].each do |res|
      assert_equal fid, res["fid_fid"]
      assert_equal 0, res["fid_classid"]
      assert_equal "file_debug", res["fid_dkey"]
      assert_equal 3, res["fid_length"]
      assert_kind_of Array, res["devids"]
      assert_kind_of Integer, res["devids"][0]
      res["devids"].each do |devid|
        uri = URI.parse(res["devpath_#{devid}"])
        assert_equal "http", uri.scheme
      end
      assert_equal "default", res["fid_class"]
    end
    @client.delete("file_debug")
    rv = @client.file_debug(fid)
    assert rv.keys.grep(/\Afid_/).empty?, rv.inspect
  end

  def test_file_debug_in_progress
    rv = @client.new_file("file_debug_in_progress") do |http_file|
      http_file << "ZZZZ"
      dests = http_file.instance_variable_get(:@dests)
      dests[0][1] =~ %r{/(\d+)\.fid\z}
      fid = $1.to_i
      rv = @client.file_debug(fid)
      devids = dests.map { |x| x[0].to_i }.sort
      assert_equal devids, rv["tempfile_devids"].sort
      assert_equal "file_debug_in_progress", rv["tempfile_dkey"]
    end
    assert_equal 4, rv
  end
end

git clone https://yhbt.net/mogilefs-client.git