From 512b5316dd33a8aa36821ee9b134d6652fd4a35f Mon Sep 17 00:00:00 2001 From: George Claghorn Date: Sat, 12 Jan 2019 21:38:26 -0500 Subject: Add Exim and Qmail support to Action Mailbox --- actionmailbox/test/unit/postfix_relayer_test.rb | 92 ---------------------- actionmailbox/test/unit/relayer_test.rb | 100 ++++++++++++++++++++++++ 2 files changed, 100 insertions(+), 92 deletions(-) delete mode 100644 actionmailbox/test/unit/postfix_relayer_test.rb create mode 100644 actionmailbox/test/unit/relayer_test.rb (limited to 'actionmailbox/test/unit') diff --git a/actionmailbox/test/unit/postfix_relayer_test.rb b/actionmailbox/test/unit/postfix_relayer_test.rb deleted file mode 100644 index 5f7496ec3f..0000000000 --- a/actionmailbox/test/unit/postfix_relayer_test.rb +++ /dev/null @@ -1,92 +0,0 @@ -# frozen_string_literal: true - -require_relative "../test_helper" - -require "action_mailbox/postfix_relayer" - -module ActionMailbox - class PostfixRelayerTest < ActiveSupport::TestCase - URL = "https://example.com/rails/action_mailbox/postfix/inbound_emails" - INGRESS_PASSWORD = "secret" - - setup do - @relayer = ActionMailbox::PostfixRelayer.new(url: URL, password: INGRESS_PASSWORD) - end - - test "successfully relaying an email" do - stub_request(:post, URL).to_return status: 204 - - result = @relayer.relay(file_fixture("welcome.eml").read) - assert_equal "2.0.0 Successfully relayed message to Postfix ingress", result.output - assert result.success? - assert_not result.failure? - - assert_requested :post, URL, body: file_fixture("welcome.eml").read, - basic_auth: [ "actionmailbox", INGRESS_PASSWORD ], - headers: { "Content-Type" => "message/rfc822", "User-Agent" => /\AAction Mailbox Postfix relayer v\d+\./ } - end - - test "unsuccessfully relaying with invalid credentials" do - stub_request(:post, URL).to_return status: 401 - - result = @relayer.relay(file_fixture("welcome.eml").read) - assert_equal "4.7.0 Invalid credentials for Postfix ingress", result.output - assert_not result.success? - assert result.failure? - end - - test "unsuccessfully relaying due to an unspecified server error" do - stub_request(:post, URL).to_return status: 500 - - result = @relayer.relay(file_fixture("welcome.eml").read) - assert_equal "4.0.0 HTTP 500", result.output - assert_not result.success? - assert result.failure? - end - - test "unsuccessfully relaying due to a gateway timeout" do - stub_request(:post, URL).to_return status: 504 - - result = @relayer.relay(file_fixture("welcome.eml").read) - assert_equal "4.0.0 HTTP 504", result.output - assert_not result.success? - assert result.failure? - end - - test "unsuccessfully relaying due to ECONNRESET" do - stub_request(:post, URL).to_raise Errno::ECONNRESET.new - - result = @relayer.relay(file_fixture("welcome.eml").read) - assert_equal "4.4.2 Network error relaying to Postfix ingress: Connection reset by peer", result.output - assert_not result.success? - assert result.failure? - end - - test "unsuccessfully relaying due to connection failure" do - stub_request(:post, URL).to_raise SocketError.new("Failed to open TCP connection to example.com:443") - - result = @relayer.relay(file_fixture("welcome.eml").read) - assert_equal "4.4.2 Network error relaying to Postfix ingress: Failed to open TCP connection to example.com:443", result.output - assert_not result.success? - assert result.failure? - end - - test "unsuccessfully relaying due to client-side timeout" do - stub_request(:post, URL).to_timeout - - result = @relayer.relay(file_fixture("welcome.eml").read) - assert_equal "4.4.2 Timed out relaying to Postfix ingress", result.output - assert_not result.success? - assert result.failure? - end - - test "unsuccessfully relaying due to an unhandled exception" do - stub_request(:post, URL).to_raise StandardError.new("Something went wrong") - - result = @relayer.relay(file_fixture("welcome.eml").read) - assert_equal "4.0.0 Error relaying to Postfix ingress: Something went wrong", result.output - assert_not result.success? - assert result.failure? - end - end -end diff --git a/actionmailbox/test/unit/relayer_test.rb b/actionmailbox/test/unit/relayer_test.rb new file mode 100644 index 0000000000..fb2b48ea16 --- /dev/null +++ b/actionmailbox/test/unit/relayer_test.rb @@ -0,0 +1,100 @@ +# frozen_string_literal: true + +require_relative "../test_helper" + +require "action_mailbox/relayer" + +module ActionMailbox + class RelayerTest < ActiveSupport::TestCase + URL = "https://example.com/rails/action_mailbox/relay/inbound_emails" + INGRESS_PASSWORD = "secret" + + setup do + @relayer = ActionMailbox::Relayer.new(url: URL, password: INGRESS_PASSWORD) + end + + test "successfully relaying an email" do + stub_request(:post, URL).to_return status: 204 + + result = @relayer.relay(file_fixture("welcome.eml").read) + assert_equal "2.0.0", result.status_code + assert_equal "Successfully relayed message to ingress", result.message + assert result.success? + assert_not result.failure? + + assert_requested :post, URL, body: file_fixture("welcome.eml").read, + basic_auth: [ "actionmailbox", INGRESS_PASSWORD ], + headers: { "Content-Type" => "message/rfc822", "User-Agent" => /\AAction Mailbox relayer v\d+\./ } + end + + test "unsuccessfully relaying with invalid credentials" do + stub_request(:post, URL).to_return status: 401 + + result = @relayer.relay(file_fixture("welcome.eml").read) + assert_equal "4.7.0", result.status_code + assert_equal "Invalid credentials for ingress", result.message + assert_not result.success? + assert result.failure? + end + + test "unsuccessfully relaying due to an unspecified server error" do + stub_request(:post, URL).to_return status: 500 + + result = @relayer.relay(file_fixture("welcome.eml").read) + assert_equal "4.0.0", result.status_code + assert_equal "HTTP 500", result.message + assert_not result.success? + assert result.failure? + end + + test "unsuccessfully relaying due to a gateway timeout" do + stub_request(:post, URL).to_return status: 504 + + result = @relayer.relay(file_fixture("welcome.eml").read) + assert_equal "4.0.0", result.status_code + assert_equal "HTTP 504", result.message + assert_not result.success? + assert result.failure? + end + + test "unsuccessfully relaying due to ECONNRESET" do + stub_request(:post, URL).to_raise Errno::ECONNRESET.new + + result = @relayer.relay(file_fixture("welcome.eml").read) + assert_equal "4.4.2", result.status_code + assert_equal "Network error relaying to ingress: Connection reset by peer", result.message + assert_not result.success? + assert result.failure? + end + + test "unsuccessfully relaying due to connection failure" do + stub_request(:post, URL).to_raise SocketError.new("Failed to open TCP connection to example.com:443") + + result = @relayer.relay(file_fixture("welcome.eml").read) + assert_equal "4.4.2", result.status_code + assert_equal "Network error relaying to ingress: Failed to open TCP connection to example.com:443", result.message + assert_not result.success? + assert result.failure? + end + + test "unsuccessfully relaying due to client-side timeout" do + stub_request(:post, URL).to_timeout + + result = @relayer.relay(file_fixture("welcome.eml").read) + assert_equal "4.4.2", result.status_code + assert_equal "Timed out relaying to ingress", result.message + assert_not result.success? + assert result.failure? + end + + test "unsuccessfully relaying due to an unhandled exception" do + stub_request(:post, URL).to_raise StandardError.new("Something went wrong") + + result = @relayer.relay(file_fixture("welcome.eml").read) + assert_equal "4.0.0", result.status_code + assert_equal "Error relaying to ingress: Something went wrong", result.message + assert_not result.success? + assert result.failure? + end + end +end -- cgit v1.2.3