mosquitto 0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (78) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +21 -0
  3. data/.travis.yml +29 -0
  4. data/Gemfile +6 -0
  5. data/Gemfile.lock +25 -0
  6. data/LICENSE.md +13 -0
  7. data/README.md +244 -0
  8. data/Rakefile +42 -0
  9. data/TODO.md +19 -0
  10. data/examples/pub_sub.rb +41 -0
  11. data/ext/mosquitto/client.c +2163 -0
  12. data/ext/mosquitto/client.h +145 -0
  13. data/ext/mosquitto/extconf.rb +31 -0
  14. data/ext/mosquitto/message.c +168 -0
  15. data/ext/mosquitto/message.h +16 -0
  16. data/ext/mosquitto/mosquitto_ext.c +88 -0
  17. data/ext/mosquitto/mosquitto_ext.h +35 -0
  18. data/ext/mosquitto/mosquitto_prelude.h +26 -0
  19. data/ext/mosquitto/rubinius.h +6 -0
  20. data/ext/mosquitto/ruby18.h +6 -0
  21. data/ext/mosquitto/ruby19.h +9 -0
  22. data/ext/mosquitto/ruby2.h +6 -0
  23. data/lib/mosquitto.rb +11 -0
  24. data/lib/mosquitto/client.rb +8 -0
  25. data/lib/mosquitto/logging.rb +32 -0
  26. data/lib/mosquitto/version.rb +5 -0
  27. data/mosquitto.gemspec +23 -0
  28. data/test/helper.rb +59 -0
  29. data/test/ssl/all-ca.crt +75 -0
  30. data/test/ssl/client-expired.crt +61 -0
  31. data/test/ssl/client-revoked.crt +61 -0
  32. data/test/ssl/client-revoked.csr +12 -0
  33. data/test/ssl/client-revoked.key +15 -0
  34. data/test/ssl/client.crt +61 -0
  35. data/test/ssl/client.csr +12 -0
  36. data/test/ssl/client.key +15 -0
  37. data/test/ssl/crl.pem +10 -0
  38. data/test/ssl/demoCA/crlnumber +1 -0
  39. data/test/ssl/demoCA/index.txt +1 -0
  40. data/test/ssl/demoCA/index.txt.attr +1 -0
  41. data/test/ssl/demoCA/serial +1 -0
  42. data/test/ssl/gen.sh +70 -0
  43. data/test/ssl/mosquitto.org.crt +18 -0
  44. data/test/ssl/openssl.cnf +406 -0
  45. data/test/ssl/readme.txt +2 -0
  46. data/test/ssl/rootCA/crlnumber +1 -0
  47. data/test/ssl/rootCA/index.txt +2 -0
  48. data/test/ssl/rootCA/index.txt.attr +1 -0
  49. data/test/ssl/rootCA/serial +1 -0
  50. data/test/ssl/server-expired.crt +0 -0
  51. data/test/ssl/server.crt +60 -0
  52. data/test/ssl/server.csr +12 -0
  53. data/test/ssl/server.key +15 -0
  54. data/test/ssl/signingCA/crlnumber +1 -0
  55. data/test/ssl/signingCA/index.txt +4 -0
  56. data/test/ssl/signingCA/index.txt.attr +1 -0
  57. data/test/ssl/signingCA/serial +1 -0
  58. data/test/ssl/test-alt-ca.crt +58 -0
  59. data/test/ssl/test-alt-ca.key +15 -0
  60. data/test/ssl/test-bad-root-ca.crt +17 -0
  61. data/test/ssl/test-bad-root-ca.key +15 -0
  62. data/test/ssl/test-ca.srl +1 -0
  63. data/test/ssl/test-fake-root-ca.crt +17 -0
  64. data/test/ssl/test-fake-root-ca.key +15 -0
  65. data/test/ssl/test-root-ca.crt +17 -0
  66. data/test/ssl/test-root-ca.key +15 -0
  67. data/test/ssl/test-signing-ca.crt +58 -0
  68. data/test/ssl/test-signing-ca.key +15 -0
  69. data/test/test_callbacks.rb +93 -0
  70. data/test/test_client.rb +141 -0
  71. data/test/test_custom_logger.rb +30 -0
  72. data/test/test_integration.rb +572 -0
  73. data/test/test_loops.rb +56 -0
  74. data/test/test_mosquitto.rb +28 -0
  75. data/test/test_pub_sub.rb +51 -0
  76. data/test/test_threads.rb +69 -0
  77. data/test/test_tls.rb +67 -0
  78. metadata +203 -0
@@ -0,0 +1,56 @@
1
+ # encoding: utf-8
2
+
3
+ require File.join(File.dirname(__FILE__), 'helper')
4
+
5
+ class TestLoops < MosquittoTestCase
6
+ def test_socket
7
+ client = Mosquitto::Client.new
8
+ assert_equal(-1, client.socket)
9
+ assert client.socket == -1
10
+ assert client.connect(TEST_HOST, TEST_PORT, 10)
11
+ assert_instance_of Fixnum, client.socket
12
+ client.wait_readable
13
+ assert client.socket != -1
14
+ end
15
+
16
+ def test_loop
17
+ client = Mosquitto::Client.new
18
+ assert_raises Mosquitto::Error do
19
+ client.loop(10,10)
20
+ end
21
+ assert client.connect(TEST_HOST, TEST_PORT, 10)
22
+ assert client.publish(nil, "loop", "test", Mosquitto::AT_MOST_ONCE, true)
23
+ assert client.loop(10,10)
24
+ end
25
+
26
+ def test_loop_forever
27
+ connected = false
28
+ Thread.new do
29
+ client = Mosquitto::Client.new
30
+ client.on_connect do |rc|
31
+ connected = true
32
+ Thread.current.kill
33
+ end
34
+ assert_raises TypeError do
35
+ client.loop_forever(:invalid,1)
36
+ end
37
+ assert client.connect(TEST_HOST, 1883, 10)
38
+ assert client.loop_forever(-1,1)
39
+ end.join(1)
40
+ assert connected
41
+ end
42
+
43
+ def test_loop_stop_start
44
+ client = Mosquitto::Client.new
45
+ assert client.connect(TEST_HOST, TEST_PORT, 10)
46
+ assert client.publish(nil, "loop_stop_start", "test", Mosquitto::AT_MOST_ONCE, true)
47
+ assert client.loop_start
48
+ assert client.loop_stop(true)
49
+ end
50
+
51
+ def test_want_write_p
52
+ client = Mosquitto::Client.new
53
+ assert client.connect(TEST_HOST, TEST_PORT, 10)
54
+ assert !client.want_write?
55
+ end
56
+ end
@@ -0,0 +1,28 @@
1
+ # encoding: utf-8
2
+
3
+ require File.join(File.dirname(__FILE__), 'helper')
4
+
5
+ class TestMosquitto < MosquittoTestCase
6
+ def test_version
7
+ assert_equal 1002003, Mosquitto.version
8
+ end
9
+
10
+ def test_constants
11
+ assert_equal 0, Mosquitto::AT_MOST_ONCE
12
+ assert_equal 1, Mosquitto::AT_LEAST_ONCE
13
+ assert_equal 2, Mosquitto::EXACTLY_ONCE
14
+
15
+ assert_equal 0, Mosquitto::SSL_VERIFY_NONE
16
+ assert_equal 1, Mosquitto::SSL_VERIFY_PEER
17
+
18
+ assert_equal 0, Mosquitto::LOG_NONE
19
+ assert_equal 1, Mosquitto::LOG_INFO
20
+ assert_equal 2, Mosquitto::LOG_NOTICE
21
+ assert_equal 4, Mosquitto::LOG_WARNING
22
+ assert_equal 8, Mosquitto::LOG_ERR
23
+ assert_equal 16, Mosquitto::LOG_DEBUG
24
+ assert_equal 32, Mosquitto::LOG_SUBSCRIBE
25
+ assert_equal 64, Mosquitto::LOG_UNSUBSCRIBE
26
+ assert_equal 65535, Mosquitto::LOG_ALL
27
+ end
28
+ end
@@ -0,0 +1,51 @@
1
+ # encoding: utf-8
2
+
3
+ require File.join(File.dirname(__FILE__), 'helper')
4
+
5
+ class TestPubSub < MosquittoTestCase
6
+ def test_publish
7
+ client = Mosquitto::Client.new
8
+ assert_raises Mosquitto::Error do
9
+ client.publish(nil, "publish", "test", Mosquitto::AT_MOST_ONCE, true)
10
+ end
11
+ assert client.connect(TEST_HOST, TEST_PORT, 10)
12
+ assert_raises TypeError do
13
+ client.publish(nil, :invalid, "test", Mosquitto::AT_MOST_ONCE, true)
14
+ end
15
+ assert client.publish(nil, "publish", "test", Mosquitto::AT_MOST_ONCE, true)
16
+ assert client.publish(3, "publish", "test", Mosquitto::AT_MOST_ONCE, true)
17
+ end
18
+
19
+ def test_subscribe
20
+ client = Mosquitto::Client.new
21
+ assert_raises Mosquitto::Error do
22
+ client.subscribe(nil, "subscribe", Mosquitto::AT_MOST_ONCE)
23
+ end
24
+ assert client.connect(TEST_HOST, TEST_PORT, 10)
25
+ assert_raises TypeError do
26
+ client.subscribe(nil, :topic, Mosquitto::AT_MOST_ONCE)
27
+ end
28
+ assert client.subscribe(nil, "subscribe", Mosquitto::AT_MOST_ONCE)
29
+ assert client.subscribe(3, "subscribe", Mosquitto::AT_MOST_ONCE)
30
+ end
31
+
32
+ def test_unsubscribe
33
+ client = Mosquitto::Client.new
34
+ assert_raises Mosquitto::Error do
35
+ client.unsubscribe(nil, "unsubscribe")
36
+ end
37
+ assert client.connect(TEST_HOST, TEST_PORT, 10)
38
+ assert_raises TypeError do
39
+ client.unsubscribe(nil, :topic)
40
+ end
41
+ assert client.unsubscribe(nil, "unsubscribe")
42
+ assert client.unsubscribe(3, "unsubscribe")
43
+ end
44
+
45
+ def test_subscribe_unsubscribe
46
+ client = Mosquitto::Client.new
47
+ assert client.connect(TEST_HOST, TEST_PORT, 10)
48
+ assert client.subscribe(nil, "subscribe_unsubscribe", Mosquitto::AT_MOST_ONCE)
49
+ assert client.unsubscribe(nil, "subscribe_unsubscribe")
50
+ end
51
+ end
@@ -0,0 +1,69 @@
1
+ # encoding: utf-8
2
+
3
+ require File.join(File.dirname(__FILE__), 'helper')
4
+
5
+ class TestThreads < MosquittoTestCase
6
+ def test_init
7
+ threads = []
8
+ threads << Thread.new do
9
+ publisher = Mosquitto::Client.new
10
+ publisher.loop_start
11
+ assert publisher.connect(TEST_HOST, TEST_PORT, 10)
12
+ publisher.wait_readable
13
+ publisher.loop_stop(true)
14
+ end
15
+
16
+ threads << Thread.new do
17
+ subscriber = Mosquitto::Client.new
18
+ subscriber.loop_start
19
+ assert subscriber.connect(TEST_HOST, TEST_PORT, 10)
20
+ subscriber.wait_readable
21
+ subscriber.loop_stop(true)
22
+ end
23
+ threads.each(&:join)
24
+ end
25
+
26
+ def test_pub_sub
27
+ threads = []
28
+ published = 0
29
+ messages = []
30
+ publisher, subscriber = nil
31
+ threads << Thread.new do
32
+ subscriber = Mosquitto::Client.new
33
+ subscriber.loop_start
34
+ subscriber.logger = Logger.new(STDOUT)
35
+ subscriber.on_message do |msg|
36
+ messages << msg.to_s
37
+ end
38
+ subscriber.on_connect do |rc|
39
+ subscriber.subscribe(nil, "test_pub_sub", Mosquitto::AT_MOST_ONCE)
40
+ end
41
+ assert subscriber.connect(TEST_HOST, TEST_PORT, 10)
42
+ subscriber.wait_readable
43
+ subscriber.loop_stop(true)
44
+ end
45
+
46
+ threads << Thread.new do
47
+ publisher = Mosquitto::Client.new
48
+ publisher.loop_start
49
+ publisher.logger = Logger.new(STDOUT)
50
+ publisher.on_publish do |mid|
51
+ published += 1
52
+ end
53
+ publisher.on_connect do |rc|
54
+ ('a'..'z').to_a.each do |message|
55
+ publisher.publish(nil, "test_pub_sub", message, Mosquitto::AT_MOST_ONCE, true)
56
+ end
57
+ end
58
+ assert publisher.connect(TEST_HOST, TEST_PORT, 10)
59
+ publisher.wait_readable
60
+ assert_equal published, 26
61
+ publisher.loop_stop(true)
62
+ end
63
+
64
+ threads.each{|t| t.join(3) }
65
+ messages.uniq!
66
+ messages.sort!
67
+ assert_equal ('a'..'z').to_a, messages
68
+ end
69
+ end
data/test/test_tls.rb ADDED
@@ -0,0 +1,67 @@
1
+ # encoding: utf-8
2
+
3
+ require File.join(File.dirname(__FILE__), 'helper')
4
+
5
+ class TestTls < MosquittoTestCase
6
+ def test_tls_set
7
+ client = Mosquitto::Client.new
8
+ assert_raises Mosquitto::Error do
9
+ client.tls_set(nil, nil, ssl_object('client.crt'), ssl_object('client.key'), nil)
10
+ end
11
+ assert_raises Mosquitto::Error do
12
+ client.tls_set(ssl_object('all-ca.crt'), ssl_path, ssl_object('client.crt'), nil, nil)
13
+ end
14
+ assert_raises Mosquitto::Error do
15
+ client.tls_set(ssl_object('all-ca.crt'), ssl_path, nil, ssl_object('client.key'), nil)
16
+ end
17
+ assert_raises TypeError do
18
+ client.tls_set(ssl_object('all-ca.crt'), ssl_path, ssl_object('client.crt'), :invalid, nil)
19
+ end
20
+ client.tls_set(ssl_object('all-ca.crt'), ssl_path, ssl_object('client.crt'), ssl_object('client.key'), nil)
21
+ end
22
+
23
+ def test_connect
24
+ connected = false
25
+ client = Mosquitto::Client.new
26
+ client.logger = Logger.new(STDOUT)
27
+ assert client.loop_start
28
+ client.on_connect do |rc|
29
+ connected = true
30
+ end
31
+ assert client.tls_opts_set(Mosquitto::SSL_VERIFY_PEER, "tlsv1.2", nil)
32
+ client.tls_set(ssl_object('mosquitto.org.crt'), nil, nil, nil, nil)
33
+ assert client.connect(TLS_TEST_HOST, TLS_TEST_PORT, 10)
34
+ client.wait_readable && sleep(3)
35
+ assert connected
36
+ ensure
37
+ client.loop_stop(true)
38
+ end
39
+
40
+ def test_insecure
41
+ client = Mosquitto::Client.new
42
+ assert_raises TypeError do
43
+ client.tls_insecure = nil
44
+ end
45
+ assert (client.tls_insecure = true)
46
+ end
47
+
48
+ def test_tls_opts_set
49
+ client = Mosquitto::Client.new
50
+ assert_raises Mosquitto::Error do
51
+ client.tls_opts_set(3, nil, nil)
52
+ end
53
+ assert_raises TypeError do
54
+ client.tls_opts_set(Mosquitto::SSL_VERIFY_PEER, :invalid, nil)
55
+ end
56
+ assert client.tls_opts_set(Mosquitto::SSL_VERIFY_PEER, "tlsv1.2", nil)
57
+ assert client.tls_opts_set(Mosquitto::SSL_VERIFY_PEER, "tlsv1.2", nil)
58
+ end
59
+
60
+ def test_tls_psk_set
61
+ client = Mosquitto::Client.new
62
+ assert_raises TypeError do
63
+ client.tls_psk_set("deadbeef", :invalid, nil)
64
+ end
65
+ assert client.tls_psk_set("deadbeef", "psk-id", nil)
66
+ end
67
+ end
metadata ADDED
@@ -0,0 +1,203 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: mosquitto
3
+ version: !ruby/object:Gem::Version
4
+ version: '0.2'
5
+ platform: ruby
6
+ authors:
7
+ - Lourens Naudé
8
+ - Bear Metal OÜ
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2014-03-20 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: rake-compiler
16
+ requirement: !ruby/object:Gem::Requirement
17
+ requirements:
18
+ - - ~>
19
+ - !ruby/object:Gem::Version
20
+ version: 0.9.2
21
+ type: :development
22
+ prerelease: false
23
+ version_requirements: !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - ~>
26
+ - !ruby/object:Gem::Version
27
+ version: 0.9.2
28
+ - !ruby/object:Gem::Dependency
29
+ name: yard
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
+ description: Ruby binding against libmosquitto (http://mosquitto.org/) - a high performance
43
+ MQTT protocol (http://mqtt.org) client
44
+ email:
45
+ - lourens@methodmissing.com
46
+ - info@bearmetal.eu
47
+ executables: []
48
+ extensions:
49
+ - ext/mosquitto/extconf.rb
50
+ extra_rdoc_files: []
51
+ files:
52
+ - .gitignore
53
+ - .travis.yml
54
+ - Gemfile
55
+ - Gemfile.lock
56
+ - LICENSE.md
57
+ - README.md
58
+ - Rakefile
59
+ - TODO.md
60
+ - examples/pub_sub.rb
61
+ - ext/mosquitto/client.c
62
+ - ext/mosquitto/client.h
63
+ - ext/mosquitto/extconf.rb
64
+ - ext/mosquitto/message.c
65
+ - ext/mosquitto/message.h
66
+ - ext/mosquitto/mosquitto_ext.c
67
+ - ext/mosquitto/mosquitto_ext.h
68
+ - ext/mosquitto/mosquitto_prelude.h
69
+ - ext/mosquitto/rubinius.h
70
+ - ext/mosquitto/ruby18.h
71
+ - ext/mosquitto/ruby19.h
72
+ - ext/mosquitto/ruby2.h
73
+ - lib/mosquitto.rb
74
+ - lib/mosquitto/client.rb
75
+ - lib/mosquitto/logging.rb
76
+ - lib/mosquitto/version.rb
77
+ - mosquitto.gemspec
78
+ - test/helper.rb
79
+ - test/ssl/all-ca.crt
80
+ - test/ssl/client-expired.crt
81
+ - test/ssl/client-revoked.crt
82
+ - test/ssl/client-revoked.csr
83
+ - test/ssl/client-revoked.key
84
+ - test/ssl/client.crt
85
+ - test/ssl/client.csr
86
+ - test/ssl/client.key
87
+ - test/ssl/crl.pem
88
+ - test/ssl/demoCA/crlnumber
89
+ - test/ssl/demoCA/index.txt
90
+ - test/ssl/demoCA/index.txt.attr
91
+ - test/ssl/demoCA/serial
92
+ - test/ssl/gen.sh
93
+ - test/ssl/mosquitto.org.crt
94
+ - test/ssl/openssl.cnf
95
+ - test/ssl/readme.txt
96
+ - test/ssl/rootCA/crlnumber
97
+ - test/ssl/rootCA/index.txt
98
+ - test/ssl/rootCA/index.txt.attr
99
+ - test/ssl/rootCA/serial
100
+ - test/ssl/server-expired.crt
101
+ - test/ssl/server.crt
102
+ - test/ssl/server.csr
103
+ - test/ssl/server.key
104
+ - test/ssl/signingCA/crlnumber
105
+ - test/ssl/signingCA/index.txt
106
+ - test/ssl/signingCA/index.txt.attr
107
+ - test/ssl/signingCA/serial
108
+ - test/ssl/test-alt-ca.crt
109
+ - test/ssl/test-alt-ca.key
110
+ - test/ssl/test-bad-root-ca.crt
111
+ - test/ssl/test-bad-root-ca.key
112
+ - test/ssl/test-ca.srl
113
+ - test/ssl/test-fake-root-ca.crt
114
+ - test/ssl/test-fake-root-ca.key
115
+ - test/ssl/test-root-ca.crt
116
+ - test/ssl/test-root-ca.key
117
+ - test/ssl/test-signing-ca.crt
118
+ - test/ssl/test-signing-ca.key
119
+ - test/test_callbacks.rb
120
+ - test/test_client.rb
121
+ - test/test_custom_logger.rb
122
+ - test/test_integration.rb
123
+ - test/test_loops.rb
124
+ - test/test_mosquitto.rb
125
+ - test/test_pub_sub.rb
126
+ - test/test_threads.rb
127
+ - test/test_tls.rb
128
+ homepage: http://github.com/bear-metal/mosquitto
129
+ licenses: []
130
+ metadata: {}
131
+ post_install_message:
132
+ rdoc_options:
133
+ - --charset=UTF-8
134
+ require_paths:
135
+ - lib
136
+ required_ruby_version: !ruby/object:Gem::Requirement
137
+ requirements:
138
+ - - '>='
139
+ - !ruby/object:Gem::Version
140
+ version: '0'
141
+ required_rubygems_version: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - '>='
144
+ - !ruby/object:Gem::Version
145
+ version: '0'
146
+ requirements: []
147
+ rubyforge_project:
148
+ rubygems_version: 2.0.14
149
+ signing_key:
150
+ specification_version: 4
151
+ summary: mosquitto - a high perf MQTT 3.1 client
152
+ test_files:
153
+ - test/helper.rb
154
+ - test/ssl/all-ca.crt
155
+ - test/ssl/client-expired.crt
156
+ - test/ssl/client-revoked.crt
157
+ - test/ssl/client-revoked.csr
158
+ - test/ssl/client-revoked.key
159
+ - test/ssl/client.crt
160
+ - test/ssl/client.csr
161
+ - test/ssl/client.key
162
+ - test/ssl/crl.pem
163
+ - test/ssl/demoCA/crlnumber
164
+ - test/ssl/demoCA/index.txt
165
+ - test/ssl/demoCA/index.txt.attr
166
+ - test/ssl/demoCA/serial
167
+ - test/ssl/gen.sh
168
+ - test/ssl/mosquitto.org.crt
169
+ - test/ssl/openssl.cnf
170
+ - test/ssl/readme.txt
171
+ - test/ssl/rootCA/crlnumber
172
+ - test/ssl/rootCA/index.txt
173
+ - test/ssl/rootCA/index.txt.attr
174
+ - test/ssl/rootCA/serial
175
+ - test/ssl/server-expired.crt
176
+ - test/ssl/server.crt
177
+ - test/ssl/server.csr
178
+ - test/ssl/server.key
179
+ - test/ssl/signingCA/crlnumber
180
+ - test/ssl/signingCA/index.txt
181
+ - test/ssl/signingCA/index.txt.attr
182
+ - test/ssl/signingCA/serial
183
+ - test/ssl/test-alt-ca.crt
184
+ - test/ssl/test-alt-ca.key
185
+ - test/ssl/test-bad-root-ca.crt
186
+ - test/ssl/test-bad-root-ca.key
187
+ - test/ssl/test-ca.srl
188
+ - test/ssl/test-fake-root-ca.crt
189
+ - test/ssl/test-fake-root-ca.key
190
+ - test/ssl/test-root-ca.crt
191
+ - test/ssl/test-root-ca.key
192
+ - test/ssl/test-signing-ca.crt
193
+ - test/ssl/test-signing-ca.key
194
+ - test/test_callbacks.rb
195
+ - test/test_client.rb
196
+ - test/test_custom_logger.rb
197
+ - test/test_integration.rb
198
+ - test/test_loops.rb
199
+ - test/test_mosquitto.rb
200
+ - test/test_pub_sub.rb
201
+ - test/test_threads.rb
202
+ - test/test_tls.rb
203
+ has_rdoc: true