david 0.4.5 → 0.5.0
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.
- checksums.yaml +4 -4
- data/.travis.yml +10 -6
- data/Gemfile +7 -3
- data/Gemfile.lock +180 -145
- data/README.md +17 -5
- data/david.gemspec +5 -5
- data/lib/david.rb +2 -1
- data/lib/david/etsi/mandatory/roda.rb +36 -0
- data/lib/david/observe.rb +21 -14
- data/lib/david/railties/middleware.rb +1 -0
- data/lib/david/registry.rb +1 -1
- data/lib/david/resource_discovery_proxy.rb +1 -1
- data/lib/david/server/multicast.rb +1 -1
- data/lib/david/server/utility.rb +2 -1
- data/lib/david/version.rb +2 -2
- data/lib/rack/handler/david.rb +4 -4
- data/spec/app_config_spec.rb +2 -1
- data/spec/dummy/app/controllers/etsis_controller.rb +1 -2
- data/spec/dummy/app/controllers/tests_controller.rb +2 -2
- data/spec/interop/mandatory_spec.rb +1 -0
- data/spec/interop/optional_spec.rb +1 -1
- data/spec/mapping_spec.rb +1 -1
- data/spec/observe_spec.rb +15 -15
- data/spec/perf/server_perf_spec.rb +1 -1
- data/spec/resource_discovery_spec.rb +3 -3
- data/spec/server_spec.rb +16 -16
- data/spec/spec_helper.rb +17 -6
- metadata +18 -31
- data/spec/dummy/config/initializers/assets.rb +0 -8
data/spec/server_spec.rb
CHANGED
@@ -10,7 +10,7 @@ describe Server do
|
|
10
10
|
let!(:server) { supervised_server(:Port => port) }
|
11
11
|
|
12
12
|
context 'ordinary request' do
|
13
|
-
subject { client.get('/hello',
|
13
|
+
subject { client.get('/hello', localhost) }
|
14
14
|
|
15
15
|
it 'should be plausible' do
|
16
16
|
expect(subject).to be_a(CoAP::Message)
|
@@ -22,7 +22,7 @@ describe Server do
|
|
22
22
|
end
|
23
23
|
|
24
24
|
context 'missing resource' do
|
25
|
-
subject { client.get('/404',
|
25
|
+
subject { client.get('/404', localhost) }
|
26
26
|
|
27
27
|
it 'should be 4.04' do
|
28
28
|
expect(subject).to be_a(CoAP::Message)
|
@@ -34,7 +34,7 @@ describe Server do
|
|
34
34
|
end
|
35
35
|
|
36
36
|
context 'unsupported method' do
|
37
|
-
subject { client.delete('/hello',
|
37
|
+
subject { client.delete('/hello', localhost) }
|
38
38
|
|
39
39
|
it 'should be 4.05' do
|
40
40
|
expect(subject).to be_a(CoAP::Message)
|
@@ -135,7 +135,7 @@ describe Server do
|
|
135
135
|
|
136
136
|
context 'block' do
|
137
137
|
context 'block2.more set' do
|
138
|
-
subject { client.get('/',
|
138
|
+
subject { client.get('/', localhost, nil, nil, block2: 14) }
|
139
139
|
|
140
140
|
it 'should be an error' do
|
141
141
|
expect(subject).to be_a(CoAP::Message)
|
@@ -154,7 +154,7 @@ describe Server do
|
|
154
154
|
recv_timeout: 0.1
|
155
155
|
end
|
156
156
|
|
157
|
-
subject { client.get('/hello',
|
157
|
+
subject { client.get('/hello', localhost, nil, nil, block2: 16) }
|
158
158
|
|
159
159
|
it 'should be an error' do
|
160
160
|
expect { subject }.to raise_error(Timeout::Error)
|
@@ -164,7 +164,7 @@ describe Server do
|
|
164
164
|
context 'transfer' do
|
165
165
|
subject do
|
166
166
|
[0, 16].map do |x|
|
167
|
-
client.get('/block',
|
167
|
+
client.get('/block', localhost, nil, nil, block2: x)
|
168
168
|
end
|
169
169
|
end
|
170
170
|
|
@@ -178,7 +178,7 @@ describe Server do
|
|
178
178
|
|
179
179
|
context 'accept' do
|
180
180
|
context 'unset' do
|
181
|
-
subject { client.get('/hello',
|
181
|
+
subject { client.get('/hello', localhost) }
|
182
182
|
|
183
183
|
it 'should return resource' do
|
184
184
|
expect(subject).to be_a(CoAP::Message)
|
@@ -191,7 +191,7 @@ describe Server do
|
|
191
191
|
end
|
192
192
|
|
193
193
|
context 'default' do
|
194
|
-
subject { client.get('/echo/accept',
|
194
|
+
subject { client.get('/echo/accept', localhost) }
|
195
195
|
|
196
196
|
it 'should return default' do
|
197
197
|
expect(subject).to be_a(CoAP::Message)
|
@@ -204,7 +204,7 @@ describe Server do
|
|
204
204
|
end
|
205
205
|
|
206
206
|
context 'right' do
|
207
|
-
subject { client.get('/echo/accept',
|
207
|
+
subject { client.get('/echo/accept', localhost, nil, nil, accept: 40) }
|
208
208
|
|
209
209
|
it 'should echo' do
|
210
210
|
expect(subject).to be_a(CoAP::Message)
|
@@ -217,7 +217,7 @@ describe Server do
|
|
217
217
|
end
|
218
218
|
|
219
219
|
context 'wrong' do
|
220
|
-
subject { client.get('/hello',
|
220
|
+
subject { client.get('/hello', localhost, nil, nil, accept: 40) }
|
221
221
|
|
222
222
|
it 'should be an error' do
|
223
223
|
expect(subject).to be_a(CoAP::Message)
|
@@ -232,7 +232,7 @@ describe Server do
|
|
232
232
|
context 'deduplication' do
|
233
233
|
context 'duplicates' do
|
234
234
|
let(:a) do
|
235
|
-
([0]*3).map { client.get('/value',
|
235
|
+
([0]*3).map { client.get('/value', localhost, nil, nil, mid: 1, token: 1) }
|
236
236
|
end
|
237
237
|
|
238
238
|
it 'matching mid' do
|
@@ -253,7 +253,7 @@ describe Server do
|
|
253
253
|
|
254
254
|
context 'different' do
|
255
255
|
let(:a) do
|
256
|
-
([0]*3).map { client.get('/value',
|
256
|
+
([0]*3).map { client.get('/value', localhost) }
|
257
257
|
end
|
258
258
|
|
259
259
|
it 'matching mid' do
|
@@ -274,7 +274,7 @@ describe Server do
|
|
274
274
|
end
|
275
275
|
|
276
276
|
context 'proxy' do
|
277
|
-
subject { client.get('/',
|
277
|
+
subject { client.get('/', localhost, nil, nil, proxy_uri: 'coap://[::1]/') }
|
278
278
|
|
279
279
|
it 'should return 5.05' do
|
280
280
|
expect(subject).to be_a(CoAP::Message)
|
@@ -290,7 +290,7 @@ describe Server do
|
|
290
290
|
|
291
291
|
let(:cbor) { {'Hello' => 'World!'}.to_cbor }
|
292
292
|
|
293
|
-
subject { client.get('/cbor',
|
293
|
+
subject { client.get('/cbor', localhost, nil, cbor, content_format: 60) }
|
294
294
|
|
295
295
|
context 'incoming' do
|
296
296
|
context 'string key' do
|
@@ -326,13 +326,13 @@ describe Server do
|
|
326
326
|
expect(subject.ver).to eq(1)
|
327
327
|
expect(subject.tt).to eq(:ack)
|
328
328
|
expect(subject.mcode).to eq([2, 5])
|
329
|
-
expect(subject.payload).to eq('{"Hello"
|
329
|
+
expect(subject.payload).to eq('{"Hello":"World!"}')
|
330
330
|
end
|
331
331
|
end
|
332
332
|
end
|
333
333
|
|
334
334
|
context 'outgoing' do
|
335
|
-
subject { client.get('/json',
|
335
|
+
subject { client.get('/json', localhost) }
|
336
336
|
|
337
337
|
it 'should return CBOR' do
|
338
338
|
expect(subject).to be_a(CoAP::Message)
|
data/spec/spec_helper.rb
CHANGED
@@ -21,6 +21,14 @@ module David
|
|
21
21
|
@debug ||= ENV['DEBUG'].nil? ? 'none' : 'debug'
|
22
22
|
end
|
23
23
|
|
24
|
+
def ipv4?
|
25
|
+
@ipv4 ||= !ENV['IPV4'].nil?
|
26
|
+
end
|
27
|
+
|
28
|
+
def localhost
|
29
|
+
ipv4? ? '127.0.0.1' : '::1'
|
30
|
+
end
|
31
|
+
|
24
32
|
def random_port
|
25
33
|
rand((2**10+1)..(2**16-1))
|
26
34
|
end
|
@@ -30,20 +38,21 @@ module David
|
|
30
38
|
|
31
39
|
payload = options.delete(:payload)
|
32
40
|
port = options.delete(:port) || random_port
|
41
|
+
host = ipv4? ? '127.0.0.1' : '::1'
|
33
42
|
|
34
43
|
options.merge!(mid: mid)
|
35
44
|
|
36
45
|
client = CoAP::Client.new(retransmit: false, recv_timeout: 0.1,
|
37
46
|
token: false)
|
38
47
|
|
39
|
-
response = client.send(method, path,
|
48
|
+
response = client.send(method, path, host, port, payload, options)
|
40
49
|
|
41
50
|
[mid, response]
|
42
51
|
end
|
43
52
|
|
44
53
|
def supervised_server(options)
|
45
54
|
defaults = {
|
46
|
-
:Host =>
|
55
|
+
:Host => localhost,
|
47
56
|
:Port => CoAP::PORT,
|
48
57
|
:Log => debug
|
49
58
|
}
|
@@ -52,13 +61,15 @@ module David
|
|
52
61
|
|
53
62
|
app = options.delete(:app) || Rack::HelloWorld
|
54
63
|
|
55
|
-
g = Celluloid::
|
64
|
+
g = Celluloid::Supervision::Container.run!
|
65
|
+
|
66
|
+
g.supervise(as: :server, type: ::David::Server,
|
67
|
+
args: [app, defaults.merge(options)])
|
56
68
|
|
57
|
-
g.
|
58
|
-
g.supervise_as(:gc, ::David::GarbageCollector)
|
69
|
+
g.supervise(as: :gc, type: ::David::GarbageCollector)
|
59
70
|
|
60
71
|
unless options[:Observe] == 'false'
|
61
|
-
g.
|
72
|
+
g.supervise(as: :observe, type: ::David::Observe)
|
62
73
|
end
|
63
74
|
|
64
75
|
Celluloid::Actor[:server].async.run
|
metadata
CHANGED
@@ -1,67 +1,55 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: david
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- henning mueller
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2016-08-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: celluloid
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "
|
18
|
-
- !ruby/object:Gem::Version
|
19
|
-
version: 0.16.0
|
20
|
-
- - "<"
|
17
|
+
- - "~>"
|
21
18
|
- !ruby/object:Gem::Version
|
22
|
-
version:
|
19
|
+
version: 0.17.3
|
23
20
|
type: :runtime
|
24
21
|
prerelease: false
|
25
22
|
version_requirements: !ruby/object:Gem::Requirement
|
26
23
|
requirements:
|
27
|
-
- - "
|
28
|
-
- !ruby/object:Gem::Version
|
29
|
-
version: 0.16.0
|
30
|
-
- - "<"
|
24
|
+
- - "~>"
|
31
25
|
- !ruby/object:Gem::Version
|
32
|
-
version:
|
26
|
+
version: 0.17.3
|
33
27
|
- !ruby/object:Gem::Dependency
|
34
28
|
name: celluloid-io
|
35
29
|
requirement: !ruby/object:Gem::Requirement
|
36
30
|
requirements:
|
37
|
-
- - "
|
38
|
-
- !ruby/object:Gem::Version
|
39
|
-
version: 0.16.1
|
40
|
-
- - "<"
|
31
|
+
- - "~>"
|
41
32
|
- !ruby/object:Gem::Version
|
42
|
-
version:
|
33
|
+
version: 0.17.3
|
43
34
|
type: :runtime
|
44
35
|
prerelease: false
|
45
36
|
version_requirements: !ruby/object:Gem::Requirement
|
46
37
|
requirements:
|
47
|
-
- - "
|
48
|
-
- !ruby/object:Gem::Version
|
49
|
-
version: 0.16.1
|
50
|
-
- - "<"
|
38
|
+
- - "~>"
|
51
39
|
- !ruby/object:Gem::Version
|
52
|
-
version:
|
40
|
+
version: 0.17.3
|
53
41
|
- !ruby/object:Gem::Dependency
|
54
42
|
name: coap
|
55
43
|
requirement: !ruby/object:Gem::Requirement
|
56
44
|
requirements:
|
57
|
-
- - "
|
45
|
+
- - "~>"
|
58
46
|
- !ruby/object:Gem::Version
|
59
47
|
version: '0.1'
|
60
48
|
type: :runtime
|
61
49
|
prerelease: false
|
62
50
|
version_requirements: !ruby/object:Gem::Requirement
|
63
51
|
requirements:
|
64
|
-
- - "
|
52
|
+
- - "~>"
|
65
53
|
- !ruby/object:Gem::Version
|
66
54
|
version: '0.1'
|
67
55
|
- !ruby/object:Gem::Dependency
|
@@ -70,26 +58,26 @@ dependencies:
|
|
70
58
|
requirements:
|
71
59
|
- - "~>"
|
72
60
|
- !ruby/object:Gem::Version
|
73
|
-
version: '
|
61
|
+
version: '2.0'
|
74
62
|
type: :runtime
|
75
63
|
prerelease: false
|
76
64
|
version_requirements: !ruby/object:Gem::Requirement
|
77
65
|
requirements:
|
78
66
|
- - "~>"
|
79
67
|
- !ruby/object:Gem::Version
|
80
|
-
version: '
|
68
|
+
version: '2.0'
|
81
69
|
- !ruby/object:Gem::Dependency
|
82
70
|
name: rake
|
83
71
|
requirement: !ruby/object:Gem::Requirement
|
84
72
|
requirements:
|
85
|
-
- - "
|
73
|
+
- - "~>"
|
86
74
|
- !ruby/object:Gem::Version
|
87
75
|
version: '0'
|
88
76
|
type: :development
|
89
77
|
prerelease: false
|
90
78
|
version_requirements: !ruby/object:Gem::Requirement
|
91
79
|
requirements:
|
92
|
-
- - "
|
80
|
+
- - "~>"
|
93
81
|
- !ruby/object:Gem::Version
|
94
82
|
version: '0'
|
95
83
|
- !ruby/object:Gem::Dependency
|
@@ -180,6 +168,7 @@ files:
|
|
180
168
|
- lib/david/etsi/mandatory/hobbit.rb
|
181
169
|
- lib/david/etsi/mandatory/nyny.rb
|
182
170
|
- lib/david/etsi/mandatory/rack.rb
|
171
|
+
- lib/david/etsi/mandatory/roda.rb
|
183
172
|
- lib/david/etsi/mandatory/sinatra.rb
|
184
173
|
- lib/david/etsi/optional.rb
|
185
174
|
- lib/david/etsi/optional/rack.rb
|
@@ -234,7 +223,6 @@ files:
|
|
234
223
|
- spec/dummy/config/environments/development.rb
|
235
224
|
- spec/dummy/config/environments/production.rb
|
236
225
|
- spec/dummy/config/environments/test.rb
|
237
|
-
- spec/dummy/config/initializers/assets.rb
|
238
226
|
- spec/dummy/config/initializers/backtrace_silencers.rb
|
239
227
|
- spec/dummy/config/initializers/cookies_serializer.rb
|
240
228
|
- spec/dummy/config/initializers/filter_parameter_logging.rb
|
@@ -282,7 +270,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
282
270
|
version: '0'
|
283
271
|
requirements: []
|
284
272
|
rubyforge_project:
|
285
|
-
rubygems_version: 2.5.
|
273
|
+
rubygems_version: 2.5.1
|
286
274
|
signing_key:
|
287
275
|
specification_version: 4
|
288
276
|
summary: CoAP server with Rack interface.
|
@@ -312,7 +300,6 @@ test_files:
|
|
312
300
|
- spec/dummy/config/environments/development.rb
|
313
301
|
- spec/dummy/config/environments/production.rb
|
314
302
|
- spec/dummy/config/environments/test.rb
|
315
|
-
- spec/dummy/config/initializers/assets.rb
|
316
303
|
- spec/dummy/config/initializers/backtrace_silencers.rb
|
317
304
|
- spec/dummy/config/initializers/cookies_serializer.rb
|
318
305
|
- spec/dummy/config/initializers/filter_parameter_logging.rb
|
@@ -1,8 +0,0 @@
|
|
1
|
-
# Be sure to restart your server when you modify this file.
|
2
|
-
|
3
|
-
# Version of your assets, change this if you want to expire all your assets.
|
4
|
-
Rails.application.config.assets.version = '1.0'
|
5
|
-
|
6
|
-
# Precompile additional assets.
|
7
|
-
# application.js, application.css, and all non-JS/CSS in app/assets folder are already added.
|
8
|
-
# Rails.application.config.assets.precompile += %w( search.js )
|