Haraka 3.0.3 → 3.0.4

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 (238) hide show
  1. package/.eslintrc.yaml +5 -9
  2. package/.prettierrc.yml +1 -0
  3. package/CONTRIBUTORS.md +11 -0
  4. package/Changes.md +1365 -1214
  5. package/Plugins.md +117 -105
  6. package/README.md +4 -13
  7. package/bin/haraka +197 -298
  8. package/config/auth_flat_file.ini +1 -0
  9. package/config/dhparams.pem +8 -0
  10. package/config/mail_from.is_resolvable.ini +4 -2
  11. package/config/me +1 -0
  12. package/config/outbound.ini +0 -2
  13. package/config/plugins +36 -35
  14. package/config/smtp.ini +0 -1
  15. package/config/smtp.json +17 -0
  16. package/config/tls_cert.pem +23 -0
  17. package/config/tls_key.pem +28 -0
  18. package/connection.js +46 -73
  19. package/contrib/bsd-rc.d/haraka +3 -1
  20. package/contrib/plugin2npm.sh +6 -36
  21. package/docs/CoreConfig.md +2 -2
  22. package/docs/Logging.md +7 -21
  23. package/docs/Outbound.md +104 -201
  24. package/docs/Plugins.md +2 -2
  25. package/docs/Transaction.md +59 -82
  26. package/docs/plugins/queue/smtp_proxy.md +5 -10
  27. package/docs/plugins/tls.md +29 -9
  28. package/endpoint.js +16 -13
  29. package/haraka.js +10 -14
  30. package/host_pool.js +5 -5
  31. package/line_socket.js +3 -4
  32. package/logger.js +44 -28
  33. package/outbound/client_pool.js +27 -23
  34. package/outbound/config.js +4 -6
  35. package/outbound/fsync_writestream.js +1 -1
  36. package/outbound/hmail.js +178 -218
  37. package/outbound/index.js +86 -99
  38. package/outbound/qfile.js +1 -1
  39. package/outbound/queue.js +51 -44
  40. package/outbound/timer_queue.js +3 -2
  41. package/outbound/tls.js +19 -7
  42. package/package.json +59 -48
  43. package/plugins/.eslintrc.yaml +0 -6
  44. package/plugins/auth/auth_base.js +4 -2
  45. package/plugins/auth/auth_proxy.js +14 -12
  46. package/plugins/auth/auth_vpopmaild.js +1 -1
  47. package/plugins/block_me.js +1 -1
  48. package/plugins/data.signatures.js +2 -4
  49. package/plugins/early_talker.js +2 -1
  50. package/plugins/mail_from.is_resolvable.js +65 -135
  51. package/plugins/queue/deliver.js +4 -5
  52. package/plugins/queue/lmtp.js +11 -14
  53. package/plugins/queue/qmail-queue.js +2 -2
  54. package/plugins/queue/quarantine.js +2 -2
  55. package/plugins/queue/rabbitmq.js +16 -17
  56. package/plugins/queue/smtp_forward.js +3 -3
  57. package/plugins/queue/smtp_proxy.js +10 -1
  58. package/plugins/queue/test.js +2 -2
  59. package/plugins/rcpt_to.host_list_base.js +5 -5
  60. package/plugins/rcpt_to.in_host_list.js +2 -2
  61. package/plugins/relay.js +6 -7
  62. package/plugins/reseed_rng.js +1 -1
  63. package/plugins/status.js +37 -33
  64. package/plugins/tls.js +2 -2
  65. package/plugins/xclient.js +3 -2
  66. package/plugins.js +50 -54
  67. package/run_tests +3 -30
  68. package/server.js +190 -190
  69. package/smtp_client.js +30 -23
  70. package/{tests → test}/config/plugins +0 -2
  71. package/{tests → test}/config/smtp.ini +1 -1
  72. package/test/config/tls/example.com/_.example.com.key +28 -0
  73. package/test/config/tls/example.com/example.com.crt +25 -0
  74. package/test/connection.js +302 -0
  75. package/test/endpoint.js +94 -0
  76. package/{tests → test}/fixtures/line_socket.js +1 -1
  77. package/{tests → test}/fixtures/util_hmailitem.js +19 -25
  78. package/{tests → test}/host_pool.js +42 -57
  79. package/test/logger.js +258 -0
  80. package/test/outbound/hmail.js +141 -0
  81. package/test/outbound/index.js +220 -0
  82. package/test/outbound/qfile.js +126 -0
  83. package/test/outbound_bounce_net_errors.js +142 -0
  84. package/{tests → test}/outbound_bounce_rfc3464.js +110 -122
  85. package/test/plugins/auth/auth_base.js +484 -0
  86. package/test/plugins/auth/auth_vpopmaild.js +83 -0
  87. package/test/plugins/early_talker.js +104 -0
  88. package/test/plugins/mail_from.is_resolvable.js +35 -0
  89. package/test/plugins/queue/smtp_forward.js +206 -0
  90. package/test/plugins/rcpt_to.host_list_base.js +122 -0
  91. package/test/plugins/rcpt_to.in_host_list.js +193 -0
  92. package/test/plugins/relay.js +303 -0
  93. package/test/plugins/status.js +130 -0
  94. package/test/plugins/tls.js +70 -0
  95. package/test/plugins.js +228 -0
  96. package/test/rfc1869.js +73 -0
  97. package/test/server.js +491 -0
  98. package/test/smtp_client.js +299 -0
  99. package/test/tls_socket.js +273 -0
  100. package/test/transaction.js +270 -0
  101. package/tls_socket.js +202 -252
  102. package/transaction.js +8 -23
  103. package/CONTRIBUTING.md +0 -1
  104. package/bin/dkimverify +0 -40
  105. package/config/access.domains +0 -13
  106. package/config/attachment.ctype.regex +0 -2
  107. package/config/attachment.filename.regex +0 -1
  108. package/config/avg.ini +0 -5
  109. package/config/bounce.ini +0 -15
  110. package/config/data.headers.ini +0 -61
  111. package/config/dkim/dkim_key_gen.sh +0 -78
  112. package/config/dkim_sign.ini +0 -4
  113. package/config/dkim_verify.ini +0 -7
  114. package/config/dnsbl.ini +0 -23
  115. package/config/greylist.ini +0 -43
  116. package/config/helo.checks.ini +0 -52
  117. package/config/messagesniffer.ini +0 -18
  118. package/config/spamassassin.ini +0 -56
  119. package/dkim.js +0 -614
  120. package/docs/plugins/avg.md +0 -35
  121. package/docs/plugins/bounce.md +0 -69
  122. package/docs/plugins/clamd.md +0 -147
  123. package/docs/plugins/esets.md +0 -8
  124. package/docs/plugins/greylist.md +0 -90
  125. package/docs/plugins/helo.checks.md +0 -135
  126. package/docs/plugins/messagesniffer.md +0 -163
  127. package/docs/plugins/spamassassin.md +0 -180
  128. package/outbound/mx_lookup.js +0 -70
  129. package/plugins/auth/auth_ldap.js +0 -3
  130. package/plugins/avg.js +0 -162
  131. package/plugins/backscatterer.js +0 -25
  132. package/plugins/bounce.js +0 -381
  133. package/plugins/clamd.js +0 -382
  134. package/plugins/data.uribl.js +0 -4
  135. package/plugins/dkim_sign.js +0 -395
  136. package/plugins/dkim_verify.js +0 -62
  137. package/plugins/dns_list_base.js +0 -221
  138. package/plugins/dnsbl.js +0 -146
  139. package/plugins/dnswl.js +0 -58
  140. package/plugins/esets.js +0 -71
  141. package/plugins/graph.js +0 -5
  142. package/plugins/greylist.js +0 -645
  143. package/plugins/helo.checks.js +0 -533
  144. package/plugins/messagesniffer.js +0 -381
  145. package/plugins/rcpt_to.ldap.js +0 -3
  146. package/plugins/rcpt_to.max_count.js +0 -24
  147. package/plugins/spamassassin.js +0 -384
  148. package/tests/config/dkim/example.com/dns +0 -29
  149. package/tests/config/dkim/example.com/private +0 -6
  150. package/tests/config/dkim/example.com/public +0 -4
  151. package/tests/config/dkim/example.com/selector +0 -1
  152. package/tests/config/dkim.private.key +0 -6
  153. package/tests/config/dkim_sign.ini +0 -4
  154. package/tests/config/helo.checks.ini +0 -52
  155. package/tests/connection.js +0 -327
  156. package/tests/endpoint.js +0 -128
  157. package/tests/fixtures/vm_harness.js +0 -59
  158. package/tests/logger.js +0 -327
  159. package/tests/outbound/hmail.js +0 -112
  160. package/tests/outbound/index.js +0 -324
  161. package/tests/outbound/qfile.js +0 -67
  162. package/tests/outbound_bounce_net_errors.js +0 -173
  163. package/tests/plugins/auth/auth_base.js +0 -463
  164. package/tests/plugins/auth/auth_vpopmaild.js +0 -91
  165. package/tests/plugins/bounce.js +0 -307
  166. package/tests/plugins/clamd.js +0 -224
  167. package/tests/plugins/deprecated/relay_acl.js +0 -140
  168. package/tests/plugins/deprecated/relay_all.js +0 -59
  169. package/tests/plugins/dkim_sign.js +0 -315
  170. package/tests/plugins/dkim_signer.js +0 -108
  171. package/tests/plugins/dns_list_base.js +0 -259
  172. package/tests/plugins/dnsbl.js +0 -101
  173. package/tests/plugins/early_talker.js +0 -115
  174. package/tests/plugins/greylist.js +0 -58
  175. package/tests/plugins/helo.checks.js +0 -525
  176. package/tests/plugins/mail_from.is_resolvable.js +0 -116
  177. package/tests/plugins/queue/smtp_forward.js +0 -221
  178. package/tests/plugins/rcpt_to.host_list_base.js +0 -132
  179. package/tests/plugins/rcpt_to.in_host_list.js +0 -218
  180. package/tests/plugins/relay.js +0 -339
  181. package/tests/plugins/spamassassin.js +0 -171
  182. package/tests/plugins/status.js +0 -138
  183. package/tests/plugins/tls.js +0 -84
  184. package/tests/plugins.js +0 -247
  185. package/tests/rfc1869.js +0 -61
  186. package/tests/server.js +0 -510
  187. package/tests/smtp_client/auth.js +0 -105
  188. package/tests/smtp_client/basic.js +0 -101
  189. package/tests/smtp_client.js +0 -80
  190. package/tests/tls_socket.js +0 -333
  191. package/tests/transaction.js +0 -284
  192. /package/docs/{plugins → deprecated}/dkim_sign.md +0 -0
  193. /package/docs/{plugins → deprecated}/dkim_verify.md +0 -0
  194. /package/docs/{plugins → deprecated}/dnsbl.md +0 -0
  195. /package/docs/{plugins → deprecated}/dnswl.md +0 -0
  196. /package/{tests → test}/.eslintrc.yaml +0 -0
  197. /package/{tests → test}/config/auth_flat_file.ini +0 -0
  198. /package/{tests → test}/config/dhparams.pem +0 -0
  199. /package/{tests → test}/config/host_list +0 -0
  200. /package/{tests → test}/config/outbound_tls_cert.pem +0 -0
  201. /package/{tests → test}/config/outbound_tls_key.pem +0 -0
  202. /package/{tests → test}/config/smtp_forward.ini +0 -0
  203. /package/{tests → test}/config/tls/ec.pem +0 -0
  204. /package/{tests → test}/config/tls/haraka.local.pem +0 -0
  205. /package/{tests → test}/config/tls/mismatched.pem +0 -0
  206. /package/{tests → test}/config/tls.ini +0 -0
  207. /package/{tests → test}/config/tls_cert.pem +0 -0
  208. /package/{tests → test}/config/tls_key.pem +0 -0
  209. /package/{tests → test}/fixtures/todo_qfile.txt +0 -0
  210. /package/{tests → test}/installation/config/test-plugin-flat +0 -0
  211. /package/{tests → test}/installation/config/test-plugin.ini +0 -0
  212. /package/{tests → test}/installation/config/tls.ini +0 -0
  213. /package/{tests → test}/installation/node_modules/load_first/index.js +0 -0
  214. /package/{tests → test}/installation/node_modules/load_first/package.json +0 -0
  215. /package/{tests → test}/installation/node_modules/test-plugin/config/test-plugin-flat +0 -0
  216. /package/{tests → test}/installation/node_modules/test-plugin/config/test-plugin.ini +0 -0
  217. /package/{tests → test}/installation/node_modules/test-plugin/package.json +0 -0
  218. /package/{tests → test}/installation/node_modules/test-plugin/test-plugin.js +0 -0
  219. /package/{tests → test}/installation/plugins/base_plugin.js +0 -0
  220. /package/{tests → test}/installation/plugins/folder_plugin/index.js +0 -0
  221. /package/{tests → test}/installation/plugins/folder_plugin/package.json +0 -0
  222. /package/{tests → test}/installation/plugins/inherits.js +0 -0
  223. /package/{tests → test}/installation/plugins/load_first.js +0 -0
  224. /package/{tests → test}/installation/plugins/plugin.js +0 -0
  225. /package/{tests → test}/installation/plugins/tls.js +0 -0
  226. /package/{tests → test}/loud/config/dhparams.pem +0 -0
  227. /package/{tests → test}/loud/config/tls/goobered.pem +0 -0
  228. /package/{tests → test}/loud/config/tls.ini +0 -0
  229. /package/{tests → test}/mail_specimen/base64-root-part.txt +0 -0
  230. /package/{tests → test}/mail_specimen/varied-fold-lengths-preserve-data.txt +0 -0
  231. /package/{tests → test}/queue/1507509981169_1507509981169_0_61403_e0Y0Ym_1_fixed +0 -0
  232. /package/{tests → test}/queue/1507509981169_1507509981169_0_61403_e0Y0Ym_1_haraka +0 -0
  233. /package/{tests → test}/queue/1508269674999_1508269674999_0_34002_socVUF_1_haraka +0 -0
  234. /package/{tests → test}/queue/1508455115683_1508455115683_0_90253_9Q4o4V_1_haraka +0 -0
  235. /package/{tests → test}/queue/multibyte +0 -0
  236. /package/{tests → test}/queue/plain +0 -0
  237. /package/{tests → test}/queue/zero-length +0 -0
  238. /package/{tests → test}/test-queue/delete-me +0 -0
@@ -1,18 +1,19 @@
1
1
  'use strict';
2
2
 
3
- // Testing bounce email contents related to errors occuring during STMP dialog
3
+ // Testing bounce email contents related to errors occuring during SMTP dialog
4
4
 
5
5
  // About running the tests:
6
6
  // - Making a folder for queuing files
7
7
  // - Creating a HMailItem instance using fixtures/util_hmailitem
8
- // - Talk some STMP in the playbook
8
+ // - Talk some SMTP in the playbook
9
9
  // - Test the outcome by replacing trigger functions with our testing code (outbound.send_email, HMailItem.temp_fail, ...)
10
10
  // At one point, the mocked remote SMTP says "5XX" or "4XX" and we test that
11
11
  // * outbound.send_email is called with a RFC3464 bounce message
12
12
  // * or, in case of 4XX: that temp_fail is called and dsn vars are available)
13
13
 
14
- const fs = require('fs');
15
- const path = require('path');
14
+ const assert = require('node:assert')
15
+ const fs = require('node:fs');
16
+ const path = require('node:path');
16
17
 
17
18
  const util_hmailitem = require('./fixtures/util_hmailitem');
18
19
  const TODOItem = require('../outbound/todo');
@@ -30,62 +31,55 @@ const outbound_context = {
30
31
 
31
32
  const queue_dir = path.resolve(__dirname, 'test-queue');
32
33
 
33
- exports.bounce_3464 = {
34
- setUp : done => {
34
+ describe('outbound_bounce_rfc3464', () => {
35
+ beforeEach((done) => {
35
36
  fs.exists(queue_dir, exists => {
36
- if (exists) {
37
- done();
38
- }
39
- else {
40
- fs.mkdir(queue_dir, err => {
41
- if (err) {
42
- return done(err);
43
- }
44
- done();
45
- });
46
- }
47
- });
48
- },
49
- tearDown: done => {
50
- fs.exists(queue_dir, exists => {
51
- if (exists) {
52
- const files = fs.readdirSync(queue_dir);
53
- files.forEach((file,index) => {
54
- const curPath = path.resolve(queue_dir, file);
55
- if (fs.lstatSync(curPath).isDirectory()) { // recurse
56
- return done(new Error(`did not expect an sub folder here ("${curPath}")! cancel`));
57
- }
58
- });
59
- files.forEach((file,index) => {
60
- const curPath = path.resolve(queue_dir, file);
61
- fs.unlinkSync(curPath);
62
- });
63
- done();
64
- }
65
- else {
37
+ if (exists) return done();
38
+
39
+ fs.mkdir(queue_dir, err => {
40
+ if (err) return done(err);
66
41
  done();
67
- }
68
- });
69
- },
70
- 'test MAIL FROM responded with 500 5.0.0 triggers send_email() containing bounce msg with codes and message': test => {
71
- test.expect(9);
42
+ })
43
+ })
44
+ })
72
45
 
73
- util_hmailitem.newMockHMailItem(outbound_context, test, {}, mock_hmail => {
46
+ afterEach((done) => {
47
+ fs.exists(queue_dir, exists => {
48
+ if (!exists) return done()
49
+
50
+ const files = fs.readdirSync(queue_dir);
51
+ files.forEach((file,index) => {
52
+ const curPath = path.resolve(queue_dir, file);
53
+ if (fs.lstatSync(curPath).isDirectory()) { // recurse
54
+ return done(new Error(`did not expect an sub folder here ("${curPath}")! cancel`));
55
+ }
56
+ })
57
+ files.forEach((file,index) => {
58
+ const curPath = path.resolve(queue_dir, file);
59
+ fs.unlinkSync(curPath);
60
+ })
61
+ done();
62
+ })
63
+ })
64
+
65
+ it('test MAIL FROM responded with 500 5.0.0 triggers send_email() containing bounce msg with codes and message', (done) => {
66
+
67
+ util_hmailitem.newMockHMailItem(outbound_context, done, {}, (mock_hmail) => {
74
68
  const mock_socket = mock_sock.connect('testhost', 'testport');
75
69
  mock_socket.writable = true;
76
70
 
77
71
  const orig_send_email = outbound_context.exports.send_email;
72
+
78
73
  outbound_context.exports.send_email = (from, to, contents, cb, opts) => {
79
- test.ok(true, 'outbound.send_email called');
80
- test.ok(contents.match(/^Content-type: message\/delivery-status/m), 'its a bounce report');
81
- test.ok(contents.match(/^Final-Recipient: rfc822;recipient@domain/m), 'bounce report contains final recipient');
82
- test.ok(contents.match(/^Action: failed/m), 'DATA-5XX: bounce report contains action field');
83
- test.ok(contents.match(/^Status: 5\.0\.0/m), 'bounce report contains status field with ext. smtp code');
84
- test.ok(contents.match(/Absolutely not acceptable\. Basic Test Only\./), 'original upstream message available');
74
+ assert.ok(true, 'outbound.send_email called');
75
+ assert.ok(contents.match(/^Content-type: message\/delivery-status/m), 'its a bounce report');
76
+ assert.ok(contents.match(/^Final-Recipient: rfc822;recipient@domain/m), 'bounce report contains final recipient');
77
+ assert.ok(contents.match(/^Action: failed/m), 'DATA-5XX: bounce report contains action field');
78
+ assert.ok(contents.match(/^Status: 5\.0\.0/m), 'bounce report contains status field with ext. smtp code');
79
+ assert.ok(contents.match(/Absolutely not acceptable\. Basic Test Only\./), 'original upstream message available');
85
80
  outbound_context.exports.send_email = orig_send_email;
86
-
87
- test.done();
88
- };
81
+ done()
82
+ }
89
83
 
90
84
  // The playbook
91
85
  // from remote: This line is to be sent (from an mocked remote SMTP) to haraka outbound. This is done in this test.
@@ -105,27 +99,27 @@ exports.bounce_3464 = {
105
99
  { 'from': 'haraka', 'test': 'QUIT', end_test: true }, // this will trigger calling the callback
106
100
  ];
107
101
 
108
- util_hmailitem.playTestSmtpConversation(mock_hmail, mock_socket, test, testPlaybook, () => {
102
+ util_hmailitem.playTestSmtpConversation(mock_hmail, mock_socket, done, testPlaybook, () => {
103
+ })
104
+ })
105
+ })
109
106
 
110
- });
111
- });
112
- },
113
- 'test that early response of 3XX triggers temp_fail': test => {
114
- test.expect(7);
107
+ it('test that early response of 3XX triggers temp_fail', (done) => {
115
108
 
116
- util_hmailitem.newMockHMailItem(outbound_context, test, {}, mock_hmail => {
109
+ util_hmailitem.newMockHMailItem(outbound_context, done, {}, mock_hmail => {
117
110
  const mock_socket = mock_sock.connect('testhost', 'testport');
118
111
  mock_socket.writable = true;
119
112
 
120
113
  const orig_temp_fail = HMailItem.prototype.temp_fail;
121
114
  HMailItem.prototype.temp_fail = function (err, opts) {
122
- test.ok(true, 'early-3XX: outbound.temp_fail called');
123
- test.equal('3.0.0', this.todo.rcpt_to[0].dsn_status, 'early-3XX: dsn status = 3.0.0');
124
- test.equal('delayed', this.todo.rcpt_to[0].dsn_action, 'early-3XX: dsn action = delayed');
125
- test.ok(this.todo.rcpt_to[0].dsn_smtp_response.match(/No time for you right now/), 'early-3XX: original upstream message available');
115
+ assert.ok(true, 'early-3XX: outbound.temp_fail called');
116
+ assert.equal('3.0.0', this.todo.rcpt_to[0].dsn_status, 'early-3XX: dsn status = 3.0.0');
117
+ assert.equal('delayed', this.todo.rcpt_to[0].dsn_action, 'early-3XX: dsn action = delayed');
118
+ assert.ok(this.todo.rcpt_to[0].dsn_smtp_response.match(/No time for you right now/), 'early-3XX: original upstream message available');
126
119
  HMailItem.prototype.temp_fail = orig_temp_fail;
127
- test.done();
128
- };
120
+ done()
121
+ }
122
+
129
123
  const testPlaybook = [
130
124
  { 'from': 'remote', 'line': '220 testing-smtp' },
131
125
 
@@ -139,26 +133,26 @@ exports.bounce_3464 = {
139
133
  { 'from': 'haraka', 'test': 'QUIT', end_test: true }, // this will trigger calling the callback
140
134
  ];
141
135
 
142
- util_hmailitem.playTestSmtpConversation(mock_hmail, mock_socket, test, testPlaybook, () => {
136
+ util_hmailitem.playTestSmtpConversation(mock_hmail, mock_socket, done, testPlaybook, () => {
137
+
138
+ })
139
+ })
140
+ })
143
141
 
144
- });
145
- });
146
- },
147
- 'test that response of 4XX for RCPT-TO triggers temp_fail': test => {
148
- test.expect(8);
142
+ it('test that response of 4XX for RCPT-TO triggers temp_fail', (done) => {
149
143
 
150
- util_hmailitem.newMockHMailItem(outbound_context, test, {}, mock_hmail => {
144
+ util_hmailitem.newMockHMailItem(outbound_context, done, {}, mock_hmail => {
151
145
  const mock_socket = mock_sock.connect('testhost', 'testport');
152
146
  mock_socket.writable = true;
153
147
 
154
148
  const orig_temp_fail = HMailItem.prototype.temp_fail;
155
149
  HMailItem.prototype.temp_fail = function (err, opts) {
156
- test.ok(true, 'RCPT-TO-4XX: outbound.temp_fail called');
157
- test.equal('4.0.0', this.todo.rcpt_to[0].dsn_status, 'RCPT-TO-4XX: dsn status = 4.0.0');
158
- test.equal('delayed', this.todo.rcpt_to[0].dsn_action, 'RCPT-TO-4XX: dsn action = delayed');
159
- test.ok(this.todo.rcpt_to[0].dsn_smtp_response.match(/Currently not available\. Try again later\./), 'RCPT-TO-4XX: original upstream message available');
150
+ assert.ok(true, 'RCPT-TO-4XX: outbound.temp_fail called');
151
+ assert.equal('4.0.0', this.todo.rcpt_to[0].dsn_status, 'RCPT-TO-4XX: dsn status = 4.0.0');
152
+ assert.equal('delayed', this.todo.rcpt_to[0].dsn_action, 'RCPT-TO-4XX: dsn action = delayed');
153
+ assert.ok(this.todo.rcpt_to[0].dsn_smtp_response.match(/Currently not available\. Try again later\./), 'RCPT-TO-4XX: original upstream message available');
160
154
  HMailItem.prototype.temp_fail = orig_temp_fail;
161
- test.done();
155
+ done()
162
156
  };
163
157
  const testPlaybook = [
164
158
  { 'from': 'remote', 'line': '220 testing-smtp' },
@@ -176,26 +170,24 @@ exports.bounce_3464 = {
176
170
  { 'from': 'haraka', 'test': 'QUIT', end_test: true }, // this will trigger calling the callback
177
171
  ];
178
172
 
179
- util_hmailitem.playTestSmtpConversation(mock_hmail, mock_socket, test, testPlaybook, () => {
173
+ util_hmailitem.playTestSmtpConversation(mock_hmail, mock_socket, done, testPlaybook, () => {})
174
+ })
175
+ })
180
176
 
181
- });
182
- });
183
- },
184
- 'test that response of 4XX for DATA triggers temp_fail': test => {
185
- test.expect(9);
177
+ it('test that response of 4XX for DATA triggers temp_fail', (done) => {
186
178
 
187
- util_hmailitem.newMockHMailItem(outbound_context, test, {}, mock_hmail => {
179
+ util_hmailitem.newMockHMailItem(outbound_context, done, {}, mock_hmail => {
188
180
  const mock_socket = mock_sock.connect('testhost', 'testport');
189
181
  mock_socket.writable = true;
190
182
 
191
183
  const orig_temp_fail = HMailItem.prototype.temp_fail;
192
184
  HMailItem.prototype.temp_fail = function (err, opts) {
193
- test.ok(true, 'DATA-4XX: outbound.temp_fail called');
194
- test.equal('4.6.0', this.todo.rcpt_to[0].dsn_status, 'DATA-4XX: dsn status = 4.6.0');
195
- test.equal('delayed', this.todo.rcpt_to[0].dsn_action, 'DATA-4XX: dsn action = delayed');
196
- test.ok(this.todo.rcpt_to[0].dsn_smtp_response.match(/Currently I do not like ascii art cats\./), 'DATA-4XX: original upstream message available');
185
+ assert.ok(true, 'DATA-4XX: outbound.temp_fail called');
186
+ assert.equal('4.6.0', this.todo.rcpt_to[0].dsn_status, 'DATA-4XX: dsn status = 4.6.0');
187
+ assert.equal('delayed', this.todo.rcpt_to[0].dsn_action, 'DATA-4XX: dsn action = delayed');
188
+ assert.ok(this.todo.rcpt_to[0].dsn_smtp_response.match(/Currently I do not like ascii art cats\./), 'DATA-4XX: original upstream message available');
197
189
  HMailItem.prototype.temp_fail = orig_temp_fail;
198
- test.done();
190
+ done()
199
191
  };
200
192
  const testPlaybook = [
201
193
  { 'from': 'remote', 'line': '220 testing-smtp' },
@@ -217,28 +209,28 @@ exports.bounce_3464 = {
217
209
  { 'from': 'haraka', 'test': 'QUIT', end_test: true }, // this will trigger calling the callback
218
210
  ];
219
211
 
220
- util_hmailitem.playTestSmtpConversation(mock_hmail, mock_socket, test, testPlaybook, () => {
212
+ util_hmailitem.playTestSmtpConversation(mock_hmail, mock_socket, done, testPlaybook, () => {
213
+
214
+ })
215
+ })
216
+ })
221
217
 
222
- });
223
- });
224
- },
225
- 'test that response of 5XX for RCPT-TO triggers send_email() containing bounce msg with codes and message': test => {
226
- test.expect(10);
218
+ it('test that response of 5XX for RCPT-TO triggers send_email() containing bounce msg with codes and message', (done) => {
227
219
 
228
- util_hmailitem.newMockHMailItem(outbound_context, test, {}, mock_hmail => {
220
+ util_hmailitem.newMockHMailItem(outbound_context, done, {}, mock_hmail => {
229
221
  const mock_socket = mock_sock.connect('testhost', 'testport');
230
222
  mock_socket.writable = true;
231
223
 
232
224
  const orig_send_email = outbound_context.exports.send_email;
233
225
  outbound_context.exports.send_email = (from, to, contents, cb, opts) => {
234
- test.ok(true, 'RCPT-TO-5XX: outbound.send_email called');
235
- test.ok(contents.match(/^Content-type: message\/delivery-status/m), 'RCPT-TO-5XX: its a bounce report');
236
- test.ok(contents.match(/^Final-Recipient: rfc822;recipient@domain/m), 'RCPT-TO-5XX: bounce report contains final recipient');
237
- test.ok(contents.match(/^Action: failed/m), 'DATA-5XX: bounce report contains action field');
238
- test.ok(contents.match(/^Status: 5\.1\.1/m), 'RCPT-TO-5XX: bounce report contains status field with our ext. smtp code');
239
- test.ok(contents.match(/Not available and will not come back/), 'RCPT-TO-5XX: original upstream message available');
226
+ assert.ok(true, 'RCPT-TO-5XX: outbound.send_email called');
227
+ assert.ok(contents.match(/^Content-type: message\/delivery-status/m), 'RCPT-TO-5XX: its a bounce report');
228
+ assert.ok(contents.match(/^Final-Recipient: rfc822;recipient@domain/m), 'RCPT-TO-5XX: bounce report contains final recipient');
229
+ assert.ok(contents.match(/^Action: failed/m), 'DATA-5XX: bounce report contains action field');
230
+ assert.ok(contents.match(/^Status: 5\.1\.1/m), 'RCPT-TO-5XX: bounce report contains status field with our ext. smtp code');
231
+ assert.ok(contents.match(/Not available and will not come back/), 'RCPT-TO-5XX: original upstream message available');
240
232
  outbound_context.exports.send_email = orig_send_email;
241
- test.done();
233
+ done()
242
234
  };
243
235
  const testPlaybook = [
244
236
  { 'from': 'remote', 'line': '220 testing-smtp' },
@@ -256,28 +248,26 @@ exports.bounce_3464 = {
256
248
  { 'from': 'haraka', 'test': 'QUIT', end_test: true }, // this will trigger calling the callback
257
249
  ];
258
250
 
259
- util_hmailitem.playTestSmtpConversation(mock_hmail, mock_socket, test, testPlaybook, () => {
251
+ util_hmailitem.playTestSmtpConversation(mock_hmail, mock_socket, done, testPlaybook, () => {})
252
+ })
253
+ })
260
254
 
261
- });
262
- });
263
- },
264
- 'test that response of 5XX for DATA triggers send_email() containing bounce msg with codes and message': test => {
265
- test.expect(11);
255
+ it('test that response of 5XX for DATA triggers send_email() containing bounce msg with codes and message', (done) => {
266
256
 
267
- util_hmailitem.newMockHMailItem(outbound_context, test, {}, mock_hmail => {
257
+ util_hmailitem.newMockHMailItem(outbound_context, done, {}, mock_hmail => {
268
258
  const mock_socket = mock_sock.connect('testhost', 'testport');
269
259
  mock_socket.writable = true;
270
260
 
271
261
  const orig_send_email = outbound_context.exports.send_email;
272
262
  outbound_context.exports.send_email = (from, to, contents, cb, opts) => {
273
- test.ok(true, 'DATA-5XX: outbound.send_email called');
274
- test.ok(contents.match(/^Content-type: message\/delivery-status/m), 'DATA-5XX: its a bounce report');
275
- test.ok(contents.match(/^Final-Recipient: rfc822;recipient@domain/m), 'DATA-5XX: bounce report contains final recipient');
276
- test.ok(contents.match(/^Action: failed/m), 'DATA-5XX: bounce report contains action field');
277
- test.ok(contents.match(/^Status: 5\.6\.0/m), 'DATA-5XX: bounce report contains status field with our ext. smtp code');
278
- test.ok(contents.match(/I never did and will like ascii art cats/), 'DATA-5XX: original upstream message available');
263
+ assert.ok(true, 'DATA-5XX: outbound.send_email called');
264
+ assert.ok(contents.match(/^Content-type: message\/delivery-status/m), 'DATA-5XX: its a bounce report');
265
+ assert.ok(contents.match(/^Final-Recipient: rfc822;recipient@domain/m), 'DATA-5XX: bounce report contains final recipient');
266
+ assert.ok(contents.match(/^Action: failed/m), 'DATA-5XX: bounce report contains action field');
267
+ assert.ok(contents.match(/^Status: 5\.6\.0/m), 'DATA-5XX: bounce report contains status field with our ext. smtp code');
268
+ assert.ok(contents.match(/I never did and will like ascii art cats/), 'DATA-5XX: original upstream message available');
279
269
  outbound_context.exports.send_email = orig_send_email;
280
- test.done();
270
+ done()
281
271
  };
282
272
  const testPlaybook = [
283
273
  { 'from': 'remote', 'line': '220 testing-smtp' },
@@ -299,10 +289,8 @@ exports.bounce_3464 = {
299
289
  { 'from': 'haraka', 'test': 'QUIT', end_test: true }, // this will trigger calling the callback
300
290
  ];
301
291
 
302
- util_hmailitem.playTestSmtpConversation(mock_hmail, mock_socket, test, testPlaybook, () => {
303
-
304
- });
305
- });
306
- },
307
- }
292
+ util_hmailitem.playTestSmtpConversation(mock_hmail, mock_socket, done, testPlaybook, () => {})
293
+ })
294
+ })
295
+ })
308
296