~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/tests/test_smtp_connection.py

  • Committer: Patch Queue Manager
  • Date: 2014-02-12 18:22:22 UTC
  • mfrom: (6589.2.1 trunk)
  • Revision ID: pqm@pqm.ubuntu.com-20140212182222-beouo25gaf1cny76
(vila) The XDG Base Directory Specification uses the XDG_CACHE_HOME,
 not XDG_CACHE_DIR. (Andrew Starr-Bochicchio)

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright (C) 2005, 2007 Canonical Ltd
 
1
# Copyright (C) 2007, 2009, 2010, 2011 Canonical Ltd
2
2
#
3
3
# This program is free software; you can redistribute it and/or modify
4
4
# it under the terms of the GNU General Public License as published by
14
14
# along with this program; if not, write to the Free Software
15
15
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
16
16
 
17
 
from cStringIO import StringIO
18
17
from email.Message import Message
19
18
import errno
20
19
import smtplib
91
90
class TestSMTPConnection(tests.TestCaseInTempDir):
92
91
 
93
92
    def get_connection(self, text, smtp_factory=None):
94
 
        my_config = config.GlobalConfig()
95
 
        config_file = StringIO(text)
96
 
        my_config._get_parser(config_file)
97
 
        return smtp_connection.SMTPConnection(my_config,
98
 
                                              _smtp_factory=smtp_factory)
 
93
        my_config = config.MemoryStack(text)
 
94
        return smtp_connection.SMTPConnection(
 
95
            my_config, _smtp_factory=smtp_factory)
99
96
 
100
97
    def test_defaults(self):
101
98
        conn = self.get_connection('')
104
101
        self.assertEqual(None, conn._smtp_password)
105
102
 
106
103
    def test_smtp_server(self):
107
 
        conn = self.get_connection('[DEFAULT]\nsmtp_server=host:10\n')
 
104
        conn = self.get_connection('smtp_server=host:10')
108
105
        self.assertEqual('host:10', conn._smtp_server)
109
106
 
110
107
    def test_missing_server(self):
111
108
        conn = self.get_connection('', smtp_factory=connection_refuser)
112
109
        self.assertRaises(errors.DefaultSMTPConnectionRefused, conn._connect)
113
 
        conn = self.get_connection('[DEFAULT]\nsmtp_server=smtp.example.com\n',
 
110
        conn = self.get_connection('smtp_server=smtp.example.com',
114
111
                                   smtp_factory=connection_refuser)
115
112
        self.assertRaises(errors.SMTPConnectionRefused, conn._connect)
116
113
 
118
115
        conn = self.get_connection('')
119
116
        self.assertIs(None, conn._smtp_username)
120
117
 
121
 
        conn = self.get_connection('[DEFAULT]\nsmtp_username=joebody\n')
 
118
        conn = self.get_connection('smtp_username=joebody')
122
119
        self.assertEqual(u'joebody', conn._smtp_username)
123
120
 
124
121
    def test_smtp_password_from_config(self):
125
122
        conn = self.get_connection('')
126
123
        self.assertIs(None, conn._smtp_password)
127
124
 
128
 
        conn = self.get_connection('[DEFAULT]\nsmtp_password=mypass\n')
 
125
        conn = self.get_connection('smtp_password=mypass')
129
126
        self.assertEqual(u'mypass', conn._smtp_password)
130
127
 
131
128
    def test_smtp_password_from_user(self):
136
133
                                   smtp_factory=factory)
137
134
        self.assertIs(None, conn._smtp_password)
138
135
 
139
 
        ui.ui_factory = tests.TestUIFactory(stdin=password + '\n',
140
 
                                            stdout=tests.StringIOWrapper())
 
136
        ui.ui_factory = ui.CannedInputUIFactory([password])
141
137
        conn._connect()
142
138
        self.assertEqual(password, conn._smtp_password)
143
 
        # stdin should be empty (the provided password have been consumed)
144
 
        self.assertEqual('', ui.ui_factory.stdin.readline())
145
139
 
146
140
    def test_smtp_password_from_auth_config(self):
147
141
        user = 'joe'
163
157
 
164
158
    def test_authenticate_with_byte_strings(self):
165
159
        user = 'joe'
166
 
        password = 'h\xC3\xACspass'
 
160
        unicode_pass = u'h\xECspass'
 
161
        utf8_pass = unicode_pass.encode('utf-8')
167
162
        factory = WideOpenSMTPFactory()
168
163
        conn = self.get_connection(
169
164
            '[DEFAULT]\nsmtp_username=%s\nsmtp_password=%s\n'
170
 
            % (user, password), smtp_factory=factory)
171
 
        self.assertEqual(u'h\xECspass', conn._smtp_password)
 
165
            % (user, utf8_pass), smtp_factory=factory)
 
166
        self.assertEqual(unicode_pass, conn._smtp_password)
172
167
        conn._connect()
173
168
        self.assertEqual([('connect', 'localhost'),
174
169
                          ('ehlo',),
175
170
                          ('has_extn', 'starttls'),
176
 
                          ('login', user, password)], factory._calls)
 
171
                          ('login', user, utf8_pass)], factory._calls)
177
172
        smtp_username, smtp_password = factory._calls[-1][1:]
178
173
        self.assertIsInstance(smtp_username, str)
179
174
        self.assertIsInstance(smtp_password, str)
259
254
            'pperez@ejemplo.com', 'user@localhost']), sorted(to))
260
255
 
261
256
    def test_destination_address_required(self):
262
 
        class FakeConfig:
263
 
            def get_user_option(self, option):
264
 
                return None
265
 
 
266
257
        msg = Message()
267
258
        msg['From'] = '"J. Random Developer" <jrandom@example.com>'
268
259
        self.assertRaises(
269
260
            errors.NoDestinationAddress,
270
 
            smtp_connection.SMTPConnection(FakeConfig()).send_email, msg)
 
261
            smtp_connection.SMTPConnection(config.MemoryStack("")
 
262
                                           ).send_email, msg)
271
263
 
272
264
        msg = email_message.EmailMessage('from@from.com', '', 'subject')
273
265
        self.assertRaises(
274
266
            errors.NoDestinationAddress,
275
 
            smtp_connection.SMTPConnection(FakeConfig()).send_email, msg)
 
267
            smtp_connection.SMTPConnection(config.MemoryStack("")
 
268
                                           ).send_email, msg)
276
269
 
277
270
        msg = email_message.EmailMessage('from@from.com', [], 'subject')
278
271
        self.assertRaises(
279
272
            errors.NoDestinationAddress,
280
 
            smtp_connection.SMTPConnection(FakeConfig()).send_email, msg)
 
273
            smtp_connection.SMTPConnection(config.MemoryStack("")
 
274
                                           ).send_email, msg)