coap 0.0.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,127 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require_relative 'coap_test_helper'
3
+
4
+ class TestMessage < Test::Unit::TestCase
5
+ def test_number_of_bits_up_to
6
+ assert_equal 0, CoAP.number_of_bits_up_to(1)
7
+ assert_equal 4, CoAP.number_of_bits_up_to(16)
8
+ assert_equal 5, CoAP.number_of_bits_up_to(32)
9
+ assert_equal 7, CoAP.number_of_bits_up_to(128)
10
+ end
11
+
12
+ def test_query_encode
13
+ assert_equal '', CoAP.query_encode([])
14
+ assert_equal '?', CoAP.query_encode([''])
15
+ assert_equal '?foo', CoAP.query_encode(['foo'])
16
+ assert_equal '?foo&bar', CoAP.query_encode(%w(foo bar))
17
+ assert_equal '?f.o&b-r', CoAP.query_encode(['f.o', 'b-r'])
18
+ assert_equal '?f(o&b)r', CoAP.query_encode(['f(o', 'b)r'])
19
+ assert_equal '?foo&b/r', CoAP.query_encode(['foo', 'b/r'])
20
+ assert_equal '?foo&b%26r', CoAP.query_encode(['foo', 'b&r'])
21
+ assert_equal '?f%C3%B8o&b%C3%A4r', CoAP.query_encode(['føo', 'bär'])
22
+ end
23
+
24
+ # XXX: now properly checks for trailing slashes, how much trouble?
25
+ def test_path_decode
26
+ assert_equal [], CoAP.path_decode('/')
27
+ assert_equal ['foo'], CoAP.path_decode('/foo')
28
+ assert_equal ['foo', ''], CoAP.path_decode('/foo/') # confusing!
29
+ assert_equal %w(foo bar), CoAP.path_decode('/foo/bar')
30
+ assert_equal ['f.o', 'b-r'], CoAP.path_decode('/f.o/b-r')
31
+ assert_equal ['f(o', 'b)r'], CoAP.path_decode('/f(o/b)r')
32
+ assert_equal ['foo', 'b/r'], CoAP.path_decode('/foo/b%2Fr')
33
+ assert_equal ['foo', 'b&r'], CoAP.path_decode('/foo/b&r')
34
+ assert_equal ['føo', 'bär'], CoAP.path_decode('/f%C3%B8o/b%C3%A4r')
35
+ end
36
+
37
+ # XXX: now checks for trailing ampersands
38
+ def test_query_decode
39
+ assert_equal [], CoAP.query_decode('')
40
+ assert_equal [''], CoAP.query_decode('?')
41
+ assert_equal ['foo'], CoAP.query_decode('?foo')
42
+ assert_equal ['foo', ''], CoAP.query_decode('?foo&')
43
+ assert_equal %w(foo bar), CoAP.query_decode('?foo&bar')
44
+ assert_equal ['f.o', 'b-r'], CoAP.query_decode('?f.o&b-r')
45
+ assert_equal ['f(o', 'b)r'], CoAP.query_decode('?f(o&b)r')
46
+ assert_equal ['foo', 'b/r'], CoAP.query_decode('?foo&b/r')
47
+ assert_equal ['foo', 'b&r'], CoAP.query_decode('?foo&b%26r')
48
+ assert_equal ['føo', 'bär'], CoAP.query_decode('?f%C3%B8o&b%C3%A4r')
49
+ end
50
+
51
+ def test_scheme_and_authority_encode
52
+ assert_equal 'coap://foo.bar:4711', CoAP.scheme_and_authority_encode('foo.bar', 4711)
53
+ assert_equal 'coap://foo.bar:4711', CoAP.scheme_and_authority_encode('foo.bar', '4711')
54
+ assert_raise ArgumentError do
55
+ CoAP.scheme_and_authority_encode('foo.bar', 'baz')
56
+ end
57
+ assert_equal 'coap://bar.baz', CoAP.scheme_and_authority_encode('bar.baz', 5683)
58
+ assert_equal 'coap://bar.baz', CoAP.scheme_and_authority_encode('bar.baz', '5683')
59
+ end
60
+
61
+ def test_scheme_and_authority_decode
62
+ assert_equal ['foo.bar', 4711, nil], CoAP.scheme_and_authority_decode('coap://foo.bar:4711')
63
+ assert_equal ['foo.bar', 5683, nil], CoAP.scheme_and_authority_decode('coap://foo.bar')
64
+ assert_equal ['foo:bar', 4711, nil], CoAP.scheme_and_authority_decode('coap://[foo:bar]:4711')
65
+ assert_equal ['foo:bar', 5683, nil], CoAP.scheme_and_authority_decode('coap://%5Bfoo:bar%5D')
66
+ end
67
+
68
+ def test_coap_message
69
+ input = "\x44\x02\x12\xA0abcd\x41A\x7B.well-known\x04core\x0D\x04rhabarbersaftglas\xFFfoobar".force_encoding('BINARY')
70
+ output = CoAP.parse(input)
71
+ w = output.to_wire
72
+ assert_equal input, w
73
+ end
74
+
75
+ # XXX TODO add token tests
76
+
77
+ def test_fenceposting
78
+ m = CoAP::Message.new(:con, :get, 4711, 'Hello', {})
79
+ m.options = { max_age: 987_654_321, if_none_match: true }
80
+ me = m.to_wire
81
+ m2 = CoAP.parse(me)
82
+ m.options = CoAP::DEFAULTING_OPTIONS.merge(m.options)
83
+ assert_equal m2, m
84
+ end
85
+
86
+ def test_fenceposting2
87
+ m = CoAP::Message.new(:con, :get, 4711, 'Hello', {})
88
+ m.options = { 4711 => ['foo'], 256 => ['bar'] }
89
+ me = m.to_wire
90
+ m2 = CoAP.parse(me)
91
+ m.options = CoAP::DEFAULTING_OPTIONS.merge(m.options)
92
+ assert_equal m2, m
93
+ end
94
+
95
+ def test_emptypayload
96
+ m = CoAP::Message.new(:con, :get, 4711, '', {})
97
+ m.options = { 4711 => ['foo'], 256 => ['bar'], 65_535 => ['abc' * 100] }
98
+ me = m.to_wire
99
+ m2 = CoAP.parse(me)
100
+ m.options = CoAP::DEFAULTING_OPTIONS.merge(m.options)
101
+ assert_equal m2, m
102
+ end
103
+
104
+ def test_option_numbers
105
+ (0...65_536).each do |on|
106
+ unless CoAP::OPTIONS[on] # those might have special semantics
107
+ m = CoAP::Message.new(:con, :get, 4711, 'Hello', {})
108
+ m.options = { on => [''] }
109
+ me = m.to_wire
110
+ m2 = CoAP.parse(me)
111
+ m.options = CoAP::DEFAULTING_OPTIONS.merge(m.options)
112
+ assert_equal m2, m
113
+ end
114
+ end
115
+ end
116
+
117
+ def test_option_lengths
118
+ (0...1024).each do |ol|
119
+ m = CoAP::Message.new(:con, :get, 4711, 'Hello', {})
120
+ m.options = { 99 => ['x' * ol] }
121
+ me = m.to_wire
122
+ m2 = CoAP.parse(me)
123
+ m.options = CoAP::DEFAULTING_OPTIONS.merge(m.options)
124
+ assert_equal m2, m
125
+ end
126
+ end
127
+ end
metadata ADDED
@@ -0,0 +1,113 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: coap
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.13
5
+ platform: ruby
6
+ authors:
7
+ - Carsten Bormann
8
+ - Simon Frerichs
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2014-07-10 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: bundler
16
+ requirement: !ruby/object:Gem::Requirement
17
+ requirements:
18
+ - - "~>"
19
+ - !ruby/object:Gem::Version
20
+ version: '1.5'
21
+ type: :development
22
+ prerelease: false
23
+ version_requirements: !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - "~>"
26
+ - !ruby/object:Gem::Version
27
+ version: '1.5'
28
+ - !ruby/object:Gem::Dependency
29
+ name: rake
30
+ requirement: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - ">="
33
+ - !ruby/object:Gem::Version
34
+ version: '0'
35
+ type: :development
36
+ prerelease: false
37
+ version_requirements: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - ">="
40
+ - !ruby/object:Gem::Version
41
+ version: '0'
42
+ - !ruby/object:Gem::Dependency
43
+ name: resolv-ipv6favor
44
+ requirement: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - ">="
47
+ - !ruby/object:Gem::Version
48
+ version: '0'
49
+ type: :runtime
50
+ prerelease: false
51
+ version_requirements: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - ">="
54
+ - !ruby/object:Gem::Version
55
+ version: '0'
56
+ description: coap \o/ gem.
57
+ email:
58
+ - morpheus@morphhome.net
59
+ executables:
60
+ - client
61
+ extensions: []
62
+ extra_rdoc_files: []
63
+ files:
64
+ - ".gitignore"
65
+ - Gemfile
66
+ - Gemfile.lock
67
+ - LICENSE
68
+ - README.md
69
+ - Rakefile
70
+ - bin/client
71
+ - coap.gemspec
72
+ - lib/coap.rb
73
+ - lib/coap/block.rb
74
+ - lib/coap/client.rb
75
+ - lib/coap/coap.rb
76
+ - lib/coap/message.rb
77
+ - lib/coap/mysocket.rb
78
+ - lib/coap/observer.rb
79
+ - lib/coap/version.rb
80
+ - lib/misc/hexdump.rb
81
+ - test/coap_test_helper.rb
82
+ - test/disabled_econotag_blck.rb
83
+ - test/test_client.rb
84
+ - test/test_message.rb
85
+ homepage: ''
86
+ licenses:
87
+ - TODO
88
+ metadata: {}
89
+ post_install_message:
90
+ rdoc_options: []
91
+ require_paths:
92
+ - lib
93
+ required_ruby_version: !ruby/object:Gem::Requirement
94
+ requirements:
95
+ - - ">="
96
+ - !ruby/object:Gem::Version
97
+ version: '0'
98
+ required_rubygems_version: !ruby/object:Gem::Requirement
99
+ requirements:
100
+ - - ">="
101
+ - !ruby/object:Gem::Version
102
+ version: '0'
103
+ requirements: []
104
+ rubyforge_project:
105
+ rubygems_version: 2.2.2
106
+ signing_key:
107
+ specification_version: 4
108
+ summary: coap gem.
109
+ test_files:
110
+ - test/coap_test_helper.rb
111
+ - test/disabled_econotag_blck.rb
112
+ - test/test_client.rb
113
+ - test/test_message.rb