remailer 0.6.0 → 0.7.1

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 709e0bf509c227f3e6b529520bc82af7a02c9a43
4
- data.tar.gz: d2e193e4690ae8d71004c1e0c4fdda782e5d786c
3
+ metadata.gz: 022aa4b49c91bd2c7f1ae3658ae9d78e9a04d685
4
+ data.tar.gz: b83390f1d9584990b4d2667109c9ac6b72d22add
5
5
  SHA512:
6
- metadata.gz: 2ec11c9db71e13589670c3841824ccba7b47c27d2e1ee464885313a0364bd40fd4ad575b06d36ce0710b866caa18287b2858ada691ede63dc18dcc840e4b8030
7
- data.tar.gz: f8a2688508db19e4c5804edfc11633db29ae9d4c21ec3ab0b1e7379aee1a64bf58abc1edf8290715f401e221697b974e0f0504d9adb569c7175e8e2a36f4615b
6
+ metadata.gz: e92d0bb514b5206c8f58c2d235af41afe3bf6038f501eb596f3499f97ad5cdc74505a2ec13fdf54e384a99eff49d4727717cb9fbbbfa35ae7b7e144448fe1018
7
+ data.tar.gz: b52a67442c4f6ce913edca676bb0f1a25fa1d546c531197332f0e9e07845b09fe30a586ee76c55ba20a0a39c9bf85c6658081f77b0f477ff3bf6a57eeb6cdf5c
data/.travis.yml CHANGED
@@ -1,7 +1,10 @@
1
1
  language: ruby
2
- before_install: gem install bundler
2
+ before_install:
3
+ - openssl aes-256-cbc -K $encrypted_fdddf752110a_key -iv $encrypted_fdddf752110a_iv
4
+ -in test/config.yml.enc -out test/config.yml -d
5
+ - gem install bundler
3
6
  rvm:
4
- - 1.9.3-p551
5
- - 2.0.0-p598
6
- - 2.1.5
7
- - 2.2.0
7
+ - 1.9.3-p551
8
+ - 2.0.0-p598
9
+ - 2.1.5
10
+ - 2.2.0
data/README.md CHANGED
@@ -92,9 +92,10 @@ A status code of nil is sent if the server timed out or the connection failed.
92
92
 
93
93
  ## Tests
94
94
 
95
- In order to run tests, copy `test/config.example.rb` to `test/config.rb` and
95
+ In order to run tests, copy `test/config.example.yml` to `test/config.yml` and
96
96
  adjust as required. For obvious reasons, passwords to SMTP test accounts are
97
- not included in the source code of this library.
97
+ not included in the source code of this library. Any Gmail-type account should
98
+ serve as a useful test target.
98
99
 
99
100
  ## Status
100
101
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.6.0
1
+ 0.7.1
@@ -151,9 +151,19 @@ class Remailer::AbstractConnection < EventMachine::Connection
151
151
  self.after_initialize
152
152
 
153
153
  rescue Object => e
154
- STDERR.puts "#{e.class}: #{e}"
154
+ report_exception(e)
155
+
156
+ STDERR.puts "#{e.class}: #{e}" rescue nil
155
157
  end
156
-
158
+
159
+ def after_complete
160
+ if (block_given?)
161
+ @options[:after_complete] = Proc.new
162
+ elsif (@options[:after_complete])
163
+ @options[:after_complete].call
164
+ end
165
+ end
166
+
157
167
  # Returns true if the connection requires TLS support, or false otherwise.
158
168
  def use_tls?
159
169
  !!@options[:use_tls]
@@ -244,7 +254,8 @@ class Remailer::AbstractConnection < EventMachine::Connection
244
254
  end
245
255
 
246
256
  rescue Object => e
247
- STDERR.puts("[#{e.class}] #{e}")
257
+ self.report_exception(e)
258
+ STDERR.puts("[#{e.class}] #{e}") rescue nil
248
259
 
249
260
  raise e
250
261
  end
@@ -27,21 +27,37 @@ class Remailer::Interpreter
27
27
  def self.initial_state=(state)
28
28
  @initial_state = state
29
29
  end
30
+
31
+ def self.config
32
+ {
33
+ states: @states,
34
+ default_interpreter: @default,
35
+ default_parser: @parser,
36
+ on_error_handler: @on_error
37
+ }
38
+ end
30
39
 
40
+ def self.states_default
41
+ {
42
+ :initialized => { },
43
+ :terminated => { }
44
+ }
45
+ end
46
+
31
47
  # Returns the states that are defined as a has with their associated
32
48
  # options. The default keys are :initialized and :terminated.
33
49
  def self.states
34
50
  @states ||=
35
- case (superclass.respond_to?(:states))
36
- when true
51
+ if (superclass.respond_to?(:states))
37
52
  superclass.states.dup
38
53
  else
39
- {
40
- :initialized => { },
41
- :terminated => { }
42
- }
54
+ self.states_default
43
55
  end
44
56
  end
57
+
58
+ def self.states_empty?
59
+ self.states == self.states_default
60
+ end
45
61
 
46
62
  # Returns true if a given state is defined, false otherwise.
47
63
  def self.state_defined?(state)
@@ -114,8 +130,7 @@ class Remailer::Interpreter
114
130
  # Returns the parser used when no state-specific parser has been defined.
115
131
  def self.default_parser
116
132
  @parser ||=
117
- case (superclass.respond_to?(:default_parser))
118
- when true
133
+ if (superclass.respond_to?(:default_parser))
119
134
  superclass.default_parser
120
135
  else
121
136
  lambda { |s| _s = s.dup; s.replace(''); _s }
@@ -125,8 +140,7 @@ class Remailer::Interpreter
125
140
  # Returns the current default_interpreter.
126
141
  def self.default_interpreter
127
142
  @default ||=
128
- case (superclass.respond_to?(:default_interpreter))
129
- when true
143
+ if (superclass.respond_to?(:default_interpreter))
130
144
  superclass.default_interpreter
131
145
  else
132
146
  nil
@@ -136,8 +150,7 @@ class Remailer::Interpreter
136
150
  # Returns the defined error handler
137
151
  def self.on_error_handler
138
152
  @on_error ||=
139
- case (superclass.respond_to?(:on_error_handler))
140
- when true
153
+ if (superclass.respond_to?(:on_error_handler))
141
154
  superclass.on_error_handler
142
155
  else
143
156
  nil
@@ -14,7 +14,7 @@ class Remailer::Interpreter::StateProxy
14
14
 
15
15
  # Defines a parser specification.
16
16
  def parse(spec = nil, &block)
17
- @options[:parser] = Remailer::Interpreter.parse(spec, &block)
17
+ @options[:parser] = Remailer::Interpreter.create_parser_for_spec(spec, &block)
18
18
  end
19
19
 
20
20
  # Defines a block that will execute when the state is entered.
data/remailer.gemspec CHANGED
@@ -2,16 +2,16 @@
2
2
  # DO NOT EDIT THIS FILE DIRECTLY
3
3
  # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
4
  # -*- encoding: utf-8 -*-
5
- # stub: remailer 0.6.0 ruby lib
5
+ # stub: remailer 0.7.1 ruby lib
6
6
 
7
7
  Gem::Specification.new do |s|
8
8
  s.name = "remailer"
9
- s.version = "0.6.0"
9
+ s.version = "0.7.1"
10
10
 
11
11
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
12
12
  s.require_paths = ["lib"]
13
13
  s.authors = ["Scott Tadman"]
14
- s.date = "2015-01-22"
14
+ s.date = "2015-01-31"
15
15
  s.description = "EventMachine SMTP Mail User Agent"
16
16
  s.email = "scott@twg.ca"
17
17
  s.extra_rdoc_files = [
@@ -47,7 +47,9 @@ Gem::Specification.new do |s|
47
47
  "lib/remailer/support.rb",
48
48
  "remailer.gemspec",
49
49
  "test/bin/exercise",
50
- "test/config.example.rb",
50
+ "test/config.example.yml",
51
+ "test/config.rb",
52
+ "test/config.yml.enc",
51
53
  "test/helper.rb",
52
54
  "test/unit/remailer_imap_client_interpreter_test.rb",
53
55
  "test/unit/remailer_imap_client_test.rb",
@@ -0,0 +1,15 @@
1
+ smtp_server:
2
+ host: "smtp.gmail.com"
3
+ identifier: "smtp.gmail.com"
4
+
5
+ public_smtp_server:
6
+ host: "smtp.gmail.com"
7
+ identifier: "mx.google.com"
8
+ username: "<account>@gmail.com"
9
+ password: "<password>"
10
+ port: 587
11
+
12
+ proxy_server: "<proxy.server>"
13
+
14
+ recipient: "<account>@gmail.com"
15
+ sender: "<account>@gmail.com"
data/test/config.rb ADDED
@@ -0,0 +1,41 @@
1
+ require 'yaml'
2
+
3
+ class TestConfig < Hash
4
+ CONFIG_FILE = 'config.yml'
5
+
6
+ def self.options
7
+ @options ||= begin
8
+ config_path = File.expand_path(CONFIG_FILE, File.dirname(__FILE__))
9
+
10
+ unless (File.exist?(config_path))
11
+ raise "Config #{CONFIG_FILE} not found. Copy test/config.example.yml and fill in appropriate test settings."
12
+ end
13
+
14
+ new(config_path)
15
+ end
16
+ end
17
+
18
+ def initialize(path)
19
+ merge!(symbolized_keys(YAML.load(File.open(path))))
20
+ end
21
+
22
+ def symbolized_keys(object)
23
+ case (object)
24
+ when Hash
25
+ Hash[
26
+ object.collect do |key, value|
27
+ [
28
+ key ? key.to_sym : key,
29
+ symbolized_keys(value)
30
+ ]
31
+ end
32
+ ]
33
+ when Array
34
+ object.collect do |value|
35
+ symbolized_keys(value)
36
+ end
37
+ else
38
+ object
39
+ end
40
+ end
41
+ end
Binary file
data/test/helper.rb CHANGED
@@ -51,36 +51,64 @@ module TestTriggerHelper
51
51
  end
52
52
  end
53
53
 
54
+ if (ENV['DEBUG'])
55
+ STDERR.sync = true
56
+ end
57
+
54
58
  class MiniTest::Test
59
+ def debug_channel
60
+ ENV['DEBUG'] ? STDERR : nil
61
+ end
62
+
55
63
  def engine
56
64
  exception = nil
65
+ test_thread = nil
57
66
 
58
- ThreadsWait.all_waits(
67
+ engine_thread =
59
68
  Thread.new do
60
69
  Thread.abort_on_exception = true
61
70
 
62
71
  # Create a thread for the engine to run on
63
72
  begin
64
73
  EventMachine.run
74
+
65
75
  rescue Object => exception
66
76
  end
67
- end,
77
+ end
78
+
79
+ test_thread =
68
80
  Thread.new do
69
81
  # Execute the test code in a separate thread to avoid blocking
70
82
  # the EventMachine loop.
71
83
  begin
84
+ while (!EventMachine.reactor_running?)
85
+ # Wait impatiently.
86
+ end
87
+
72
88
  yield
73
89
  rescue Object => exception
74
90
  ensure
75
91
  begin
76
92
  EventMachine.stop_event_loop
77
93
  rescue Object
94
+ STDERR.puts("[#{exception.class}] #{exception}")
78
95
  # Shutting down may trigger an exception from time to time
79
96
  # if the engine itself has failed.
80
97
  end
81
98
  end
82
99
  end
83
- )
100
+
101
+ test_thread.join
102
+
103
+ begin
104
+ Timeout.timeout(1) do
105
+ engine_thread.join
106
+ end
107
+ rescue Timeout::Error
108
+ engine_thread.kill
109
+
110
+ fail 'Execution timed out'
111
+ end
84
112
 
85
113
  if (exception)
86
114
  raise exception
@@ -89,6 +117,7 @@ class MiniTest::Test
89
117
 
90
118
  def assert_timeout(time, message = nil, &block)
91
119
  Timeout::timeout(time, &block)
120
+
92
121
  rescue Timeout::Error
93
122
  flunk(message || 'assert_timeout timed out')
94
123
  end
@@ -123,14 +152,4 @@ class MiniTest::Test
123
152
  end
124
153
  end
125
154
 
126
- require 'ostruct'
127
-
128
- TestConfig = OpenStruct.new
129
-
130
- config_file = File.expand_path("config.rb", File.dirname(__FILE__))
131
-
132
- if (File.exist?(config_file))
133
- require config_file
134
- else
135
- raise "No test/config.rb file found. Copy and modify test/config.example.rb"
136
- end
155
+ require_relative 'config'
@@ -1,17 +1,15 @@
1
1
  require_relative '../helper'
2
2
 
3
3
  class RemailerIMAPClientTest < MiniTest::Test
4
- def setup
5
- STDERR.sync = true
6
- end
7
-
8
4
  def test_connect
5
+ skip
6
+
9
7
  engine do
10
8
  debug = { }
11
9
 
12
10
  client = Remailer::IMAP::Client.open(
13
- TestConfig.imap_server[:host],
14
- debug: STDERR,
11
+ TestConfig.options[:imap_server][:host],
12
+ debug: self.debug_channel,
15
13
  connect: lambda { |success, host| connected_host = host }
16
14
  )
17
15
 
@@ -37,7 +35,7 @@ class RemailerIMAPClientTest < MiniTest::Test
37
35
 
38
36
  login_status = nil
39
37
 
40
- client.login(TestConfig.smtp_server[:username], TestConfig.smtp_server[:password]) do |status, message|
38
+ client.login(TestConfig.options[:smtp_server][:username], TestConfig.options[:smtp_server][:password]) do |status, message|
41
39
  login_status = status
42
40
  end
43
41
 
@@ -1,5 +1,19 @@
1
1
  require_relative '../helper'
2
2
 
3
+ class RegexpInterpreter < Remailer::Interpreter
4
+ attr_reader :received
5
+
6
+ state :initialized do
7
+ interpret(/^HELO\s+/) do |line|
8
+ @received = [ :helo, line ]
9
+ end
10
+
11
+ interpret(/^MAIL FROM:<([^>]+)>/) do |line|
12
+ @received = [ :mail_from, line ]
13
+ end
14
+ end
15
+ end
16
+
3
17
  class ExampleDelegate
4
18
  include TestTriggerHelper
5
19
 
@@ -46,20 +60,6 @@ class LineInterpreterSubclass < LineInterpreter
46
60
  end
47
61
  end
48
62
 
49
- class RegexpInterpreter < Remailer::Interpreter
50
- attr_reader :received
51
-
52
- state :initialized do
53
- interpret(/^HELO\s+/) do |line|
54
- @received = [ :helo, line ]
55
- end
56
-
57
- interpret(/^MAIL FROM:<([^>]+)>/) do |line|
58
- @received = [ :mail_from, line ]
59
- end
60
- end
61
- end
62
-
63
63
  class ExampleInterpreter < Remailer::Interpreter
64
64
  include TestTriggerHelper
65
65
 
@@ -107,13 +107,19 @@ end
107
107
 
108
108
  class RemailerInterpreterTest < MiniTest::Test
109
109
  def test_default_state
110
- assert_equal [ :initialized, :terminated ], Remailer::Interpreter.states_defined.collect { |s| s.to_s }.sort.collect { |s| s.to_sym }
111
- assert_equal true, Remailer::Interpreter.state_defined?(:initialized)
112
- assert_equal true, Remailer::Interpreter.state_defined?(:terminated)
113
- assert_equal false, Remailer::Interpreter.state_defined?(:unknown)
110
+ test_interpreter_class = Class.new(Remailer::Interpreter)
111
+
112
+ assert test_interpreter_class.states_empty?
113
+
114
+ assert_equal [ :initialized, :terminated ], test_interpreter_class.states_defined.collect { |s| s.to_s }.sort.collect { |s| s.to_sym }
115
+ assert_equal true, test_interpreter_class.state_defined?(:initialized)
116
+ assert_equal true, test_interpreter_class.state_defined?(:terminated)
117
+ assert_equal false, test_interpreter_class.state_defined?(:unknown)
118
+
119
+ assert_equal [ :initialized, :terminated ], test_interpreter_class.states_defined
120
+
121
+ interpreter = test_interpreter_class.new
114
122
 
115
- interpreter = Remailer::Interpreter.new
116
-
117
123
  assert_equal :initialized, interpreter.state
118
124
 
119
125
  buffer = 'a'
@@ -124,11 +130,13 @@ class RemailerInterpreterTest < MiniTest::Test
124
130
  end
125
131
 
126
132
  def test_delegate
133
+ test_interpreter_class = Class.new(Remailer::Interpreter)
134
+
127
135
  delegate = ExampleDelegate.new
128
136
 
129
137
  assert delegate.triggered
130
138
 
131
- interpreter = Remailer::Interpreter.new(delegate: delegate)
139
+ interpreter = test_interpreter_class.new(delegate: delegate)
132
140
 
133
141
  assert_equal nil, delegate.attribute
134
142
  assert_equal false, delegate.triggered[:method_no_args]
@@ -7,8 +7,8 @@ class RemailerSMTPClientTest < MiniTest::Test
7
7
  connected_host = nil
8
8
 
9
9
  connection = Remailer::SMTP::Client.open(
10
- TestConfig.smtp_server[:host],
11
- debug: STDERR,
10
+ TestConfig.options[:public_smtp_server][:host],
11
+ debug: self.debug_channel,
12
12
  connect: lambda { |success, host| connected_host = host }
13
13
  )
14
14
 
@@ -27,11 +27,11 @@ class RemailerSMTPClientTest < MiniTest::Test
27
27
  connection.closed?
28
28
  end
29
29
 
30
- assert_equal TestConfig.smtp_server[:host], connected_host
30
+ assert_equal TestConfig.options[:public_smtp_server][:identifier], connected_host
31
31
 
32
32
  assert_equal true, after_complete_trigger
33
33
 
34
- assert_equal 52428800, connection.max_size
34
+ assert_equal 35882577, connection.max_size
35
35
  assert_equal :esmtp, connection.protocol
36
36
  assert_equal true, connection.tls_support?
37
37
  end
@@ -45,7 +45,7 @@ class RemailerSMTPClientTest < MiniTest::Test
45
45
 
46
46
  connection = Remailer::SMTP::Client.open(
47
47
  'example.com',
48
- debug: STDERR,
48
+ debug: self.debug_channel,
49
49
  error: lambda { |code, message|
50
50
  error_received = [ code, message ]
51
51
  },
@@ -72,7 +72,7 @@ class RemailerSMTPClientTest < MiniTest::Test
72
72
 
73
73
  connection = Remailer::SMTP::Client.open(
74
74
  'invalid-example-domain--x.com',
75
- debug: STDERR,
75
+ debug: self.debug_channel,
76
76
  error: lambda { |code, message|
77
77
  error_received = [ code, message ]
78
78
  },
@@ -92,11 +92,11 @@ class RemailerSMTPClientTest < MiniTest::Test
92
92
  debug = { }
93
93
 
94
94
  connection = Remailer::SMTP::Client.open(
95
- TestConfig.public_smtp_server[:host],
96
- port: TestConfig.public_smtp_server[:port] || Remailer::SMTP::Client::SMTP_PORT,
97
- debug: STDERR,
98
- username: TestConfig.public_smtp_server[:username],
99
- password: TestConfig.public_smtp_server[:password]
95
+ TestConfig.options[:smtp_server][:host],
96
+ port: TestConfig.options[:smtp_server][:port] || Remailer::SMTP::Client::SMTP_PORT,
97
+ debug: self.debug_channel,
98
+ username: TestConfig.options[:smtp_server][:username],
99
+ password: TestConfig.options[:smtp_server][:password]
100
100
  )
101
101
 
102
102
  after_complete_trigger = false
@@ -113,11 +113,11 @@ class RemailerSMTPClientTest < MiniTest::Test
113
113
  connection.closed?
114
114
  end
115
115
 
116
- assert_equal TestConfig.public_smtp_server[:identifier], connection.remote
116
+ assert_equal TestConfig.options[:public_smtp_server][:identifier], connection.remote
117
117
 
118
118
  assert_equal true, after_complete_trigger
119
119
 
120
- assert_equal 35651584, connection.max_size
120
+ assert_equal 35882577, connection.max_size
121
121
  assert_equal :esmtp, connection.protocol
122
122
  assert_equal true, connection.tls_support?
123
123
  end
@@ -128,11 +128,11 @@ class RemailerSMTPClientTest < MiniTest::Test
128
128
  debug = { }
129
129
 
130
130
  connection = Remailer::SMTP::Client.open(
131
- TestConfig.smtp_server[:host],
132
- debug: STDERR,
131
+ TestConfig.options[:public_smtp_server][:host],
132
+ debug: self.debug_channel,
133
133
  proxy: {
134
134
  proto: :socks5,
135
- host: TestConfig.proxy_server
135
+ host: TestConfig.options[:proxy_server]
136
136
  }
137
137
  )
138
138
 
@@ -143,18 +143,18 @@ class RemailerSMTPClientTest < MiniTest::Test
143
143
  after_complete_trigger = true
144
144
  end
145
145
 
146
- assert_equal :connect_to_proxy, connection.state
146
+ assert_equal :initialized, connection.state
147
147
  assert !connection.error?
148
148
 
149
149
  assert_eventually(15) do
150
150
  connection.closed?
151
151
  end
152
152
 
153
- assert_equal TestConfig.smtp_server[:identifier], connection.remote
153
+ assert_equal TestConfig.options[:public_smtp_server][:identifier], connection.remote
154
154
 
155
155
  assert_equal true, after_complete_trigger
156
156
 
157
- assert_equal 52428800, connection.max_size
157
+ assert_equal 35882577, connection.max_size
158
158
  assert_equal :esmtp, connection.protocol
159
159
  assert_equal true, connection.tls_support?
160
160
  end
@@ -163,8 +163,8 @@ class RemailerSMTPClientTest < MiniTest::Test
163
163
  def test_connect_and_send_after_start
164
164
  engine do
165
165
  connection = Remailer::SMTP::Client.open(
166
- TestConfig.smtp_server[:host],
167
- debug: STDERR
166
+ TestConfig.options[:public_smtp_server][:host],
167
+ debug: self.debug_channel
168
168
  )
169
169
 
170
170
  assert_equal :initialized, connection.state
@@ -177,8 +177,8 @@ class RemailerSMTPClientTest < MiniTest::Test
177
177
  callback_received = false
178
178
 
179
179
  connection.send_email(
180
- 'remailer+test@example.postageapp.com',
181
- 'remailer+test@example.postageapp.com',
180
+ TestConfig.options[:sender],
181
+ TestConfig.options[:recipient],
182
182
  example_message
183
183
  ) do |c|
184
184
  callback_received = true
@@ -196,8 +196,8 @@ class RemailerSMTPClientTest < MiniTest::Test
196
196
  def test_connect_and_send_dotted_message
197
197
  engine do
198
198
  connection = Remailer::SMTP::Client.open(
199
- TestConfig.smtp_server[:host],
200
- debug: STDERR
199
+ TestConfig.options[:public_smtp_server][:host],
200
+ debug: self.debug_channel
201
201
  )
202
202
 
203
203
  assert_equal :initialized, connection.state
@@ -205,8 +205,8 @@ class RemailerSMTPClientTest < MiniTest::Test
205
205
 
206
206
  result_code = nil
207
207
  connection.send_email(
208
- 'remailer+test@example.postageapp.com',
209
- 'remailer+test@example.postageapp.com',
208
+ TestConfig.options[:sender],
209
+ TestConfig.options[:recipient],
210
210
  example_message + "\r\n\.\r\nHam sandwich.\r\n"
211
211
  ) do |c|
212
212
  result_code = c
@@ -221,8 +221,8 @@ class RemailerSMTPClientTest < MiniTest::Test
221
221
  def test_connect_and_send_multiple
222
222
  engine do
223
223
  connection = Remailer::SMTP::Client.open(
224
- TestConfig.smtp_server[:host],
225
- debug: STDERR
224
+ TestConfig.options[:public_smtp_server][:host],
225
+ debug: self.debug_channel
226
226
  )
227
227
 
228
228
  assert_equal :initialized, connection.state
@@ -231,9 +231,12 @@ class RemailerSMTPClientTest < MiniTest::Test
231
231
  result_code = [ ]
232
232
 
233
233
  10.times do |n|
234
+ recipient_parts = TestConfig.options[:sender].split(/@/)
235
+ recipient_parts.insert(1, n)
236
+
234
237
  connection.send_email(
235
- 'remailer+from@example.postageapp.com',
236
- "remailer+to#{n}@example.postageapp.com",
238
+ TestConfig.options[:sender],
239
+ '%s+%d@%s' % recipient_parts,
237
240
  example_message
238
241
  ) do |c|
239
242
  result_code[n] = c
@@ -249,8 +252,8 @@ class RemailerSMTPClientTest < MiniTest::Test
249
252
  def test_connect_and_long_send
250
253
  engine do
251
254
  connection = Remailer::SMTP::Client.open(
252
- TestConfig.smtp_server[:host],
253
- debug: STDERR
255
+ TestConfig.options[:public_smtp_server][:host],
256
+ debug: self.debug_channel
254
257
  )
255
258
 
256
259
  assert_equal :initialized, connection.state
@@ -259,8 +262,8 @@ class RemailerSMTPClientTest < MiniTest::Test
259
262
  result_code = nil
260
263
 
261
264
  connection.send_email(
262
- TestConfig.sender,
263
- TestConfig.recipient,
265
+ TestConfig.options[:sender],
266
+ TestConfig.options[:recipient],
264
267
  example_message + 'a' * 100000
265
268
  ) do |c|
266
269
  callback_made = true
@@ -279,9 +282,9 @@ protected
279
282
  def example_message
280
283
  example = <<__END__
281
284
  Date: Sat, 13 Nov 2010 02:25:24 +0000
282
- From: #{TestConfig.sender}
283
- To: Remailer Test <#{TestConfig.receiver}>
284
- Message-Id: <hfLkcIByfjYoNIxCO7DMsxBTX9svsFHikIOfAiYy@#{TestConfig.sender.split(/@/).last}>
285
+ From: #{TestConfig.options[:sender]}
286
+ To: Remailer Test <#{TestConfig.options[:receiver]}>
287
+ Message-Id: <hfLkcIByfjYoNIxCO7DMsxBTX9svsFHikIOfAiYy@#{TestConfig.options[:sender].split(/@/).last}>
285
288
  Subject: Example Subject
286
289
  Mime-Version: 1.0
287
290
  Content-Type: text/plain
@@ -1,9 +1,15 @@
1
1
  require_relative '../helper'
2
2
 
3
3
  class RemailerSMTPServerTest < MiniTest::Test
4
+ def random_server_port
5
+ @server_port ||= 9000 + rand(4096)
6
+
7
+ @server_port += 1
8
+ end
9
+
4
10
  def test_bind
5
11
  engine do
6
- server_port = 8025
12
+ server_port = random_server_port
7
13
 
8
14
  server = Remailer::SMTP::Server.bind(nil, server_port)
9
15
 
@@ -13,7 +19,7 @@ class RemailerSMTPServerTest < MiniTest::Test
13
19
 
14
20
  def test_connect
15
21
  engine do
16
- server_port = 8025
22
+ server_port = random_server_port
17
23
 
18
24
  remote_ip = nil
19
25
 
@@ -30,7 +36,7 @@ class RemailerSMTPServerTest < MiniTest::Test
30
36
  client = Remailer::SMTP::Client.open(
31
37
  'localhost',
32
38
  port: server_port,
33
- debug: STDERR,
39
+ debug: self.debug_channel,
34
40
  connect: lambda { |success, host| connected_host = host }
35
41
  )
36
42
 
@@ -45,7 +51,7 @@ class RemailerSMTPServerTest < MiniTest::Test
45
51
 
46
52
  def test_transaction
47
53
  engine do
48
- server_port = 8025
54
+ server_port = random_server_port
49
55
 
50
56
  transaction = nil
51
57
 
@@ -62,7 +68,7 @@ class RemailerSMTPServerTest < MiniTest::Test
62
68
  client = Remailer::SMTP::Client.open(
63
69
  'localhost',
64
70
  port: server_port,
65
- debug: STDERR
71
+ debug: self.debug_channel
66
72
  )
67
73
 
68
74
  sender = 'sender@example.com'.freeze
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: remailer
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.0
4
+ version: 0.7.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Scott Tadman
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-01-22 00:00:00.000000000 Z
11
+ date: 2015-01-31 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: eventmachine
@@ -88,7 +88,9 @@ files:
88
88
  - lib/remailer/support.rb
89
89
  - remailer.gemspec
90
90
  - test/bin/exercise
91
- - test/config.example.rb
91
+ - test/config.example.yml
92
+ - test/config.rb
93
+ - test/config.yml.enc
92
94
  - test/helper.rb
93
95
  - test/unit/remailer_imap_client_interpreter_test.rb
94
96
  - test/unit/remailer_imap_client_test.rb
@@ -1,17 +0,0 @@
1
- TestConfig.smtp_server = {
2
- host: "smtp.example.com",
3
- identifier: "smtp.example.com"
4
- }
5
-
6
- TestConfig.public_smtp_server = {
7
- host: "smtp.gmail.com",
8
- identifier: "mx.google.com",
9
- username: "--your--username--gmail.com",
10
- password: "--your--password--",
11
- port: 587
12
- }
13
-
14
- TestConfig.proxy_server = "proxy.example.com"
15
-
16
- TestConfig.recipient = "--your--email--"
17
- TestConfig.sender = "--your--email--"