mail_to_hip_chat 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,325 @@
1
+ POST /notifications/create HTTP/1.1
2
+ user-agent: CloudMailin Server
3
+ content-type: multipart/form-data; boundary=----cloudmailinboundry
4
+ connection: close
5
+ host: nvg7.showoff.io
6
+ content-length: 13721
7
+ x-forwarded-for: undefined
8
+
9
+ ------cloudmailinboundry
10
+ Content-Disposition: form-data; name="to"
11
+
12
+ <60453ebc38386e438aae@cloudmailin.net>
13
+ ------cloudmailinboundry
14
+ Content-Disposition: form-data; name="disposable"
15
+
16
+
17
+ ------cloudmailinboundry
18
+ Content-Disposition: form-data; name="from"
19
+
20
+ bounces+5166-c14f-60453ebc38386e438aae=cloudmailin.net@mail.airbrakeapp.com
21
+ ------cloudmailinboundry
22
+ Content-Disposition: form-data; name="subject"
23
+
24
+ [Mail Funnel] Unknown: RuntimeError: Test Exception
25
+ ------cloudmailinboundry
26
+ Content-Disposition: form-data; name="message"
27
+
28
+ DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=airbrake.io; h=date:from
29
+ :to:message-id:subject:mime-version:content-type
30
+ :content-transfer-encoding; s=smtpapi; bh=KKlxopAqERodeAyNLF18/K
31
+ MxQj0=; b=b47TkkTEkDIOxbpJ+XcYGDuM2vgffC40AL4MyhSTZ2y9mPb66cWCIR
32
+ WoV9x3g7hNK0Wn5LCRVNV9GmHmNUB2OSgVddE4/8H9YIe/iikNU0xWyRgqIoB07z
33
+ Cya5nE3FnDkrrvAj1HOK4j7Zh8GKzWWzc7DAcMjdxZoKfi64Th7Lw=
34
+ DomainKey-Signature: a=rsa-sha1; c=nofws; d=airbrake.io; h=date:from:to
35
+ :message-id:subject:mime-version:content-type
36
+ :content-transfer-encoding; q=dns; s=smtpapi; b=AXe+uQRX1MlGoqN6
37
+ 4mQYhNdSpzF06o/LOZfPES1q/IrUd/Ri4xxB7T8vRJj2x+iRPHaqBjc54sLA05Y1
38
+ edPVLUba3fHn4/lVWJA8L5/xZNdFtSNQO2TaHY4EFVXo+nnAY9fDeRQnzNdmnfxd
39
+ uUTg6/dIgKxzscMjqd+7+0lbkxM=
40
+ Received: by 10.16.69.80 with SMTP id mf39.6551.4EC9B2C84
41
+ Sun, 20 Nov 2011 20:09:12 -0600 (CST)
42
+ Received: from mail-gw.airbrakeapp.com (unknown [10.9.180.5])
43
+ by mi12 (SG) with ESMTP id 4ec9b2c8.318c.10f7ae
44
+ for <60453ebc38386e438aae@cloudmailin.net>; Sun, 20 Nov 2011 20:09:12 -0600 (CST)
45
+ Received: from mail-gw.airbrakeapp.com (localhost.localdomain [127.0.0.1])
46
+ by mail-gw.airbrakeapp.com (Postfix) with ESMTP id 39B5460C005
47
+ for <60453ebc38386e438aae@cloudmailin.net>; Sun, 20 Nov 2011 18:09:12 -0800 (PST)
48
+ DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=airbrakeapp.com; h=date
49
+ :from:to:message-id:subject:mime-version:content-type
50
+ :content-transfer-encoding; s=mailgw; bh=dSQtQ4kIv7VPSmdHkHwB2/5
51
+ 9ITw=; b=pF/mMER+KTRXiuEC5VTNp82AnpOGheZWHlRSUE2cah8KUMgPBAHslOE
52
+ 9ah3Y/4KhZsQb3qN/X3frclbJTvOpV5ZW5Iwdt/7Z8hxWXu7LrREuFmn9GkSICdF
53
+ odXLlhv+djVBAQ3NiboOBDE2AWt2gdumOYamPpvscBcS9I3gnCD0=
54
+ Received: from airbrake.io (app04.c45163.blueboxgrid.com [67.214.215.208])
55
+ by mail-gw.airbrakeapp.com (Postfix) with ESMTP id 3661A60C004
56
+ for <60453ebc38386e438aae@cloudmailin.net>; Sun, 20 Nov 2011 18:09:12 -0800 (PST)
57
+ Date: Sun, 20 Nov 2011 18:09:12 -0800
58
+ From: Airbrake <donotreply@airbrake.io>
59
+ To: 60453ebc38386e438aae@cloudmailin.net
60
+ Message-ID: <4ec9b2c832055_5d79107e0a6c102209@app04.c45163.blueboxgrid.com.mail>
61
+ Subject: [Mail Funnel] Unknown: RuntimeError: Test Exception
62
+ Mime-Version: 1.0
63
+ Content-Type: multipart/alternative;
64
+ boundary="--==_mimepart_4ec9b2c82d851_5d79107e0a6c10217ae";
65
+ charset=UTF-8
66
+ Content-Transfer-Encoding: 7bit
67
+ X-Sendgrid-EID: nmcxq1y3RJKAPQ7Sa91nulloMuqlCCsUjgwVCyO7bUPisBsGZlon70J9+djovKtmzRRVbZRyHuCVVM5ojJD9O0lyIkJT31YYJGiqJ6azBv0rJirHI2zEqJQzKjVTxeWI4PGnpucBIOio+5Uj0gwTgosIpF2aJjCuIJ3o4funNQ8=
68
+
69
+
70
+ ----==_mimepart_4ec9b2c82d851_5d79107e0a6c10217ae
71
+ Date: Sun, 20 Nov 2011 18:09:12 -0800
72
+ Mime-Version: 1.0
73
+ Content-Type: text/plain;
74
+ charset=UTF-8
75
+ Content-Transfer-Encoding: 7bit
76
+ Content-ID: <4ec9b2c8307a9_5d79107e0a6c10218e7@app04.c45163.blueboxgrid.com.mail>
77
+
78
+
79
+
80
+ Project: Mail Funnel
81
+ Environment: Unknown
82
+
83
+
84
+ http://mailfunneltest.airbrake.io/errors/24746833
85
+
86
+ Error Message:
87
+ --------------
88
+ RuntimeError: Test Exception
89
+
90
+ Where:
91
+ ------
92
+ /private/tmp/app.rb, line 10
93
+
94
+ URL:
95
+ ----
96
+ http://localhost:7000/
97
+
98
+ Backtrace Summary:
99
+ ------------------
100
+
101
+
102
+
103
+
104
+ ----==_mimepart_4ec9b2c82d851_5d79107e0a6c10217ae
105
+ Date: Sun, 20 Nov 2011 18:09:12 -0800
106
+ Mime-Version: 1.0
107
+ Content-Type: text/html;
108
+ charset=UTF-8
109
+ Content-Transfer-Encoding: 7bit
110
+ Content-ID: <4ec9b2c831524_5d79107e0a6c10219fd@app04.c45163.blueboxgrid.com.mail>
111
+
112
+ <html>
113
+ <head></head>
114
+
115
+ <body bgcolor="#ffffff" link="#66bb0c" alink="#66bb0c" vlink="#66bb0c" style="background-color: #ffffff; text-align: left;">
116
+ <table cellpadding="0" cellspacing="0" border="0" width="100%">
117
+
118
+
119
+ <tr>
120
+ <td style="padding: 10px 20px 10px 20px; font-family: Helvetica, Arial, sans-serif; font-size: 14px; background-color: #ffffff; text-align: left; border-bottom: 1px solid #dddddd;" colspan="2">
121
+ <table cellpadding="0" cellspacing="0" border="0">
122
+ <tr>
123
+ <td style="padding: 0 0 5px 0; font-weight: normal; color: #999999;text-align: left; font-size: 14px; font-family: Helvetica, Arial, sans-serif;"
124
+ width="75"
125
+ valign="top">Project:</td>
126
+ <td style="padding: 0 0 5px 10px; font-size: 14px; font-weight: normal; text-align: left; font-family: Helvetica, Arial, sans-serif;"
127
+ valign="top">
128
+ <a href="http://mailfunneltest.airbrake.io/projects/54978" style="color: #000">
129
+ Mail Funnel
130
+ </a> </td>
131
+ </tr>
132
+ <tr>
133
+ <td style="padding: 0 0 5px 0; font-weight: normal; color: #999999; text-align: left; font-size: 14px; font-family: Helvetica, Arial, sans-serif;"
134
+ width="75"
135
+ valign="top">Environment:</td>
136
+ <td style="padding: 0 0 5px 10px; font-size: 14px; color: #000000; text-align: left; font-family: Helvetica, Arial, sans-serif;"
137
+ valign="top">
138
+ <a href="http://mailfunneltest.airbrake.io/projects/54978/environments/unknown/errors" style="color: #000">
139
+ Unknown
140
+ </a> </td>
141
+ </tr>
142
+ </table>
143
+ </td>
144
+ </tr>
145
+
146
+ <tr>
147
+ <td style="padding-top: 0; padding-bottom: 10px; text-align: left;">
148
+ <table cellpadding="0" cellspacing="0" border="0" align="left">
149
+ <tr>
150
+ <td valign="top" style="padding: 10px 20px 10px 20px; font-family: Helvetica, Arial, sans-serif; font-size: 14px; background-color: #ffffff; text-align: left;">
151
+ <div style="line-height: 1.3em;">
152
+
153
+ <p style="margin-bottom: 2px;">An error has just occurred. View full details at:</p>
154
+ <p style="padding: 0 0 12px 0; margin: 0;">
155
+ <a href="http://mailfunneltest.airbrake.io/errors/24746833" style="font-weight: bold;">
156
+ http://mailfunneltest.airbrake.io/errors/24746833
157
+ </a> </p>
158
+
159
+ <p style="color: #999999; margin-bottom: 2px;">Error Message:</p>
160
+ <p style="margin-top: 0;">RuntimeError: Test Exception</p>
161
+
162
+ <p style="color: #999999; padding: 10px 0 0 0; margin-bottom: 0px;">Where:</p>
163
+ <p style="margin-top: 0; font-family: monospace;">/private/tmp/app.rb, line 10</p>
164
+ <p style="color: #999999; padding: 10px 0 0 0; margin-bottom: 0px;">URL:</p>
165
+ <p style="margin-top: 0; margin-bottom: 0; font-family: monospace;">http://localhost:7000/</p>
166
+ <p style="color: #999999; padding: 10px 0 0 0; margin-bottom: 0px;">Backtrace Summary:</p>
167
+
168
+ </div>
169
+
170
+ </td>
171
+ </tr>
172
+ </table>
173
+ </td>
174
+ </tr>
175
+ <tr>
176
+ <table cellpadding="0" cellspacing="0" border="0" align="left" width="100%">
177
+ <tr>
178
+ <td style="padding: 10px 20px 20px 20px; font-size: 11px; font-family: Helvetica, Arial, sans-serif; font-weight: bold; color: #666666; text-align: left; border-top: 1px solid #dddddd;">
179
+ Delivered by <a href="http://airbrake.io/?source=email" style="">Airbrake</a>. <br/>
180
+ <a href="http://www.launchbit.com/az/46-59/"><img width="125" height="125" src="http://www.launchbit.com/az-images/46-59/"; /></a>
181
+ <br/>
182
+ These ads are powered by San Francisco based startup <a href="http://www.launchbit.com/">Launchbit</a>. You are seeing these ads because you are on our free plan tier. <a href="http://mailfunneltest.airbrake.io/account/plan/edit">Upgrade your plan now to start tracking your deploys, avail of SSL connections and receive ad-free emails</a>
183
+ <br/>
184
+ </td>
185
+ </tr>
186
+ </table>
187
+ </tr>
188
+ </table>
189
+
190
+
191
+ <img src="http://mail.airbrakeapp.com/wf/open?rp=lLqeeUOX8zyh0IqilG0ytE%2BBl4tQzaO0OL2oH4vTCgUjwLRyki9RYqhUszhboZzcyo4760NvkPyribnhqIEnhA9w0Pns4obBOqlPUTcnBMycr%2Buh6M1OxsgkKGqy0PfR&amp;u=Oi1rUKmURXKW79QsyGsBwg%2Foo0.gif" alt="">
192
+ </body>
193
+ </html>
194
+
195
+
196
+
197
+ ----==_mimepart_4ec9b2c82d851_5d79107e0a6c10217ae--
198
+
199
+ ------cloudmailinboundry
200
+ Content-Disposition: form-data; name="plain"
201
+
202
+
203
+
204
+ Project: Mail Funnel
205
+ Environment: Unknown
206
+
207
+
208
+ http://mailfunneltest.airbrake.io/errors/24746833
209
+
210
+ Error Message:
211
+ --------------
212
+ RuntimeError: Test Exception
213
+
214
+ Where:
215
+ ------
216
+ /private/tmp/app.rb, line 10
217
+
218
+ URL:
219
+ ----
220
+ http://localhost:7000/
221
+
222
+ Backtrace Summary:
223
+ ------------------
224
+ ------cloudmailinboundry
225
+ Content-Disposition: form-data; name="html"
226
+
227
+ <html>
228
+ <head></head>
229
+
230
+ <body bgcolor="#ffffff" link="#66bb0c" alink="#66bb0c" vlink="#66bb0c" style="background-color: #ffffff; text-align: left;">
231
+ <table cellpadding="0" cellspacing="0" border="0" width="100%">
232
+
233
+
234
+ <tr>
235
+ <td style="padding: 10px 20px 10px 20px; font-family: Helvetica, Arial, sans-serif; font-size: 14px; background-color: #ffffff; text-align: left; border-bottom: 1px solid #dddddd;" colspan="2">
236
+ <table cellpadding="0" cellspacing="0" border="0">
237
+ <tr>
238
+ <td style="padding: 0 0 5px 0; font-weight: normal; color: #999999;text-align: left; font-size: 14px; font-family: Helvetica, Arial, sans-serif;"
239
+ width="75"
240
+ valign="top">Project:</td>
241
+ <td style="padding: 0 0 5px 10px; font-size: 14px; font-weight: normal; text-align: left; font-family: Helvetica, Arial, sans-serif;"
242
+ valign="top">
243
+ <a href="http://mailfunneltest.airbrake.io/projects/54978" style="color: #000">
244
+ Mail Funnel
245
+ </a> </td>
246
+ </tr>
247
+ <tr>
248
+ <td style="padding: 0 0 5px 0; font-weight: normal; color: #999999; text-align: left; font-size: 14px; font-family: Helvetica, Arial, sans-serif;"
249
+ width="75"
250
+ valign="top">Environment:</td>
251
+ <td style="padding: 0 0 5px 10px; font-size: 14px; color: #000000; text-align: left; font-family: Helvetica, Arial, sans-serif;"
252
+ valign="top">
253
+ <a href="http://mailfunneltest.airbrake.io/projects/54978/environments/unknown/errors" style="color: #000">
254
+ Unknown
255
+ </a> </td>
256
+ </tr>
257
+ </table>
258
+ </td>
259
+ </tr>
260
+
261
+ <tr>
262
+ <td style="padding-top: 0; padding-bottom: 10px; text-align: left;">
263
+ <table cellpadding="0" cellspacing="0" border="0" align="left">
264
+ <tr>
265
+ <td valign="top" style="padding: 10px 20px 10px 20px; font-family: Helvetica, Arial, sans-serif; font-size: 14px; background-color: #ffffff; text-align: left;">
266
+ <div style="line-height: 1.3em;">
267
+
268
+ <p style="margin-bottom: 2px;">An error has just occurred. View full details at:</p>
269
+ <p style="padding: 0 0 12px 0; margin: 0;">
270
+ <a href="http://mailfunneltest.airbrake.io/errors/24746833" style="font-weight: bold;">
271
+ http://mailfunneltest.airbrake.io/errors/24746833
272
+ </a> </p>
273
+
274
+ <p style="color: #999999; margin-bottom: 2px;">Error Message:</p>
275
+ <p style="margin-top: 0;">RuntimeError: Test Exception</p>
276
+
277
+ <p style="color: #999999; padding: 10px 0 0 0; margin-bottom: 0px;">Where:</p>
278
+ <p style="margin-top: 0; font-family: monospace;">/private/tmp/app.rb, line 10</p>
279
+ <p style="color: #999999; padding: 10px 0 0 0; margin-bottom: 0px;">URL:</p>
280
+ <p style="margin-top: 0; margin-bottom: 0; font-family: monospace;">http://localhost:7000/</p>
281
+ <p style="color: #999999; padding: 10px 0 0 0; margin-bottom: 0px;">Backtrace Summary:</p>
282
+
283
+ </div>
284
+
285
+ </td>
286
+ </tr>
287
+ </table>
288
+ </td>
289
+ </tr>
290
+ <tr>
291
+ <table cellpadding="0" cellspacing="0" border="0" align="left" width="100%">
292
+ <tr>
293
+ <td style="padding: 10px 20px 20px 20px; font-size: 11px; font-family: Helvetica, Arial, sans-serif; font-weight: bold; color: #666666; text-align: left; border-top: 1px solid #dddddd;">
294
+ Delivered by <a href="http://airbrake.io/?source=email" style="">Airbrake</a>. <br/>
295
+ <a href="http://www.launchbit.com/az/46-59/"><img width="125" height="125" src="http://www.launchbit.com/az-images/46-59/"; /></a>
296
+ <br/>
297
+ These ads are powered by San Francisco based startup <a href="http://www.launchbit.com/">Launchbit</a>. You are seeing these ads because you are on our free plan tier. <a href="http://mailfunneltest.airbrake.io/account/plan/edit">Upgrade your plan now to start tracking your deploys, avail of SSL connections and receive ad-free emails</a>
298
+ <br/>
299
+ </td>
300
+ </tr>
301
+ </table>
302
+ </tr>
303
+ </table>
304
+
305
+
306
+ <img src="http://mail.airbrakeapp.com/wf/open?rp=lLqeeUOX8zyh0IqilG0ytE%2BBl4tQzaO0OL2oH4vTCgUjwLRyki9RYqhUszhboZzcyo4760NvkPyribnhqIEnhA9w0Pns4obBOqlPUTcnBMycr%2Buh6M1OxsgkKGqy0PfR&amp;u=Oi1rUKmURXKW79QsyGsBwg%2Foo0.gif" alt="">
307
+ </body>
308
+ </html>
309
+ ------cloudmailinboundry
310
+ Content-Disposition: form-data; name="mid"
311
+
312
+ 4ec9b2c832055_5d79107e0a6c102209@app04.c45163.blueboxgrid.com.mail
313
+ ------cloudmailinboundry
314
+ Content-Disposition: form-data; name="x_to_header"
315
+
316
+ ["60453ebc38386e438aae@cloudmailin.net"]
317
+ ------cloudmailinboundry
318
+ Content-Disposition: form-data; name="x_cc_header"
319
+
320
+
321
+ ------cloudmailinboundry
322
+ Content-Disposition: form-data; name="signature"
323
+
324
+ a7305c6fe551d80a7c56ab1746922619
325
+ ------cloudmailinboundry--
@@ -0,0 +1,89 @@
1
+ POST / HTTP/1.1
2
+ user-agent: CloudMailin Server
3
+ content-type: multipart/form-data; boundary=----cloudmailinboundry
4
+ content-length: 2827
5
+ connection: close
6
+ host: vgwb.showoff.io
7
+ x-forwarded-for: undefined
8
+
9
+ ------cloudmailinboundry
10
+ Content-Disposition: form-data; name="to"
11
+
12
+ <16fefd79fee99cc47215@cloudmailin.net>
13
+ ------cloudmailinboundry
14
+ Content-Disposition: form-data; name="disposable"
15
+
16
+
17
+ ------cloudmailinboundry
18
+ Content-Disposition: form-data; name="from"
19
+
20
+ gabrielg.test@example.com
21
+ ------cloudmailinboundry
22
+ Content-Disposition: form-data; name="subject"
23
+
24
+ This is a test email to CloudMailIn
25
+ ------cloudmailinboundry
26
+ Content-Disposition: form-data; name="message"
27
+
28
+ Received: by ggnr4 with SMTP id r4so955040ggn.3
29
+ for <16fefd79fee99cc47215@cloudmailin.net>; Wed, 09 Nov 2011 21:15:19 -0800 (PST)
30
+ DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
31
+ d=gmail.com; s=gamma;
32
+ h=from:content-type:content-transfer-encoding:subject:date:message-id
33
+ :to:mime-version:x-mailer;
34
+ bh=A9jPqHVi05+rBptC4qDZ74YQYcYcOvVD/GoK4riS6zk=;
35
+ b=sNFTGMEfly/MtKvlbsc0RqIzfVmi7eGjwFfFxJV2NhTt05dQbUNEtiNqfi7ohezG1A
36
+ DCMVszc7qw0NtJv37Qgn5C8bjJIdR+fcR66lRVCDO/6uf4JymKupXPyw9B2bWjW7chgn
37
+ yHgcQtMtx4XUloNgxI9Q0U8Ent+JH1NkM34js=
38
+ Received: by 10.100.123.10 with SMTP id v10mr2641390anc.168.1320902119413;
39
+ Wed, 09 Nov 2011 21:15:19 -0800 (PST)
40
+ Return-Path: <gabrielg.test@example.com>
41
+ Received: from [10.0.1.54] (200-111-223-122.c3-0.mct-ubr1.chi-mct.il.cable.rcn.com. [200.111.223.122])
42
+ by mx.google.com with ESMTPS id l27sm20556805ani.21.2011.11.09.21.15.17
43
+ (version=SSLv3 cipher=OTHER);
44
+ Wed, 09 Nov 2011 21:15:18 -0800 (PST)
45
+ From: Gabriel Gironda <gabrielg.test@example.com>
46
+ Content-Type: text/plain; charset=us-ascii
47
+ Content-Transfer-Encoding: 7bit
48
+ Subject: This is a test email to CloudMailIn
49
+ Date: Wed, 9 Nov 2011 23:15:16 -0600
50
+ Message-Id: <61277AE7-938D-43CA-80CC-86AB47890FCE@gmail.com>
51
+ To: 16fefd79fee99cc47215@cloudmailin.net
52
+ Mime-Version: 1.0 (Apple Message framework v1251.1)
53
+ X-Mailer: Apple Mail (2.1251.1)
54
+
55
+ This is the body of the test email.
56
+
57
+ ------cloudmailinboundry
58
+ Content-Disposition: form-data; name="plain"
59
+
60
+ This is the body of the test email.
61
+ ------cloudmailinboundry
62
+ Content-Disposition: form-data; name="html"
63
+
64
+
65
+ ------cloudmailinboundry
66
+ Content-Disposition: form-data; name="mid"
67
+
68
+ 61277AE7-938D-43CA-80CC-86AB47890FCE@gmail.com
69
+ ------cloudmailinboundry
70
+ Content-Disposition: form-data; name="x_to_header"
71
+
72
+ ["16fefd79fee99cc47215@cloudmailin.net"]
73
+ ------cloudmailinboundry
74
+ Content-Disposition: form-data; name="x_cc_header"
75
+
76
+
77
+ ------cloudmailinboundry
78
+ Content-Disposition: form-data; name="helo_domain"
79
+
80
+ mail-gx0-f172.google.com
81
+ ------cloudmailinboundry
82
+ Content-Disposition: form-data; name="return_path"
83
+
84
+ gabrielg.test@example.com
85
+ ------cloudmailinboundry
86
+ Content-Disposition: form-data; name="signature"
87
+
88
+ a6fc5b4ab888ead36ea00aa430ad310a
89
+ ------cloudmailinboundry--
@@ -0,0 +1,46 @@
1
+ require "test_helper"
2
+ require "rack/builder"
3
+ require "rack/utils"
4
+
5
+ class AirbrakeProcessingTest < Test::Unit::TestCase
6
+ include RackEnvHelper
7
+
8
+ def setup
9
+ WebMock.disable_net_connect!
10
+ ENV['CLOUDMAILIN_SECRET'] = "6e50b93207454d57d587"
11
+ ENV['HIPCHAT_ROOMS'] = "123"
12
+ ENV['HIPCHAT_API_TOKEN'] = "example_auth_token"
13
+ @app = app_from_config("support/config.ru")
14
+ @airbrake_rack_env = rack_env_from_fixture("airbrake_request_dump")
15
+ end
16
+
17
+ def teardown
18
+ WebMock.allow_net_connect!
19
+ end
20
+
21
+ test "an incoming request from airbrake via cloudmailin eventually posts to HipChat" do
22
+ exception_url = "http://mailfunneltest.airbrake.io/errors/24746833"
23
+ message = %Q[<b>Mail Funnel - Unknown</b><br /><a href="#{exception_url}">RuntimeError: Test Exception</a>]
24
+
25
+ stub_request(:post, "https://api.hipchat.com/v1/rooms/message").to_return(:status => 200)
26
+
27
+ @app.call(@airbrake_rack_env)
28
+
29
+ request_params = {"auth_token" => "example_auth_token", "from" => "Airbrake", "room_id" => "123", "message" => message}
30
+
31
+ assert_requested(:post, "https://api.hipchat.com/v1/rooms/message") do |req|
32
+ # Unfortunately, WebMock doesn't actually give me an easy way to check whether only certain
33
+ # values I care about are in the request body. Hence, this mess.
34
+ body_params = Rack::Utils.parse_query(req.body)
35
+ request_params.all? {|k,v| body_params[k] == v}
36
+ end
37
+ end
38
+
39
+ private
40
+
41
+ def app_from_config(config_file)
42
+ app, options = Rack::Builder.parse_file(config_file, nil)
43
+ app
44
+ end
45
+
46
+ end
@@ -0,0 +1,59 @@
1
+ require "test/unit"
2
+ require "mocha"
3
+ require "webmock/test_unit"
4
+ require "pathname"
5
+ require "http_parser.rb"
6
+ require "stringio"
7
+
8
+ class Test::Unit::TestCase
9
+ FIXTURES_DIR = Pathname.new(__FILE__).parent + "fixtures"
10
+
11
+ def self.test(test_description, &test_block)
12
+ define_method("test #{test_description}", &test_block)
13
+ end
14
+
15
+ private
16
+
17
+ def read_fixture(fixture_name)
18
+ (FIXTURES_DIR + "#{fixture_name}.txt").read
19
+ end
20
+
21
+ module RackEnvHelper
22
+
23
+ def rack_env_from_fixture(fixture_name)
24
+ parser, request_body = Http::Parser.new, StringIO.new
25
+ parser.on_body = proc {|chunk| request_body << chunk}
26
+ parser.on_message_complete = proc { request_body.rewind }
27
+ parser << read_fixture(fixture_name)
28
+
29
+ rack_env = rack_normalize_headers(parser.headers)
30
+
31
+ rack_env.merge!({"SCRIPT_NAME" => "",
32
+ "REQUEST_METHOD" => parser.http_method,
33
+ "PATH_INFO" => parser.request_path,
34
+ "QUERY_STRING" => parser.query_string,
35
+ "SERVER_NAME" => rack_env["HTTP_HOST"],
36
+ "SERVER_PORT" => "443"})
37
+
38
+ rack_env.merge!({"rack.version" => [1, 3],
39
+ "rack.url_scheme" => "https",
40
+ "rack.input" => request_body,
41
+ "rack.errors" => STDERR,
42
+ "rack.multithread" => false,
43
+ "rack.multiprocess" => false,
44
+ "rack.run_once" => false})
45
+
46
+ rack_env
47
+ end
48
+
49
+ def rack_normalize_headers(headers_hash)
50
+ headers_hash.inject({}) do |env,(header,value)|
51
+ header = "http_#{header}" unless header =~ /\A(content-type|content-length)\Z/i
52
+ env[header.upcase.tr('-', '_')] = value
53
+ env
54
+ end
55
+ end
56
+
57
+ end
58
+
59
+ end
@@ -0,0 +1,48 @@
1
+ require "test_helper"
2
+ require "mail_to_hip_chat/chute_chain"
3
+
4
+ class ChuteChainTest < Test::Unit::TestCase
5
+
6
+ def setup
7
+ @chute_chain = MailToHipChat::ChuteChain.new
8
+ end
9
+
10
+ test "pushing a chute returns the chute chain" do
11
+ push_result = @chute_chain.push(lambda {})
12
+ assert_equal @chute_chain, push_result
13
+ end
14
+
15
+ test "chutes are traversed in the order they're pushed into the chain" do
16
+ chute_traversal = sequence('chute traversal')
17
+
18
+ chain_head_chute, chain_tail_chute = mock, mock
19
+ chain_head_chute.expects(:call).in_sequence(chute_traversal)
20
+ chain_tail_chute.expects(:call).in_sequence(chute_traversal)
21
+
22
+ @chute_chain.push(chain_head_chute).push(chain_tail_chute)
23
+ @chute_chain.accept({})
24
+ end
25
+
26
+ test "traversing the chain stops at the first chute that returns a response" do
27
+ chain_head_chute, chain_mid_chute, chain_tail_chute = mock, mock, mock
28
+
29
+ chain_head_chute.expects(:call).returns(false)
30
+ chain_mid_chute.expects(:call).returns(true)
31
+ chain_tail_chute.expects(:call).never
32
+
33
+ @chute_chain.push(chain_head_chute).push(chain_mid_chute).push(chain_tail_chute)
34
+ @chute_chain.accept({})
35
+ end
36
+
37
+ test "traversing the chain calls each chute with the given params" do
38
+ params = {:test => :params}
39
+
40
+ chain_head_chute, chain_tail_chute = mock, mock
41
+ chain_head_chute.expects(:call).with(params)
42
+ chain_tail_chute.expects(:call).with(params)
43
+
44
+ @chute_chain.push(chain_head_chute).push(chain_tail_chute)
45
+ @chute_chain.accept(params)
46
+ end
47
+
48
+ end
@@ -0,0 +1,33 @@
1
+ require "test_helper"
2
+ require "mail_to_hip_chat/message_chute"
3
+
4
+ class MessageChuteTest < Test::Unit::TestCase
5
+ class TestMessageChute
6
+ include MailToHipChat::MessageChute
7
+
8
+ def call(params)
9
+ message_rooms(params[:sender], params[:message])
10
+ end
11
+ end
12
+
13
+ def setup
14
+ @hipchat_api = mock
15
+ end
16
+
17
+ test "message_rooms uses the hipchat api to message the given room" do
18
+ message_chute = TestMessageChute.new(:hipchat_api => @hipchat_api, :rooms => "123")
19
+ @hipchat_api.expects(:rooms_message).with('123', "TestMessageChute", "example")
20
+ message_chute.call(:sender => "TestMessageChute", :message => "example")
21
+ end
22
+
23
+ test "message_rooms uses the hipchat api to message all given rooms" do
24
+ message_chute = TestMessageChute.new(:hipchat_api => @hipchat_api, :rooms => ["123", "456"])
25
+
26
+ room_messages = sequence('room messages')
27
+ @hipchat_api.expects(:rooms_message).with('123', "TestMessageChute", "example").in_sequence(room_messages)
28
+ @hipchat_api.expects(:rooms_message).with('456', "TestMessageChute", "example").in_sequence(room_messages)
29
+
30
+ message_chute.call(:sender => "TestMessageChute", :message => "example")
31
+ end
32
+
33
+ end
@@ -0,0 +1,39 @@
1
+ require "test_helper"
2
+ require "mail_to_hip_chat/message_chutes/airbrake"
3
+
4
+ class AirbrakeMessageChuteTest < Test::Unit::TestCase
5
+
6
+ def setup
7
+ @hipchat_api = mock
8
+ @airbrake_chute = MailToHipChat::MessageChutes::Airbrake.new(:rooms => "123", :hipchat_api => @hipchat_api)
9
+ end
10
+
11
+ test "a message with a parseable body is accepted" do
12
+ @hipchat_api.expects(:rooms_message).with(any_parameters)
13
+ message = read_fixture("airbrake_exception_body")
14
+ assert @airbrake_chute.call("plain" => message)
15
+ end
16
+
17
+ test "a message with an unparseable body is rejected" do
18
+ assert !@airbrake_chute.call("plain" => "zzzzzzz")
19
+ end
20
+
21
+ test "the message sent to HipChat contains exception information" do
22
+ project, environment = "Echelon", "Staging"
23
+ message = "AirbrakeTestingException: Testing airbrake via &quot;rake airbrake:test&quot;. If you can see this, it works."
24
+ url = "http://the-nsa.airbrake.io/errors/11082122"
25
+
26
+ hipchat_message = %Q[<b>#{project} - #{environment}</b><br /><a href="#{url}">#{message}</a>]
27
+
28
+ @hipchat_api.expects(:rooms_message).with(anything, anything, hipchat_message)
29
+
30
+ @airbrake_chute.call("plain" => read_fixture("airbrake_exception_body"))
31
+ end
32
+
33
+ test "the message is sent to HipChat as coming from an Airbrake user" do
34
+ @hipchat_api.expects(:rooms_message).with(anything, "Airbrake", anything)
35
+
36
+ @airbrake_chute.call("plain" => read_fixture("airbrake_exception_body"))
37
+ end
38
+
39
+ end
@@ -0,0 +1,21 @@
1
+ require "test_helper"
2
+ require "mail_to_hip_chat/message_chutes/test_email"
3
+
4
+ class TestEmailMessageChuteTest < Test::Unit::TestCase
5
+
6
+ def setup
7
+ @hipchat_api = mock
8
+ @airbrake_chute = MailToHipChat::MessageChutes::TestEmail.new(:rooms => "123", :hipchat_api => @hipchat_api)
9
+ end
10
+
11
+ test "a message with 'Testing Setup' in the subject in mixed case forwards to hipchat" do
12
+ @hipchat_api.expects(:rooms_message).with(anything, "Testing", "Message:<br />test &lt;1,2,3&gt;")
13
+ assert @airbrake_chute.call("subject" => "TeStInG SeTuP", "plain" => "test <1,2,3>")
14
+ end
15
+
16
+ test "a message with 'Testing Setup' anywhere in the subject forwards to hipchat" do
17
+ @hipchat_api.expects(:rooms_message).with(anything, "Testing", "Message:<br />test &lt;1,2,3&gt;")
18
+ assert @airbrake_chute.call("subject" => "i am testing setup", "plain" => "test <1,2,3>")
19
+ end
20
+
21
+ end