# 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

# Installing Juju
ARG JUJU_VERSION_M=2.8
ARG JUJU_VERSION_R=11
ARG JUJU_VERSION=$JUJU_VERSION_M.$JUJU_VERSION_R

RUN curl --output /tmp/juju-$JUJU_VERSION-linux-amd64.tar.xz -LO \
    https://launchpad.net/juju/$JUJU_VERSION_M/$JUJU_VERSION/+download/juju-$JUJU_VERSION-linux-amd64.tar.xz && \
    tar -xf /tmp/juju-$JUJU_VERSION-linux-amd64.tar.xz -C /tmp && \
    install /tmp/juju /usr/local/bin/juju && \
    rm /tmp/juju /tmp/juju-$JUJU_VERSION-linux-amd64.tar.xz

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

# Juju data folder
ENV JUJU_DATA=/root/.local/share/juju

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

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