#!/bin/bash

source /var/onap_tests/_test_base
source /var/onap/ccsdk

covered_functions=(
"clone_ccsdk_repos" "compile_ccsdk_repos" "get_ccsdk_images"
)

# test_clone_ccsdk_repos() - Verify that CCSDL repositories are retrieved properly
function test_clone_ccsdk_repos {
    clone_repos "ccsdk"

    asserts_file_exist ${src_folders[ccsdk]}/dashboard/pom.xml
    asserts_file_exist ${src_folders[ccsdk]}/distribution/pom.xml
    asserts_file_exist ${src_folders[ccsdk]}/parent/pom.xml
    asserts_file_exist ${src_folders[ccsdk]}/platform/blueprints/pom.xml
    asserts_file_exist ${src_folders[ccsdk]}/platform/nbapi/pom.xml
    asserts_file_exist ${src_folders[ccsdk]}/platform/plugins/pom.xml
    asserts_file_exist ${src_folders[ccsdk]}/sli/adaptors/pom.xml
    asserts_file_exist ${src_folders[ccsdk]}/sli/core/pom.xml
    asserts_file_exist ${src_folders[ccsdk]}/sli/northbound/pom.xml
    asserts_file_exist ${src_folders[ccsdk]}/sli/plugins/pom.xml
    asserts_file_exist ${src_folders[ccsdk]}/storage/esaas/pom.xml
    asserts_file_exist ${src_folders[ccsdk]}/storage/pgaas/pom.xml
    asserts_file_exist ${src_folders[ccsdk]}/utils/pom.xml
}

# test_compile_ccsdk_repos() - Verify the compilation of CCSDK repositories
function test_compile_ccsdk_repos {
    clone_repos "ccsdk"
    compile_repos "ccsdk"

    asserts_file_exist ${src_folders[ccsdk]}/dashboard/ccsdk-app-common/target/ccsdk-app-common-1.1.0-SNAPSHOT.jar
    asserts_file_exist ${src_folders[ccsdk]}/dashboard/ccsdk-app-os/target/ccsdk-app-os-1.1.0-SNAPSHOT.war
    asserts_file_exist ${src_folders[ccsdk]}/dashboard/ccsdk-app-overlay/target/ccsdk-app-overlay-1.1.0-SNAPSHOT.war
    asserts_file_exist ${src_folders[ccsdk]}/distribution/dgbuilder/target/dgbuilder.0.1.0-SNAPSHOT.zip
    asserts_file_exist ${src_folders[ccsdk]}/distribution/platform-logic/installer/target/platform-logic-installer-0.1.0-SNAPSHOT.zip
    asserts_file_exist ${src_folders[ccsdk]}/platform/nbapi/target/commonnbapi-*.war

    #for adaptor in aai-service mdsal-resource resource-assignment sql-resource; do
        #for component in features provider; do
            #asserts_file_exist ${src_folders[ccsdk]}/sli/adaptors/$adaptor/$component/target/$adaptor-$component-0.1.0-SNAPSHOT.jar
        #done
        #asserts_file_exist ${src_folders[ccsdk]}/sli/adaptors/$adaptor/installer/target/sdnc-$adaptor-0.1.0-SNAPSHOT-installer.zip
    #done

    #for core in dblib filters sli sliapi sliPluginUtils; do
    for core in dblib; do
        for component in features provider; do
            asserts_file_exist ${src_folders[ccsdk]}/sli/core/$core/$component/target/$core-$component-*-SNAPSHOT.jar
        done
        asserts_file_exist ${src_folders[ccsdk]}/sli/core/$core/installer/target/sdnc-$core-*-SNAPSHOT-installer.zip
    done
    #asserts_file_exist ${src_folders[ccsdk]}/sli/core/sli/common/target/sli-common-*-SNAPSHOT.jar
    #asserts_file_exist ${src_folders[ccsdk]}/sli/core/sli/recording/target/sli-recording-*-SNAPSHOT.jar
    #asserts_file_exist ${src_folders[ccsdk]}/sli/core/sliapi/model/target/sliapi-model-*-SNAPSHOT.jar

    for northbound in asdcApi dataChange; do
        for component in features model provider; do
            asserts_file_exist ${src_folders[ccsdk]}/sli/northbound/$northbound/$component/target/$northbound-$component-*-SNAPSHOT.jar
        done
        asserts_file_exist ${src_folders[ccsdk]}/sli/northbound/$northbound/installer/target/sdnc-$northbound-*-SNAPSHOT-installer.zip
    done
    asserts_file_exist ${src_folders[ccsdk]}/sli/northbound/dmaap-listener/target/dmaap-listener-*-SNAPSHOT.jar
    asserts_file_exist ${src_folders[ccsdk]}/sli/northbound/ueb-listener/target/ueb-listener-*-SNAPSHOT.jar

    for plugin in properties-node restapi-call-node; do
        for component in features provider; do
            asserts_file_exist ${src_folders[ccsdk]}/sli/plugins/$plugin/$component/target/$plugin-$component-*-SNAPSHOT.jar
        done
        asserts_file_exist ${src_folders[ccsdk]}/sli/plugins/$plugin/installer/target/sdnc-$plugin-*-SNAPSHOT-installer.zip
    done
}

# test_get_ccsdk_images() - Verify that CCSDK images are retrieved or built properly
function test_get_ccsdk_images {
    clone_repos "ccsdk"
    get_ccsdk_images

    for image in dgbuilder odlsli odl ubuntu; do
        asserts_image onap/ccsdk-$image-image
    done
}

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