#!/bin/bash

source /var/onap_tests/_test_base
source /var/onap/functions

covered_functions=(
"create_configuration_files" "clone_repo"
"configure_bind" "install_java" "install_maven" "install_nodejs" "install_python"
"install_docker" "pull_docker_image" "install_docker_compose" "configure_service"
"start_ODL" "compile_src" "build_docker_image" "docker_openecomp_login"
"pull_openecomp_image" "pull_onap_image" "coverity_repos"
)

# test_create_configuration_files() - Verify the creation of a configuration files
function test_create_configuration_files {
    create_configuration_files

    asserts_file_exist /opt/config/nexus_docker_repo.txt
    asserts_file_exist /opt/config/nexus_username.txt
    asserts_file_exist /opt/config/nexus_password.txt
    asserts_file_exist /opt/config/openstack_username.txt
    asserts_file_exist /opt/config/tenant_id.txt
    asserts_file_exist /opt/config/dmaap_topic.txt
    asserts_file_exist /opt/config/docker_version.txt
}

# test_docker_openecomp_login() - Verify the proper login to OpenECOMP Docker Hub
function test_docker_openecomp_login {
    docker_openecomp_login
}

# test_pull_openecomp_image() - Verify the OpenECOMP container image pulling process
function test_pull_openecomp_image {
    local image_name=portal-apps
    unset docker_version
    pull_openecomp_image $image_name

    asserts_image $nexus_docker_repo/openecomp/$image_name
}

# test_pull_onap_image() - Verify the ONAP cointainer pulling process
function test_pull_onap_image {
    local image_name=portal-apps
    unset docker_version
    pull_onap_image $image_name

    asserts_image $nexus_docker_repo/onap/$image_name
}

# test_clone_repo() - Verify cloning and pulling source code from repositories
function test_clone_repo {
    clone_repo demo

    asserts_installed_package git
    asserts_file_exist $git_src_folder/demo/LICENSE.TXT
}

# test_configure_bind() - Verify the correct installation and configuration of bind
function test_configure_bind {
    configure_bind

    asserts_installed_package bind9
    asserts_installed_package bind9utils
    asserts_file_exist /etc/bind/zones/db.simpledemo.openecomp.org
    asserts_file_exist /etc/bind/named.conf.options
    asserts_file_exist /etc/bind/named.conf.local

    rm -rf /etc/bind/
}

# test_install_java() - Verify the correct installation of java
function test_install_java {
    install_java

    asserts_installed_package openjdk-8-jdk
}

# test_install_maven() - Verify the correct installation and configuration of maven
function test_install_maven {
    install_maven

    asserts_installed_package maven3
    asserts_installed_package openjdk-8-jdk
    asserts_file_exist $mvn_conf_file
}

# test_install_nodejs() - Verify the correct installation of NodeJS tools
function test_install_nodejs {
    install_nodejs

    asserts_installed_package nodejs
    asserts_file_exist /usr/bin/npm
}

# test_install_python() - Verify the correct installation of Python
function test_install_python {
    install_python
    asserts_installed_package python2.7
    asserts_installed_package python-dev
}

# test_install_docker() - Verify the correct installation of Docker
function test_install_docker {
    install_docker

    asserts_installed_package docker-ce
}

# test_pull_docker_image() - Verify the correct retrieve of a specific docker image
function test_pull_docker_image {
    local image=attos/dmaap
    pull_docker_image $image

    asserts_image $image
}

# test_install_docker_compose() - Verify the correct installation of Docker Compose tool
function test_install_docker_compose {
    install_docker_compose

    asserts_file_exist /opt/docker/docker-compose
}

# test_configure_service() - Verify the correct configuration of a specific init service
function test_configure_service {
    local service=mso

    configure_service $service

    asserts_file_exist /etc/init.d/$service

    rm -rf /etc/init.d/$service
}

# test_start_ODL() - Verify the installation and configuration of OpenDayLight controller
function test_start_ODL {
    start_ODL

    asserts_file_exist /opt/opendaylight/current/bin/start
}

# test_compile_src() - Verify the compilation of java code using maven tools
function test_compile_src {
    local repo=vid/asdcclient
    clone_repo $repo
    compile_src $git_src_folder/$repo

    asserts_file_exist $git_src_folder/$repo/target/asdcclient-1.0.2-SNAPSHOT.jar
}

# test_build_docker_image() - Verify that a docker image is created from source code
function test_build_docker_image {
    clone_repo ccsdk/distribution
    build_docker_image $git_src_folder/ccsdk/distribution/ubuntu docker

    asserts_image onap/ccsdk-ubuntu-image
}

# test_coverity_repos() - Verify that all the repos are covered by scripts
function test_coverity_repos {
    # Get repositories list from source code files
    repos_list=()
    for module in $( stat -c "%F %n" /var/onap/* | grep -v "_\|functions\|commons\|files" | cut -d' ' -f 3-); do
        source $module
        module_repo_list=$(eval echo \${$(basename $module)_repos[@]})
        repos_list=(${repos_list[@]} ${module_repo_list[@]})
    done

    pushd /var/onap_tests/
    cp projects.txt remaining_projects.txt
    for covered_repo in "${repos_list[@]}"; do
        sed -i '/^'${covered_repo//\//\\/}'$/d' remaining_projects.txt
    done

    threshold=75
    num_projects=$(wc -l < projects.txt)
    num_remaining_projects=$(wc -l < remaining_projects.txt)
    coverage=`echo "scale=2; 100-($num_remaining_projects/$num_projects*100)" | bc | cut -d . -f 1`
    if [ $coverage -lt $threshold ]; then
        raise_error "There are repositories that are not covered by scripts"
    fi
    popd
}

if [ "$1" != '*' ]; then
    unset covered_functions
    covered_functions=$1
fi
main "${covered_functions[@]}"
