From e2409a663c5e8ece0f1201a40a7670734e2bf05c Mon Sep 17 00:00:00 2001 From: Adam Cooke Date: Thu, 22 Jul 2021 19:17:13 +0100 Subject: [PATCH] test: add test for dkim header generation --- spec/examples/dkim_signing/email.msg | 37 ++++++++++++++++++++++++++++ spec/lib/postal/dkim_header_spec.rb | 35 ++++++++++++++++++++++++++ 2 files changed, 72 insertions(+) create mode 100644 spec/examples/dkim_signing/email.msg create mode 100644 spec/lib/postal/dkim_header_spec.rb diff --git a/spec/examples/dkim_signing/email.msg b/spec/examples/dkim_signing/email.msg new file mode 100644 index 0000000..85f1e2f --- /dev/null +++ b/spec/examples/dkim_signing/email.msg @@ -0,0 +1,37 @@ +domain: adamtest.viaduct.io +time: 1626973299 +dkim_identifier: postal-hg3YOm +private_key: | + -----BEGIN RSA PRIVATE KEY----- + MIICWwIBAAKBgQDVebmUOjOp4WhVFdwXiHE0sIN0/pxG1lXka8b7wCcKXo7c0Bcp + 2t77AUP3Lr3HOdY1OKYU8UzbLR5dahvwoodEo2QgFB6wxP9FF/koip+YdmWSscZI + 9xMZBPcJYfMa3MtC2JC0aDHaKRTSlehg9/T77dJEL11pePdKJtyWZsxNlwIDAQAB + AoGAYBdWzb4VG1b3W7VnSMCGFK2Pvs4NEmXQa+2HuDKaYDSIIiUZCCIZVOsQ6OcF + TfRe074YJD0p107L6EinIv5F3HEp6pMT3gzo057mPabskohUXbDXcX3kq+0EDMYx + 1HmlyRvWb6CI79hZrJavF5vOPZxSnM123Y7L0wc1WEKPxSECQQDq3iH/JNPmwDBS + DeY6KR6+q7hKGmvcfWfiPQh+PYaekE6635+au3qE8sp+xwiQDbsq9ywwj8J/8Lzt + FnvSi+/DAkEA6K7Zw8OHZpq3QwEfazTSm2A+iciD88ISl4g+71Cu6AVnaip5KdxI + yiEWE3z/3Y99NPyL1AGouohBCqHD3qOBnQJAWumRD0oaG//YtGpc67ZvCC9ALq77 + gWWpiJFHcFYwfcAuOXfGOAbJ7hxs9ZXlYp1uDbuPh1yeVRfCiaNiWqWAMQJAJnuc + qoLxJugZvSw3XQy8dFQjo7gVEsCbQJKZDg2DD/6szuM9bM3w//Ue6JQ44RT1OUk3 + exXXKRqV30NH2M+kBQJAJmVIeroVONXhsw/O18dtM4zSbr4glPKBHz73MVO3WK5v + ZM1TKedFNOujh8cEyYsoQRaIbGvTcnSMQfMYw7Inhw== + -----END RSA PRIVATE KEY----- +headers: date:from:to:message-id:subject:mime-version:content-type:content-transfer-encoding +bh: mvuu3b9qEfdaZCSaVxLvRSqKbMB5YN4qxRCRw5FtvuE= +b: UZgYjsed5ngc9+U/80FMsHIWLTaxj/OBc5r1l9sKbOIz0rmdRnp+X/YCFq16/AY8PWsrJh+/FgIs/zR9hWn+F2iz7dSfvnTE70zKy1q+JIyNh5cw1HegnIgZqG5S6IdliiwaiCFlxMbya790z//jUh5pJdOcm2QuA+fDOGdfU3k= +--- +DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=adamtest.viaduct.io; s=postal-hg3YOm; t=1626973299; bh=mvuu3b9qEfdaZCSaVxLvRSqKbMB5YN4qxRCRw5FtvuE=; h=date:from:to:message-id:subject:mime-version:content-type:content-transfer-encoding; b=UZgYjsed5ngc9+U/80FMsHIWLTaxj/OBc5r1l9sKbOIz0rmdRnp+X/YCFq16/AY8PWsrJh+/FgIs/zR9hWn+F2iz7dSfvnTE70zKy1q+JIyNh5cw1HegnIgZqG5S6IdliiwaiCFlxMbya790z//jUh5pJdOcm2QuA+fDOGdfU3k= +X-Postal-MsgID: mPVbUwFRWZcU +Received: from web-ui (10.210.10.54 [10.210.10.54]) by Postal with HTTP; Thu, 22 Jul 2021 17:01:39 +0000 +Date: Thu, 22 Jul 2021 18:01:39 +0100 +From: test@adamtest.viaduct.io +To: JfkFM0Sy6bTz1N@dkimvalidator.com +Message-ID: +Subject: Test Message at July 22, 2021 13:01 +Mime-Version: 1.0 +Content-Type: text/plain; + charset=UTF-8 +Content-Transfer-Encoding: 7bit + +This is a message to test the delivery of messages through Postal. diff --git a/spec/lib/postal/dkim_header_spec.rb b/spec/lib/postal/dkim_header_spec.rb new file mode 100644 index 0000000..b440fa5 --- /dev/null +++ b/spec/lib/postal/dkim_header_spec.rb @@ -0,0 +1,35 @@ +# frozen_string_literal: true + +require 'rails_helper' + +describe Postal::DKIMHeader do + + examples = Rails.root.join('spec/examples/dkim_signing/*.msg') + Dir[examples].each do |path| + contents = File.read(path) + frontmatter, email = contents.split(/^---\n/m, 2) + frontmatter = YAML.load(frontmatter) + email.strip + it "works with #{path.split('/').first}" do + mocked_time = Time.at(frontmatter['time'].to_i) + allow(Time).to receive(:now).and_return(mocked_time) + + domain = instance_double('Domain') + allow(domain).to receive(:dkim_status).and_return('OK') + allow(domain).to receive(:name).and_return(frontmatter['domain']) + allow(domain).to receive(:dkim_key).and_return(OpenSSL::PKey::RSA.new(frontmatter['private_key'])) + allow(domain).to receive(:dkim_identifier).and_return(frontmatter['dkim_identifier']) + + expectation = "DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; " \ + "d=#{frontmatter['domain']}; s=#{frontmatter['dkim_identifier']}; t=#{mocked_time.to_i}; " \ + "bh=#{frontmatter['bh']}; "\ + "h=#{frontmatter['headers']}; " \ + "b=#{frontmatter['b']}" + + header = described_class.new(domain, email) + + expect(header.dkim_header).to eq expectation + end + end + +end