newque 0.0.1

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,12 @@
1
+ module Newque
2
+ class Helpers
3
+ def self.make_msgs num, from:0
4
+ (from..(from + num - 1)).to_a.map { |x| "msg#{x}"}
5
+ end
6
+
7
+ def self.bin_str
8
+ (0..127).to_a.pack('c*').gsub("\n", "")
9
+ end
10
+
11
+ end
12
+ end
@@ -0,0 +1,142 @@
1
+ require 'newque'
2
+ require 'pry'
3
+ require './spec/helpers'
4
+
5
+ module Newque
6
+ describe 'Pubsub_client' do
7
+ let(:channel) { 'example_pubsub' }
8
+
9
+ before(:each) do
10
+ host = '127.0.0.1'
11
+ timeout = 3000
12
+ @producer1 = Client.new(:http, host, 8000, timeout:timeout)
13
+ @producer2 = Client.new(:zmq, host, 8005, timeout:timeout)
14
+ @consumer1 = Pubsub_client.new host, 8006
15
+ @consumer2 = Pubsub_client.new host, 8006
16
+ end
17
+
18
+ it 'subscribes' do
19
+ thread1 = Util.wait_t
20
+ thread2 = Util.wait_t
21
+
22
+ received1 = []
23
+ received2 = []
24
+ should_receive = []
25
+ num_sent = 10
26
+ ready1 = @consumer1.subscribe { |input|
27
+ raise unless input.class == Input_request
28
+ raise unless input.action.class == Write_request
29
+ raise unless input.action.ids.size == input.messages.size
30
+ received1.concat input.messages
31
+ Util.resolve_t(thread1, '') if received1.size == (num_sent * 2)
32
+ }
33
+ ready2 = @consumer2.subscribe { |input|
34
+ raise unless input.class == Input_request
35
+ raise unless input.action.class == Write_request
36
+ raise unless input.action.ids.size == input.messages.size
37
+ received2.concat input.messages
38
+ Util.resolve_t(thread2, '') if received2.size == (num_sent * 2)
39
+ }
40
+ ready1.get
41
+ ready2.get
42
+
43
+ num_sent.times do |i|
44
+ @producer1.write(channel, false, [i.to_s]).get
45
+ @producer2.write(channel, false, [i.to_s]).get
46
+ 2.times { should_receive << i.to_s }
47
+ end
48
+
49
+ thread1.join(1)
50
+ thread2.join(1)
51
+ expect(received1.sort).to eq should_receive.sort
52
+ expect(received2.sort).to eq should_receive.sort
53
+ end
54
+
55
+ it 'catches exceptions' do
56
+ thread = Util.wait_t
57
+ ready1 = @consumer1.subscribe {
58
+ raise 'BOOM'
59
+ }
60
+ ready1.get
61
+ @consumer1.add_error_handler do |error|
62
+ Util.resolve_t(thread, error.to_s)
63
+ end
64
+ @producer1.write(channel, false, ['stuff']).get
65
+ thread.join(1)
66
+ expect(thread.value).to eq 'BOOM'
67
+ end
68
+
69
+ it 'unsubscribes and resubscribes' do
70
+ received = []
71
+ thread = Util.wait_t
72
+
73
+ # Subscribe
74
+ ready = @consumer1.subscribe do |input|
75
+ received << input.messages.first
76
+ Util.resolve_t thread, input.messages.first
77
+ end
78
+ id = ready.get
79
+
80
+ # Message 1
81
+ @producer1.write(channel, false, ['MSG1']).get
82
+ expect(thread.value).to eq 'MSG1'
83
+
84
+ # Unsubscribe
85
+ thread = Util.wait_t
86
+ @consumer1.unsubscribe id
87
+
88
+ # Message 2
89
+ @producer1.write(channel, false, ['MSG2']).get
90
+ expect(thread.join(1)).to be_nil # nothing was received
91
+
92
+ # Resubscribe
93
+ ready = @consumer1.subscribe do |input|
94
+ received << input.messages.first
95
+ Util.resolve_t thread, input.messages.first
96
+ end
97
+ ready.get
98
+
99
+ # Message 3
100
+ @producer1.write(channel, false, ['MSG3']).get
101
+ expect(thread.value).to eq 'MSG3'
102
+ expect(received).to eq ['MSG1', 'MSG3']
103
+ end
104
+
105
+ it 'disconnects' do
106
+ received = []
107
+ thread1 = Util.wait_t
108
+
109
+ # Subscribe
110
+ ready = @consumer1.subscribe do |input|
111
+ received << "FROM_1 #{input.messages.first}"
112
+ Util.resolve_t thread1, input.messages.first
113
+ end
114
+ id = ready.get
115
+
116
+ # Message 1
117
+ @producer1.write(channel, false, ['MSG1']).get
118
+ expect(thread1.value).to eq 'MSG1'
119
+
120
+ # Disconnect
121
+ thread2 = Util.wait_t
122
+ @consumer1.disconnect
123
+
124
+ # Message 2
125
+ @producer1.write(channel, false, ['MSG2']).get
126
+ expect(thread2.join(1)).to be_nil # nothing was received
127
+
128
+ # Reconnect and Resubscribe
129
+ ready = @consumer2.subscribe do |input|
130
+ received << "FROM_2 #{input.messages.first}"
131
+ Util.resolve_t thread2, input.messages.first
132
+ end
133
+ ready.get
134
+
135
+ # Message 3
136
+ @producer1.write(channel, false, ['MSG3']).get
137
+ expect(thread2.value).to eq 'MSG3'
138
+ expect(received.sort).to eq ['FROM_1 MSG1', 'FROM_1 MSG2', 'FROM_2 MSG3']
139
+ end
140
+
141
+ end
142
+ end
metadata ADDED
@@ -0,0 +1,164 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: newque
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Simon Grondin
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2017-08-12 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: beefcake
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: 1.2.0
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: 1.2.0
27
+ - !ruby/object:Gem::Dependency
28
+ name: ffi-rzmq
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: 2.0.5
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: 2.0.5
41
+ - !ruby/object:Gem::Dependency
42
+ name: faraday
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: 0.12.2
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: 0.12.2
55
+ - !ruby/object:Gem::Dependency
56
+ name: rake
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rspec
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: pry
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ description: Ruby Client library for Newque
98
+ email:
99
+ - simon.grondin@outlook.com
100
+ executables: []
101
+ extensions: []
102
+ extra_rdoc_files:
103
+ - LICENSE
104
+ - README.md
105
+ files:
106
+ - ".gitignore"
107
+ - Gemfile
108
+ - LICENSE
109
+ - README.md
110
+ - Rakefile
111
+ - conf/channels/example.json
112
+ - conf/channels/example_fifo.json
113
+ - conf/channels/example_plaintext.json
114
+ - conf/channels/example_pubsub.json
115
+ - conf/newque.json
116
+ - lib/newque.rb
117
+ - lib/newque/clients/client.rb
118
+ - lib/newque/clients/fifo_client.rb
119
+ - lib/newque/clients/pubsub_client.rb
120
+ - lib/newque/errors.rb
121
+ - lib/newque/future.rb
122
+ - lib/newque/http/http_json.rb
123
+ - lib/newque/http/http_plaintext.rb
124
+ - lib/newque/http/newque_http.rb
125
+ - lib/newque/responses.rb
126
+ - lib/newque/util.rb
127
+ - lib/newque/version.rb
128
+ - lib/newque/zmq/newque_zmq.rb
129
+ - lib/newque/zmq/protobuf.rb
130
+ - lib/newque/zmq/zmq_tools.rb
131
+ - newque.gemspec
132
+ - spec/client_spec.rb
133
+ - spec/fifo_client_spec.rb
134
+ - spec/helpers.rb
135
+ - spec/pubsub_client_spec.rb
136
+ homepage: http://github.com/newque/newque-ruby
137
+ licenses:
138
+ - MPL-2.0
139
+ metadata: {}
140
+ post_install_message:
141
+ rdoc_options: []
142
+ require_paths:
143
+ - lib
144
+ required_ruby_version: !ruby/object:Gem::Requirement
145
+ requirements:
146
+ - - ">="
147
+ - !ruby/object:Gem::Version
148
+ version: 2.0.0
149
+ required_rubygems_version: !ruby/object:Gem::Requirement
150
+ requirements:
151
+ - - ">="
152
+ - !ruby/object:Gem::Version
153
+ version: '0'
154
+ requirements: []
155
+ rubyforge_project:
156
+ rubygems_version: 2.2.2
157
+ signing_key:
158
+ specification_version: 4
159
+ summary: Ruby Client library for Newque
160
+ test_files:
161
+ - spec/client_spec.rb
162
+ - spec/fifo_client_spec.rb
163
+ - spec/helpers.rb
164
+ - spec/pubsub_client_spec.rb