From 072335774d65a21a47baf3984addade9bd04cbb5 Mon Sep 17 00:00:00 2001 From: John Date: Wed, 10 Apr 2019 12:34:34 -0700 Subject: [PATCH 1/7] add test to validate info response with auth off since this actually goes through tornado this should be sufficient for E2E to validate the info response for auth on (already tested) and auth off (this test) --- .../server_tests/test_service_info_handler.py | 63 +++++++++++++++++++ 1 file changed, 63 insertions(+) diff --git a/tabpy-server/server_tests/test_service_info_handler.py b/tabpy-server/server_tests/test_service_info_handler.py index 14c8cedf..a7190626 100644 --- a/tabpy-server/server_tests/test_service_info_handler.py +++ b/tabpy-server/server_tests/test_service_info_handler.py @@ -120,3 +120,66 @@ def test_given_tabpy_server_with_auth_expect_correct_info_response(self): 'required': True, } }, features) + + +class TestServiceInfoHandlerWithoutAuth(AsyncHTTPTestCase): + @classmethod + def setUpClass(cls): + prefix = '__TestServiceInfoHandlerWithoutAuth_' + + # create state.ini dir and file + cls.state_dir = tempfile.mkdtemp(prefix=prefix) + cls.state_file = open(os.path.join(cls.state_dir, 'state.ini'), 'w+') + cls.state_file.write('[Service Info]\n' + 'Name = TabPy Serve\n' + 'Description = \n' + 'Creation Time = 0\n' + 'Access-Control-Allow-Origin = \n' + 'Access-Control-Allow-Headers = \n' + 'Access-Control-Allow-Methods = \n' + '\n' + '[Query Objects Service Versions]\n' + '\n' + '[Query Objects Docstrings]\n' + '\n' + '[Meta]\n' + 'Revision Number = 1\n') + cls.state_file.close() + + # create config file + cls.config_file = tempfile.NamedTemporaryFile( + prefix=prefix, suffix='.conf', delete=False) + cls.config_file.write( + bytes( + '[TabPy]\n' + 'TABPY_STATE_PATH = {}'.format( + cls.state_dir), + 'utf-8')) + cls.config_file.close() + cls.config_file.close() + + @classmethod + def tearDownClass(cls): + os.remove(cls.state_file.name) + os.remove(cls.config_file.name) + os.rmdir(cls.state_dir) + + def get_app(self): + self.app = TabPyApp(self.config_file.name) + return self.app._create_tornado_web_app() + + def test_given_tabpy_server_with_no_auth_expect_correct_info_response(self): + response = self.fetch('/info') + self.assertEqual(response.code, 200) + actual_response = json.loads(response.body) + expected_response = _create_expected_info_response( + self.app.settings, self.app.tabpy_state) + + self.assertDictEqual(actual_response, expected_response) + self.assertTrue('versions' in actual_response) + versions = actual_response['versions'] + self.assertTrue('v1' in versions) + v1 = versions['v1'] + self.assertTrue('features' in v1) + features = v1['features'] + self.assertDictEqual({}, features) From bea6ae5218f857b949890e66aadad9087bd2df9c Mon Sep 17 00:00:00 2001 From: John Date: Wed, 10 Apr 2019 12:35:57 -0700 Subject: [PATCH 2/7] Update test_service_info_handler.py --- tabpy-server/server_tests/test_service_info_handler.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tabpy-server/server_tests/test_service_info_handler.py b/tabpy-server/server_tests/test_service_info_handler.py index a7190626..9b29f9ea 100644 --- a/tabpy-server/server_tests/test_service_info_handler.py +++ b/tabpy-server/server_tests/test_service_info_handler.py @@ -168,7 +168,7 @@ def get_app(self): self.app = TabPyApp(self.config_file.name) return self.app._create_tornado_web_app() - def test_given_tabpy_server_with_no_auth_expect_correct_info_response(self): + def test_tabpy_server_with_no_auth_expect_correct_info_response(self): response = self.fetch('/info') self.assertEqual(response.code, 200) actual_response = json.loads(response.body) From 845d5afd065c4265936d585b94e0ac96e2d1cefd Mon Sep 17 00:00:00 2001 From: John Date: Wed, 10 Apr 2019 13:23:29 -0700 Subject: [PATCH 3/7] Update test_service_info_handler.py --- tabpy-server/server_tests/test_service_info_handler.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/tabpy-server/server_tests/test_service_info_handler.py b/tabpy-server/server_tests/test_service_info_handler.py index 9b29f9ea..6653370f 100644 --- a/tabpy-server/server_tests/test_service_info_handler.py +++ b/tabpy-server/server_tests/test_service_info_handler.py @@ -150,11 +150,9 @@ def setUpClass(cls): cls.config_file = tempfile.NamedTemporaryFile( prefix=prefix, suffix='.conf', delete=False) cls.config_file.write( - bytes( '[TabPy]\n' 'TABPY_STATE_PATH = {}'.format( - cls.state_dir), - 'utf-8')) + cls.state_dir)) cls.config_file.close() cls.config_file.close() From 66079d480f6d0c834f123633b88465941f67fd7e Mon Sep 17 00:00:00 2001 From: John Date: Wed, 10 Apr 2019 13:28:02 -0700 Subject: [PATCH 4/7] put bytes back build fails w/o bytes being specified - a bytes like object is needed --- tabpy-server/server_tests/test_service_info_handler.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/tabpy-server/server_tests/test_service_info_handler.py b/tabpy-server/server_tests/test_service_info_handler.py index 6653370f..f76ba9f1 100644 --- a/tabpy-server/server_tests/test_service_info_handler.py +++ b/tabpy-server/server_tests/test_service_info_handler.py @@ -150,9 +150,11 @@ def setUpClass(cls): cls.config_file = tempfile.NamedTemporaryFile( prefix=prefix, suffix='.conf', delete=False) cls.config_file.write( + bytes( '[TabPy]\n' 'TABPY_STATE_PATH = {}'.format( - cls.state_dir)) + cls.state_dir), + 'utf-8')) cls.config_file.close() cls.config_file.close() From b18290d7e050e796a64849f6b1d2eb9df417cfd7 Mon Sep 17 00:00:00 2001 From: John Date: Thu, 11 Apr 2019 10:24:49 -0700 Subject: [PATCH 5/7] respond to feedback --- .../server_tests/test_service_info_handler.py | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/tabpy-server/server_tests/test_service_info_handler.py b/tabpy-server/server_tests/test_service_info_handler.py index f76ba9f1..8d3d29cf 100644 --- a/tabpy-server/server_tests/test_service_info_handler.py +++ b/tabpy-server/server_tests/test_service_info_handler.py @@ -129,8 +129,8 @@ def setUpClass(cls): # create state.ini dir and file cls.state_dir = tempfile.mkdtemp(prefix=prefix) - cls.state_file = open(os.path.join(cls.state_dir, 'state.ini'), 'w+') - cls.state_file.write('[Service Info]\n' + with open(os.path.join(cls.state_dir, 'state.ini'), 'w+') as cls.state_file: + cls.state_file.write('[Service Info]\n' 'Name = TabPy Serve\n' 'Description = \n' 'Creation Time = 0\n' @@ -148,14 +148,11 @@ def setUpClass(cls): # create config file cls.config_file = tempfile.NamedTemporaryFile( - prefix=prefix, suffix='.conf', delete=False) + prefix=prefix, suffix='.conf', delete=False, mode='w+') cls.config_file.write( - bytes( '[TabPy]\n' 'TABPY_STATE_PATH = {}'.format( - cls.state_dir), - 'utf-8')) - cls.config_file.close() + cls.state_dir)) cls.config_file.close() @classmethod From e2308708ef93d630b64a4450910c74b1677ae386 Mon Sep 17 00:00:00 2001 From: John Date: Thu, 11 Apr 2019 12:55:40 -0700 Subject: [PATCH 6/7] Update test_service_info_handler.py --- tabpy-server/server_tests/test_service_info_handler.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tabpy-server/server_tests/test_service_info_handler.py b/tabpy-server/server_tests/test_service_info_handler.py index 8d3d29cf..2048d88b 100644 --- a/tabpy-server/server_tests/test_service_info_handler.py +++ b/tabpy-server/server_tests/test_service_info_handler.py @@ -129,7 +129,8 @@ def setUpClass(cls): # create state.ini dir and file cls.state_dir = tempfile.mkdtemp(prefix=prefix) - with open(os.path.join(cls.state_dir, 'state.ini'), 'w+') as cls.state_file: + with open(os.path.join(cls.state_dir, 'state.ini'), 'w+') + as cls.state_file: cls.state_file.write('[Service Info]\n' 'Name = TabPy Serve\n' 'Description = \n' From 0744f7614afab628657d8f96b24dd671cfbad86d Mon Sep 17 00:00:00 2001 From: John Date: Thu, 11 Apr 2019 13:05:47 -0700 Subject: [PATCH 7/7] pep8 --- .../server_tests/test_service_info_handler.py | 36 +++++++++---------- 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/tabpy-server/server_tests/test_service_info_handler.py b/tabpy-server/server_tests/test_service_info_handler.py index 2048d88b..40ea7eda 100644 --- a/tabpy-server/server_tests/test_service_info_handler.py +++ b/tabpy-server/server_tests/test_service_info_handler.py @@ -129,31 +129,31 @@ def setUpClass(cls): # create state.ini dir and file cls.state_dir = tempfile.mkdtemp(prefix=prefix) - with open(os.path.join(cls.state_dir, 'state.ini'), 'w+') - as cls.state_file: + with open(os.path.join(cls.state_dir, 'state.ini'), 'w+')\ + as cls.state_file: cls.state_file.write('[Service Info]\n' - 'Name = TabPy Serve\n' - 'Description = \n' - 'Creation Time = 0\n' - 'Access-Control-Allow-Origin = \n' - 'Access-Control-Allow-Headers = \n' - 'Access-Control-Allow-Methods = \n' - '\n' - '[Query Objects Service Versions]\n' - '\n' - '[Query Objects Docstrings]\n' - '\n' - '[Meta]\n' - 'Revision Number = 1\n') + 'Name = TabPy Serve\n' + 'Description = \n' + 'Creation Time = 0\n' + 'Access-Control-Allow-Origin = \n' + 'Access-Control-Allow-Headers = \n' + 'Access-Control-Allow-Methods = \n' + '\n' + '[Query Objects Service Versions]\n' + '\n' + '[Query Objects Docstrings]\n' + '\n' + '[Meta]\n' + 'Revision Number = 1\n') cls.state_file.close() # create config file cls.config_file = tempfile.NamedTemporaryFile( prefix=prefix, suffix='.conf', delete=False, mode='w+') cls.config_file.write( - '[TabPy]\n' - 'TABPY_STATE_PATH = {}'.format( - cls.state_dir)) + '[TabPy]\n' + 'TABPY_STATE_PATH = {}'.format( + cls.state_dir)) cls.config_file.close() @classmethod