Exemple #1
0
    def test_no_config_file(
        self,
        mock_os,
        mock_path_exists,
        mock_psws,
        mock_management_util,
        mock_tabpy_state,
        mock_parse_arguments,
    ):
        pkg_path = os.path.dirname(tabpy.__file__)
        obj_path = os.path.join(pkg_path, "tmp", "query_objects")
        state_path = os.path.join(pkg_path, "tabpy_server")
        mock_os.environ = {
            "TABPY_PORT": "9004",
            "TABPY_QUERY_OBJECT_PATH": obj_path,
            "TABPY_STATE_PATH": state_path,
        }

        TabPyApp(None)

        self.assertEqual(len(mock_psws.mock_calls), 1)
        self.assertEqual(len(mock_tabpy_state.mock_calls), 1)
        self.assertEqual(len(mock_path_exists.mock_calls), 1)
        self.assertTrue(len(mock_management_util.mock_calls) > 0)
        mock_os.makedirs.assert_not_called()
Exemple #2
0
    def test_config_file_present(
        self,
        mock_os,
        mock_path_exists,
        mock_psws,
        mock_management_util,
        mock_tabpy_state,
    ):
        self.assertTrue(self.config_file is not None)
        config_file = self.config_file
        config_file.write(
            "[TabPy]\n"
            "TABPY_QUERY_OBJECT_PATH = foo\n"
            "TABPY_STATE_PATH = bar\n".encode()
        )
        config_file.close()

        mock_os.path.realpath.return_value = "bar"
        mock_os.environ = {"TABPY_PORT": "1234"}

        app = TabPyApp(config_file.name)

        self.assertEqual(app.settings["port"], "1234")
        self.assertEqual(
            app.settings["server_version"], open("tabpy/VERSION").read().strip()
        )
        self.assertEqual(app.settings["upload_dir"], "foo")
        self.assertEqual(app.settings["state_file_path"], "bar")
        self.assertEqual(app.settings["transfer_protocol"], "http")
        self.assertTrue("certificate_file" not in app.settings)
        self.assertTrue("key_file" not in app.settings)
        self.assertEqual(app.settings["log_request_context"], False)
        self.assertEqual(app.settings["evaluate_timeout"], 30)
Exemple #3
0
    def test_config_file_present(self, mock_os, mock_path_exists,
                                 mock_psws, mock_management_util,
                                 mock_tabpy_state, mock_parse_arguments):
        self.assertTrue(self.config_file is not None)
        config_file = self.config_file
        config_file.write('[TabPy]\n'
                          'TABPY_QUERY_OBJECT_PATH = foo\n'
                          'TABPY_STATE_PATH = bar\n'.encode())
        config_file.close()

        mock_parse_arguments.return_value = Namespace(config=config_file.name)

        mock_os.getenv.side_effect = [1234]
        mock_os.path.realpath.return_value = 'bar'

        app = TabPyApp(config_file.name)
        getenv_calls = [call('TABPY_PORT')]

        mock_os.getenv.assert_has_calls(getenv_calls, any_order=True)
        self.assertEqual(app.settings['port'], 1234)
        self.assertEqual(app.settings['server_version'],
                         open('VERSION').read().strip())
        self.assertEqual(app.settings['upload_dir'], 'foo')
        self.assertEqual(app.settings['state_file_path'], 'bar')
        self.assertEqual(app.settings['transfer_protocol'], 'http')
        self.assertTrue('certificate_file' not in app.settings)
        self.assertTrue('key_file' not in app.settings)
        self.assertEqual(app.settings['log_request_context'], False)
        self.assertEqual(app.settings['evaluate_timeout'], 30)
Exemple #4
0
 def test_no_state_ini_file_or_state_dir(self, mock_os,
                                         mock_path_exists, mock_psws,
                                         mock_management_util,
                                         mock_tabpy_state,
                                         mock_parse_arguments):
     TabPyApp(None)
     self.assertEqual(len(mock_os.makedirs.mock_calls), 1)
Exemple #5
0
    def test_http(self):
        self.fp.write("[TabPy]\n"
                      "TABPY_TRANSFER_PROTOCOL = http")
        self.fp.close()

        app = TabPyApp(self.fp.name)
        self.assertEqual(app.settings['transfer_protocol'], 'http')
Exemple #6
0
def main():
    args = docopt.docopt(__doc__)
    config = args["--config"] or None

    from tabpy.tabpy_server.app.app import TabPyApp

    app = TabPyApp(config)
    app.run()
Exemple #7
0
    def test_given_no_pwd_file_expect_empty_credentials_list(self):
        self._set_file(self.config_file.name, "[TabPy]\n"
                       "TABPY_TRANSFER_PROTOCOL = http")

        app = TabPyApp(self.config_file.name)
        self.assertDictEqual(
            app.credentials, {},
            'Expected no credentials with no password file provided')
Exemple #8
0
    def test_env_variables_in_config(self, mock_state, mock_get_state,
                                     mock_path_exists, mock_os):
        mock_os.environ = {'foo': 'baz'}
        config_file = self.config_file
        config_file.write('[TabPy]\n' 'TABPY_PORT = %(foo)sbar'.encode())
        config_file.close()

        app = TabPyApp(self.config_file.name)
        self.assertEqual(app.settings['port'], 'bazbar')
    def test_env_variables_in_config(self, mock_state, mock_get_state,
                                     mock_path_exists, mock_os):
        mock_os.environ = {"foo": "baz"}
        config_file = self.config_file
        config_file.write("[TabPy]\n" "TABPY_PORT = %(foo)sbar".encode())
        config_file.close()

        app = TabPyApp(self.config_file.name)
        self.assertEqual(app.settings["port"], "bazbar")
Exemple #10
0
    def test_custom_evaluate_timeout_valid(
        self, mock_state, mock_get_state_from_file, mock_path_exists
    ):
        self.assertTrue(self.config_file is not None)
        config_file = self.config_file
        config_file.write("[TabPy]\n" "TABPY_EVALUATE_TIMEOUT = 1996".encode())
        config_file.close()

        app = TabPyApp(self.config_file.name)
        self.assertEqual(app.settings["evaluate_timeout"], 1996.0)
Exemple #11
0
    def test_given_missing_pwd_file_expect_app_fails(self):
        self._set_file(self.config_file.name, "[TabPy]\n"
                       "TABPY_PWD_FILE = foo")

        with self.assertRaises(RuntimeError) as cm:
            TabPyApp(self.config_file.name)
            ex = cm.exception
            self.assertEqual(
                f"Failed to read password file {self.pwd_file.name}",
                ex.args[0])
Exemple #12
0
    def test_custom_evaluate_timeout_invalid(self, mock_state,
                                             mock_get_state_from_file,
                                             mock_path_exists):
        self.assertTrue(self.config_file is not None)
        config_file = self.config_file
        config_file.write("[TabPy]\n"
                          'TABPY_EVALUATE_TIMEOUT = "im not a float"'.encode())
        config_file.close()

        with self.assertRaises(ValueError):
            TabPyApp(self.config_file.name)
Exemple #13
0
    def test_config_file_does_not_exist(self):
        app = TabPyApp('/folder_does_not_exit/file_does_not_exist.conf')

        self.assertEqual(app.settings['port'], 9004)
        self.assertEqual(app.settings['server_version'],
                         open('tabpy/VERSION').read().strip())
        self.assertEqual(app.settings['transfer_protocol'], 'http')
        self.assertTrue('certificate_file' not in app.settings)
        self.assertTrue('key_file' not in app.settings)
        self.assertEqual(app.settings['log_request_context'], False)
        self.assertEqual(app.settings['evaluate_timeout'], 30)
Exemple #14
0
    def test_config_file_does_not_exist(self):
        app = TabPyApp("/folder_does_not_exit/file_does_not_exist.conf")

        self.assertEqual(app.settings["port"], 9004)
        self.assertEqual(app.settings["server_version"],
                         open("tabpy/VERSION").read().strip())
        self.assertEqual(app.settings["transfer_protocol"], "http")
        self.assertTrue("certificate_file" not in app.settings)
        self.assertTrue("key_file" not in app.settings)
        self.assertEqual(app.settings["log_request_context"], False)
        self.assertEqual(app.settings["evaluate_timeout"], 30)
Exemple #15
0
    def test_custom_evaluate_timeout_invalid(self, mock_state,
                                             mock_get_state_from_file,
                                             mock_path_exists):
        self.assertTrue(self.config_file is not None)
        config_file = self.config_file
        config_file.write('[TabPy]\n'
                          'TABPY_EVALUATE_TIMEOUT = "im not a float"'.encode())
        config_file.close()

        app = TabPyApp(self.config_file.name)
        self.assertEqual(app.settings['evaluate_timeout'], 30.0)
Exemple #16
0
    def test_https_success(self, mock_isfile, mock_validate_cert):
        self.fp.write("[TabPy]\n"
                      "TABPY_TRANSFER_PROTOCOL = HtTpS\n"
                      "TABPY_CERTIFICATE_FILE = foo\n"
                      "TABPY_KEY_FILE = bar")
        self.fp.close()

        app = TabPyApp(self.fp.name)

        self.assertEqual(app.settings['transfer_protocol'], 'https')
        self.assertEqual(app.settings['certificate_file'], 'foo')
        self.assertEqual(app.settings['key_file'], 'bar')
Exemple #17
0
    def test_given_empty_pwd_file_expect_app_fails(self):
        self._set_file(self.config_file.name, '[TabPy]\n'
                       f'TABPY_PWD_FILE = {self.pwd_file.name}')

        self._set_file(self.pwd_file.name, "# just a comment")

        with self.assertRaises(RuntimeError) as cm:
            TabPyApp(self.config_file.name)
            ex = cm.exception
            self.assertEqual(
                f'Failed to read password file {self.pwd_file.name}',
                ex.args[0])
Exemple #18
0
    def test_given_one_password_in_pwd_file_expect_one_credentials_entry(self):
        self._set_file(self.config_file.name, "[TabPy]\n"
                       f"TABPY_PWD_FILE = {self.pwd_file.name}")

        login = "******"
        pwd = "someting@something_else"
        self._set_file(self.pwd_file.name, "# passwords\n"
                       "\n"
                       f"{login} {pwd}")

        app = TabPyApp(self.config_file.name)

        self.assertEqual(len(app.credentials), 1)
        self.assertIn(login, app.credentials)
        self.assertEqual(app.credentials[login], pwd)
Exemple #19
0
    def test_given_multiple_credentials_expect_all_parsed(self):
        self._set_file(self.config_file.name, "[TabPy]\n"
                       f"TABPY_PWD_FILE = {self.pwd_file.name}")
        creds = {"user_1": "pwd_1", "user@2": "pwd@2", "user#3": "pwd#3"}

        pwd_file_context = ""
        for login in creds:
            pwd_file_context += f"{login} {creds[login]}\n"

        self._set_file(self.pwd_file.name, pwd_file_context)
        app = TabPyApp(self.config_file.name)

        self.assertCountEqual(creds, app.credentials)
        for login in creds:
            self.assertIn(login, app.credentials)
            self.assertEqual(creds[login], app.credentials[login])
Exemple #20
0
    def test_given_different_cases_in_pwd_file_expect_app_fails(self):
        self._set_file(self.config_file.name, "[TabPy]\n"
                       f'TABPY_PWD_FILE = {self.pwd_file.name}')

        self._set_file(
            self.pwd_file.name, "# passwords\n"
            "user1 pwd1\n"
            "user_2 pwd#2"
            "UseR1 pwd@3")

        with self.assertRaises(RuntimeError) as cm:
            TabPyApp(self.config_file.name)
            ex = cm.exception
            self.assertEqual(
                f'Failed to read password file {self.pwd_file.name}',
                ex.args[0])
Exemple #21
0
    def test_given_multiple_credentials_expect_all_parsed(self):
        self._set_file(self.config_file.name, "[TabPy]\n"
                       f'TABPY_PWD_FILE = {self.pwd_file.name}')
        creds = {'user_1': 'pwd_1', 'user@2': 'pwd@2', 'user#3': 'pwd#3'}

        pwd_file_context = ""
        for login in creds:
            pwd_file_context += f'{login} {creds[login]}\n'

        self._set_file(self.pwd_file.name, pwd_file_context)
        app = TabPyApp(self.config_file.name)

        self.assertCountEqual(creds, app.credentials)
        for login in creds:
            self.assertIn(login, app.credentials)
            self.assertEqual(creds[login], app.credentials[login])
Exemple #22
0
    def test_given_username_but_no_password_expect_parsing_fails(self):
        self._set_file(self.config_file.name, "[TabPy]\n"
                       f'TABPY_PWD_FILE = {self.pwd_file.name}')

        login = '******'
        pwd = ''
        self._set_file(self.pwd_file.name, "# passwords\n"
                       "\n"
                       f'{login} {pwd}')

        with self.assertRaises(RuntimeError) as cm:
            TabPyApp(self.config_file.name)
            ex = cm.exception
            self.assertEqual(
                f'Failed to read password file {self.pwd_file.name}',
                ex.args[0])
Exemple #23
0
    def test_given_duplicate_usernames_expect_parsing_fails(self):
        self._set_file(self.config_file.name, "[TabPy]\n"
                       f"TABPY_PWD_FILE = {self.pwd_file.name}")

        login = "******"
        pwd = "hashedpw"
        self._set_file(self.pwd_file.name, "# passwords\n"
                       "\n"
                       f"{login} {pwd}\n{login} {pwd}")

        with self.assertRaises(RuntimeError) as cm:
            TabPyApp(self.config_file.name)
            ex = cm.exception
            self.assertEqual(
                f"Failed to read password file {self.pwd_file.name}",
                ex.args[0])
Exemple #24
0
    def test_given_one_line_with_too_many_params_expect_app_fails(self):
        self._set_file(self.config_file.name, "[TabPy]\n"
                       f"TABPY_PWD_FILE = {self.pwd_file.name}")

        self._set_file(
            self.pwd_file.name,
            "# passwords\n"
            "user1 pwd1\n"
            "user_2 pwd#2"
            "user1 pwd@3",
        )

        with self.assertRaises(RuntimeError) as cm:
            TabPyApp(self.config_file.name)
            ex = cm.exception
            self.assertEqual(
                f"Failed to read password file {self.pwd_file.name}",
                ex.args[0])
Exemple #25
0
    def test_no_config_file(self, mock_os,
                            mock_path_exists, mock_psws,
                            mock_management_util, mock_tabpy_state,
                            mock_parse_arguments):
        pkg_path = os.path.dirname(tabpy.__file__)
        obj_path = os.path.join(pkg_path, 'tmp', 'query_objects')
        state_path = os.path.join(pkg_path, 'tabpy_server')

        mock_os.getenv.side_effect = [9004, obj_path, state_path]

        TabPyApp(None)

        getenv_calls = [
            call('TABPY_PORT'),
            call('TABPY_QUERY_OBJECT_PATH'),
            call('TABPY_STATE_PATH')]
        mock_os.getenv.assert_has_calls(getenv_calls, any_order=True)
        self.assertEqual(len(mock_psws.mock_calls), 1)
        self.assertEqual(len(mock_tabpy_state.mock_calls), 1)
        self.assertEqual(len(mock_path_exists.mock_calls), 1)
        self.assertTrue(len(mock_management_util.mock_calls) > 0)
        mock_os.makedirs.assert_not_called()
 def get_app(self):
     if hasattr(self, 'config_file') and hasattr(self.config_file, 'name'):
         self.app = TabPyApp(self.config_file.name)
     else:
         self.app = TabPyApp()
     return self.app._create_tornado_web_app()
Exemple #27
0
 def get_app(self):
     self.app = TabPyApp(self.config_file.name)
     return self.app._create_tornado_web_app()
Exemple #28
0
 def get_app(self):
     self.app = TabPyApp(None)
     return self.app._create_tornado_web_app()
Exemple #29
0
 def assertTabPyAppRaisesRuntimeError(self, expected_message):
     with self.assertRaises(RuntimeError) as err:
         TabPyApp(self.fp.name)
     self.assertEqual(err.exception.args[0], expected_message)
Exemple #30
0
def main():
    from tabpy.tabpy_server.app.app import TabPyApp
    app = TabPyApp()
    app.run()