Revision bf9bd8dd test/ganeti.http_unittest.py

b/test/ganeti.http_unittest.py
30 30

  
31 31
import ganeti.http.server
32 32
import ganeti.http.client
33
import ganeti.http.auth
33 34

  
34 35

  
35 36
class TestStartLines(unittest.TestCase):
......
93 94
    self.assert_(message_reader_class.HEADER_LENGTH_MAX > 0)
94 95

  
95 96

  
97
class _FakeRequestAuth(http.auth.HttpServerRequestAuthentication):
98
  def __init__(self, realm):
99
    http.auth.HttpServerRequestAuthentication.__init__(self)
100

  
101
    self.realm = realm
102

  
103
  def GetAuthRealm(self, req):
104
    return self.realm
105

  
106

  
107
class TestAuth(unittest.TestCase):
108
  """Authentication tests"""
109

  
110
  hsra = http.auth.HttpServerRequestAuthentication
111

  
112
  def testConstants(self):
113
    self.assertEqual(self.hsra._CLEARTEXT_SCHEME,
114
                     self.hsra._CLEARTEXT_SCHEME.upper())
115
    self.assertEqual(self.hsra._HA1_SCHEME,
116
                     self.hsra._HA1_SCHEME.upper())
117

  
118
  def _testVerifyBasicAuthPassword(self, realm, user, password, expected):
119
    ra = _FakeRequestAuth(realm)
120

  
121
    return ra.VerifyBasicAuthPassword(None, user, password, expected)
122

  
123

  
124
  def testVerifyBasicAuthPassword(self):
125
    tvbap = self._testVerifyBasicAuthPassword
126

  
127
    good_pws = ["pw", "pw{", "pw}", "pw{}", "pw{x}y", "}pw",
128
                "0", "123", "foo...:xyz", "TeST"]
129

  
130
    for pw in good_pws:
131
      # Try cleartext passwords
132
      self.assert_(tvbap("abc", "user", pw, pw))
133
      self.assert_(tvbap("abc", "user", pw, "{cleartext}" + pw))
134
      self.assert_(tvbap("abc", "user", pw, "{ClearText}" + pw))
135
      self.assert_(tvbap("abc", "user", pw, "{CLEARTEXT}" + pw))
136

  
137
      # Try with invalid password
138
      self.failIf(tvbap("abc", "user", pw, "something"))
139

  
140
      # Try with invalid scheme
141
      self.failIf(tvbap("abc", "user", pw, "{000}" + pw))
142
      self.failIf(tvbap("abc", "user", pw, "{unk}" + pw))
143
      self.failIf(tvbap("abc", "user", pw, "{Unk}" + pw))
144
      self.failIf(tvbap("abc", "user", pw, "{UNK}" + pw))
145

  
146
    # Try with invalid scheme format
147
    self.failIf(tvbap("abc", "user", "pw", "{something"))
148

  
149
    # Hash is MD5("user:This is only a test:pw")
150
    self.assert_(tvbap("This is only a test", "user", "pw",
151
                       "{ha1}92ea58ae804481498c257b2f65561a17"))
152
    self.assert_(tvbap("This is only a test", "user", "pw",
153
                       "{HA1}92ea58ae804481498c257b2f65561a17"))
154

  
155
    self.failIf(tvbap(None, "user", "pw",
156
                      "{HA1}92ea58ae804481498c257b2f65561a17"))
157
    self.failIf(tvbap("Admin area", "user", "pw",
158
                      "{HA1}92ea58ae804481498c257b2f65561a17"))
159
    self.failIf(tvbap("This is only a test", "someone", "pw",
160
                      "{HA1}92ea58ae804481498c257b2f65561a17"))
161
    self.failIf(tvbap("This is only a test", "user", "something",
162
                      "{HA1}92ea58ae804481498c257b2f65561a17"))
163

  
164

  
96 165
if __name__ == '__main__':
97 166
  unittest.main()

Also available in: Unified diff