#!/bin/bash

source /var/onap_tests/_test_base
source /var/onap/msb

covered_functions=(
"clone_all_msb_repos" "compile_all_msb_repos" "get_msb_images" "install_msb"
)

# test_clone_all_msb_repos() - Verify the source code retrieve of Microservice Bus project
function test_clone_all_msb_repos {
    clone_repos "msb"

    asserts_file_exist ${src_folders[msb]}/apigateway/pom.xml
    asserts_file_exist ${src_folders[msb]}/discovery/pom.xml
    asserts_file_exist ${src_folders[msb]}/java-sdk/pom.xml
    asserts_file_exist ${src_folders[msb]}/swagger-sdk/pom.xml
}

# test_compile_all_msb_repos() - Verify the correct compilation of MSB project
function test_compile_all_msb_repos {
    clone_repos "msb"
    compile_repos "msb"

    asserts_file_exist ${src_folders[msb]}/apigateway/apiroute/apiroute-service/target/original-apiroute-service-1.1.0-SNAPSHOT.jar
    asserts_file_exist ${src_folders[msb]}/apigateway/apiroute/apiroute-standalone/target/apiroute-1.1.0-SNAPSHOT.zip
    asserts_file_exist ${src_folders[msb]}/discovery/discovery-ui/target/discovery-ui-1.1.0-SNAPSHOT.jar
    asserts_file_exist ${src_folders[msb]}/discovery/sdclient/discovery-service/target/original-discovery-service-1.1.0-SNAPSHOT.jar
    asserts_file_exist ${src_folders[msb]}/java-sdk/target/msb-java-sdk-1.1.0-SNAPSHOT.jar
    asserts_file_exist ${src_folders[msb]}/swagger-sdk/target/swagger-sdk-1.1.0-SNAPSHOT.jar
}

# test_get_msb_images() - Verify the creation of MSB Docker images
function test_get_msb_images {
    clone_repos "msb"
    get_msb_images

    for image in base apigateway discovery; do
        asserts_image $nexus_docker_repo/onap/msb/msb_$image
    done
}

# test_install_msb - Verify the execution of MSB Docker images
function test_install_msb {
    clone_repos "msb"
    get_msb_images
    install_msb

    for image in apigateway discovery; do
        asserts_image_running $nexus_docker_repo/onap/msb/msb_$image
    done

    asserts_http_status_code "http://127.0.0.1:10081/api/microservices/v1/services"
    asserts_http_status_code "http://127.0.0.1/api/aai/v8/cloud-infrastructure/cloud-regions"
}

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