# 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 as INSTALL

RUN DEBIAN_FRONTEND=noninteractive apt-get --yes update && \
    DEBIAN_FRONTEND=noninteractive apt-get --yes install \
    gcc=4:7.4.* \
    python3=3.6.* \
    python3-dev=3.6.* \
    python3-setuptools=39.0.* \
    curl=7.58.* \
    gettext-base=0.19.* \
    git=1:2.17.* \
    iputils-ping=3:* \
    jq=1.5* \
    libcurl4-openssl-dev=7.58.* \
    libssl-dev=1.1.* && \
    python3 -m easy_install pip==21.0.1 setuptools==51.0.0

ARG OSM_TESTS_URL
ARG PYTHON3_OSM_IM_URL
ARG PYTHON3_OSMCLIENT_URL

RUN curl $PYTHON3_OSM_IM_URL -o osm_im.deb
RUN dpkg -i ./osm_im.deb

RUN curl $PYTHON3_OSMCLIENT_URL -o osmclient.deb
RUN dpkg -i ./osmclient.deb

RUN curl $OSM_TESTS_URL -o osm_tests.deb
RUN dpkg -i ./osm_tests.deb

RUN pip3 install \
    -r /usr/lib/python3/dist-packages/osm_im/requirements.txt \
    -r /usr/lib/python3/dist-packages/osmclient/requirements.txt \
    -r /usr/share/osm-tests/requirements.txt

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

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

WORKDIR /robot-systest

# 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

# OSM RSA file
ENV OSM_RSA_FILE=/root/osm_id_rsa

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

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