| OLD | NEW |
| (Empty) |
| 1 # Copyright (c) 2001-2007 Twisted Matrix Laboratories. | |
| 2 # See LICENSE for details. | |
| 3 | |
| 4 """ | |
| 5 Tests for L{twisted.words.protocols.jabber.sasl_mechanisms}. | |
| 6 """ | |
| 7 | |
| 8 from twisted.trial import unittest | |
| 9 | |
| 10 from twisted.words.protocols.jabber import sasl_mechanisms | |
| 11 | |
| 12 class PlainTest(unittest.TestCase): | |
| 13 def test_getInitialResponse(self): | |
| 14 """ | |
| 15 Test the initial response. | |
| 16 """ | |
| 17 m = sasl_mechanisms.Plain(None, 'test', 'secret') | |
| 18 self.assertEquals(m.getInitialResponse(), '\x00test\x00secret') | |
| 19 | |
| 20 class DigestMD5Test(unittest.TestCase): | |
| 21 def setUp(self): | |
| 22 self.mechanism = sasl_mechanisms.DigestMD5('xmpp', 'example.org', None, | |
| 23 'test', 'secret') | |
| 24 | |
| 25 | |
| 26 def test_getInitialResponse(self): | |
| 27 """ | |
| 28 Test that no initial response is generated. | |
| 29 """ | |
| 30 self.assertIdentical(self.mechanism.getInitialResponse(), None) | |
| 31 | |
| 32 def test_getResponse(self): | |
| 33 """ | |
| 34 Partially test challenge response. | |
| 35 | |
| 36 Does not actually test the response-value, yet. | |
| 37 """ | |
| 38 | |
| 39 challenge = 'realm="localhost",nonce="1234",qop="auth",charset=utf-8,alg
orithm=md5-sess' | |
| 40 directives = self.mechanism._parse(self.mechanism.getResponse(challenge)
) | |
| 41 self.assertEqual(directives['username'], 'test') | |
| 42 self.assertEqual(directives['nonce'], '1234') | |
| 43 self.assertEqual(directives['nc'], '00000001') | |
| 44 self.assertEqual(directives['qop'], ['auth']) | |
| 45 self.assertEqual(directives['charset'], 'utf-8') | |
| 46 self.assertEqual(directives['digest-uri'], 'xmpp/example.org') | |
| 47 self.assertEqual(directives['realm'], 'localhost') | |
| 48 | |
| 49 def test_getResponseNoRealm(self): | |
| 50 """ | |
| 51 Test that we accept challenges without realm. | |
| 52 | |
| 53 The realm should default to the host part of the JID. | |
| 54 """ | |
| 55 | |
| 56 challenge = 'nonce="1234",qop="auth",charset=utf-8,algorithm=md5-sess' | |
| 57 directives = self.mechanism._parse(self.mechanism.getResponse(challenge)
) | |
| 58 self.assertEqual(directives['realm'], 'example.org') | |
| 59 | |
| 60 def test__parse(self): | |
| 61 """ | |
| 62 Test challenge decoding. | |
| 63 | |
| 64 Specifically, check for multiple values for the C{qop} and C{cipher} | |
| 65 directives. | |
| 66 """ | |
| 67 challenge = 'nonce="1234",qop="auth,auth-conf",charset=utf-8,' \ | |
| 68 'algorithm=md5-sess,cipher="des,3des"' | |
| 69 directives = self.mechanism._parse(challenge) | |
| 70 self.assertEqual('1234', directives['nonce']) | |
| 71 self.assertEqual('utf-8', directives['charset']) | |
| 72 self.assertIn('auth', directives['qop']) | |
| 73 self.assertIn('auth-conf', directives['qop']) | |
| 74 self.assertIn('des', directives['cipher']) | |
| 75 self.assertIn('3des', directives['cipher']) | |
| OLD | NEW |