#!/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_repos "sdnc"

    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_repos "sdnc"
    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_repos "sdnc"
    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_repos "sdnc"
    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[@]}"
