Skip to content
Snippets Groups Projects
Commit 797c5953 authored by Varac's avatar Varac
Browse files

Merge branch 'tests' into 'master'

Create behaviour test for the login page

See merge request openappstack/single-sign-on!1
parents 1831961d cf8dbc38
No related branches found
No related tags found
1 merge request!1Create behaviour test for the login page
Pipeline #237 passed with stages
in 2 minutes and 50 seconds
stages:
- build
- application-test
consentProvider_image:
consent-provider:
stage: build
variables:
DOCKER_DRIVER: overlay2
image: docker:stable
services:
- docker:18-dind # FIXME This is an older version of DIND. Update when gitlab-runner fixes https://gitlab.com/gitlab-org/gitlab-runner/issues/4501
before_script:
- docker info
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}/consent_provider --dockerfile ${CI_PROJECT_DIR}/consent_provider/Dockerfile --destination $CI_REGISTRY_IMAGE/consent_provider:${CI_COMMIT_REF_NAME}
only:
changes:
- consent_provider/*
- .gitlab-ci.yml
login-provider:
stage: build
image:
name: gcr.io/kaniko-project/executor:debug
entrypoint: [""]
script:
- docker login -u gitlab-ci-token -p $CI_JOB_TOKEN $CI_REGISTRY
- docker build -t ${CI_REGISTRY_IMAGE}/consent_provider:${CI_COMMIT_REF_NAME} consent_provider/
- docker push ${CI_REGISTRY_IMAGE}/consent_provider:${CI_COMMIT_REF_NAME}
- echo "{\"auths\":{\"$CI_REGISTRY\":{\"username\":\"$CI_REGISTRY_USER\",\"password\":\"$CI_REGISTRY_PASSWORD\"}}}" > /kaniko/.docker/config.json
- /kaniko/executor --context ${CI_PROJECT_DIR}/login_provider --dockerfile ${CI_PROJECT_DIR}/login_provider/Dockerfile --destination $CI_REGISTRY_IMAGE/login_provider:${CI_COMMIT_REF_NAME}
only:
changes:
- consent-provider/*
- login_provider/*
- .gitlab-ci.yml
loginProvider_image:
login-provider-test:
stage: build
variables:
DOCKER_DRIVER: overlay2
image: docker:stable
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 --dockerfile ${CI_PROJECT_DIR}/login_provider/test/Dockerfile --destination $CI_REGISTRY_IMAGE/login_provider_ci_test:${CI_COMMIT_REF_NAME}
only:
changes:
- login_provider/*
- .gitlab-ci.yml
behave-login:
stage: application-test
services:
- docker:18-dind # FIXME This is an older version of DIND. Update when gitlab-runner fixes https://gitlab.com/gitlab-org/gitlab-runner/issues/4501
before_script:
- docker info
- name: ${CI_REGISTRY_IMAGE}/login_provider:${CI_COMMIT_REF_NAME}
alias: login_provider
image: ${CI_REGISTRY_IMAGE}/login_provider_ci_test:${CI_COMMIT_REF_NAME}
script:
- docker login -u gitlab-ci-token -p $CI_JOB_TOKEN $CI_REGISTRY
- docker build -t ${CI_REGISTRY_IMAGE}/login_provider:${CI_COMMIT_REF_NAME} login_provider/
- docker push ${CI_REGISTRY_IMAGE}/login_provider:${CI_COMMIT_REF_NAME}
- cd login_provider/test/behave/
- python3 -m behave -D headless=True -D url=http://login_provider:5000 -D email=example@oas.example.net -D password=password
artifacts:
paths:
- login_provider/test/behave/screenshots/
expire_in: 1 month
when: on_failure
only:
changes:
- login-provider/*
- login_provider/*
- .gitlab-ci.yml
......@@ -16,8 +16,8 @@ spec:
spec:
containers:
- name: {{ .Chart.Name }}-consent
image: "consent-provider"
imagePullPolicy: Never
image: "open.greenhost.net:4567/openappstack/single-sign-on/consent_provider:master"
imagePullPolicy: Always
env:
- name: HYDRA_ADMIN_URL
value: {{ .Values.global.hydraAdminUrl }}
......
......@@ -16,8 +16,8 @@ spec:
spec:
containers:
- name: {{ .Chart.Name }}-login
image: "login-provider"
imagePullPolicy: Never
image: "open.greenhost.net:4567/openappstack/single-sign-on/login_provider:master"
imagePullPolicy: Always
env:
- name: HYDRA_ADMIN_URL
value: {{ .Values.global.hydraAdminUrl }}
......
FROM alpine:3.9
LABEL name="Login_provider CI test image"
RUN apk --no-cache add \
chromium \
chromium-chromedriver \
python3-dev
RUN pip3 install behave behave_webdriver
"""Basic setup for behave and chromedriver."""
import behave_webdriver
import os
import re
import time
from behave_webdriver.driver import ChromeOptions
def save_screenshot(context, step):
"""Save a screenshot to ./screenshots."""
timestamp = time.strftime("%Y-%m-%dT%H:%M:%S")
filename = re.sub('\W', '-', '{} failed {}'.format(timestamp,
str(step.name)))
filepath = os.path.join('screenshots', filename + '.png')
if not os.path.exists('screenshots'):
os.mkdir('screenshots')
print('Saving screenshot to %s' % filepath)
context.behave_driver.save_screenshot(filepath)
def before_all(context):
"""Run at the very beginning."""
userdata = context.config.userdata
headless = userdata.get('headless', 'False')
chrome_options = ChromeOptions()
if headless == 'True':
chrome_options.add_argument('--headless')
chrome_options.add_argument('--no-sandbox')
chrome_options.add_argument('--disable-dev-shm-usage')
context.behave_driver = behave_webdriver.Chrome(
chrome_options=chrome_options)
def before_tag(context, tag):
values = dict()
userdata = context.config.userdata
values['url'] = userdata.get('url')
values['email'] = userdata.get('email')
values['password'] = userdata.get('password')
assert values['url'], 'url variable missing in' \
'userdata. Provide it with "-D url".'
assert values['email'], 'email variable missing in' \
'userdata. Provide it with "-D email".'
assert values['password'], 'password variable missing in' \
'userdata. Provide it with "-D password".'
context.login_provider = values
def after_all(context):
"""Cleanup after tests run."""
context.behave_driver.quit()
def after_step(context, step):
"""Save screeshot if step fails."""
if step.status == 'failed':
save_screenshot(context, step)
print("Console log output:")
for message in context.behave_driver.get_log('browser'):
print(" Level: {}".format(message['level']))
print(" Timestamp: {}".format(message['timestamp']))
print(" Source: {}".format(message['source']))
print(" Message: {}\n".format(message['message']))
@login_provider
Feature: Test login-provder function
As a OAS user
I want to be able to login to an OAS App
Scenario: Open the login interface
When I open the login-provider URL
Then I wait on element "input#email" for 1000ms to be visible
And I expect that element "input#password" is visible
And I expect that element "input#submit" is visible
"""Custom steps for login tests."""
import string
from behave import given, when
from behave_webdriver.steps import *
def before_all(context):
pass # login and save cookies here
@when(u'I open the login-provider URL')
@given(u'I open the login-provider URL')
def step_impl(context):
"""Open nextcloud URL."""
context.behave_driver.get(context.login_provider['url'])
@when(u'I enter the "{attribute}" in the inputfield "{element}"')
def step_impl(context, attribute, element):
"""Enter value into login inputfields."""
elem = context.behave_driver.get_element(element)
elem.clear()
value = context.login_provider[attribute]
elem.send_keys(value)
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment