#!/bin/bash

source /var/onap_tests/_test_base
source /var/onap/sdnc

covered_functions=(
"clone_all_sdnc_repos" "compile_all_sdnc_repos" "get_sdnc_images" "install_sdnc"
)

# test_clone_all_sdnc_repos() - Verify the source code retrieve of SDNC project
function test_clone_all_sdnc_repos {
    clone_all_sdnc_repos

    asserts_file_exist $sdnc_src_folder/adaptors/pom.xml
    asserts_file_exist $sdnc_src_folder/architecture/docs/index.rst
    asserts_file_exist $sdnc_src_folder/core/pom.xml
    asserts_file_exist $sdnc_src_folder/features/docs/index.rst
    asserts_file_exist $sdnc_src_folder/northbound/pom.xml
    asserts_file_exist $sdnc_src_folder/oam/pom.xml
    asserts_file_exist $sdnc_src_folder/parent/docs/index.rst
    asserts_file_exist $sdnc_src_folder/plugins/pom.xml
}

# test_compile_all_sdnc_repos() - Verify the correct compilation of SDNC projects
function test_compile_all_sdnc_repos {
    clone_all_sdnc_repos
    compile_all_sdnc_repos

    for component in generic-resource-api vnfapi vnftools; do
        if [[ "$component" == "vnfapi" ]]; then
            asserts_file_exist $sdnc_src_folder/northbound/vnfapi/model/target/vnfapi-model-1.2.0-SNAPSHOT.jar
        fi
        asserts_file_exist $sdnc_src_folder/northbound/$component/installer/target/sdnc-$component-1.2.0-SNAPSHOT-installer.zip
        asserts_file_exist $sdnc_src_folder/northbound/$component/features/target/$component-features-1.2.0-SNAPSHOT.jar
        asserts_file_exist $sdnc_src_folder/northbound/$component/provider/target/$component-provider-1.2.0-SNAPSHOT.jar
    done
    asserts_file_exist $sdnc_src_folder/oam/admportal/target/admportal.*-SNAPSHOT.zip
    asserts_file_exist $sdnc_src_folder/oam/dgbuilder/target/dgbuilder.*-SNAPSHOT.zip
    asserts_file_exist $sdnc_src_folder/oam/platform-logic/installer/target/platform-logic-installer-*-SNAPSHOT.zip
}

# test_get_sdnc_images() - Verify that the SDNC images are created or retrieved
function test_get_sdnc_images {
    clone_all_sdnc_repos
    get_sdnc_images

    asserts_image onap/sdnc-image
    asserts_image onap/admportal-sdnc-image
    asserts_image onap/dgbuilder-sdnc-image
    asserts_image mysql/mysql-server:5.6
}

# test_install_sdnc() - Verify that the SDNC Docker containers are up and running
function test_install_sdnc {
    clone_all_sdnc_repos
    get_sdnc_images
    install_sdnc

    asserts_image_running onap/ccsdk-dgbuilder-image
    asserts_image_running onap/admportal-sdnc-image
    asserts_image_running onap/sdnc-image
    asserts_image_running mysql/mysql-server:5.6
}

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