def testHandleDifferentUsers(self):
     authentication = BasicAuthentication(realm='Test Realm')
     userdata = {'name': 'aUser'}
     interceptor = CallTrace('httphandler',
                             returnValues={
                                 'isValidLogin': True,
                                 'getUser': userdata
                             },
                             methods={'handleRequest': handleRequest})
     authentication.addObserver(interceptor)
     headers = {'Authorization': b'Basic ' + b64encode(b'aUser:aPassword')}
     response = authentication.handleRequest(port='8080',
                                             RequestURI='/private',
                                             Method='GET',
                                             Headers=headers)
     list(compose(response))
     self.assertEqual({'name': 'aUser'},
                      interceptor.calledMethods[2].kwargs['user'])
     headers = {
         'Authorization':
         b'Basic ' + b64encode(b'anotherUser:anotherPassword')
     }
     userdata['name'] = 'anotherUser'
     response = authentication.handleRequest(port='8080',
                                             RequestURI='/private',
                                             Method='GET',
                                             Headers=headers)
     list(compose(response))
     self.assertEqual({'name': 'anotherUser'},
                      interceptor.calledMethods[5].kwargs['user'])
 def testHandleSimplePrivateRequest(self):
     authentication = BasicAuthentication(realm='Test Realm')
     interceptor = CallTrace('httphandler',
                             returnValues={
                                 'isValidLogin': True,
                                 'getUser': {
                                     'name': 'aUser'
                                 }
                             },
                             methods={'handleRequest': handleRequest})
     authentication.addObserver(interceptor)
     headers = {'Authorization': b'Basic ' + b64encode(b'aUser:aPassword')}
     response = authentication.handleRequest(port='8080',
                                             RequestURI='/private',
                                             Method='GET',
                                             Headers=headers)
     list(compose(response))
     self.assertEqual('isValidLogin', interceptor.calledMethods[0].name)
     self.assertEqual(('aUser', 'aPassword'),
                      interceptor.calledMethods[0].args)
     self.assertEqual('getUser', interceptor.calledMethods[1].name)
     self.assertEqual(('aUser', ), interceptor.calledMethods[1].args)
     self.assertEqual('handleRequest', interceptor.calledMethods[2].name)
     self.assertEqual({'name': 'aUser'},
                      interceptor.calledMethods[2].kwargs['user'])
 def testDetectValidUserWithPasswordAndUserName(self):
     authentication = BasicAuthentication(realm='Test Realm')
     interceptor = CallTrace('httphandler',
                             returnValues={'isValidLogin': True},
                             methods={
                                 'handleRequest':
                                 lambda *a, **kw: (x for x in 'response')
                             })
     authentication.addObserver(interceptor)
     headers = {'Authorization': b'Basic ' + b64encode(b'aUser:aPassword')}
     results = authentication.handleRequest(port='8080',
                                            RequestURI='/private',
                                            Method='GET',
                                            Headers=headers)
     response = ''.join(compose(results))
     self.assertFalse(
         'WWW-Authenticate: Basic realm="Test Realm"\r\n' in response,
         response)
     interceptor.returnValues['isValidLogin'] = False
     headers = {
         'Authorization':
         b'Basic ' + b64encode(b'aUser:aCompletelyWrongPassword')
     }
     response = ''.join(
         authentication.handleRequest(port='8080',
                                      RequestURI='/private',
                                      Method='GET',
                                      Headers=headers))
     self.assertTrue(
         'WWW-Authenticate: Basic realm="Test Realm"\r\n' in response,
         response)
 def testFailedLogin(self):
     authentication = BasicAuthentication(realm='Test Realm')
     interceptor = CallTrace('httphandler', returnValues={'isValidLogin': False}, methods={'handleRequest': handleRequest})
     authentication.addObserver(interceptor)
     headers = {'Authorization': 'Basic ' + b64encode('aUser:aPassword')}
     response = ''.join(authentication.handleRequest(port='8080', RequestURI='/private', Method='GET', Headers=headers))
     self.assertEquals('isValidLogin', interceptor.calledMethods[0].name)
     self.assertTrue('WWW-Authenticate: Basic realm="Test Realm"\r\n' in response, response)
     self.assertTrue('Username or password are not valid.' in response)
 def testDetectValidUserWithPasswordAndUserName(self):
     authentication = BasicAuthentication(realm='Test Realm')
     interceptor = CallTrace('httphandler', returnValues={'isValidLogin': True}, methods={'handleRequest': lambda *a, **kw: (x for x in 'response')})
     authentication.addObserver(interceptor)
     headers = {'Authorization': 'Basic ' + b64encode('aUser:aPassword')}
     results = authentication.handleRequest(port='8080', RequestURI='/private', Method='GET', Headers=headers)
     response = ''.join(compose(results))
     self.assertFalse('WWW-Authenticate: Basic realm="Test Realm"\r\n' in response, response)
     interceptor.returnValues['isValidLogin'] = False
     headers = {'Authorization': 'Basic ' + b64encode('aUser:aCompletelyWrongPassword')}
     response = ''.join(authentication.handleRequest(port='8080', RequestURI='/private', Method='GET', Headers=headers))
     self.assertTrue('WWW-Authenticate: Basic realm="Test Realm"\r\n' in response, response)
 def testHandleSimplePrivateRequest(self):
     authentication = BasicAuthentication(realm='Test Realm')
     interceptor = CallTrace('httphandler', returnValues={'isValidLogin': True, 'getUser':{'name':'aUser'}}, methods={'handleRequest': handleRequest})
     authentication.addObserver(interceptor)
     headers = {'Authorization': 'Basic ' + b64encode('aUser:aPassword')}
     response = authentication.handleRequest(port='8080', RequestURI='/private', Method='GET', Headers=headers)
     list(compose(response))
     self.assertEquals('isValidLogin', interceptor.calledMethods[0].name)
     self.assertEquals(('aUser', 'aPassword'), interceptor.calledMethods[0].args)
     self.assertEquals('getUser', interceptor.calledMethods[1].name)
     self.assertEquals(('aUser',), interceptor.calledMethods[1].args)
     self.assertEquals('handleRequest', interceptor.calledMethods[2].name)
     self.assertEquals({'name': 'aUser'}, interceptor.calledMethods[2].kwargs['user'])
 def testServerSendsChallenge(self):
     authentication = BasicAuthentication(realm='Test Realm')
     interceptor = CallTrace('httphandler',
                             returnValues={'isValidLogin': True},
                             methods={'handleRequest': handleRequest})
     authentication.addObserver(interceptor)
     response = ''.join(
         authentication.handleRequest(port='8080',
                                      RequestURI='/private',
                                      Method='GET'))
     self.assertTrue(
         'WWW-Authenticate: Basic realm="Test Realm"\r\n' in response,
         response)
 def testHandleDifferentUsers(self):
     authentication = BasicAuthentication(realm='Test Realm')
     userdata = {'name':'aUser'}
     interceptor = CallTrace('httphandler', returnValues={'isValidLogin': True, 'getUser':userdata}, methods={'handleRequest': handleRequest})
     authentication.addObserver(interceptor)
     headers = {'Authorization': 'Basic ' + b64encode('aUser:aPassword')}
     response = authentication.handleRequest(port='8080', RequestURI='/private', Method='GET', Headers=headers)
     list(compose(response))
     self.assertEquals({'name': 'aUser'}, interceptor.calledMethods[2].kwargs['user'])
     headers = {'Authorization': 'Basic ' + b64encode('anotherUser:anotherPassword')}
     userdata['name'] = 'anotherUser'
     response = authentication.handleRequest(port='8080', RequestURI='/private', Method='GET', Headers=headers)
     list(compose(response))
     self.assertEquals({'name': 'anotherUser'}, interceptor.calledMethods[5].kwargs['user'])
 def testServerSendsChallenge(self):
     authentication = BasicAuthentication(realm='Test Realm')
     interceptor = CallTrace('httphandler', returnValues={'isValidLogin': True}, methods={'handleRequest': handleRequest})
     authentication.addObserver(interceptor)
     response = ''.join(authentication.handleRequest(port='8080', RequestURI='/private', Method='GET'))
     self.assertTrue('WWW-Authenticate: Basic realm="Test Realm"\r\n' in response, response)