propono 1.7.0 → 2.0.0.rc1
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.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/.travis.yml +2 -9
- data/CHANGELOG.md +9 -0
- data/Gemfile +0 -2
- data/README.md +35 -91
- data/lib/propono.rb +4 -144
- data/lib/propono/components/aws_client.rb +78 -0
- data/lib/propono/components/aws_config.rb +4 -9
- data/lib/propono/components/client.rb +93 -0
- data/lib/propono/components/queue.rb +4 -6
- data/lib/propono/components/queue_subscription.rb +32 -22
- data/lib/propono/components/sqs_message.rb +3 -6
- data/lib/propono/components/topic.rb +6 -5
- data/lib/propono/configuration.rb +0 -2
- data/lib/propono/services/publisher.rb +21 -44
- data/lib/propono/services/queue_listener.rb +54 -57
- data/lib/propono/version.rb +1 -1
- data/propono.gemspec +3 -2
- data/test/components/aws_config_test.rb +4 -4
- data/test/components/client_test.rb +68 -0
- data/test/components/queue_subscription_test.rb +68 -70
- data/test/components/queue_test.rb +6 -3
- data/test/components/topic_test.rb +4 -2
- data/test/configuration_test.rb +27 -55
- data/test/integration/integration_test.rb +4 -7
- data/test/integration/slow_queue_test.rb +11 -8
- data/test/integration/sns_to_sqs_test.rb +17 -17
- data/test/services/publisher_test.rb +59 -156
- data/test/services/queue_listener_test.rb +96 -103
- data/test/test_helper.rb +21 -48
- metadata +26 -39
- data/lib/propono/components/post_subscription.rb +0 -19
- data/lib/propono/components/sns.rb +0 -11
- data/lib/propono/components/sqs.rb +0 -12
- data/lib/propono/services/queue_creator.rb +0 -29
- data/lib/propono/services/subscriber.rb +0 -12
- data/lib/propono/services/tcp_listener.rb +0 -48
- data/lib/propono/services/topic_creator.rb +0 -23
- data/lib/propono/services/udp_listener.rb +0 -52
- data/test/components/post_subscription_test.rb +0 -29
- data/test/components/sns_test.rb +0 -25
- data/test/components/sqs_test.rb +0 -26
- data/test/integration/tcp_to_sqs_test.rb +0 -53
- data/test/integration/udp_proxy_test.rb +0 -50
- data/test/integration/udp_to_sqs_test.rb +0 -53
- data/test/propono_test.rb +0 -83
- data/test/services/queue_creator_test.rb +0 -61
- data/test/services/subscriber_test.rb +0 -21
- data/test/services/tcp_listener_test.rb +0 -76
- data/test/services/topic_creator_test.rb +0 -40
- data/test/services/udp_listener_test.rb +0 -73
data/test/propono_test.rb
DELETED
@@ -1,83 +0,0 @@
|
|
1
|
-
require File.expand_path('../test_helper', __FILE__)
|
2
|
-
|
3
|
-
module Propono
|
4
|
-
class ProponoTest < Minitest::Test
|
5
|
-
|
6
|
-
def test_publish_calls_publisher_publish
|
7
|
-
topic, message = "Foo", "Bar"
|
8
|
-
Publisher.expects(:publish).with(topic, message, {})
|
9
|
-
Propono.publish(topic, message)
|
10
|
-
end
|
11
|
-
|
12
|
-
def test_publish_sets_suffix_publish
|
13
|
-
Propono.config.queue_suffix = "-bar"
|
14
|
-
topic = "foo"
|
15
|
-
Publisher.expects(:publish).with("foo-bar", '', {})
|
16
|
-
Propono.publish(topic, "")
|
17
|
-
ensure
|
18
|
-
Propono.config.queue_suffix = ""
|
19
|
-
end
|
20
|
-
|
21
|
-
def test_subscribe_by_queue_calls_subscribe
|
22
|
-
topic = 'foobar'
|
23
|
-
Subscriber.expects(:subscribe_by_queue).with(topic)
|
24
|
-
Propono.subscribe_by_queue(topic)
|
25
|
-
end
|
26
|
-
|
27
|
-
def test_subscribe_by_post_calls_subscribe
|
28
|
-
topic, endpoint = 'foo', 'bar'
|
29
|
-
Subscriber.expects(:subscribe_by_post).with(topic, endpoint)
|
30
|
-
Propono.subscribe_by_post(topic, endpoint)
|
31
|
-
end
|
32
|
-
|
33
|
-
def test_listen_to_queue_calls_queue_listener
|
34
|
-
topic = 'foobar'
|
35
|
-
QueueListener.expects(:listen).with(topic)
|
36
|
-
Propono.listen_to_queue(topic)
|
37
|
-
end
|
38
|
-
|
39
|
-
def test_drain_queue_calls_queue_listener
|
40
|
-
topic = 'foobar'
|
41
|
-
QueueListener.expects(:drain).with(topic)
|
42
|
-
Propono.drain_queue(topic)
|
43
|
-
end
|
44
|
-
|
45
|
-
def test_listen_to_udp_calls_udp_listener
|
46
|
-
UdpListener.expects(:listen).with()
|
47
|
-
Propono.listen_to_udp()
|
48
|
-
end
|
49
|
-
|
50
|
-
def test_listen_to_tcp_calls_tcp_listener
|
51
|
-
TcpListener.expects(:listen).with()
|
52
|
-
Propono.listen_to_tcp()
|
53
|
-
end
|
54
|
-
|
55
|
-
def test_proxy_udp_calls_listen
|
56
|
-
UdpListener.expects(:listen).with()
|
57
|
-
Propono.proxy_udp()
|
58
|
-
end
|
59
|
-
|
60
|
-
def test_proxy_udp_calls_publish_in_the_block
|
61
|
-
topic = "foobar"
|
62
|
-
message = "message"
|
63
|
-
options = {id: "catdog"}
|
64
|
-
Propono.stubs(:listen_to_udp).yields(topic, message, options)
|
65
|
-
Publisher.expects(:publish).with(topic, message, options)
|
66
|
-
Propono.proxy_udp
|
67
|
-
end
|
68
|
-
|
69
|
-
def test_proxy_tcp_calls_listen
|
70
|
-
TcpListener.expects(:listen).with()
|
71
|
-
Propono.proxy_tcp()
|
72
|
-
end
|
73
|
-
|
74
|
-
def test_proxy_tcp_calls_publish_in_the_block
|
75
|
-
topic = "foobar"
|
76
|
-
message = "message"
|
77
|
-
options = {id: "catdog"}
|
78
|
-
Propono.stubs(:listen_to_tcp).yields(topic, message, options)
|
79
|
-
Publisher.expects(:publish).with(topic, message, options)
|
80
|
-
Propono.proxy_tcp
|
81
|
-
end
|
82
|
-
end
|
83
|
-
end
|
@@ -1,61 +0,0 @@
|
|
1
|
-
require File.expand_path('../../test_helper', __FILE__)
|
2
|
-
|
3
|
-
module Propono
|
4
|
-
class QueueCreatorTest < Minitest::Test
|
5
|
-
|
6
|
-
def test_finds_existing_url
|
7
|
-
name = "foobar"
|
8
|
-
url = "http://#{name}"
|
9
|
-
sqs = Fog::AWS::SQS::Mock.new
|
10
|
-
sqs.stubs(:list_queues)
|
11
|
-
sqs.expects(:list_queues).
|
12
|
-
with("QueueNamePrefix" => "#{name}").
|
13
|
-
returns(
|
14
|
-
mock(body: { "QueueUrls" => [url]})
|
15
|
-
)
|
16
|
-
|
17
|
-
creator = QueueCreator.new(name)
|
18
|
-
creator.stubs(sqs: sqs)
|
19
|
-
|
20
|
-
queue = creator.find_or_create
|
21
|
-
assert_equal url, queue.url
|
22
|
-
end
|
23
|
-
|
24
|
-
def test_create_queue_called_on_sqs
|
25
|
-
sqs = Fog::AWS::SQS::Mock.new
|
26
|
-
sqs.expects(:create_queue).with("foobar").returns(mock(body: { "QueueUrl" => "Foobar"}))
|
27
|
-
|
28
|
-
creator = QueueCreator.new("foobar")
|
29
|
-
creator.stubs(sqs: sqs)
|
30
|
-
|
31
|
-
creator.find_or_create
|
32
|
-
end
|
33
|
-
|
34
|
-
def test_returns_url
|
35
|
-
url = "malcs_happy_queue"
|
36
|
-
result = mock(body: { "QueueUrl" => url})
|
37
|
-
sqs = Fog::AWS::SQS::Mock.new
|
38
|
-
sqs.expects(create_queue: result)
|
39
|
-
|
40
|
-
creator = QueueCreator.new("foobar")
|
41
|
-
creator.stubs(sqs: sqs)
|
42
|
-
|
43
|
-
queue = creator.find_or_create
|
44
|
-
assert_equal url, queue.url
|
45
|
-
end
|
46
|
-
|
47
|
-
def test_should_raise_exception_if_no_queue_returned
|
48
|
-
result = mock(body: {})
|
49
|
-
sqs = Fog::AWS::SQS::Mock.new
|
50
|
-
sqs.expects(create_queue: result)
|
51
|
-
|
52
|
-
creator = QueueCreator.new("foobar")
|
53
|
-
creator.stubs(sqs: sqs)
|
54
|
-
|
55
|
-
assert_raises QueueCreatorError do
|
56
|
-
creator.find_or_create
|
57
|
-
end
|
58
|
-
end
|
59
|
-
end
|
60
|
-
end
|
61
|
-
|
@@ -1,21 +0,0 @@
|
|
1
|
-
require File.expand_path('../../test_helper', __FILE__)
|
2
|
-
|
3
|
-
module Propono
|
4
|
-
class SubscriberTest < Minitest::Test
|
5
|
-
|
6
|
-
def test_subscribe_by_queue_calls_queue_subscriber
|
7
|
-
subscriber = QueueSubscription.new("topic")
|
8
|
-
QueueSubscription.expects(:new).with("topic", {}).returns(subscriber)
|
9
|
-
QueueSubscription.any_instance.expects(:create)
|
10
|
-
Subscriber.subscribe_by_queue("topic")
|
11
|
-
end
|
12
|
-
|
13
|
-
def test_subscribe_by_post_calls_post_subscribe
|
14
|
-
subscriber = PostSubscription.new("topic", 'endpoint')
|
15
|
-
PostSubscription.expects(:new).with("topic", 'endpoint').returns(subscriber)
|
16
|
-
PostSubscription.any_instance.expects(:create)
|
17
|
-
Subscriber.subscribe_by_post("topic", "endpoint")
|
18
|
-
end
|
19
|
-
|
20
|
-
end
|
21
|
-
end
|
@@ -1,76 +0,0 @@
|
|
1
|
-
require File.expand_path('../../test_helper', __FILE__)
|
2
|
-
|
3
|
-
module Propono
|
4
|
-
class TcpListenerTest < Minitest::Test
|
5
|
-
|
6
|
-
def test_intialize_sets_locals
|
7
|
-
block = Proc.new {}
|
8
|
-
listener = TcpListener.new(&block)
|
9
|
-
assert_equal block, listener.instance_variable_get("@processor")
|
10
|
-
end
|
11
|
-
|
12
|
-
def test_server_is_setup_correctly
|
13
|
-
port = 1234
|
14
|
-
Propono.config.tcp_port = port
|
15
|
-
|
16
|
-
TCPServer.expects(:open).with(port)
|
17
|
-
|
18
|
-
listener = TcpListener.new() {}
|
19
|
-
server = listener.send(:server)
|
20
|
-
end
|
21
|
-
|
22
|
-
def test_initialize_should_fail_without_a_block
|
23
|
-
assert_raises(TcpListenerError) do
|
24
|
-
TcpListener.new
|
25
|
-
end
|
26
|
-
end
|
27
|
-
|
28
|
-
def test_message_is_processed
|
29
|
-
tcp_msg = "Foobar"
|
30
|
-
processor = Proc.new {}
|
31
|
-
listener = TcpListener.new(&processor)
|
32
|
-
client = mock()
|
33
|
-
client.expects(:recvfrom => [tcp_msg])
|
34
|
-
client.expects(:close)
|
35
|
-
|
36
|
-
server = mock()
|
37
|
-
server.expects(accept: client)
|
38
|
-
|
39
|
-
listener.stubs(server: server)
|
40
|
-
listener.expects(:process_tcp_data).with(tcp_msg)
|
41
|
-
thread = listener.send(:receive_and_process)
|
42
|
-
thread.join
|
43
|
-
end
|
44
|
-
|
45
|
-
def test_processor_is_called_correctly
|
46
|
-
topic = "my-topic"
|
47
|
-
message = "my-message"
|
48
|
-
id = "qwe123"
|
49
|
-
processor = Proc.new {}
|
50
|
-
tcp_data = {topic: topic, message: message, id: id}.to_json
|
51
|
-
processor.expects(:call).with(topic, message, {id: id})
|
52
|
-
|
53
|
-
listener = TcpListener.new(&processor)
|
54
|
-
listener.send(:process_tcp_data, tcp_data)
|
55
|
-
end
|
56
|
-
|
57
|
-
def test_listen_should_loop
|
58
|
-
listener = TcpListener.new {}
|
59
|
-
listener.expects(:loop)
|
60
|
-
listener.listen
|
61
|
-
end
|
62
|
-
end
|
63
|
-
|
64
|
-
class TcpListenerLegacyTest < Minitest::Test
|
65
|
-
def test_processor_is_called_correctly
|
66
|
-
topic = "my-topic"
|
67
|
-
message = "my-message"
|
68
|
-
processor = Proc.new {}
|
69
|
-
tcp_data = {topic: topic, message: message}.to_json
|
70
|
-
processor.expects(:call).with(topic, message)
|
71
|
-
|
72
|
-
listener = TcpListener.new(&processor)
|
73
|
-
listener.send(:process_tcp_data, tcp_data)
|
74
|
-
end
|
75
|
-
end
|
76
|
-
end
|
@@ -1,40 +0,0 @@
|
|
1
|
-
require File.expand_path('../../test_helper', __FILE__)
|
2
|
-
|
3
|
-
module Propono
|
4
|
-
class TopicCreatorTest < Minitest::Test
|
5
|
-
|
6
|
-
def test_create_topic_called_on_sns
|
7
|
-
sns = mock()
|
8
|
-
sns.expects(:create_topic).with("foobar").returns(mock(body: { "TopicArn" => @arn}))
|
9
|
-
|
10
|
-
creator = TopicCreator.new("foobar")
|
11
|
-
creator.stubs(sns: sns)
|
12
|
-
|
13
|
-
creator.find_or_create
|
14
|
-
end
|
15
|
-
|
16
|
-
def test_returns_arn
|
17
|
-
arn = "malcs_happy_arn"
|
18
|
-
result = mock(body: { "TopicArn" => arn})
|
19
|
-
sns = mock(create_topic: result)
|
20
|
-
|
21
|
-
creator = TopicCreator.new("foobar")
|
22
|
-
creator.stubs(sns: sns)
|
23
|
-
|
24
|
-
topic = creator.find_or_create
|
25
|
-
assert_equal arn, topic.arn
|
26
|
-
end
|
27
|
-
|
28
|
-
def test_should_raise_exception_if_no_arn_returned
|
29
|
-
result = mock(body: {})
|
30
|
-
sns = mock(create_topic: result)
|
31
|
-
|
32
|
-
creator = TopicCreator.new("foobar")
|
33
|
-
creator.stubs(sns: sns)
|
34
|
-
|
35
|
-
assert_raises TopicCreatorError do
|
36
|
-
creator.find_or_create
|
37
|
-
end
|
38
|
-
end
|
39
|
-
end
|
40
|
-
end
|
@@ -1,73 +0,0 @@
|
|
1
|
-
require File.expand_path('../../test_helper', __FILE__)
|
2
|
-
|
3
|
-
module Propono
|
4
|
-
class UdpListenerTest < Minitest::Test
|
5
|
-
|
6
|
-
def test_intialize_sets_locals
|
7
|
-
block = Proc.new {}
|
8
|
-
listener = UdpListener.new(&block)
|
9
|
-
assert_equal block, listener.instance_variable_get("@processor")
|
10
|
-
end
|
11
|
-
|
12
|
-
def test_socket_is_setup_correctly
|
13
|
-
host = "my-host"
|
14
|
-
port = 1234
|
15
|
-
|
16
|
-
Propono.config.udp_host = host
|
17
|
-
Propono.config.udp_port = port
|
18
|
-
|
19
|
-
UDPSocket.any_instance.expects(:bind).with(host, port)
|
20
|
-
|
21
|
-
listener = UdpListener.new() {}
|
22
|
-
socket = listener.send(:socket)
|
23
|
-
end
|
24
|
-
|
25
|
-
def test_initialize_should_fail_without_a_block
|
26
|
-
assert_raises(UdpListenerError) do
|
27
|
-
UdpListener.new
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
|
-
def test_message_is_processed
|
32
|
-
udp_msg = "Foobar"
|
33
|
-
processor = Proc.new {}
|
34
|
-
server = UdpListener.new(&processor)
|
35
|
-
socket = mock(recvfrom: [udp_msg])
|
36
|
-
server.stubs(socket: socket)
|
37
|
-
server.expects(:process_udp_data).with(udp_msg)
|
38
|
-
thread = server.send(:receive_and_process)
|
39
|
-
thread.join
|
40
|
-
end
|
41
|
-
|
42
|
-
def test_processor_is_called_correctly
|
43
|
-
topic = "my-topic"
|
44
|
-
message = "my-message"
|
45
|
-
id = "123asd"
|
46
|
-
processor = Proc.new {}
|
47
|
-
udp_data = {topic: topic, message: message, id: id}.to_json
|
48
|
-
processor.expects(:call).with(topic, message, {id: id})
|
49
|
-
|
50
|
-
server = UdpListener.new(&processor)
|
51
|
-
server.send(:process_udp_data, udp_data)
|
52
|
-
end
|
53
|
-
|
54
|
-
def test_listen_should_loop
|
55
|
-
listener = UdpListener.new {}
|
56
|
-
listener.expects(:loop)
|
57
|
-
listener.listen
|
58
|
-
end
|
59
|
-
end
|
60
|
-
|
61
|
-
class UdpListenerLegacyTest < Minitest::Test
|
62
|
-
def test_processor_is_called_correctly
|
63
|
-
topic = "my-topic"
|
64
|
-
message = "my-message"
|
65
|
-
processor = Proc.new {}
|
66
|
-
udp_data = {topic: topic, message: message}.to_json
|
67
|
-
processor.expects(:call).with(topic, message)
|
68
|
-
|
69
|
-
server = UdpListener.new(&processor)
|
70
|
-
server.send(:process_udp_data, udp_data)
|
71
|
-
end
|
72
|
-
end
|
73
|
-
end
|