#!/bin/bash

source /var/onap_tests/_test_base
source /var/onap/sdc

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_repos "sdc"

    asserts_file_exist ${src_folders[sdc]}/pom.xml
    asserts_file_exist ${src_folders[sdc]}/sdc-os-chef/pom.xml
    asserts_file_exist ${src_folders[sdc]}/jtosca/pom.xml
    asserts_file_exist ${src_folders[sdc]}/sdc-distribution-client/pom.xml
    asserts_file_exist ${src_folders[sdc]}/sdc-titan-cassandra/pom.xml
    asserts_file_exist ${src_folders[sdc]}/sdc-tosca/pom.xml
    asserts_file_exist ${src_folders[sdc]}/sdc_common/pom.xml
}

# test_compile_all_sdc_repos() - Verifies the correct compilation of SDC repositories
function test_compile_all_sdc_repos {
    clone_repos "sdc"
    compile_repos "sdc"

    #asserts_file_exist ${src_folders[sdc]}/jtosca/target/jtosca-1.1.10-SNAPSHOT.jar
    #asserts_file_exist ${src_folders[sdc]}/sdc-distribution-client/sdc-distribution-ci/target/sdc-distribution-ci-1.1.*-SNAPSHOT.jar
    #asserts_file_exist ${src_folders[sdc]}/sdc-distribution-client/sdc-distribution-client/target/sdc-distribution-client-1.1.*-SNAPSHOT.jar
    #asserts_file_exist ${src_folders[sdc]}/sdc-titan-cassandra/target/jamm-0.3.0.jar
    #asserts_file_exist ${src_folders[sdc]}/sdc-tosca/target/sdc-tosca-1.1.*-SNAPSHOT.jar

    #for dirc in logging sdc-artifact-generator; do
    for dirc in logging; do
        name="openecomp-$dirc"
        for module in api core; do
            fullname="$name-$module"
            asserts_file_exist ${src_folders[sdc]}/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_repos "sdc"
    get_sdc_images

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

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

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

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