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.
Files changed (52) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/.travis.yml +2 -9
  4. data/CHANGELOG.md +9 -0
  5. data/Gemfile +0 -2
  6. data/README.md +35 -91
  7. data/lib/propono.rb +4 -144
  8. data/lib/propono/components/aws_client.rb +78 -0
  9. data/lib/propono/components/aws_config.rb +4 -9
  10. data/lib/propono/components/client.rb +93 -0
  11. data/lib/propono/components/queue.rb +4 -6
  12. data/lib/propono/components/queue_subscription.rb +32 -22
  13. data/lib/propono/components/sqs_message.rb +3 -6
  14. data/lib/propono/components/topic.rb +6 -5
  15. data/lib/propono/configuration.rb +0 -2
  16. data/lib/propono/services/publisher.rb +21 -44
  17. data/lib/propono/services/queue_listener.rb +54 -57
  18. data/lib/propono/version.rb +1 -1
  19. data/propono.gemspec +3 -2
  20. data/test/components/aws_config_test.rb +4 -4
  21. data/test/components/client_test.rb +68 -0
  22. data/test/components/queue_subscription_test.rb +68 -70
  23. data/test/components/queue_test.rb +6 -3
  24. data/test/components/topic_test.rb +4 -2
  25. data/test/configuration_test.rb +27 -55
  26. data/test/integration/integration_test.rb +4 -7
  27. data/test/integration/slow_queue_test.rb +11 -8
  28. data/test/integration/sns_to_sqs_test.rb +17 -17
  29. data/test/services/publisher_test.rb +59 -156
  30. data/test/services/queue_listener_test.rb +96 -103
  31. data/test/test_helper.rb +21 -48
  32. metadata +26 -39
  33. data/lib/propono/components/post_subscription.rb +0 -19
  34. data/lib/propono/components/sns.rb +0 -11
  35. data/lib/propono/components/sqs.rb +0 -12
  36. data/lib/propono/services/queue_creator.rb +0 -29
  37. data/lib/propono/services/subscriber.rb +0 -12
  38. data/lib/propono/services/tcp_listener.rb +0 -48
  39. data/lib/propono/services/topic_creator.rb +0 -23
  40. data/lib/propono/services/udp_listener.rb +0 -52
  41. data/test/components/post_subscription_test.rb +0 -29
  42. data/test/components/sns_test.rb +0 -25
  43. data/test/components/sqs_test.rb +0 -26
  44. data/test/integration/tcp_to_sqs_test.rb +0 -53
  45. data/test/integration/udp_proxy_test.rb +0 -50
  46. data/test/integration/udp_to_sqs_test.rb +0 -53
  47. data/test/propono_test.rb +0 -83
  48. data/test/services/queue_creator_test.rb +0 -61
  49. data/test/services/subscriber_test.rb +0 -21
  50. data/test/services/tcp_listener_test.rb +0 -76
  51. data/test/services/topic_creator_test.rb +0 -40
  52. data/test/services/udp_listener_test.rb +0 -73
@@ -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