forked from platypush/platypush
57 lines
2.6 KiB
Python
57 lines
2.6 KiB
Python
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:
|