omf_common 6.0.0 → 6.0.2.pre.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (50) hide show
  1. data/Gemfile +4 -0
  2. data/bin/file_broadcaster.rb +56 -0
  3. data/bin/file_receiver.rb +62 -0
  4. data/bin/omf_keygen +21 -0
  5. data/bin/{monitor_topic.rb → omf_monitor_topic} +21 -8
  6. data/bin/omf_send_create +118 -0
  7. data/bin/{send_request.rb → omf_send_request} +12 -7
  8. data/example/engine_alt.rb +23 -24
  9. data/example/ls_app.yaml +21 -0
  10. data/lib/omf_common.rb +73 -12
  11. data/lib/omf_common/auth.rb +15 -0
  12. data/lib/omf_common/auth/certificate.rb +174 -0
  13. data/lib/omf_common/auth/certificate_store.rb +72 -0
  14. data/lib/omf_common/auth/ssh_pub_key_convert.rb +80 -0
  15. data/lib/omf_common/comm.rb +66 -9
  16. data/lib/omf_common/comm/amqp/amqp_communicator.rb +40 -13
  17. data/lib/omf_common/comm/amqp/amqp_file_transfer.rb +259 -0
  18. data/lib/omf_common/comm/amqp/amqp_topic.rb +14 -21
  19. data/lib/omf_common/comm/local/local_communicator.rb +31 -2
  20. data/lib/omf_common/comm/local/local_topic.rb +19 -3
  21. data/lib/omf_common/comm/topic.rb +48 -34
  22. data/lib/omf_common/comm/xmpp/communicator.rb +19 -10
  23. data/lib/omf_common/comm/xmpp/topic.rb +22 -81
  24. data/lib/omf_common/default_logging.rb +11 -0
  25. data/lib/omf_common/eventloop.rb +14 -0
  26. data/lib/omf_common/eventloop/em.rb +39 -6
  27. data/lib/omf_common/eventloop/local_evl.rb +15 -0
  28. data/lib/omf_common/exec_app.rb +29 -15
  29. data/lib/omf_common/message.rb +53 -5
  30. data/lib/omf_common/message/json/json_message.rb +149 -39
  31. data/lib/omf_common/message/xml/message.rb +112 -39
  32. data/lib/omf_common/protocol/6.0.rnc +5 -1
  33. data/lib/omf_common/protocol/6.0.rng +12 -0
  34. data/lib/omf_common/version.rb +1 -1
  35. data/omf_common.gemspec +7 -2
  36. data/test/fixture/omf_test.cert.pem +15 -0
  37. data/test/fixture/omf_test.pem +15 -0
  38. data/test/fixture/omf_test.pub +1 -0
  39. data/test/fixture/omf_test.pub.pem +6 -0
  40. data/test/omf_common/auth/certificate_spec.rb +113 -0
  41. data/test/omf_common/auth/ssh_pub_key_convert_spec.rb +13 -0
  42. data/test/omf_common/comm/topic_spec.rb +175 -0
  43. data/test/omf_common/comm/xmpp/communicator_spec.rb +15 -16
  44. data/test/omf_common/comm/xmpp/topic_spec.rb +63 -10
  45. data/test/omf_common/comm_spec.rb +66 -9
  46. data/test/omf_common/message/xml/message_spec.rb +43 -13
  47. data/test/omf_common/message_spec.rb +14 -0
  48. data/test/test_helper.rb +25 -0
  49. metadata +78 -15
  50. data/bin/send_create.rb +0 -94
@@ -0,0 +1,13 @@
1
+ require 'test_helper'
2
+
3
+ describe OmfCommon::Auth::SSHPubKeyConvert do
4
+ it "must import ssh pub key format to ruby rsa instance" do
5
+ private_folder = "#{File.dirname(__FILE__)}/../../fixture"
6
+
7
+ pub_key = OpenSSL::PKey::RSA.new(File.read("#{private_folder}/omf_test.pub.pem"))
8
+
9
+ ssh_pub_key = File.read("#{private_folder}/omf_test.pub")
10
+
11
+ OmfCommon::Auth::SSHPubKeyConvert.convert(ssh_pub_key).to_s.must_equal pub_key.to_s
12
+ end
13
+ end
@@ -0,0 +1,175 @@
1
+ require 'test_helper'
2
+
3
+ describe OmfCommon::Comm::Topic do
4
+ describe "when using factory method to initialise" do
5
+ before do
6
+ @topic = OmfCommon::Comm::Topic.create(:bob)
7
+ end
8
+
9
+ it "must add it to the instance list" do
10
+ OmfCommon::Comm::Topic[:bob].must_equal @topic
11
+ end
12
+
13
+ it "must have interface for its address" do
14
+ lambda { @topic.address }.must_raise NotImplementedError
15
+ end
16
+
17
+ it "must have interface for on_subscribed handler" do
18
+ lambda { @topic.on_subscribed }.must_raise NotImplementedError
19
+ end
20
+
21
+ it "must have error? returns false by default" do
22
+ @topic.error?.must_equal false
23
+ end
24
+
25
+ it "must have interface for timer :after" do
26
+ OmfCommon::Eventloop.init(type: :em)
27
+
28
+ @topic.after(5, & lambda {})
29
+
30
+ OmfCommon.eventloop.run do
31
+ @topic.after(0.1) do |t|
32
+ t.must_equal @topic
33
+ OmfCommon.eventloop.stop
34
+ end
35
+ end
36
+
37
+ OmfCommon::Eventloop.reset
38
+ end
39
+ end
40
+
41
+ describe "when interact with topic instance" do
42
+ before do
43
+ @comm = mock
44
+ OmfCommon.stubs(:comm).returns(@comm)
45
+ @topic = OmfCommon::Comm::Topic.create(:bob)
46
+ @comm.stubs(:local_address).returns(:bob_address)
47
+ end
48
+
49
+ after do
50
+ OmfCommon::Comm.reset
51
+ OmfCommon.unstub(:comm)
52
+ OmfCommon::Message::XML::Message.any_instance.unstub(:mid)
53
+ end
54
+
55
+ it "must create and send frcp create message" do
56
+ @topic.create(:rtype).must_equal @topic
57
+ end
58
+
59
+ it "must create and send frcp configure message" do
60
+ @topic.configure(attr: 'value').must_equal @topic
61
+ end
62
+
63
+ it "must create and send frcp request message" do
64
+ @topic.request([:attr]).must_equal @topic
65
+ end
66
+
67
+ it "must create and send frcp inform message" do
68
+ @topic.inform('CREATION.OK', attr: 'value').must_equal @topic
69
+ end
70
+
71
+ it "must create and send frcp inform message" do
72
+ lambda { @topic.release(:bob) }.must_raise ArgumentError
73
+ @topic.release(@topic)
74
+ end
75
+
76
+ it "must create different types of message handlers" do
77
+ @topic.class_eval do
78
+ define_method(:handlers, &(lambda { @handlers }))
79
+ end
80
+
81
+ [:message, :inform].each do |name|
82
+ m_name = "on_#{name}"
83
+ # No callback block given shall fail
84
+ lambda { @topic.send(m_name) }.must_raise ArgumentError
85
+ cbk = proc {}
86
+ @topic.send(m_name, &(cbk))
87
+ @topic.handlers[name].must_include cbk
88
+ end
89
+
90
+ @topic.class_eval do
91
+ undef_method(:handlers)
92
+ end
93
+ end
94
+
95
+ it "must send a message and register callbacks" do
96
+ @topic.class_eval do
97
+ define_method(:context2cbk, &(lambda { @context2cbk }))
98
+ define_method(:_send_message_public) do |*args|
99
+ _send_message(*args)
100
+ end
101
+ end
102
+
103
+ cbk = proc { 'called' }
104
+ msg = mock
105
+ msg.stubs(:mid).returns(:bob_id)
106
+
107
+ @topic._send_message_public(msg, cbk)
108
+
109
+ h = @topic.context2cbk['bob_id']
110
+ h.must_be_kind_of Hash
111
+ h[:block].call.must_equal 'called'
112
+
113
+ @topic.class_eval do
114
+ undef_method(:context2cbk)
115
+ undef_method(:_send_message_public)
116
+ end
117
+ end
118
+
119
+ it "must process incoming messages and trigger registered callbacks" do
120
+ @topic.class_eval do
121
+ define_method(:handlers, &(lambda { @handlers }))
122
+ define_method(:context2cbk, &(lambda { @context2cbk }))
123
+ define_method(:on_incoming_message_public) do |*args|
124
+ on_incoming_message(*args)
125
+ end
126
+ end
127
+
128
+ msg = mock
129
+ msg.stubs(:operation).returns(:inform)
130
+ msg.stubs(:itype).with(:ruby).returns('creation_ok')
131
+ msg.stubs(:cid).returns(:bob_id)
132
+
133
+ OmfCommon::Message::XML::Message.any_instance.stubs(:mid).returns(:bob_id)
134
+
135
+ cbk_called = [false, false, false, false]
136
+
137
+ @topic.create(:rtype) do |reply_msg|
138
+ cbk_called[0] = true
139
+ reply_msg.cid.must_equal :bob_id
140
+ end
141
+
142
+ @topic.on_inform do |incoming_msg|
143
+ cbk_called[1] = true
144
+ incoming_msg.cid.must_equal :bob_id
145
+ end
146
+
147
+ @topic.on_message do |incoming_msg|
148
+ cbk_called[2] = true
149
+ incoming_msg.cid.must_equal :bob_id
150
+ end
151
+
152
+ @topic.on_creation_ok do |incoming_msg|
153
+ cbk_called[3] = true
154
+ incoming_msg.cid.must_equal :bob_id
155
+ end
156
+
157
+ @topic.on_incoming_message_public(msg)
158
+
159
+ msg.stubs(:itype).returns(:status)
160
+
161
+ @topic.on_incoming_message_public(msg)
162
+
163
+ cbk_called[0].must_equal true
164
+ cbk_called[1].must_equal true
165
+ cbk_called[2].must_equal true
166
+ cbk_called[3].must_equal true
167
+
168
+ @topic.class_eval do
169
+ undef_method(:context2cbk)
170
+ undef_method(:handlers)
171
+ undef_method(:on_incoming_message_public)
172
+ end
173
+ end
174
+ end
175
+ end
@@ -1,6 +1,5 @@
1
1
  require 'test_helper'
2
2
  require 'fixture/pubsub'
3
- require 'em/minitest/spec'
4
3
 
5
4
  require 'omf_common/comm/xmpp/communicator'
6
5
 
@@ -18,7 +17,7 @@ describe OmfCommon::Comm::XMPP::Communicator do
18
17
 
19
18
  it "must be able to connect and tigger on_connected callbacks" do
20
19
  Blather::Client.stub :new, @client do
21
- @xmpp.jid.inspect.must_equal "bob@example.com"
20
+ @xmpp.jid.to_s.must_equal "bob@example.com"
22
21
 
23
22
  @xmpp.on_connected do |communicator|
24
23
  communicator.must_be_kind_of OmfCommon::Comm::XMPP::Communicator
@@ -168,8 +167,8 @@ describe OmfCommon::Comm::XMPP::Communicator do
168
167
  m1.must_be_kind_of OmfCommon::TopicMessage
169
168
  m2.must_be_kind_of OmfCommon::TopicMessage
170
169
  m1.body.name.must_equal 'create'
171
- m1.body.to_xml.must_match /<property key="type" type="string">engine<\/property>/
172
- m2.body.to_xml.must_match /<property key="type" type="string">engine<\/property>/
170
+ m1.body.marshall[1].must_match /<property key="type" type="string">engine<\/property>/
171
+ m2.body.marshall[1].must_match /<property key="type" type="string">engine<\/property>/
173
172
  end
174
173
 
175
174
  it "must generate omf configure xml fragment" do
@@ -181,8 +180,8 @@ describe OmfCommon::Comm::XMPP::Communicator do
181
180
  m1.must_be_kind_of OmfCommon::TopicMessage
182
181
  m2.must_be_kind_of OmfCommon::TopicMessage
183
182
  m1.body.name.must_equal 'configure'
184
- m1.body.to_xml.must_match /<property key="throttle" type="integer">50<\/property>/
185
- m2.body.to_xml.must_match /<property key="throttle" type="integer">50<\/property>/
183
+ m1.body.marshall[1].must_match /<property key="throttle" type="integer">50<\/property>/
184
+ m2.body.marshall[1].must_match /<property key="throttle" type="integer">50<\/property>/
186
185
  end
187
186
 
188
187
  it "must generate omf inform xml fragment" do
@@ -194,8 +193,8 @@ describe OmfCommon::Comm::XMPP::Communicator do
194
193
  m1.must_be_kind_of OmfCommon::TopicMessage
195
194
  m2.must_be_kind_of OmfCommon::TopicMessage
196
195
  m1.body.name.must_equal 'inform'
197
- m1.body.to_xml.must_match /<property key="itype" type="string">CREATION.OK<\/property>/
198
- m2.body.to_xml.must_match /<property key="itype" type="string">CREATION.OK<\/property>/
196
+ m1.body.marshall[1].must_match /<property key="itype" type="string">CREATION.OK<\/property>/
197
+ m2.body.marshall[1].must_match /<property key="itype" type="string">CREATION.OK<\/property>/
199
198
  end
200
199
 
201
200
  it "must generate omf release xml fragment" do
@@ -207,8 +206,8 @@ describe OmfCommon::Comm::XMPP::Communicator do
207
206
  m1.must_be_kind_of OmfCommon::TopicMessage
208
207
  m2.must_be_kind_of OmfCommon::TopicMessage
209
208
  m1.body.name.must_equal 'release'
210
- m1.body.to_xml.must_match /<property key="res_id" type="integer">100<\/property>/
211
- m2.body.to_xml.must_match /<property key="res_id" type="integer">100<\/property>/
209
+ m1.body.marshall[1].must_match /<property key="res_id" type="integer">100<\/property>/
210
+ m2.body.marshall[1].must_match /<property key="res_id" type="integer">100<\/property>/
212
211
  end
213
212
 
214
213
  it "must generate omf request xml fragment" do
@@ -222,12 +221,12 @@ describe OmfCommon::Comm::XMPP::Communicator do
222
221
  m1.must_be_kind_of OmfCommon::TopicMessage
223
222
  m2.must_be_kind_of OmfCommon::TopicMessage
224
223
  m1.body.name.must_equal 'request'
225
- m1.body.to_xml.must_match /<property key="max_rpm"\/>/
226
- m1.body.to_xml.must_match /<property key="provider" type="hash">/
227
- m2.body.to_xml.must_match /<property key="provider" type="hash">/
228
- m1.body.to_xml.must_match /<country type="string">japan<\/country>/
229
- m2.body.to_xml.must_match /<country type="string">japan<\/country>/
230
- m1.body.to_xml.must_match /<property key="max_power"\/>/
224
+ m1.body.marshall[1].must_match /<property key="max_rpm"\/>/
225
+ m1.body.marshall[1].must_match /<property key="provider" type="hash">/
226
+ m2.body.marshall[1].must_match /<property key="provider" type="hash">/
227
+ m1.body.marshall[1].must_match /<country type="string">japan<\/country>/
228
+ m2.body.marshall[1].must_match /<country type="string">japan<\/country>/
229
+ m1.body.marshall[1].must_match /<property key="max_power"\/>/
231
230
  end
232
231
  end
233
232
 
@@ -1,6 +1,7 @@
1
+ require 'test_helper'
1
2
  require 'fixture/pubsub'
2
- require 'em/minitest/spec'
3
3
 
4
+ require 'omf_common/comm/xmpp/communicator'
4
5
  require 'omf_common/comm/xmpp/topic'
5
6
 
6
7
  describe OmfCommon::Comm::XMPP::Topic do
@@ -20,7 +21,10 @@ describe OmfCommon::Comm::XMPP::Topic do
20
21
  end
21
22
 
22
23
  describe "when calling operation method" do
24
+ include EM::MiniTest::Spec
25
+
23
26
  it "must send create message" do
27
+ skip
24
28
  OmfCommon.stub :comm, @xmpp do
25
29
  Blather::Client.stub :new, @client do
26
30
  published = Blather::XMPPNode.parse(published_xml)
@@ -32,10 +36,39 @@ describe OmfCommon::Comm::XMPP::Topic do
32
36
  end
33
37
 
34
38
  @client.stub :write, write_callback do
35
- @topic.create(:bob, { hrn: 'bob' })
39
+ @xmpp.stub :local_address, 'test_addr' do
40
+ @topic.create(:bob, { hrn: 'bob' })
41
+ end
42
+ end
43
+ end
44
+ end
45
+ end
46
+
47
+ it "must trigger operation callbacks" do
48
+ skip
49
+ OmfCommon.stub :comm, @xmpp do
50
+ Blather::Client.stub :new, @client do
51
+ @client.stub :write, proc {} do
52
+ @xmpp.stub :local_address, 'test_addr' do
53
+ omf_create = OmfCommon::Message.create(:create, { type: 'engine' })
54
+ omf_create.stub :mid, "bf840fe9-c176-4fae-b7de-6fc27f183f76" do
55
+ warn omf_create.mid
56
+ OmfCommon::Message.stub :create, omf_create do
57
+ @topic.create(:bob, { hrn: 'bob' }) do |reply_msg|
58
+ error 'bob'
59
+ #reply_msg.cid.must_equal "bf840fe9-c176-4fae-b7de-6fc27f183f76"
60
+ done!
61
+ end
62
+
63
+ @client.receive_data Blather::XMPPNode.parse(omf_created_xml)
64
+ end
65
+ end
66
+ end
36
67
  end
37
68
  end
38
69
  end
70
+
71
+ wait!
39
72
  end
40
73
  end
41
74
 
@@ -43,6 +76,7 @@ describe OmfCommon::Comm::XMPP::Topic do
43
76
  include EM::MiniTest::Spec
44
77
 
45
78
  it "must react to omf created message" do
79
+ skip
46
80
  OmfCommon.stub :comm, @xmpp do
47
81
  Blather::Client.stub :new, @client do
48
82
  omf_create = OmfCommon::Message.create(:create, { type: 'engine' })
@@ -50,8 +84,12 @@ describe OmfCommon::Comm::XMPP::Topic do
50
84
  omf_created = Blather::XMPPNode.parse(omf_created_xml)
51
85
  @client.receive_data omf_created
52
86
  @topic.on_creation_ok(omf_create) do |n|
53
- n.must_equal OmfCommon::Message.parse(omf_created.items.first.payload)
54
- done!
87
+ OmfCommon::Message.parse(omf_created.items.first.payload) do |parsed_msg|
88
+ n.stub :ts, parsed_msg.ts do
89
+ n.must_equal parsed_msg
90
+ end
91
+ done!
92
+ end
55
93
  end
56
94
  end
57
95
  end
@@ -60,6 +98,7 @@ describe OmfCommon::Comm::XMPP::Topic do
60
98
  end
61
99
 
62
100
  it "must react to omf status message" do
101
+ skip
63
102
  OmfCommon.stub :comm, @xmpp do
64
103
  Blather::Client.stub :new, @client do
65
104
  omf_request = OmfCommon::Message.create(:request, [:bob])
@@ -67,8 +106,12 @@ describe OmfCommon::Comm::XMPP::Topic do
67
106
  omf_status = Blather::XMPPNode.parse(omf_status_xml)
68
107
  @client.receive_data omf_status
69
108
  @topic.on_status(omf_request) do |n|
70
- n.must_equal OmfCommon::Message.parse(omf_status.items.first.payload)
71
- done!
109
+ OmfCommon::Message.parse(omf_status.items.first.payload) do |parsed_msg|
110
+ n.stub :ts, parsed_msg.ts do
111
+ n.must_equal parsed_msg
112
+ end
113
+ done!
114
+ end
72
115
  end
73
116
  end
74
117
  end
@@ -77,6 +120,7 @@ describe OmfCommon::Comm::XMPP::Topic do
77
120
  end
78
121
 
79
122
  it "must react to omf release message" do
123
+ skip
80
124
  OmfCommon.stub :comm, @xmpp do
81
125
  Blather::Client.stub :new, @client do
82
126
  omf_release = OmfCommon::Message.create(:release, nil, { res_id: '100' })
@@ -84,8 +128,12 @@ describe OmfCommon::Comm::XMPP::Topic do
84
128
  omf_released = Blather::XMPPNode.parse(omf_released_xml)
85
129
  @client.receive_data omf_released
86
130
  @topic.on_released(omf_release) do |n|
87
- n.must_equal OmfCommon::Message.parse(omf_released.items.first.payload)
88
- done!
131
+ OmfCommon::Message.parse(omf_released.items.first.payload) do |parsed_msg|
132
+ n.stub :ts, parsed_msg.ts do
133
+ n.must_equal parsed_msg
134
+ end
135
+ done!
136
+ end
89
137
  end
90
138
  end
91
139
  end
@@ -94,6 +142,7 @@ describe OmfCommon::Comm::XMPP::Topic do
94
142
  end
95
143
 
96
144
  it "must react to omf failed message" do
145
+ skip
97
146
  OmfCommon.stub :comm, @xmpp do
98
147
  Blather::Client.stub :new, @client do
99
148
  omf_create = OmfCommon::Message.create(:create, { type: 'engine' })
@@ -101,8 +150,12 @@ describe OmfCommon::Comm::XMPP::Topic do
101
150
  omf_failed = Blather::XMPPNode.parse(omf_failed_xml)
102
151
  @client.receive_data omf_failed
103
152
  @topic.on_creation_failed(omf_create) do |n|
104
- n.must_equal OmfCommon::Message.parse(omf_failed.items.first.payload)
105
- done!
153
+ OmfCommon::Message.parse(omf_failed.items.first.payload) do |parsed_msg|
154
+ n.stub :ts, parsed_msg.ts do
155
+ n.must_equal parsed_msg
156
+ end
157
+ done!
158
+ end
106
159
  end
107
160
  end
108
161
  end
@@ -1,18 +1,75 @@
1
1
  require 'test_helper'
2
+ require 'omf_common/comm/local/local_communicator'
2
3
 
3
4
  describe OmfCommon::Comm do
4
- describe 'when initialised with a pubsub implementation' do
5
- it 'must return a instance with all methods defined in corresponding module loaded' do
6
- skip
7
- @comm = OmfCommon::Comm.new(:xmpp)
8
- %w(connect disconnect create_topic delete_topic subscribe unsubscribe publish affiliations).each do |m|
9
- @comm.must_respond_to m
5
+ describe "when initialised without providing a pubsub implementation" do
6
+ before do
7
+ OmfCommon::Comm.any_instance.stubs(:on_connected)
8
+ @abstract_comm = OmfCommon::Comm.new(bob: nil)
9
+ @topic = mock
10
+ end
11
+
12
+ it "must raise no implementation error for abstract methods" do
13
+ OmfCommon::Comm.any_instance.unstub(:on_connected)
14
+ [:disconnect, :on_connected, :on_connected].each do |m|
15
+ lambda { @abstract_comm.send(m, ) }.must_raise NotImplementedError
10
16
  end
11
17
 
12
- # also existing blather DSL should work too
13
- %w(when_ready shutdown).each do |m|
14
- @comm.must_respond_to m
18
+ [:create_topic, :delete_topic].each do |m|
19
+ lambda { @abstract_comm.send(m, :bob) }.must_raise NotImplementedError
15
20
  end
16
21
  end
22
+
23
+ it "must return options" do
24
+ @abstract_comm.options.must_equal(bob: nil)
25
+ end
26
+
27
+ it "must return connection info" do
28
+ @abstract_comm.conn_info.must_equal({ proto: nil, user: nil, domain: nil })
29
+ end
30
+
31
+ it "must be able to subscribe to a topic" do
32
+ @abstract_comm.stubs(:create_topic).returns(@topic)
33
+ @topic.expects(:on_subscribed)
34
+ @abstract_comm.subscribe(:bob) { 'do nothing' }
35
+ end
36
+
37
+ it "must be able to publish message" do
38
+ @abstract_comm.stubs(:create_topic).returns(@topic)
39
+ @topic.expects(:publish)
40
+ @abstract_comm.publish(:bob, 'message')
41
+ end
42
+ end
43
+
44
+ describe 'when initialised with a pubsub implementation' do
45
+ after do
46
+ OmfCommon::Comm.reset
47
+ end
48
+
49
+ it 'must fail if you throw in rubbish options' do
50
+ lambda { OmfCommon::Comm.init(bob: nil) }.must_raise ArgumentError
51
+ lambda { OmfCommon::Comm.init(provider: {}) }.must_raise ArgumentError
52
+ lambda { OmfCommon::Comm.init(provider: { constructor: {}, require: {} }) }.must_raise TypeError
53
+ end
54
+
55
+ it 'must fail if already initialised' do
56
+ OmfCommon::Comm::Local::Communicator.any_instance.stubs(:on_connected)
57
+ OmfCommon::Message.stubs(:init)
58
+ error = lambda do
59
+ OmfCommon::Comm.init(type: :local)
60
+ OmfCommon::Comm.init(type: :local)
61
+ end.call rescue $!
62
+ error.message.must_match /Comms layer already initialised/
63
+ end
64
+
65
+ it 'must handle auth options and be able to return singleton instance' do
66
+ OmfCommon::Comm::Local::Communicator.any_instance.stubs(:on_connected)
67
+
68
+ OmfCommon::Message.stubs(:init)
69
+ OmfCommon::Auth::CertificateStore.stubs(:init)
70
+ OmfCommon::Comm.init(type: :local, auth: {})
71
+
72
+ OmfCommon::Comm.instance.must_be_kind_of OmfCommon::Comm::Local::Communicator
73
+ end
17
74
  end
18
75
  end