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

    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_repos "aai"
    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_repos "aai"
    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_repos "aai"
    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_repos "aai"
    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_repos "aai"
    install_model_loader

    asserts_image openecomp/model-loader
}

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