mosquitto 0.2

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.
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