Loading .gitlab-ci.yml +2 −2 Original line number Diff line number Diff line Loading @@ -55,5 +55,5 @@ include: # - local: '/src/vnt_manager/.gitlab-ci.yml' # - local: '/src/e2e_orchestrator/.gitlab-ci.yml' # # # This should be last one: end-to-end integration tests # - local: '/src/tests/.gitlab-ci.yml' # This should be last one: end-to-end integration tests - local: '/src/tests/.gitlab-ci.yml' src/nbi/.gitlab-ci.yml +9 −0 Original line number Diff line number Diff line Loading @@ -46,6 +46,7 @@ unit_test nbi: stage: unit_test needs: - build nbi - build mock_nbi_dependencies before_script: - docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" $CI_REGISTRY - > Loading @@ -62,6 +63,14 @@ unit_test nbi: fi script: - docker pull "$CI_REGISTRY_IMAGE/$IMAGE_NAME:$IMAGE_TAG" - docker pull "$CI_REGISTRY_IMAGE/mock_nbi_dependencies:test" - > docker run --name mock_nbi_dependencies -d --network=teraflowbridge --env BIND_ADDRESS=0.0.0.0 --env BIND_PORT=10000 --env LOG_LEVEL=DEBUG $CI_REGISTRY_IMAGE/mock_nbi_dependencies:test - > docker run --name $IMAGE_NAME -d -v "$PWD/src/$IMAGE_NAME/tests:/opt/results" --network=teraflowbridge Loading src/nbi/tests/PrepareTestScenario.py +56 −43 Original line number Diff line number Diff line Loading @@ -12,7 +12,7 @@ # See the License for the specific language governing permissions and # limitations under the License. import enum, logging, os, pytest, requests, subprocess, threading, time import enum, logging, os, pytest, requests, time # subprocess, threading from typing import Any, Dict, List, Optional, Set, Union from socketio import Namespace from common.Constants import ServiceNameEnum Loading @@ -21,6 +21,7 @@ from common.Settings import ( ENVVAR_SUFIX_SERVICE_PORT_HTTP, get_env_var_name ) from context.client.ContextClient import ContextClient from device.client.DeviceClient import DeviceClient from nbi.service.NbiApplication import NbiApplication from nbi.service.health_probes.Constants import SIO_NAMESPACE as HEARTBEAT_NAMESPACE from nbi.service.health_probes.Namespaces import HeartbeatServerNamespace Loading @@ -39,54 +40,58 @@ os.environ[get_env_var_name(ServiceNameEnum.NBI, ENVVAR_SUFIX_SERVICE_HOST os.environ[get_env_var_name(ServiceNameEnum.NBI, ENVVAR_SUFIX_SERVICE_PORT_HTTP)] = str(NBI_SERVICE_PORT) os.environ[get_env_var_name(ServiceNameEnum.CONTEXT, ENVVAR_SUFIX_SERVICE_HOST )] = str(LOCAL_HOST) os.environ[get_env_var_name(ServiceNameEnum.CONTEXT, ENVVAR_SUFIX_SERVICE_PORT_GRPC)] = str(MOCKSERVICE_PORT) os.environ[get_env_var_name(ServiceNameEnum.DEVICE, ENVVAR_SUFIX_SERVICE_HOST )] = str(LOCAL_HOST) os.environ[get_env_var_name(ServiceNameEnum.DEVICE, ENVVAR_SUFIX_SERVICE_PORT_GRPC)] = str(MOCKSERVICE_PORT) os.environ[get_env_var_name(ServiceNameEnum.SERVICE, ENVVAR_SUFIX_SERVICE_HOST )] = str(LOCAL_HOST) os.environ[get_env_var_name(ServiceNameEnum.SERVICE, ENVVAR_SUFIX_SERVICE_PORT_GRPC)] = str(MOCKSERVICE_PORT) os.environ[get_env_var_name(ServiceNameEnum.SLICE, ENVVAR_SUFIX_SERVICE_HOST )] = str(LOCAL_HOST) os.environ[get_env_var_name(ServiceNameEnum.SLICE, ENVVAR_SUFIX_SERVICE_PORT_GRPC)] = str(MOCKSERVICE_PORT) @pytest.fixture(scope='session') def mock_service(): # NOTE: Starting MockServer in a separate process to prevent # issues with eventlet monkey-patched libraries. cmd = ['python', '-m', 'nbi.tests.MockService_Dependencies'] custom_env = os.environ.copy() mock_service_process = subprocess.Popen( cmd, env=custom_env, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, stdin=subprocess.DEVNULL, text=True, bufsize=1 ) mock_service_logger = logging.getLogger('MockService_Dependencies') mock_service_logger.info('Started') def stream_stdout(): for line in iter(mock_service_process.stdout.readline, ''): mock_service_logger.info(line.strip()) stream_stdout_thread = threading.Thread(target=stream_stdout, daemon=True) stream_stdout_thread.start() yield True # Check if process is still running if mock_service_process.poll() is None: mock_service_process.terminate() # Try to terminate gracefully time.sleep(2) # Give it time to exit if mock_service_process.poll() is None: mock_service_process.kill() # Force kill if still running mock_service_logger.info('Terminated') stream_stdout_thread.join() ## MockService_Dependencies executed as a standalone container during # tests to prevent apparent dead locks and issues. #@pytest.fixture(scope='session') #def mock_service(): # # NOTE: Starting MockServer in a separate process to prevent # # issues with eventlet monkey-patched libraries. # # cmd = ['python', '-m', 'nbi.tests.MockService_Dependencies'] # custom_env = os.environ.copy() # mock_service_process = subprocess.Popen( # cmd, # env=custom_env, # stdout=subprocess.PIPE, # stderr=subprocess.STDOUT, # stdin=subprocess.DEVNULL, # text=True, # bufsize=1 # ) # # mock_service_logger = logging.getLogger('MockService_Dependencies') # mock_service_logger.info('Started') # # def stream_stdout(): # for line in iter(mock_service_process.stdout.readline, ''): # mock_service_logger.info(line.strip()) # # stream_stdout_thread = threading.Thread(target=stream_stdout, daemon=True) # stream_stdout_thread.start() # # yield True # # # Check if process is still running # if mock_service_process.poll() is None: # mock_service_process.terminate() # Try to terminate gracefully # time.sleep(2) # Give it time to exit # if mock_service_process.poll() is None: # mock_service_process.kill() # Force kill if still running # # mock_service_logger.info('Terminated') # stream_stdout_thread.join() @pytest.fixture(scope='session') def nbi_application( mock_service # pylint: disable=redefined-outer-name, unused-argument # mock_service # pylint: disable=redefined-outer-name, unused-argument ) -> NbiApplication: mock_web_server = MockWebServer() mock_web_server.start() Loading @@ -112,15 +117,23 @@ def osm_wim( @pytest.fixture(scope='session') def context_client( mock_service # pylint: disable=redefined-outer-name, unused-argument # mock_service # pylint: disable=redefined-outer-name, unused-argument ) -> ContextClient: _client = ContextClient() yield _client _client.close() @pytest.fixture(scope='session') def device_client( # mock_service # pylint: disable=redefined-outer-name, unused-argument ) -> DeviceClient: _client = DeviceClient() yield _client _client.close() @pytest.fixture(scope='session') def service_client( mock_service # pylint: disable=redefined-outer-name, unused-argument # mock_service # pylint: disable=redefined-outer-name, unused-argument ) -> ServiceClient: _client = ServiceClient() yield _client Loading @@ -128,7 +141,7 @@ def service_client( @pytest.fixture(scope='session') def slice_client( mock_service # pylint: disable=redefined-outer-name, unused-argument # mock_service # pylint: disable=redefined-outer-name, unused-argument ) -> SliceClient: _client = SliceClient() yield _client Loading src/nbi/tests/test_core.py +2 −1 Original line number Diff line number Diff line Loading @@ -25,7 +25,8 @@ from .Constants import NBI_SERVICE_BASE_URL from .HeartbeatClientNamespace import HeartbeatClientNamespace from .PrepareTestScenario import ( # pylint: disable=unused-import # be careful, order of symbols is important here! mock_service, nbi_application, do_rest_get_request #mock_service, nbi_application, do_rest_get_request ) Loading src/nbi/tests/test_etsi_bwm.py +2 −1 Original line number Diff line number Diff line Loading @@ -29,7 +29,8 @@ from context.client.ContextClient import ContextClient from nbi.service.NbiApplication import NbiApplication from .PrepareTestScenario import ( # pylint: disable=unused-import # be careful, order of symbols is important here! mock_service, nbi_application, context_client, #mock_service, nbi_application, context_client, do_rest_delete_request, do_rest_get_request, do_rest_patch_request, do_rest_post_request, do_rest_put_request ) Loading Loading
.gitlab-ci.yml +2 −2 Original line number Diff line number Diff line Loading @@ -55,5 +55,5 @@ include: # - local: '/src/vnt_manager/.gitlab-ci.yml' # - local: '/src/e2e_orchestrator/.gitlab-ci.yml' # # # This should be last one: end-to-end integration tests # - local: '/src/tests/.gitlab-ci.yml' # This should be last one: end-to-end integration tests - local: '/src/tests/.gitlab-ci.yml'
src/nbi/.gitlab-ci.yml +9 −0 Original line number Diff line number Diff line Loading @@ -46,6 +46,7 @@ unit_test nbi: stage: unit_test needs: - build nbi - build mock_nbi_dependencies before_script: - docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" $CI_REGISTRY - > Loading @@ -62,6 +63,14 @@ unit_test nbi: fi script: - docker pull "$CI_REGISTRY_IMAGE/$IMAGE_NAME:$IMAGE_TAG" - docker pull "$CI_REGISTRY_IMAGE/mock_nbi_dependencies:test" - > docker run --name mock_nbi_dependencies -d --network=teraflowbridge --env BIND_ADDRESS=0.0.0.0 --env BIND_PORT=10000 --env LOG_LEVEL=DEBUG $CI_REGISTRY_IMAGE/mock_nbi_dependencies:test - > docker run --name $IMAGE_NAME -d -v "$PWD/src/$IMAGE_NAME/tests:/opt/results" --network=teraflowbridge Loading
src/nbi/tests/PrepareTestScenario.py +56 −43 Original line number Diff line number Diff line Loading @@ -12,7 +12,7 @@ # See the License for the specific language governing permissions and # limitations under the License. import enum, logging, os, pytest, requests, subprocess, threading, time import enum, logging, os, pytest, requests, time # subprocess, threading from typing import Any, Dict, List, Optional, Set, Union from socketio import Namespace from common.Constants import ServiceNameEnum Loading @@ -21,6 +21,7 @@ from common.Settings import ( ENVVAR_SUFIX_SERVICE_PORT_HTTP, get_env_var_name ) from context.client.ContextClient import ContextClient from device.client.DeviceClient import DeviceClient from nbi.service.NbiApplication import NbiApplication from nbi.service.health_probes.Constants import SIO_NAMESPACE as HEARTBEAT_NAMESPACE from nbi.service.health_probes.Namespaces import HeartbeatServerNamespace Loading @@ -39,54 +40,58 @@ os.environ[get_env_var_name(ServiceNameEnum.NBI, ENVVAR_SUFIX_SERVICE_HOST os.environ[get_env_var_name(ServiceNameEnum.NBI, ENVVAR_SUFIX_SERVICE_PORT_HTTP)] = str(NBI_SERVICE_PORT) os.environ[get_env_var_name(ServiceNameEnum.CONTEXT, ENVVAR_SUFIX_SERVICE_HOST )] = str(LOCAL_HOST) os.environ[get_env_var_name(ServiceNameEnum.CONTEXT, ENVVAR_SUFIX_SERVICE_PORT_GRPC)] = str(MOCKSERVICE_PORT) os.environ[get_env_var_name(ServiceNameEnum.DEVICE, ENVVAR_SUFIX_SERVICE_HOST )] = str(LOCAL_HOST) os.environ[get_env_var_name(ServiceNameEnum.DEVICE, ENVVAR_SUFIX_SERVICE_PORT_GRPC)] = str(MOCKSERVICE_PORT) os.environ[get_env_var_name(ServiceNameEnum.SERVICE, ENVVAR_SUFIX_SERVICE_HOST )] = str(LOCAL_HOST) os.environ[get_env_var_name(ServiceNameEnum.SERVICE, ENVVAR_SUFIX_SERVICE_PORT_GRPC)] = str(MOCKSERVICE_PORT) os.environ[get_env_var_name(ServiceNameEnum.SLICE, ENVVAR_SUFIX_SERVICE_HOST )] = str(LOCAL_HOST) os.environ[get_env_var_name(ServiceNameEnum.SLICE, ENVVAR_SUFIX_SERVICE_PORT_GRPC)] = str(MOCKSERVICE_PORT) @pytest.fixture(scope='session') def mock_service(): # NOTE: Starting MockServer in a separate process to prevent # issues with eventlet monkey-patched libraries. cmd = ['python', '-m', 'nbi.tests.MockService_Dependencies'] custom_env = os.environ.copy() mock_service_process = subprocess.Popen( cmd, env=custom_env, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, stdin=subprocess.DEVNULL, text=True, bufsize=1 ) mock_service_logger = logging.getLogger('MockService_Dependencies') mock_service_logger.info('Started') def stream_stdout(): for line in iter(mock_service_process.stdout.readline, ''): mock_service_logger.info(line.strip()) stream_stdout_thread = threading.Thread(target=stream_stdout, daemon=True) stream_stdout_thread.start() yield True # Check if process is still running if mock_service_process.poll() is None: mock_service_process.terminate() # Try to terminate gracefully time.sleep(2) # Give it time to exit if mock_service_process.poll() is None: mock_service_process.kill() # Force kill if still running mock_service_logger.info('Terminated') stream_stdout_thread.join() ## MockService_Dependencies executed as a standalone container during # tests to prevent apparent dead locks and issues. #@pytest.fixture(scope='session') #def mock_service(): # # NOTE: Starting MockServer in a separate process to prevent # # issues with eventlet monkey-patched libraries. # # cmd = ['python', '-m', 'nbi.tests.MockService_Dependencies'] # custom_env = os.environ.copy() # mock_service_process = subprocess.Popen( # cmd, # env=custom_env, # stdout=subprocess.PIPE, # stderr=subprocess.STDOUT, # stdin=subprocess.DEVNULL, # text=True, # bufsize=1 # ) # # mock_service_logger = logging.getLogger('MockService_Dependencies') # mock_service_logger.info('Started') # # def stream_stdout(): # for line in iter(mock_service_process.stdout.readline, ''): # mock_service_logger.info(line.strip()) # # stream_stdout_thread = threading.Thread(target=stream_stdout, daemon=True) # stream_stdout_thread.start() # # yield True # # # Check if process is still running # if mock_service_process.poll() is None: # mock_service_process.terminate() # Try to terminate gracefully # time.sleep(2) # Give it time to exit # if mock_service_process.poll() is None: # mock_service_process.kill() # Force kill if still running # # mock_service_logger.info('Terminated') # stream_stdout_thread.join() @pytest.fixture(scope='session') def nbi_application( mock_service # pylint: disable=redefined-outer-name, unused-argument # mock_service # pylint: disable=redefined-outer-name, unused-argument ) -> NbiApplication: mock_web_server = MockWebServer() mock_web_server.start() Loading @@ -112,15 +117,23 @@ def osm_wim( @pytest.fixture(scope='session') def context_client( mock_service # pylint: disable=redefined-outer-name, unused-argument # mock_service # pylint: disable=redefined-outer-name, unused-argument ) -> ContextClient: _client = ContextClient() yield _client _client.close() @pytest.fixture(scope='session') def device_client( # mock_service # pylint: disable=redefined-outer-name, unused-argument ) -> DeviceClient: _client = DeviceClient() yield _client _client.close() @pytest.fixture(scope='session') def service_client( mock_service # pylint: disable=redefined-outer-name, unused-argument # mock_service # pylint: disable=redefined-outer-name, unused-argument ) -> ServiceClient: _client = ServiceClient() yield _client Loading @@ -128,7 +141,7 @@ def service_client( @pytest.fixture(scope='session') def slice_client( mock_service # pylint: disable=redefined-outer-name, unused-argument # mock_service # pylint: disable=redefined-outer-name, unused-argument ) -> SliceClient: _client = SliceClient() yield _client Loading
src/nbi/tests/test_core.py +2 −1 Original line number Diff line number Diff line Loading @@ -25,7 +25,8 @@ from .Constants import NBI_SERVICE_BASE_URL from .HeartbeatClientNamespace import HeartbeatClientNamespace from .PrepareTestScenario import ( # pylint: disable=unused-import # be careful, order of symbols is important here! mock_service, nbi_application, do_rest_get_request #mock_service, nbi_application, do_rest_get_request ) Loading
src/nbi/tests/test_etsi_bwm.py +2 −1 Original line number Diff line number Diff line Loading @@ -29,7 +29,8 @@ from context.client.ContextClient import ContextClient from nbi.service.NbiApplication import NbiApplication from .PrepareTestScenario import ( # pylint: disable=unused-import # be careful, order of symbols is important here! mock_service, nbi_application, context_client, #mock_service, nbi_application, context_client, do_rest_delete_request, do_rest_get_request, do_rest_patch_request, do_rest_post_request, do_rest_put_request ) Loading