#!/bin/bash

source /var/onap_tests/_test_base
source /var/onap/asdc

covered_functions=(
"clone_all_sdc_repos" "compile_all_sdc_repos" "get_sdc_images" "install_sdc"
)

# test_clone_all_sdc_repos() - Verifies the retrieval of SDC source code repos
function test_clone_all_sdc_repos {
    clone_all_sdc_repos

    asserts_file_exist $sdc_src_folder/pom.xml
    asserts_file_exist $sdc_src_folder/sdc-os-chef/pom.xml
    asserts_file_exist $sdc_src_folder/jtosca/pom.xml
    asserts_file_exist $sdc_src_folder/sdc-distribution-client/pom.xml
    asserts_file_exist $sdc_src_folder/sdc-titan-cassandra/pom.xml
    asserts_file_exist $sdc_src_folder/sdc-tosca/pom.xml
    asserts_file_exist $sdc_src_folder/sdc_common/pom.xml
}

# test_compile_all_sdc_repos() - Verifies the correct compilation of SDC repositories
function test_compile_all_sdc_repos {
    clone_all_sdc_repos
    compile_all_sdc_repos

    asserts_file_exist $sdc_src_folder/jtosca/target/jtosca-1.1.10-SNAPSHOT.jar
    asserts_file_exist $sdc_src_folder/sdc-distribution-client/sdc-distribution-ci/target/sdc-distribution-ci-1.1.32-SNAPSHOT.jar
    asserts_file_exist $sdc_src_folder/sdc-distribution-client/sdc-distribution-client/target/sdc-distribution-client-1.1.32-SNAPSHOT.jar
    asserts_file_exist $sdc_src_folder/sdc-os-chef/target/sdc-os-chef-1.1.0-SNAPSHOT.jar
    asserts_file_exist $sdc_src_folder/sdc-titan-cassandra/target/sdc-titan-cassandra-1.0.0.jar
    asserts_file_exist $sdc_src_folder/sdc-tosca/target/sdc-tosca-1.1.50-SNAPSHOT.jar

    for dirc in logging sdc-artifact-generator; do
        name="openecomp-$dirc"
        for module in api core; do
            fullname="$name-$module"
            asserts_file_exist $sdc_src_folder/sdc_common/$name-lib/$fullname/target/$fullname-1.1.0-SNAPSHOT.jar
        done
    done
}

# test_get_sdc_images() - Verifies the correct retrieval of SDC Docker images
function test_get_sdc_images {
    clone_all_sdc_repos
    get_sdc_images

    for image in backend frontend elasticsearch kibana cassandra sanity; do
        asserts_image openecomp/sdc-$image
    done
}

# test_install_sdc() - Verifies that SDC services are up and running
function test_install_sdc {
    clone_all_sdc_repos
    get_sdc_images
    install_sdc

    for image in backend frontend elasticsearch kibana cassandra sanity; do
        asserts_image_running openecomp/sdc-$image
    done
}

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