Skip to content
This repository
file 136 lines (106 sloc) 3.939 kb
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 125 126 127 128 129 130 131 132 133 134 135 136
require File.expand_path('test_helper.rb', File.dirname(__FILE__))

class SimpleTest < Test::Unit::TestCase

  S = ThriftClient::Simple
  S.make_struct("Example", S::Field.new(:name, S::STRING, 1))
  S.make_struct("Args")
  S.make_struct("Retval", S::Field.new(:rv, S::I32, 0))

  def test_definition
    assert Struct::ST_Example
    assert Struct::ST_Args
    assert Struct::ST_Retval
  end

  ## Encoding

  def test_boolean_encoding
    assert_equal "\001", S.pack_value(S::BOOL, true)
    assert_equal "\000", S.pack_value(S::BOOL, false)
  end

  def test_byte_encoding
    assert_equal "\xc7", S.pack_value(S::BYTE, 199)
  end

  def test_i16_encoding
    assert_equal "\x00\x96", S.pack_value(S::I16, 150)
  end

  def test_i32_encoding
    assert_equal "\x00\x96\xb4\x3f", S.pack_value(S::I32, 9876543)
  end

  def test_i64_encoding
    assert_equal "\x00\x00\x00\x1c\xbb\xf3\x09\x04", S.pack_value(S::I64, 123412351236)
  end

  def test_double_encoding
    assert_equal "\x40\x23\x00\x00\x00\x00\x00\x00", S.pack_value(S::DOUBLE, 9.5)
  end

  def test_string_encoding
    assert_equal "\x00\x00\x00\x05hello", S.pack_value(S::STRING, "hello")
  end

  def test_list_encoding
    assert_equal "\x08\x00\x00\x00\x03\x00\x00\x00\x17\x00\x00\x00\x16\x00\x00\x00\x15",
      S.pack_value(S::ListType.new(S::I32), [ 23, 22, 21 ])
  end

  def test_map_encoding
    assert_equal "\x0b\x08\x00\x00\x00\x01\x00\x00\x00\x03cat\x00\x00\x00\x05",
      S.pack_value(S::MapType.new(S::STRING, S::I32), "cat" => 5)
  end

  def test_set_encoding
    assert_equal "\x08\x00\x00\x00\x01\x00\x00\x00\x04",
      S.pack_value(S::SetType.new(S::I32), [ 4 ])
  end

  def test_struct_encoding
    assert_equal "\x0b\x00\x01\x00\x00\x00\x06Commie\x00",
      S.pack_value(S::StructType.new(Struct::ST_Example), Struct::ST_Example.new("Commie"))
  end

  def test_request_encoding
    assert_equal "\x80\x01\x00\x01\x00\x00\x00\x09getHeight\x00\x00\x00\x17\x00",
      S.pack_request("getHeight", Struct::ST_Args.new, 23)
  end

  ## Decoding

  def test_boolean_decoding
    assert_equal true, S.read_value(StringIO.new("\x01"), S::BOOL)
    assert_equal false, S.read_value(StringIO.new("\x00"), S::BOOL)
  end

  def test_byte_decoding
    assert_equal -57, S.read_value(StringIO.new("\xc7"), S::BYTE)
  end

  def test_i16_decoding
    assert_equal 150, S.read_value(StringIO.new("\x00\x96"), S::I16)
  end

  def test_i32_decoding
    assert_equal 9876543, S.read_value(StringIO.new("\x00\x96\xb4\x3f"), S::I32)
  end

  def test_i64_decoding
    assert_equal 123412351236,
      S.read_value(StringIO.new("\x00\x00\x00\x1c\xbb\xf3\x09\x04"), S::I64)
  end

  def test_double_decoding
    assert_equal 9.5,
      S.read_value(StringIO.new("\x40\x23\x00\x00\x00\x00\x00\x00"), S::DOUBLE)
  end

  def test_string_decoding
    assert_equal "hello", S.read_value(StringIO.new("\x00\x00\x00\x05hello"), S::STRING)
  end

  def test_list_decoding
    assert_equal [ 23, 22, 21 ],
      S.read_value(StringIO.new("\x08\x00\x00\x00\x03\x00\x00\x00\x17\x00\x00\x00\x16\x00\x00\x00\x15"),
      S::ListType.new(S::I32))
  end

  def test_map_decoding
    assert_equal({ "cat" => 5 },
      S.read_value(StringIO.new("\x0b\x08\x00\x00\x00\x01\x00\x00\x00\x03cat\x00\x00\x00\x05"),
      S::MapType.new(S::STRING, S::I32)))
  end

  def test_set_decoding
    assert_equal [ 4 ],
      S.read_value(StringIO.new("\x08\x00\x00\x00\x01\x00\x00\x00\x04"),
      S::ListType.new(S::I32))
  end

  def test_struct_decoding
    assert_equal Struct::ST_Example.new("Commie"),
      S.read_value(StringIO.new("\x0b\x00\x01\x00\x00\x00\x06Commie\x00"),
      S::StructType.new(Struct::ST_Example))
  end

  def test_response_decoding
    assert_equal [ "getHeight", 255, 1 ],
      S.read_response(
      StringIO.new("\x80\x01\x00\x02\x00\x00\x00\x09getHeight\x00\x00\x00\xff\x08\x00\x00\x00\x00\x00\x01\x00"),
      Struct::ST_Retval)
  end

end
Something went wrong with that request. Please try again.