#!/bin/bash

source /var/onap_tests/_test_base
source /var/onap/aai

covered_functions=(
#"install_hadoop" "install_haproxy" "clone_all_aai_repos" "compile_aai_repos" "setup_titan" "start_aai_microservices" "install_hbase" "install_ajsc_aai" "install_model_loader"
"install_hadoop" "install_haproxy" "clone_all_aai_repos" "compile_aai_repos" "setup_titan" "install_hbase" "install_ajsc_aai" "install_model_loader"
)

# TODO(electrocucaracha): Remove/Modify functions that doesn't support proxy settings
if [ -z $http_proxy ] & [ -z $https_proxy ]; then
    covered_functions=(${covered_functions[@]} "install_hbase")
fi

# test_install_hadoop() - Verify that Hadoop is downloaded and started properly
function test_install_hadoop {
    install_hadoop

    asserts_file_exist /opt/hadoop/current/titan-1.0.0-hadoop1/bin/titan.sh
    asserts_java_process Elasticsearch
    asserts_java_process GremlinServer
    asserts_java_process CassandraDaemon
}

# test_install_haproxy() - Verify that HAProxy is installed properly
function test_install_haproxy {
    install_haproxy

    asserts_installed_package haproxy
    asserts_process haproxy
}

# test_clone_all_aai_repos() - Verify that all the AAI Repos are cloned
function test_clone_all_aai_repos {
    clone_all_aai_repos

    asserts_file_exist $aai_src_folder/aai-common/pom.xml
    asserts_file_exist $aai_src_folder/aai-config/cookbooks/aai-resources/runlist-aai-resources.json
    asserts_file_exist $aai_src_folder/aai-data/environments/solo.json
    asserts_file_exist $aai_src_folder/aai-service/pom.xml
    asserts_file_exist $aai_src_folder/data-router/pom.xml
    asserts_file_exist $aai_src_folder/logging-service/pom.xml
    asserts_file_exist $aai_src_folder/model-loader/pom.xml
    asserts_file_exist $aai_src_folder/resources/pom.xml
    asserts_file_exist $aai_src_folder/rest-client/pom.xml
    asserts_file_exist $aai_src_folder/router-core/pom.xml
    asserts_file_exist $aai_src_folder/search-data-service/pom.xml
    asserts_file_exist $aai_src_folder/sparky-be/pom.xml
    asserts_file_exist $aai_src_folder/sparky-fe/pom.xml
    asserts_file_exist $aai_src_folder/test-config/docker-compose-app.yml
    asserts_file_exist $aai_src_folder/traversal/pom.xml
}

# test_compile_aai_repos() - Verify that all the AAI Repositories complile properly
function test_compile_aai_repos {
    clone_all_aai_repos
    compile_aai_repos

    asserts_file_exist $aai_src_folder/aai-common/aai-annotations/target/aai-annotations-1.1.0-SNAPSHOT.jar
    asserts_file_exist $aai_src_folder/aai-common/aai-auth/target/aai-auth-1.1.0-SNAPSHOT.jar
    asserts_file_exist $aai_src_folder/aai-common/aai-core/target/aai-core-1.1.0-SNAPSHOT.jar
    asserts_file_exist $aai_src_folder/aai-common/aai-schema/target/aai-schema-1.1.0-SNAPSHOT.jar

    asserts_file_exist $aai_src_folder/logging-service/common-logging/target/common-logging-1.1.0-SNAPSHOT.jar
    asserts_file_exist $aai_src_folder/logging-service/eelf-logging/target/eelf-logging-1.1.0-SNAPSHOT.jar
    asserts_file_exist $aai_src_folder/logging-service/logging-api/target/logging-api-1.1.0-SNAPSHOT.jar

    asserts_file_exist $aai_src_folder/resources/aai-resources/target/aai-resources.jar
    asserts_file_exist $aai_src_folder/traversal/aai-traversal/target/traversal.jar
}

# test_setup_titan() - Verify that Titan Cassandra DB is up and running
function test_setup_titan {
    clone_all_aai_repos
    install_hadoop
    setup_titan

    # TODO(electrocucaracha): Validate the DB creation
}

# test_start_aai_microservices() - Verify that AAI Resources and Traversal images works
function test_start_aai_microservices {
    clone_all_aai_repos
    start_aai_microservices

    # TODO(electrocucaracha): Investigate how to run AAI microservices in background
}

# test_install_hbase() - Verify that AAI HBase service is up and running properly
function test_install_hbase {
    install_hbase

    asserts_image_running aai-hbase-${hbase_version}
}

# test_install_ajsc_aai() - Verify that AJSC AAI service is up and running properly
function test_install_ajsc_aai {
    clone_all_aai_repos
    install_ajsc_aai

    asserts_image_running openecomp/ajsc-aai
}

# test_install_model_loader() - Verify that Model AAI service is up and running properly
function test_install_model_loader {
    clone_all_aai_repos
    install_model_loader

    asserts_image openecomp/model-loader
}

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