#!/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 ${src_folders[sdnc]}/adaptors/pom.xml
    #asserts_file_exist ${src_folders[sdnc]}/architecture/docs/index.rst
    asserts_file_exist ${src_folders[sdnc]}/core/pom.xml
    #asserts_file_exist ${src_folders[sdnc]}/features/docs/index.rst
    asserts_file_exist ${src_folders[sdnc]}/northbound/pom.xml
    asserts_file_exist ${src_folders[sdnc]}/oam/pom.xml
    #asserts_file_exist ${src_folders[sdnc]}/parent/docs/index.rst
    asserts_file_exist ${src_folders[sdnc]}/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 ${src_folders[sdnc]}/northbound/vnfapi/model/target/vnfapi-model-1.2.0-SNAPSHOT.jar
        fi
        asserts_file_exist ${src_folders[sdnc]}/northbound/$component/installer/target/sdnc-$component-1.2.0-SNAPSHOT-installer.zip
        asserts_file_exist ${src_folders[sdnc]}/northbound/$component/features/target/$component-features-1.2.0-SNAPSHOT.jar
        asserts_file_exist ${src_folders[sdnc]}/northbound/$component/provider/target/$component-provider-1.2.0-SNAPSHOT.jar
    done
    asserts_file_exist ${src_folders[sdnc]}/oam/admportal/target/admportal.*-SNAPSHOT.zip
    asserts_file_exist ${src_folders[sdnc]}/oam/dgbuilder/target/dgbuilder.*-SNAPSHOT.zip
    asserts_file_exist ${src_folders[sdnc]}/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[@]}"
