diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index a35d205d9f91f00e6ce9a7935d24907c75ad2325..c6fb93c171fd20bce1112e14b5b6023e2dfc6a84 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -28,6 +28,19 @@ login-provider: - login_provider/**/* - .gitlab-ci.yml +login-provider-mock: + stage: build + image: + name: gcr.io/kaniko-project/executor:debug + entrypoint: [""] + script: + - echo "{\"auths\":{\"$CI_REGISTRY\":{\"username\":\"$CI_REGISTRY_USER\",\"password\":\"$CI_REGISTRY_PASSWORD\"}}}" > /kaniko/.docker/config.json + - /kaniko/executor --context ${CI_PROJECT_DIR}/login_provider/test/behave --dockerfile ${CI_PROJECT_DIR}/login_provider/test/behave/Dockerfile --destination $CI_REGISTRY_IMAGE/login_provider_mock:${CI_COMMIT_REF_NAME} --build-arg baseimage=$CI_REGISTRY_IMAGE/login_provider:${CI_COMMIT_REF_NAME} + only: + changes: + - login_provider/**/* + - .gitlab-ci.yml + login-provider-test: stage: build image: @@ -43,13 +56,17 @@ login-provider-test: behave-login: stage: application-test + variables: + TESTUSER_USERNAME: "admin" + TESTUSER_EMAIL: "admin@example.net" + TESTUSER_PASSWORD: "password" services: - - name: ${CI_REGISTRY_IMAGE}/login_provider:${CI_COMMIT_REF_NAME} + - name: ${CI_REGISTRY_IMAGE}/login_provider_mock:${CI_COMMIT_REF_NAME} alias: login_provider image: ${CI_REGISTRY_IMAGE}/login_provider_ci_test:${CI_COMMIT_REF_NAME} script: - cd login_provider/test/behave/ - - python3 -m behave -D headless=True -D url=http://login_provider:5000 -D email=example@oas.example.com -D password=password + - python3 -m behave -D headless=True -D url=http://login_provider:5000 -D username=$TESTUSER_USERNAME -D password=$TESTUSER_PASSWORD artifacts: paths: - login_provider/test/behave/screenshots/ diff --git a/login_provider/test/behave/Dockerfile b/login_provider/test/behave/Dockerfile new file mode 100644 index 0000000000000000000000000000000000000000..3cd3b3b1dfd66cba306cf9adea91e211790c1026 --- /dev/null +++ b/login_provider/test/behave/Dockerfile @@ -0,0 +1,8 @@ +ARG baseimage=open.greenhost.net:4567/openappstack/single-sign-on/login_provider +FROM $baseimage + +ENV TESTUSER_USERNAME +ENV TESTUSER_EMAIL +ENV TESTUSER_PASSWORD + +COPY mock/db.py db.py diff --git a/login_provider/test/behave/mocks/db.py b/login_provider/test/behave/mocks/db.py new file mode 100644 index 0000000000000000000000000000000000000000..37082e715a00533d08583f59eb72f087216e9623 --- /dev/null +++ b/login_provider/test/behave/mocks/db.py @@ -0,0 +1,26 @@ +from os import environ +from flask_login import UserMixin + +USERNAME = environ["TESTUSER_USERNAME"] +PASSWORD = environ["TESTUSER_PASSWORD"] +EMAIL = environ["TESTUSER_EMAIL"] + +users = {USERNAME: {"password": PASSWORD, "email": EMAIL, "active": True}} + +class User(UserMixin): + def __init__(self, username): + self.id = username + self.username = username + self.active = False + self._load_remote_user_info() + + def _load_remote_user_info(self): + if self.username in users: + self.active = users[self.username]["active"] + self.email = users[self.username]["email"] + + def _verify_password(self, password): + return users[self.username]["password"] == password + + def authenticate(self, password): + return self.active and self._verify_password(password)