#!/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"
)

# 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/babel/README.md
    asserts_file_exist $aai_src_folder/champ/pom.xml
    asserts_file_exist $aai_src_folder/data-router/pom.xml
    asserts_file_exist $aai_src_folder/esr-gui/pom.xml
    asserts_file_exist $aai_src_folder/esr-server/pom.xml
    asserts_file_exist $aai_src_folder/gizmo/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

    for common in annotations auth core schema utils; do
        asserts_file_exist $aai_src_folder/aai-common/aai-$common/target/aai-$common-1.1.0-SNAPSHOT.jar
    done

    for service in common-logging eelf-logging logging-api; do
        asserts_file_exist $aai_src_folder/logging-service/$service/target/$service-1.1.0-SNAPSHOT.jar
    done

    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[@]}"
