newque 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -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