import os import unittest from . import BaseHttpTest, conf_dir class TestHttp(BaseHttpTest): """ Tests the full flow of a request/response on the HTTP backend. Runs a remote command over HTTP via shell.exec plugin and gets the output. """ config_file = os.path.join(conf_dir, 'test_http_config.yaml') def __init__(self, *args, **kwargs): super(TestHttp, self).__init__(*args, **kwargs) def test_http_flow(self): # An /execute request performed before any user is registered should redirect to the registration page. expected_registration_redirect = '{base_url}/register?redirect={base_url}/execute'.format( base_url=self.base_url) expected_login_redirect = '{base_url}/login?redirect={base_url}/execute'.format( base_url=self.base_url) response = self.send_request(authenticate=False, parse_response=False) self.assertEqual(expected_registration_redirect, response.url, 'No users registered, but the application did not redirect us to the registration page') # Emulate a first user registration through form and get the session_token. response = self.register_user() self.assertGreater(len(response.history), 0, 'Redirect missing from the history') self.assertTrue('session_token' in response.history[0].cookies, 'No session_token returned upon registration') self.assertEqual('{base_url}/'.format(base_url=self.base_url), response.url, 'The registration form did not redirect to the main panel') # After a first user has been registered any unauthenticated call to /execute should redirect to /login. response = self.send_request(authenticate=False, parse_response=False) self.assertEqual(expected_login_redirect, response.url, 'An unauthenticated request after user registration should result in a login redirect') # A request authenticated with user/pass should succeed. response = self.send_request(authenticate=True) self.assertEqual(response.output.strip(), 'ping', 'The request did not return the expected output') # A request with the wrong user/pass should fail. response = self.send_request(authenticate=False, auth=('wrong', 'wrong'), parse_response=False) self.assertEqual(expected_login_redirect, response.url, 'A request with wrong credentials should fail') def send_request(self, **kwargs): return super().send_request('shell.exec', args={'cmd': 'echo ping'}, **kwargs) if __name__ == '__main__': unittest.main() # vim:sw=4:ts=4:et: