xdr 3.0.1 → 3.0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +12 -9
- data/README.md +4 -2
- data/lib/xdr/concerns/converts_to_xdr.rb +30 -31
- data/lib/xdr/union.rb +7 -4
- data/lib/xdr/version.rb +1 -1
- metadata +43 -114
- data/.gitignore +0 -15
- data/.travis.yml +0 -9
- data/.yardopts +0 -7
- data/Gemfile +0 -4
- data/Guardfile +0 -5
- data/Rakefile +0 -9
- data/examples/enum.rb +0 -30
- data/examples/struct.rb +0 -24
- data/examples/union.rb +0 -29
- data/spec/lib/xdr/array_spec.rb +0 -73
- data/spec/lib/xdr/bool_spec.rb +0 -43
- data/spec/lib/xdr/concerns/converts_to_xdr_spec.rb +0 -88
- data/spec/lib/xdr/concerns/reads_bytes_spec.rb +0 -57
- data/spec/lib/xdr/double_spec.rb +0 -38
- data/spec/lib/xdr/dsl/enum_spec.rb +0 -44
- data/spec/lib/xdr/dsl/struct_spec.rb +0 -29
- data/spec/lib/xdr/dsl/union_spec.rb +0 -69
- data/spec/lib/xdr/enum_spec.rb +0 -70
- data/spec/lib/xdr/float_spec.rb +0 -37
- data/spec/lib/xdr/hyper_spec.rb +0 -40
- data/spec/lib/xdr/int_spec.rb +0 -40
- data/spec/lib/xdr/opaque_spec.rb +0 -40
- data/spec/lib/xdr/option_spec.rb +0 -36
- data/spec/lib/xdr/quadruple_spec.rb +0 -14
- data/spec/lib/xdr/rpc/record_reader_spec.rb +0 -27
- data/spec/lib/xdr/string_spec.rb +0 -47
- data/spec/lib/xdr/struct_spec.rb +0 -101
- data/spec/lib/xdr/union_spec.rb +0 -258
- data/spec/lib/xdr/unsigned_hyper_spec.rb +0 -36
- data/spec/lib/xdr/unsigned_int_spec.rb +0 -36
- data/spec/lib/xdr/var_array_spec.rb +0 -71
- data/spec/lib/xdr/var_opaque_spec.rb +0 -50
- data/spec/lib/xdr/void_spec.rb +0 -46
- data/spec/spec_helper.rb +0 -15
- data/spec/support/matchers/eq_bytes.rb +0 -6
- data/xdr.gemspec +0 -28
@@ -1,44 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
|
4
|
-
describe XDR::DSL::Enum, "#member" do
|
5
|
-
subject do
|
6
|
-
Class.new(XDR::Enum) do
|
7
|
-
member :one, 1
|
8
|
-
member :two, 2
|
9
|
-
end
|
10
|
-
end
|
11
|
-
|
12
|
-
it "adds to the members collection of the class" do
|
13
|
-
expect(subject.members.length).to eq(2)
|
14
|
-
expect(subject.members[:one]).to eq(subject.one)
|
15
|
-
expect(subject.members[:two]).to eq(subject.two)
|
16
|
-
end
|
17
|
-
|
18
|
-
it "raises ArgumentError if a non-integer value is used" do
|
19
|
-
expect {
|
20
|
-
Class.new(XDR::Enum) do
|
21
|
-
member :one, "hi!"
|
22
|
-
end
|
23
|
-
}.to raise_error(ArgumentError)
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
describe XDR::DSL::Enum, "#seal" do
|
28
|
-
subject do
|
29
|
-
Class.new(XDR::Enum) do
|
30
|
-
member :one, 1
|
31
|
-
member :two, 2
|
32
|
-
seal
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
36
|
-
it "marks the class as sealed" do
|
37
|
-
expect(subject.sealed).to eq(true)
|
38
|
-
end
|
39
|
-
|
40
|
-
it "prevents you from adding members after being sealed" do
|
41
|
-
expect{ subject.member :three, 3 }.to raise_error(ArgumentError)
|
42
|
-
end
|
43
|
-
|
44
|
-
end
|
@@ -1,29 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
|
4
|
-
describe XDR::DSL::Struct, "#attribute" do
|
5
|
-
subject do
|
6
|
-
Class.new(XDR::Struct) do
|
7
|
-
attribute :attr1, XDR::Int
|
8
|
-
attribute :attr2, XDR::String[]
|
9
|
-
end
|
10
|
-
end
|
11
|
-
|
12
|
-
|
13
|
-
it "adds to the fields collection of the class" do
|
14
|
-
expect(subject.fields.length).to eq(2)
|
15
|
-
expect(subject.fields[:attr1]).to eq(XDR::Int)
|
16
|
-
expect(subject.fields[:attr2]).to be_a(XDR::String)
|
17
|
-
end
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
it "raises ArgumentError if a non-convertible type is used" do
|
22
|
-
expect do
|
23
|
-
Class.new(XDR::Struct) do
|
24
|
-
attribute :attr1, String
|
25
|
-
end
|
26
|
-
end.to raise_error(ArgumentError)
|
27
|
-
end
|
28
|
-
|
29
|
-
end
|
@@ -1,69 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
|
4
|
-
describe XDR::DSL::Union, "#switch" do
|
5
|
-
|
6
|
-
it "allows symbols in switch declarations" do
|
7
|
-
expect do
|
8
|
-
klass = Class.new(XDR::Union) do
|
9
|
-
switch_on ResultType, :type
|
10
|
-
switch :ok
|
11
|
-
end
|
12
|
-
|
13
|
-
klass.new(:ok)
|
14
|
-
end.to_not raise_error
|
15
|
-
end
|
16
|
-
|
17
|
-
class ResultType < XDR::Enum
|
18
|
-
member :ok, 0
|
19
|
-
member :error, 1
|
20
|
-
seal
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
describe XDR::DSL::Union, "#switch_on" do
|
25
|
-
klass = nil
|
26
|
-
|
27
|
-
it "allows int types" do
|
28
|
-
expect do
|
29
|
-
klass = Class.new(XDR::Union) do
|
30
|
-
switch_on XDR::Int, :type
|
31
|
-
switch 0
|
32
|
-
switch 1
|
33
|
-
end
|
34
|
-
end.to_not raise_error
|
35
|
-
|
36
|
-
expect{ klass.new(0) }.to_not raise_error
|
37
|
-
expect{ klass.new(1) }.to_not raise_error
|
38
|
-
expect{ klass.new(2) }.to raise_error(XDR::InvalidSwitchError)
|
39
|
-
end
|
40
|
-
|
41
|
-
it "allows unsigned int types" do
|
42
|
-
expect do
|
43
|
-
klass = Class.new(XDR::Union) do
|
44
|
-
switch_on XDR::UnsignedInt, :type
|
45
|
-
switch 0
|
46
|
-
switch 1
|
47
|
-
end
|
48
|
-
end.to_not raise_error
|
49
|
-
|
50
|
-
expect{ klass.new(0) }.to_not raise_error
|
51
|
-
expect{ klass.new(1) }.to_not raise_error
|
52
|
-
expect{ klass.new(2) }.to raise_error(XDR::InvalidSwitchError)
|
53
|
-
expect{ klass.new(-1) }.to raise_error(XDR::InvalidSwitchError)
|
54
|
-
end
|
55
|
-
|
56
|
-
it "allows bool types", :focus do
|
57
|
-
klass = nil
|
58
|
-
|
59
|
-
expect do
|
60
|
-
klass = Class.new(XDR::Union) do
|
61
|
-
switch_on XDR::Bool, :type
|
62
|
-
switch true
|
63
|
-
end
|
64
|
-
end.to_not raise_error
|
65
|
-
|
66
|
-
expect{ klass.new(true) }.to_not raise_error
|
67
|
-
expect{ klass.new(false) }.to raise_error(XDR::InvalidSwitchError)
|
68
|
-
end
|
69
|
-
end
|
data/spec/lib/xdr/enum_spec.rb
DELETED
@@ -1,70 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
class TestColor < XDR::Enum
|
4
|
-
member :red, 0
|
5
|
-
member :green, 1
|
6
|
-
member :even_more_green, 3
|
7
|
-
|
8
|
-
seal
|
9
|
-
end
|
10
|
-
|
11
|
-
describe XDR::Enum, ".read" do
|
12
|
-
let(:zero) { "\x00\x00\x00\x00" }
|
13
|
-
let(:one) { "\x00\x00\x00\x01" }
|
14
|
-
let(:two) { "\x00\x00\x00\x02" }
|
15
|
-
|
16
|
-
subject{ TestColor }
|
17
|
-
|
18
|
-
it "decodes values correctly" do
|
19
|
-
expect( read zero ).to eq(TestColor.red)
|
20
|
-
expect( read one ).to eq(TestColor.green)
|
21
|
-
end
|
22
|
-
|
23
|
-
it "raises EnumValueError if the decoded value is not in the defined constants" do
|
24
|
-
expect{ read two }.to raise_error XDR::EnumValueError
|
25
|
-
end
|
26
|
-
|
27
|
-
def read(str)
|
28
|
-
io = StringIO.new(str)
|
29
|
-
subject.read(io)
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
|
-
describe XDR::Enum, ".write" do
|
34
|
-
subject{ TestColor }
|
35
|
-
|
36
|
-
it "encodes values correctly" do
|
37
|
-
expect( write TestColor.red ).to eq("\x00\x00\x00\x00")
|
38
|
-
expect( write TestColor.green ).to eq("\x00\x00\x00\x01")
|
39
|
-
end
|
40
|
-
|
41
|
-
it "raises WriteError if value isn't a member" do
|
42
|
-
expect{ write 0 }.to raise_error XDR::WriteError
|
43
|
-
expect{ write 1 }.to raise_error XDR::WriteError
|
44
|
-
end
|
45
|
-
|
46
|
-
def write(val)
|
47
|
-
io = StringIO.new()
|
48
|
-
subject.write(val, io)
|
49
|
-
io.string
|
50
|
-
end
|
51
|
-
end
|
52
|
-
|
53
|
-
describe XDR::Enum, ".from_name" do
|
54
|
-
subject{ TestColor }
|
55
|
-
|
56
|
-
it "returns the correct value" do
|
57
|
-
expect(subject.from_name("red")).to eq(TestColor.red)
|
58
|
-
end
|
59
|
-
|
60
|
-
it "allows various casings, strings or symbols" do
|
61
|
-
expect(subject.from_name("even_more_green")).to eq(TestColor.even_more_green)
|
62
|
-
expect(subject.from_name("EVEN_MORE_GREEN")).to eq(TestColor.even_more_green)
|
63
|
-
expect(subject.from_name(:even_more_green)).to eq(TestColor.even_more_green)
|
64
|
-
expect(subject.from_name(:EVEN_MORE_GREEN)).to eq(TestColor.even_more_green)
|
65
|
-
end
|
66
|
-
|
67
|
-
it "raises EnumNameError when the name is not a member" do
|
68
|
-
expect{ subject.from_name("chartreuse")}.to raise_error(XDR::EnumNameError)
|
69
|
-
end
|
70
|
-
end
|
data/spec/lib/xdr/float_spec.rb
DELETED
@@ -1,37 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
|
4
|
-
describe XDR::Float, ".read" do
|
5
|
-
it "decodes values correctly" do
|
6
|
-
expect(read("\x00\x00\x00\x00")).to eq(0.0)
|
7
|
-
expect(read("\x80\x00\x00\x00")).to eq(-0.0)
|
8
|
-
expect(read("\x3F\x80\x00\x00")).to eq(1.0)
|
9
|
-
expect(read("\xBF\x80\x00\x00")).to eq(-1.0)
|
10
|
-
end
|
11
|
-
|
12
|
-
def read(str)
|
13
|
-
io = StringIO.new(str)
|
14
|
-
subject.read(io)
|
15
|
-
end
|
16
|
-
end
|
17
|
-
|
18
|
-
describe XDR::Float, ".write" do
|
19
|
-
it "encodes values correctly" do
|
20
|
-
expect(write(0.0)).to eq_bytes("\x00\x00\x00\x00")
|
21
|
-
expect(write(-0.0)).to eq_bytes("\x80\x00\x00\x00")
|
22
|
-
expect(write(1.0)).to eq_bytes("\x3F\x80\x00\x00")
|
23
|
-
expect(write(-1.0)).to eq_bytes("\xBF\x80\x00\x00")
|
24
|
-
end
|
25
|
-
|
26
|
-
it "raises a WriteError when the value is not Float" do
|
27
|
-
expect{ write 3 }.to raise_error(XDR::WriteError)
|
28
|
-
expect{ write "hello" }.to raise_error(XDR::WriteError)
|
29
|
-
expect{ write "1.0" }.to raise_error(XDR::WriteError)
|
30
|
-
end
|
31
|
-
|
32
|
-
def write(val)
|
33
|
-
io = StringIO.new()
|
34
|
-
subject.write(val, io)
|
35
|
-
io.string
|
36
|
-
end
|
37
|
-
end
|
data/spec/lib/xdr/hyper_spec.rb
DELETED
@@ -1,40 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
|
4
|
-
describe XDR::Hyper, ".read" do
|
5
|
-
|
6
|
-
it "decodes values correctly" do
|
7
|
-
expect(read("\x00\x00\x00\x00\x00\x00\x00\x00")).to eq(0)
|
8
|
-
expect(read("\x00\x00\x00\x00\x00\x00\x00\x01")).to eq(1)
|
9
|
-
expect(read("\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF")).to eq(-1)
|
10
|
-
expect(read("\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF")).to eq(2**63 - 1)
|
11
|
-
expect(read("\x80\x00\x00\x00\x00\x00\x00\x00")).to eq(-(2**63))
|
12
|
-
end
|
13
|
-
|
14
|
-
def read(str)
|
15
|
-
io = StringIO.new(str)
|
16
|
-
subject.read(io)
|
17
|
-
end
|
18
|
-
end
|
19
|
-
|
20
|
-
describe XDR::Hyper, ".write" do
|
21
|
-
|
22
|
-
it "decodes values correctly" do
|
23
|
-
expect(write 0).to eq_bytes("\x00\x00\x00\x00\x00\x00\x00\x00")
|
24
|
-
expect(write 1).to eq_bytes("\x00\x00\x00\x00\x00\x00\x00\x01")
|
25
|
-
expect(write -1).to eq_bytes("\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF")
|
26
|
-
expect(write 2**63 - 1).to eq_bytes("\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF")
|
27
|
-
expect(write -(2**63)).to eq_bytes("\x80\x00\x00\x00\x00\x00\x00\x00")
|
28
|
-
end
|
29
|
-
|
30
|
-
it "raises WriteError when an Integer isn't passed" do
|
31
|
-
expect{ write 1.0 }.to raise_error(XDR::WriteError)
|
32
|
-
expect{ write "hi" }.to raise_error(XDR::WriteError)
|
33
|
-
end
|
34
|
-
|
35
|
-
def write(val)
|
36
|
-
io = StringIO.new()
|
37
|
-
subject.write(val, io)
|
38
|
-
io.string
|
39
|
-
end
|
40
|
-
end
|
data/spec/lib/xdr/int_spec.rb
DELETED
@@ -1,40 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
|
4
|
-
describe XDR::Int, ".read" do
|
5
|
-
|
6
|
-
it "decodes values correctly" do
|
7
|
-
expect(read("\x00\x00\x00\x00")).to eq(0)
|
8
|
-
expect(read("\x00\x00\x00\x01")).to eq(1)
|
9
|
-
expect(read("\xFF\xFF\xFF\xFF")).to eq(-1)
|
10
|
-
expect(read("\x7F\xFF\xFF\xFF")).to eq(2**31 - 1)
|
11
|
-
expect(read("\x80\x00\x00\x00")).to eq(-(2**31))
|
12
|
-
end
|
13
|
-
|
14
|
-
def read(str)
|
15
|
-
io = StringIO.new(str)
|
16
|
-
subject.read(io)
|
17
|
-
end
|
18
|
-
end
|
19
|
-
|
20
|
-
describe XDR::Int, ".write" do
|
21
|
-
|
22
|
-
it "decodes values correctly" do
|
23
|
-
expect(write 0).to eq_bytes("\x00\x00\x00\x00")
|
24
|
-
expect(write 1).to eq_bytes("\x00\x00\x00\x01")
|
25
|
-
expect(write -1).to eq_bytes("\xFF\xFF\xFF\xFF")
|
26
|
-
expect(write 2**31 - 1).to eq_bytes("\x7F\xFF\xFF\xFF")
|
27
|
-
expect(write -(2**31)).to eq_bytes("\x80\x00\x00\x00")
|
28
|
-
end
|
29
|
-
|
30
|
-
it "raises WriteError when an Integer isn't passed" do
|
31
|
-
expect{ write 1.0 }.to raise_error(XDR::WriteError)
|
32
|
-
expect{ write "hi" }.to raise_error(XDR::WriteError)
|
33
|
-
end
|
34
|
-
|
35
|
-
def write(val)
|
36
|
-
io = StringIO.new()
|
37
|
-
subject.write(val, io)
|
38
|
-
io.string
|
39
|
-
end
|
40
|
-
end
|
data/spec/lib/xdr/opaque_spec.rb
DELETED
@@ -1,40 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
|
4
|
-
describe XDR::Opaque, "#read" do
|
5
|
-
subject{ XDR::Opaque.new(3) }
|
6
|
-
|
7
|
-
it "decodes values correctly" do
|
8
|
-
expect(read("\x00\x00\x00\x00")).to eq("\x00\x00\x00")
|
9
|
-
expect(read("\x00\x01\x00\x00")).to eq("\x00\x01\x00")
|
10
|
-
end
|
11
|
-
|
12
|
-
it "raises a ReadError when the padding isn't zeros" do
|
13
|
-
expect{ read "\x00\x00\x01\x01" }.to raise_error(XDR::ReadError)
|
14
|
-
end
|
15
|
-
|
16
|
-
def read(str)
|
17
|
-
io = StringIO.new(str)
|
18
|
-
subject.read(io)
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
describe XDR::Opaque, "#write" do
|
23
|
-
subject{ XDR::Opaque.new(3) }
|
24
|
-
|
25
|
-
it "encodes values correctly" do
|
26
|
-
expect(write("123")).to eq("123\x00")
|
27
|
-
expect(write("124")).to eq("124\x00")
|
28
|
-
end
|
29
|
-
|
30
|
-
it "raises a WriteError if the value is not the correct length" do
|
31
|
-
expect{ write("1234") }.to raise_error(XDR::WriteError)
|
32
|
-
expect{ write("12") }.to raise_error(XDR::WriteError)
|
33
|
-
end
|
34
|
-
|
35
|
-
def write(val)
|
36
|
-
io = StringIO.new()
|
37
|
-
subject.write(val, io)
|
38
|
-
io.string
|
39
|
-
end
|
40
|
-
end
|
data/spec/lib/xdr/option_spec.rb
DELETED
@@ -1,36 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
|
4
|
-
describe XDR::Option, ".read" do
|
5
|
-
subject{ XDR::Option[XDR::Int] }
|
6
|
-
|
7
|
-
it "decodes values correctly" do
|
8
|
-
expect(read "\x00\x00\x00\x01\x00\x00\x00\x00" ).to eq(0)
|
9
|
-
expect(read "\x00\x00\x00\x00" ).to eq(nil)
|
10
|
-
end
|
11
|
-
|
12
|
-
def read(str)
|
13
|
-
io = StringIO.new(str)
|
14
|
-
subject.read(io)
|
15
|
-
end
|
16
|
-
end
|
17
|
-
|
18
|
-
describe XDR::Option, ".write" do
|
19
|
-
subject{ XDR::Option[XDR::Int] }
|
20
|
-
|
21
|
-
it "decodes values correctly" do
|
22
|
-
expect(write 0).to eq_bytes("\x00\x00\x00\x01\x00\x00\x00\x00")
|
23
|
-
expect(write nil).to eq_bytes("\x00\x00\x00\x00")
|
24
|
-
end
|
25
|
-
|
26
|
-
it "raises WriteError when the provided value is non-nil bust invalid for the child type" do
|
27
|
-
expect{ write 1.0 }.to raise_error(XDR::WriteError)
|
28
|
-
expect{ write "hi" }.to raise_error(XDR::WriteError)
|
29
|
-
end
|
30
|
-
|
31
|
-
def write(val)
|
32
|
-
io = StringIO.new()
|
33
|
-
subject.write(val, io)
|
34
|
-
io.string
|
35
|
-
end
|
36
|
-
end
|
@@ -1,14 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
|
4
|
-
describe XDR::Quadruple, ".read" do
|
5
|
-
let(:zero){ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" }
|
6
|
-
it "cannot decode values yet" do
|
7
|
-
expect{ read zero }.to raise_error(NotImplementedError)
|
8
|
-
end
|
9
|
-
|
10
|
-
def read(str)
|
11
|
-
io = StringIO.new(str)
|
12
|
-
subject.read(io)
|
13
|
-
end
|
14
|
-
end
|
@@ -1,27 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe XDR::RPC::RecordReader, "#read" do
|
4
|
-
|
5
|
-
it "decodes values correctly" do
|
6
|
-
empty_record = read "\x00\x00\x00\x00"
|
7
|
-
last_record = read "\x80\x00\x00\x02\x00\x00"
|
8
|
-
|
9
|
-
expect(empty_record).to_not be_last
|
10
|
-
expect(empty_record.length).to eq(0)
|
11
|
-
expect(empty_record.content.string).to eq("")
|
12
|
-
|
13
|
-
expect(last_record).to be_last
|
14
|
-
expect(last_record.length).to eq(2)
|
15
|
-
expect(last_record.content.string).to eq("\x00\x00")
|
16
|
-
end
|
17
|
-
|
18
|
-
it "raises EOFError the byte stream isn't large enough" do
|
19
|
-
expect{ read "\x00\x00\x00\x01" }.to raise_error(EOFError)
|
20
|
-
expect{ read "\x00\x00\x00\x08\x00\x00\x00\x01" }.to raise_error(EOFError)
|
21
|
-
end
|
22
|
-
|
23
|
-
def read(str)
|
24
|
-
io = StringIO.new(str)
|
25
|
-
subject.read(io)
|
26
|
-
end
|
27
|
-
end
|