#!/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/pom.xml
    asserts_file_exist $sdnc_src_folder/core/pom.xml
    # asserts_file_exist $sdnc_src_folder/features/pom.xml
    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/pom.xml
    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" != "generic-resource-api" ]]; then
            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
        else
            asserts_file_exist $sdnc_src_folder/northbound/generic-resource-api/features/target/generic-resource-api.features-1.2.0-SNAPSHOT.jar
            asserts_file_exist $sdnc_src_folder/northbound/generic-resource-api/installer/target/sdnc-generic-resources-api-1.2.0-SNAPSHOT-installer.zip
            asserts_file_exist $sdnc_src_folder/northbound/generic-resource-api/model/target/generic-resource-api.model-1.2.0-SNAPSHOT.jar
            asserts_file_exist $sdnc_src_folder/northbound/generic-resource-api/provider/target/generic-resource-api.provider-1.2.0-SNAPSHOT.jar
        fi
    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[@]}"
