File: value_encoder_spec.rb

package info (click to toggle)
ruby-amq-protocol 0.9.2-1
  • links: PTS, VCS
  • area: main
  • in suites: wheezy
  • size: 392 kB
  • sloc: ruby: 4,212; python: 247; makefile: 2
file content (138 lines) | stat: -rw-r--r-- 4,542 bytes parent folder | download
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
137
138
# -*- coding: utf-8 -*-
require File.expand_path('../../../spec_helper', __FILE__)

require 'time'
require "amq/protocol/table_value_encoder"

module AMQ
  module Protocol
    describe TableValueEncoder do


      it "calculates size of string field values" do
        described_class.field_value_size("amqp").should == 9
        described_class.encode("amqp").bytesize.should == 9

        described_class.field_value_size("amq-protocol").should == 17
        described_class.encode("amq-protocol").bytesize.should == 17

        described_class.field_value_size("à bientôt").should == 16
        described_class.encode("à bientôt").bytesize.should == 16
      end

      it "calculates size of integer field values" do
        described_class.field_value_size(10).should == 5
        described_class.encode(10).bytesize.should == 5
      end

      it "calculates size of float field values (considering them to be 64-bit)" do
        described_class.field_value_size(10.0).should == 9
        described_class.encode(10.0).bytesize.should == 9

        described_class.field_value_size(120000.0).should == 9
        described_class.encode(120000.0).bytesize.should == 9
      end

      it "calculates size of boolean field values" do
        described_class.field_value_size(true).should == 2
        described_class.encode(true).bytesize.should == 2

        described_class.field_value_size(false).should == 2
        described_class.encode(false).bytesize.should == 2
      end

      it "calculates size of void field values" do
        described_class.field_value_size(nil).should == 1
        described_class.encode(nil).bytesize.should == 1
      end

      it "calculates size of time field values" do
        t = Time.parse("2011-07-14 01:17:46 +0400")

        described_class.field_value_size(t).should == 9
        described_class.encode(t).bytesize.should == 9
      end


      it "calculates size of basic table field values" do
        input1   = { "key" => "value" }
        described_class.field_value_size(input1).should == 19
        described_class.encode(input1).bytesize.should == 19


        input2   = { "intval" => 1 }
        described_class.field_value_size(input2).should == 17
        described_class.encode(input2).bytesize.should == 17


        input3   = { "intval" => 1, "key" => "value" }
        described_class.field_value_size(input3).should == 31
        described_class.encode(input3).bytesize.should == 31
      end


      it "calculates size of table field values" do
        input1   = {
          "hashval"    => {
            "protocol" => {
              "name"  => "AMQP",
              "major" => 0,
              "minor" => "9",
              "rev"   => 1.0,
              "spec"  => {
                "url"  => "http://bit.ly/hw2ELX",
                "utf8" => one_point_eight? ? "à bientôt" : "à bientôt".force_encoding(::Encoding::ASCII_8BIT)
              }
            },
            "true"     => true,
            "false"    => false,
            "nil"      => nil
          }
        }

        described_class.field_value_size(input1).should == 162
        # puts(described_class.encode(input1).inspect)
        described_class.encode(input1).bytesize.should == 162



        input2   = {
          "boolval"      => true,
          "intval"       => 1,
          "strval"       => "Test",
          "timestampval" => Time.parse("2011-07-14 01:17:46 +0400"),
          "floatval"     => 3.14,
          "longval"      => 912598613,
          "hashval"      => { "protocol" => "AMQP091", "true" => true, "false" => false, "nil" => nil }
        }

        described_class.field_value_size(input2).should == 150
        described_class.encode(input2).bytesize.should == 150
      end

      it "calculates size of basic array field values" do
        input1 = [1, 2, 3]

        described_class.field_value_size(input1).should == 20
        described_class.encode(input1).bytesize.should == 20


        input2 = ["one", "two", "three"]
        described_class.field_value_size(input2).should == 31
        described_class.encode(input2).bytesize.should == 31


        input3 = ["one", 2, "three"]
        described_class.field_value_size(input3).should == 28
        described_class.encode(input3).bytesize.should == 28


        input4 = ["one", 2, "three", ["four", 5, [6.0]]]
        described_class.field_value_size(input4).should == 61
        described_class.encode(input4).bytesize.should == 61
      end


    end # TableValueEncoder
  end # Protocol
end # AMQ