# 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.

FROM ubuntu:18.04

RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get -y install git software-properties-common \
    curl xz-utils gnupg2 apt-transport-https make python3 debhelper python3-setuptools python3-pip apt-utils \
    ssh iputils-ping libcurl4-openssl-dev libssl-dev python3-yaml \
    build-essential libssl-dev libffi-dev python3-dev
RUN add-apt-repository -y ppa:rmescandon/yq && apt update && apt install yq -y

RUN python3 -m pip install --upgrade pip

RUN DEBIAN_FRONTEND=noninteractive apt-get install -y cargo rustc

RUN python3 --version && python3 -m pip --version
RUN rustc --version && cargo --version

RUN python3 -m pip install --upgrade setuptools setuptools-rust

RUN python3 -m pip install --ignore-installed pyyaml

RUN python3 -m pip install --upgrade haikunator requests robotframework robotframework-seleniumlibrary \
    robotframework-requests robotframework-jsonlibrary robotframework-sshlibrary charm-tools \
    verboselogs pyangbind python-openstackclient

ARG REPOSITORY_BASE=http://osm-download.etsi.org/repository/osm/debian
ARG RELEASE=ReleaseNINE-daily
ARG REPOSITORY_KEY=OSM%20ETSI%20Release%20Key.gpg
ARG REPOSITORY=testing
ARG TESTS_VERSION
ARG IM_VERSION
ARG OSMCLIENT_VERSION

RUN curl ${REPOSITORY_BASE}/${RELEASE}/${REPOSITORY_KEY} | apt-key add -
RUN add-apt-repository -y "deb ${REPOSITORY_BASE}/${RELEASE} ${REPOSITORY} tests osmclient IM" && apt-get update

RUN apt-get install -y python3-osm-im${IM_VERSION} python3-osmclient${OSMCLIENT_VERSION}
RUN apt-get install -y osm-tests${TESTS_VERSION} && \
    rm -rf /var/lib/apt/lists/*

RUN mv /usr/share/osm-tests/robot-systest /robot-systest
RUN mv /usr/share/osm-tests/charm.sh /usr/sbin/charm

WORKDIR /robot-systest

ARG CACHE_DATE=2021-03-01
RUN git clone https://osm.etsi.org/gitlab/vnf-onboarding/osm-packages.git --recurse-submodules /robot-systest/osm-packages

# 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/results

# 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"]
