mimi-messaging 0.1.7 → 0.1.8

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA256:
3
- metadata.gz: cfa2d2cc7cda8ea79f956fd6325a43f873948cf88b9979516f5b6a72b3e3f364
4
- data.tar.gz: c52eea14384c0d239fdda08571abf6086dd9059d8a81e8c6b688a9bf3cce88b6
2
+ SHA1:
3
+ metadata.gz: 571b0eb49b07f329f5c1564a600eb56b833b94d7
4
+ data.tar.gz: 52e5a08ec30524364c9ed211f8093e23d5541e38
5
5
  SHA512:
6
- metadata.gz: 70c5318b5c1b4859715e778246a42571c4a3d97895719b688093189eac1a57b40814494a93f4b24a7e1663b39e4892fd53098e45ca9f9972079fcbf02c06faae
7
- data.tar.gz: ca52430fd386ee9cd88c94c0acd3c3336f0323392ed44506bb5ac89d566d6093c8c269ad4fef356dfaaa2ee77fdd16e939d22fb6ca25546a5455a01eea3dde27
6
+ metadata.gz: 131f811a3bdf75e7c59ba1aeed43a04a7fbf77eb74a45615b89007761ffa8ef38fe4454146d97b96a9a0be67c40c0de45be1d7df9c3b7a504b168cf7ab63d63b
7
+ data.tar.gz: 00f4f9f5caf0fd17e85ef317ff93a1f0d8daf945abffc9238fa16ecda1d2e9965a773bc768c4edf06823f5922aa19e61937b955e9fe2b041556e69a531e4bc90
@@ -0,0 +1,12 @@
1
+ #
2
+ # Replaces real Connection and Channel with MockConnection and MockChannel
3
+ # that stubs connections to RabbitMQ.
4
+ #
5
+ # Replaces RequestProcessor with MockRequestProcessor
6
+ #
7
+
8
+ require_relative 'mock/connection'
9
+ require_relative 'mock/request_processor'
10
+
11
+ Mimi::Messaging.send :remove_const, :Connection
12
+ Mimi::Messaging::Connection = Mimi::Messaging::MockConnection
@@ -0,0 +1,153 @@
1
+ require 'bunny'
2
+
3
+ module Mimi
4
+ module Messaging
5
+ class MockConnection
6
+ attr_reader :queue_prefix
7
+
8
+ # Creates a Connection with given connection params
9
+ #
10
+ # @param params [Hash] Connection params as accepted by Bunny
11
+ # @param params[:queue_prefix] [String] (optional) Use this connection for all communication
12
+ # related to queues, having names starting with given
13
+ # prefix
14
+ #
15
+ def initialize(params = {})
16
+ @queue_prefix = params[:queue_prefix]
17
+ @channel_pool = {}
18
+ bunny_params = {
19
+ host: params[:mq_host],
20
+ port: params[:mq_port],
21
+ username: params[:mq_username],
22
+ password: params[:mq_password],
23
+ vhost: params[:mq_vhost]
24
+ }
25
+ @connection = { mock_connection: bunny_params }
26
+ end
27
+
28
+ # Starts the connection, opening actual connection to RabbitMQ
29
+ #
30
+ def start
31
+ @started = true
32
+ end
33
+
34
+ # Stops the connection
35
+ #
36
+ def stop
37
+ @channel_pool = {}
38
+ @started = false
39
+ end
40
+
41
+ def started?
42
+ @started
43
+ end
44
+
45
+ def channel
46
+ raise ConnectionError unless started?
47
+ @channel_pool[Thread.current.object_id] ||= create_channel
48
+ end
49
+
50
+ def create_channel(opts = {})
51
+ MockChannel.new(@connection, opts)
52
+ end
53
+
54
+ def reply_queue
55
+ raise ConnectionError unless started?
56
+ channel.reply_queue
57
+ end
58
+
59
+ def post(queue_name, raw_message, params = {})
60
+ channel.post(queue_name, raw_message, params)
61
+ end
62
+
63
+ def get(queue_name, raw_message, params = {})
64
+ channel.get(queue_name, raw_message, params)
65
+ end
66
+
67
+ def broadcast(queue_name, raw_message, params = {})
68
+ channel.broadcast(queue_name, raw_message, params)
69
+ end
70
+
71
+ class MockQueue
72
+ def initialize(*)
73
+ end
74
+ end
75
+
76
+ class MockChannel
77
+ attr_reader :options, :connection
78
+
79
+ DEFAULT_OPTIONS = {
80
+ concurrency: 1
81
+ }
82
+ DEFAULT_GET_TIMEOUT = 60 # seconds
83
+
84
+ def initialize(connection, opts = {})
85
+ @connection = connection
86
+ @options = DEFAULT_OPTIONS.merge(opts)
87
+ @channel = { mock_channel: @connection, opts: options[:concurrency] }
88
+ @mutex = Mutex.new
89
+ end
90
+
91
+ def create_queue(name, opts = {})
92
+ MockQueue.new(name, opts)
93
+ end
94
+
95
+ def reply_queue
96
+ @reply_queue ||= create_queue('', exclusive: true)
97
+ end
98
+
99
+ def ack(tag)
100
+ raise "Not implemented"
101
+ end
102
+
103
+ def fanout(name)
104
+ raise "Not implemented"
105
+ end
106
+
107
+ def active?
108
+ true
109
+ end
110
+
111
+ # Sends a raw RabbitMQ message to a given direct exchange
112
+ #
113
+ # @param queue_name [String] Queue name to send the message to
114
+ # @param raw_message [String]
115
+ # @param params [Hash] Message params (metadata)
116
+ #
117
+ def post(queue_name, raw_message, params = {})
118
+ true
119
+ end
120
+
121
+ # Sends a raw RabbitMQ message to a given direct exchange and listens for response
122
+ #
123
+ # @param queue_name [String] Queue name to send the message to
124
+ # @param raw_message [String]
125
+ # @param params [Hash] Message params (metadata)
126
+ #
127
+ # @param params[:timeout] [Integer] (optional) Timeout in seconds
128
+ #
129
+ # @return [nil,Array]
130
+ #
131
+ def get(queue_name, raw_message, params = {})
132
+ nil
133
+ end
134
+
135
+ # Sends a raw RabbitMQ message to a given fanout exchange
136
+ #
137
+ # @param fanout_name [String] Fanout exchange name to send the message to
138
+ # @param raw_message [String]
139
+ # @param params [Hash] Message params (metadata)
140
+ #
141
+ def broadcast(fanout_name, raw_message, params = {})
142
+ true
143
+ end
144
+
145
+ private
146
+
147
+ def publish(exchange, raw_message, params = {})
148
+ true
149
+ end
150
+ end # class Channel
151
+ end # class Connection
152
+ end # module Messaging
153
+ end # module Mimi
@@ -0,0 +1,92 @@
1
+ module Mimi
2
+ module Messaging
3
+ class RequestProcessor
4
+ attr_reader :result
5
+
6
+ def self.started?
7
+ !@consumer.nil?
8
+ end
9
+
10
+ # Mock start
11
+ #
12
+ def self.start
13
+ return if abstract?
14
+ raise "#{name} already started" if started?
15
+ logger.debug "#{self} starting to serve '#{resource_name}' (#{exposed_methods})"
16
+ @queue = construct_queue
17
+ @consumer_mutex = Mutex.new
18
+ @consumer_mutex.synchronize do
19
+ @consumer = true
20
+ end
21
+ # consumer created, mutex released
22
+ end
23
+
24
+ # Mock stop
25
+ #
26
+ def self.stop
27
+ return if abstract?
28
+ raise "#{name} already stopped" unless started?
29
+ @consumer_mutex.synchronize do
30
+ @consumer = nil
31
+ end
32
+ @consumer = nil
33
+ @queue = nil
34
+ @channel = nil
35
+ @connection = nil
36
+ end
37
+
38
+ # MockRequestProcessor helper GET methods
39
+ #
40
+ # @param method_name [Symbol]
41
+ # @param message [Hash]
42
+ #
43
+ # @return [Mimi::Messaging::Message]
44
+ #
45
+ def self.get(method_name, message)
46
+ metadata = Mimi::Messaging::Message.new(
47
+ correlation_id: 1,
48
+ reply_to: 'mock_client',
49
+ headers: {
50
+ 'method_name' => method_name.to_s,
51
+ 'c' => 'mock-context'
52
+ }
53
+ )
54
+ d = Mimi::Messaging::Message.new()
55
+ raw_message = Mimi::Messaging::Message.new(message).to_msgpack
56
+ request_processor = new(d, metadata, raw_message)
57
+ request_processor.result
58
+ end
59
+
60
+ # MockRequestProcessor helper POST method
61
+ #
62
+ # @param method_name [Symbol]
63
+ # @param message [Hash]
64
+ #
65
+ # @return [Mimi::Messaging::Message]
66
+ #
67
+ def self.post(method_name, message)
68
+ metadata = Mimi::Messaging::Message.new(
69
+ headers: {
70
+ 'method_name' => method_name.to_s,
71
+ 'c' => 'context-id'
72
+ }
73
+ )
74
+ d = Mimi::Messaging::Message.new()
75
+ raw_message = Mimi::Messaging::Message.new(message)
76
+ request_processor = new(d, metadata, raw_message)
77
+ nil
78
+ end
79
+
80
+ # MockRequestProcessor helper BROADCAST method
81
+ #
82
+ # @param method_name [Symbol]
83
+ # @param message [Hash]
84
+ #
85
+ # @return [Mimi::Messaging::Message]
86
+ #
87
+ def self.broadcast(method_name, message)
88
+ post(method_name, message)
89
+ end
90
+ end # class RequestProcessor
91
+ end # module Messaging
92
+ end # module Mimi
@@ -1,5 +1,5 @@
1
1
  module Mimi
2
2
  module Messaging
3
- VERSION = '0.1.7'.freeze
3
+ VERSION = '0.1.8'.freeze
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mimi-messaging
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.7
4
+ version: 0.1.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alex Kukushkin
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-04-24 00:00:00.000000000 Z
11
+ date: 2018-05-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bunny
@@ -150,6 +150,9 @@ files:
150
150
  - lib/mimi/messaging/errors.rb
151
151
  - lib/mimi/messaging/listener.rb
152
152
  - lib/mimi/messaging/message.rb
153
+ - lib/mimi/messaging/mock.rb
154
+ - lib/mimi/messaging/mock/connection.rb
155
+ - lib/mimi/messaging/mock/request_processor.rb
153
156
  - lib/mimi/messaging/model.rb
154
157
  - lib/mimi/messaging/model_provider.rb
155
158
  - lib/mimi/messaging/msgpack/msgpack_ext.rb
@@ -185,7 +188,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
185
188
  version: '0'
186
189
  requirements: []
187
190
  rubyforge_project:
188
- rubygems_version: 2.7.6
191
+ rubygems_version: 2.6.14.1
189
192
  signing_key:
190
193
  specification_version: 4
191
194
  summary: Communications via RabbitMQ for mimi