diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 2d2a6d117389615cee55e5c39b0a7fba55f9fcec..b6361546bdf49b72793bfb2cae69eff559790d0f 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,6 +1,12 @@ variables: DOCKER_TLS_CERTDIR: "" +stages: + - build + - test + - publish + + build-master: image: docker:latest stage: build @@ -66,3 +72,38 @@ build: - docker push "$IMAGE:$CI_COMMIT_REF_NAME" except: - master +test: + image: docker:latest + + services: + - docker:dind + before_script: + - docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" $CI_REGISTRY + - chmod +x env_setup.sh wait_for_container.sh + - ./env_setup.sh + - mkdir data + - docker build core/ --cache-from registry.gitlab.eox.at/esa/prism/vs/pvs_core -t registry.gitlab.eox.at/esa/prism/vs/pvs_core:latest + - docker build cache/ --cache-from registry.gitlab.eox.at/esa/prism/vs/pvs_cache -t registry.gitlab.eox.at/esa/prism/vs/pvs_cache:latest + - docker build preprocessor/ --cache-from registry.gitlab.eox.at/esa/prism/vs/pvs_preprocessor -t registry.gitlab.eox.at/esa/prism/vs/pvs_preprocessor:latest + - docker build client/ --cache-from registry.gitlab.eox.at/esa/prism/vs/pvs_client -t registry.gitlab.eox.at/esa/prism/vs/pvs_client:latest + - docker push registry.gitlab.eox.at/esa/prism/vs/pvs_core:latest + - docker push registry.gitlab.eox.at/esa/prism/vs/pvs_cache:latest + - docker push registry.gitlab.eox.at/esa/prism/vs/pvs_preprocessor:latest + - docker push registry.gitlab.eox.at/esa/prism/vs/pvs_client:latest + - docker swarm init + - docker network create -d overlay emg-extnet + - docker stack deploy -c docker-compose.emg.yml -c docker-compose.emg.dev.yml emg-pvs + script: + + - apk update && apk add postgresql-dev gcc python3-dev musl-dev py-pip gdal + - pip3 install -r requirements.txt + - ./wait_for_container.sh + - docker exec -i $(docker ps -qf "name=emg-pvs_registrar") python3 /var/www/pvs/dev/pvs_instance/manage.py storage create pvs_testing pvs_testing --type swift --storage-auth auth-cloud-ovh + - docker exec -i $(docker ps -qf "name=emg-pvs_registrar") python3 /core/registrar.py --objects-prefix "OA/PH1B/0.1/b9/urn:eop:PHR:MULTISPECTRAL_0.5m:DS_PHR1B_201608070959189_FR1_PX_E012N32_0719_00974_4148/0000/PH1B_PHR_FUS_1A_20160807T095918_20160807T095920_TOU_1234_4148.DIMA.tar" + - pytest -s registrar_test.py --name OA/PH1B/0.1/b9/urn:eop:PHR:MULTISPECTRAL_0.5m:DS_PHR1B_201608070959189_FR1_PX_E012N32_0719_00974_4148/0000/PH1B_PHR_FUS_1A_20160807T095918_20160807T095920_TOU_1234_4148.DIMA.tar + + + + after_script: + + \ No newline at end of file diff --git a/conftest.py b/conftest.py new file mode 100644 index 0000000000000000000000000000000000000000..7a1d3249386440525e74a35d4574a36f9781c633 --- /dev/null +++ b/conftest.py @@ -0,0 +1,10 @@ +def pytest_addoption(parser): + parser.addoption("--name", action="store", default="default name") + + +def pytest_generate_tests(metafunc): + # This is called for every test. Only get/set command line arguments + # if the argument is specified in the list of test "fixturenames". + option_value = metafunc.config.option.name + if 'name' in metafunc.fixturenames and option_value is not None: + metafunc.parametrize("name", [option_value]) \ No newline at end of file diff --git a/core/registrar.py b/core/registrar.py index 962e474819e081d08db302dd50180f5de1583158..45b60237a64abfc2ccd0f356b36c79ed1090c6f0 100644 --- a/core/registrar.py +++ b/core/registrar.py @@ -143,6 +143,7 @@ def registrar( container=upload_container, options={"prefix": objects_prefix}, ) for page in list_parts_gen: + print(page) if page["success"]: for item in page["listing"]: if item["name"].endswith(".xml"): @@ -154,7 +155,7 @@ def registrar( elif item["name"].endswith(".vrt"): data_package = item["name"] has_vrt = True - else: + elif not item["name"].endswith(".tar"): raise RegistrationError( "Product with objects prefix '%s' has " "wrong content '%s'." @@ -315,7 +316,7 @@ if __name__ == "__main__": setup_logging(arg_values.verbosity) - collection = os.environ.get('Collection') + collection = os.environ.get('COLLECTION') if collection is None: logger.critical("Collection environment variable not set.") sys.exit(1) diff --git a/docker-compose.emg.dev.yml b/docker-compose.emg.dev.yml index c0cf7b5fe871f6016e0ea485e9238e1a5a229973..34264cade2b10ce59e6371f59433f91404fd989a 100644 --- a/docker-compose.emg.dev.yml +++ b/docker-compose.emg.dev.yml @@ -1,5 +1,10 @@ version: "3.6" services: + database: + networks: + - extnet + ports: + - "5432:5432" client: ports: - "80:80" @@ -39,3 +44,7 @@ services: - type: bind source: ./preprocessor/ target: /preprocessor/ +networks: + extnet: + name: emg-extnet + external: true \ No newline at end of file diff --git a/env_setup.sh b/env_setup.sh new file mode 100644 index 0000000000000000000000000000000000000000..9f2bb95bc7ffe5d2cb9e26b7676bf2c464ba304d --- /dev/null +++ b/env_setup.sh @@ -0,0 +1,23 @@ +#!/bin/sh +cat $vhr18_db > ./env/vhr18_db.env +cat $vhr18_django > ./env/vhr18_django.env +cat $vhr18_obs > ./env/vhr18_obs.env + +cat $emg_db > ./env/emg_db.env +cat $emg_django > ./env/emg_django.env +cat $emg_obs > ./env/emg_obs.env + + +set -o allexport + +source ./env/emg_db.env +source ./env/vhr18_db.env + +set +o allexport + + +sed -i -e 's/emg-data/pvs_testing/g' ./env/emg.env +sed -i -e 's/vhr18-data/pvs_testing/g' ./env/vhr18.env + +sed -i -e 's/emg-cache/pvs_testing/g' ./env/emg_obs.env +sed -i -e 's/vhr18-cache/pvs_testing/g' ./env/vhr18_obs.env diff --git a/preprocessor/preprocessor.py b/preprocessor/preprocessor.py index 9894bbad077b66162a1648fd62f5818ac664f08f..e24892eb0b93fe92632d9fc00ae3a38339b80a6d 100644 --- a/preprocessor/preprocessor.py +++ b/preprocessor/preprocessor.py @@ -349,6 +349,12 @@ if __name__ == "__main__": "Path to object holding tar archive file of product." ) ) + parser.add_argument( + "--upload-container", default=None, + help=( + "The name of the swift container where the result is uploaded." + ) + ) parser.add_argument( "--replace", action="store_true", help=( @@ -380,15 +386,17 @@ if __name__ == "__main__": setup_logging(arg_values.verbosity) - collection = os.environ.get('Collection') + collection = os.environ.get('COLLECTION') if collection is None: logger.critical("Collection environment variable not set.") sys.exit(1) - upload_container = os.environ.get('UPLOAD_CONTAINER') + upload_container = arg_values.upload_container if upload_container is None: - logger.critical("UPLOAD_CONTAINER environment variable not set.") - sys.exit(1) + upload_container = os.environ.get('UPLOAD_CONTAINER') + if upload_container is None: + logger.critical("UPLOAD_CONTAINER environment variable not set.") + sys.exit(1) if arg_values.mode == "standard": preprocessor( diff --git a/registrar_test.py b/registrar_test.py new file mode 100644 index 0000000000000000000000000000000000000000..43cc696132ab02e1b785d339c2c5983665656e03 --- /dev/null +++ b/registrar_test.py @@ -0,0 +1,44 @@ +import psycopg2 +import os + + +with open('./env/emg_db.env', 'r') as f: + env = dict( + line.split('=', 1) + for line in f + ) +database= env['DB_NAME'].replace('\n','') +port = env['DB_PORT'].replace('\n','') +host = env['DB_HOST'].replace('\n','') +database_password= env['DB_PW'].replace('\n','') +database_user = env['DB_USER'].replace('\n','') + + +def connect_to_db(eo_id): + global db_name, coverage_id + connection= None + try: + connection = psycopg2.connect(dbname=database, user=database_user, password=database_password, host='docker', port=port) + cursor = connection.cursor() + db_name = connection.get_dsn_parameters()["dbname"] + postgreSQL_select_Query = "SELECT identifier FROM coverages_eoobject WHERE identifier = '%s';" % eo_id + cursor.execute(postgreSQL_select_Query) + coverage_id = cursor.fetchone()[0] + + except (Exception, psycopg2.Error) as error : + print ("Error while connecting to PostgreSQL", error) + finally: + #closing database connection. + if connection: + cursor.close() + connection.close() + print("PostgreSQL connection is closed") + + + +def test_db_name(name): + identifier = name.split('/')[4] + connect_to_db(identifier) + assert coverage_id == identifier + assert db_name == database + diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000000000000000000000000000000000000..56ba698664ddb78df20e57a7c6159d1da82feba9 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,4 @@ +pytest +psycopg2 +# python-swiftclient +# python-keystoneclient \ No newline at end of file diff --git a/wait_for_container.sh b/wait_for_container.sh new file mode 100755 index 0000000000000000000000000000000000000000..e4a7569f03a33fd18106fede2cbb54afec0cfe8a --- /dev/null +++ b/wait_for_container.sh @@ -0,0 +1,8 @@ +#!/bin/sh +# waiting for the database to finish migration! +sleep 60 + +while [ -z $(docker ps -qf "name=emg-pvs_renderer") ]; do + >&2 echo "Container is unavailable - sleeping" + sleep 15 + done