#!/bin/bash

source /var/onap_tests/_test_base
source /var/onap/mso

covered_functions=(
"clone_all_mso_repos" "compile_all_mso_repos" "get_mso_images" "install_mso"
)

# test_clone_all_mso_repos() - Verify the source code retrieve of MSO project
function test_clone_all_mso_repos {
    clone_all_mso_repos

    asserts_file_exist $src_folder/pom.xml
    asserts_file_exist $src_folder/chef-repo/LICENSE.txt
    asserts_file_exist $src_folder/docker-config/LICENSE.txt
    asserts_file_exist $src_folder/libs/pom.xml
    asserts_file_exist $src_folder/mso-config/LICENSE.txt
}

# test_compile_all_mso_repos() - Verify the correct compilation of MSO projects
function test_compile_all_mso_repos {
    clone_all_mso_repos
    compile_all_mso_repos

    asserts_file_exist $src_folder/libs/ceilometer-client/target/ceilometer-client-1.1.0-SNAPSHOT.jar
    asserts_file_exist $src_folder/libs/ceilometer-model/target/ceilometer-model-1.1.0-SNAPSHOT.jar
    asserts_file_exist $src_folder/libs/glance-client/target/glance-client-1.1.0-SNAPSHOT.jar
    asserts_file_exist $src_folder/libs/glance-model/target/glance-model-1.1.0-SNAPSHOT.jar
    asserts_file_exist $src_folder/libs/heat-client/target/heat-client-1.1.0-SNAPSHOT.jar
    asserts_file_exist $src_folder/libs/heat-model/target/heat-model-1.1.0-SNAPSHOT.jar
    asserts_file_exist $src_folder/libs/keystone-client/target/keystone-client-1.1.0-SNAPSHOT.jar
    asserts_file_exist $src_folder/libs/keystone-model/target/keystone-model-1.1.0-SNAPSHOT.jar
    asserts_file_exist $src_folder/libs/nova-client/target/nova-client-1.1.0-SNAPSHOT.jar
    asserts_file_exist $src_folder/libs/nova-model/target/nova-model-1.1.0-SNAPSHOT.jar
    asserts_file_exist $src_folder/libs/openstack-client/target/openstack-client-1.1.0-SNAPSHOT.jar
    asserts_file_exist $src_folder/libs/quantum-client/target/quantum-client-1.1.0-SNAPSHOT.jar
    asserts_file_exist $src_folder/libs/quantum-model/target/quantum-model-1.1.0-SNAPSHOT.jar
    asserts_file_exist $src_folder/libs/swift-client/target/swift-client-1.1.0-SNAPSHOT.jar
    asserts_file_exist $src_folder/libs/swift-model/target/swift-model-1.1.0-SNAPSHOT.jar
}

# test_get_mso_images() - Verify the creation of MSO Docker images
function test_get_mso_images {
    clone_all_mso_repos
    install_mso

    for image in mso mso-arquillian wildfly ubuntu-update jacoco; do
        asserts_image openecomp/$image
    done
}

# test_install_mso - Verify the execution of MSO Docker images
function test_install_mso {
    clone_all_mso_repos
    install_mso
    install_mso_docker_config

    asserts_image_running openecomp/mso
    asserts_image_running mariadb:10.1.11
}

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