22from typing import Generator , Any , Dict
33
44import luigi
5+ from docker .models .containers import ExecResult
6+ from exasol_integration_test_docker_environment .lib .base .db_os_executor import DbOsExecFactory , SshExecFactory , \
7+ DockerClientFactory , DockerExecFactory , DbOsExecutor
8+ from exasol_integration_test_docker_environment .lib .base .json_pickle_parameter import JsonPickleParameter
9+ from exasol_integration_test_docker_environment .lib .data .database_info import DatabaseInfo
10+ from exasol_integration_test_docker_environment .lib .test_environment .parameter .docker_db_test_environment_parameter import \
11+ DbOsAccess
12+
513from exasol_script_languages_container_tool .lib .tasks .export .export_containers import ExportFlavorContainer
614from exasol_script_languages_container_tool .lib .tasks .export .export_info import ExportInfo
715from exasol_script_languages_container_tool .lib .tasks .test .populate_test_engine import PopulateTestEngine
1927from exasol_integration_test_docker_environment .lib .test_environment .spawn_test_environment import SpawnTestEnvironment
2028
2129
30+ class DummyExecutor (DbOsExecutor ):
31+
32+ def exec (self , cmd : str ) -> ExecResult :
33+ raise RuntimeError ("Not supposed to be called." )
34+
35+ def prepare (self ):
36+ pass
37+
38+ def __enter__ (self ):
39+ return self
40+
41+ def __exit__ (self , type_ , value , traceback ):
42+ pass
43+
44+
45+ class DummyExecFactory (DbOsExecFactory ):
46+ def executor (self ) -> DbOsExecutor :
47+ return DummyExecutor ()
48+
49+
2250class TestRunnerDBTestTask (FlavorBaseTask ,
2351 SpawnTestEnvironmentParameter ,
2452 RunDBTestsInTestConfigParameter ):
@@ -63,6 +91,15 @@ def run_task(self):
6391 test_results = yield from self .run_test (self .test_environment_info , export_info )
6492 self .return_object (test_results )
6593
94+ def _executor_factory (self , database_info : DatabaseInfo ) -> DbOsExecFactory :
95+
96+ if self .db_os_access == DbOsAccess .SSH :
97+ return SshExecFactory .from_database_info (database_info )
98+ client_factory = DockerClientFactory (timeout = 100000 )
99+ if database_info .container_info is not None :
100+ return DockerExecFactory (database_info .container_info .container_name , client_factory )
101+ return DummyExecFactory ()
102+
66103 def upload_container (self , database_credentials : DatabaseCredentials , export_info : ExportInfo ):
67104 reuse = \
68105 self .reuse_database and \
@@ -75,7 +112,8 @@ def upload_container(self, database_credentials: DatabaseCredentials, export_inf
75112 test_environment_info = self .test_environment_info ,
76113 release_name = export_info .name ,
77114 reuse_uploaded = reuse ,
78- bucketfs_write_password = database_credentials .bucketfs_write_password
115+ bucketfs_write_password = database_credentials .bucketfs_write_password ,
116+ executor_factory = self ._executor_factory (self .test_environment_info .database_info )
79117 )
80118 yield from self .run_dependencies (upload_task )
81119
0 commit comments