# Copyright 2020 ETSI
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#    http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
# implied.
# See the License for the specific language governing permissions and
# limitations under the License.

# Author: Felipe Vicens (felipe.vicens@atos.net) ATOS

FROM ubuntu:18.04

# Installing robot dependencies
RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get -y install git software-properties-common \
    make python3 debhelper python3-pip apt-utils ssh iputils-ping libcurl4-openssl-dev libssl-dev cargo rustc

RUN add-apt-repository -y ppa:rmescandon/yq && apt update && apt install yq -y 

RUN python3 -m pip install -U pip

RUN python3 -m pip install charm-tools haikunator python-openstackclient requests robotframework \
    robotframework-seleniumlibrary robotframework-requests robotframework-jsonlibrary robotframework-sshlibrary \
    setuptools setuptools-rust git+https://osm.etsi.org/gerrit/osm/IM.git \
    git+https://osm.etsi.org/gerrit/osm/osmclient.git

# Preparing working environment
WORKDIR /robot-systest
RUN git clone --branch sol006 https://osm.etsi.org/gitlab/vnf-onboarding/osm-packages.git --recurse-submodules /robot-systest/osm-packages

# Copy robot folder and charm.sh
COPY robot-systest /robot-systest
COPY charm.sh /usr/sbin/charm

# Copy conformance tests data
COPY conformance-tests /robot-systest/conformance-tests

# Folder where Robot tests are stored
ENV ROBOT_DEVOPS_FOLDER=/robot-systest

# Folder to save alternative DUT environments (optional)
ENV ENVIRONMENTS_FOLDER=environments

# Folder where all required packages are stored
ENV PACKAGES_FOLDER=/robot-systest/osm-packages

# Folder where test results should be exported
ENV ROBOT_REPORT_FOLDER=/robot-systest/reports

# Kubeconfig file
ENV K8S_CREDENTIALS=/root/.kube/config

ENV LC_ALL=C.UTF-8
ENV LANG=C.UTF-8

ENTRYPOINT [ "/robot-systest/run_test.sh"]
