#!groovy
// This is a Jenkinsfile for a scripted pipeline for the SCPF tests
// properties([pipelineTriggers([cron('30 19 * * *')])])

// TODO: Exception handling around steps
SCPF = [
    SCPFcbench: [ test:'SCPFcbench', table:'cbench_bm_tests', results:'cbench_bm_results', file:'CbenchDB'],
    SCPFhostLat: [ test:'SCPFhostLat', table:'host_latency_tests', results:'host_latency_results', file:'HostAddLatency'],
    SCPFportLat: [ test:'SCPFportLat', table:'port_latency_details', results:'port_latency_results', file:'/tmp/portEventResultDb'],
    SCPFflowTp1g: [ test:'SCPFflowTp1g', table:'flow_tp_tests', results:'flow_tp_results', file:'flowTP1gDB'],
    SCPFflowTp1gWithFlowObj: [ test:'SCPFflowTp1g --params TEST/flowObj=True', table:'flow_tp_fobj_tests', results:'flow_tp_fobj_results', file:'flowTP1gDBFlowObj'],
    SCPFscaleTopo: [ test:'SCPFscaleTopo', table:'scale_topo_latency_details', results:'scale_topo_latency_results', file:'/tmp/scaleTopoResultDb'],
    SCPFswitchLat: [ test:'SCPFswitchLat', table:'switch_latency_details', results:'switch_latency_results', file:'/tmp/switchEventResultDb'],
    SCPFbatchFlowResp: [ test:'SCPFbatchFlowResp', table:'batch_flow_tests', results:'batch_flow_results', file:'SCPFbatchFlowRespData'],
    SCPFintentEventTp: [ test:'SCPFintentEventTp', table:'intent_tp_tests', results:'intent_tp_results', file:'IntentEventTPDB'],
    SCPFintentRerouteLat: [ test:'SCPFintentRerouteLat', table:'intent_reroute_latency_tests', results:'intent_reroute_latency_results', file:'IntentRerouteLatDB'],
    SCPFscalingMaxIntents: [ test:'SCPFscalingMaxIntents', table:'max_intents_tests', results:'max_intents_results', file:'ScalingMaxIntentDB'],
    SCPFintentEventTpWithFlowObj: [ test:'SCPFintentEventTp --params TEST/flowObj=True', table:'intent_tp_fobj_tests', results:'intent_tp_fobj_results', file:'IntentEventTPflowObjDB'],
    SCPFintentInstallWithdrawLat: [ test:'SCPFintentInstallWithdrawLat', table:'intent_latency_tests', results:'intent_latency_results', file:'IntentInstallWithdrawLatDB'],
    SCPFintentRerouteLatWithFlowObj: [ test:'SCPFintentRerouteLat --params TEST/flowObj=True', table:'intent_reroute_latency_fobj_tests', results:'intent_reroute_latency_fobj_results', file:'IntentRerouteLatDBWithFlowObj'],
    SCPFscalingMaxIntentsWithFlowObj: [ test:'SCPFscalingMaxIntents --params TEST/flowObj=True', table:'max_intents_fobj_tests', results:'max_intents_fobj_results', file:'ScalingMaxIntentDBWFO'],
    SCPFintentInstallWithdrawLatWithFlowObj: [ test:'SCPFintentInstallWithdrawLat --params TEST/flowObj=True', table:'intent_latency_fobj_tests', results:'intent_latency_fobj_results', file:'IntentInstallWithdrawLatDBWFO']
]

// Get just the test names
def defaultTests = SCPF.keySet().toArray()
// Convert to a string with new line deliminators for user input
StringBuilder sb = new StringBuilder();
for (String s : defaultTests)
{
    sb.append(s);
    sb.append("\n");
}
choices = sb.toString();
// Define sets of tests
SCPF_Basic = "SCPFswitchLat\nSCPFportLat\nSCPFintentInstallWithdrawLat\nSCPFintentEventTp\nSCPFflowTp1g\nSCPFcbench\nSCPFbatchFlowResp"
SCPF_ExtraSetA = "SCPFintentRerouteLat\nSCPFscalingMaxIntents\nSCPFhostLat\nSCPFscaleTopo"
SCPF_ExtraSetB = "SCPFintentInstallWithdrawLatWithFlowObj\nSCPFintentEventTpWithFlowObj\nSCPFintentRerouteLatWithFlowObj\nSCPFscalingMaxIntentsWithFlowObj\nSCPFflowTp1gWithFlowObj"

try {
    timeout(time: 120, unit: 'SECONDS') {
        // This is kind of hacky, I can't seem to find the correct way to get a "build with parameters" button
        testcases = input message: 'Tests to run?', parameters:[[$class:'TextParameterDefinition', defaultValue: choices, description:'', name: 'Run these tests']]
    }
} catch(org.jenkinsci.plugins.workflow.steps.FlowInterruptedException Err) {
    echo("Input timed out or cancled, using default values")
    // Set tests based on day of week
    def now = new Date()
    echo(now.toString())
    today = now[Calendar.DAY_OF_WEEK]
    switch (today) {
        case Calendar.MONDAY:
            choices = SCPF_Basic + "\n" + SCPF_ExtraSetB
            println "Defaulting to Monday tests:" + choices
            break
        case Calendar.TUESDAY:
            choices = SCPF_Basic
            println "Defaulting to Tuesday tests:" + choices
            break
        case Calendar.WEDNESDAY:
            choices = SCPF_Basic + "\n" + SCPF_ExtraSetA
            println "Defaulting to Wednesday tests:" + choices
            break
        case Calendar.THURSDAY:
            choices = SCPF_Basic + "\n" + SCPF_ExtraSetB
            println "Defaulting to Thursday tests:" + choices
            break
        case Calendar.FRIDAY:
            choices = SCPF_Basic + "\n" + SCPF_ExtraSetA + "\n" + SCPF_ExtraSetB
            println "Defaulting to Fridat tests:" + choices
            break
        case Calendar.SATURDAY:
            choices = SCPF_Basic + "\n" + SCPF_ExtraSetA + "\n" + SCPF_ExtraSetB
            println "Defaulting to Saturday tests:" + choices
            break
        case Calendar.SUNDAY:
            choices = SCPF_Basic + "\n" + SCPF_ExtraSetA
            println "Defaulting to Sunday tests:" + choices
            break
    }
    testcases = choices
}

echo("Testcases:")
//println testcases
// TODO REMOVE AFTER DEBUGGING
def testsToRun = testcases.tokenize("\n;, ")
for (String test : testsToRun) {
    println test
}

def tests = [:]
for (int i = 0; i < testsToRun.size(); i++) {
    // Get the actual string here.
    def testName = testsToRun[i]
    def stepName = "Running ${testName}"
    tests[stepName] = SCPFTest(testName)
}

// run the tests
parallel tests

// The testName should be the key from the SCPF map
def SCPFTest( testName ) {
    return {
        node ("TestStation-BMs"){ // only run SCPF tests on the BM cluster
            def prop = readProperties(file:'/var/jenkins/TestONOS.property') // TODO set defaults

            withEnv(['ONOSBranch='+prop["ONOSBranch"],
                     'ONOSJVMHeap='+prop["ONOSJVMHeap"],
                     'TestONBranch='+prop["TestONBranch"],
                     'ONOSTag='+prop["ONOSTag"],
                     'WikiPrefix='+prop["WikiPrefix"]]){
                stage(testName) {
                    sh '''#!/bin/bash -l
                    set -i # interactive
                    shopt -s expand_aliases # expand alias in non-interactive mode
                    export PYTHONUNBUFFERED=1

                    ifconfig

                    echo "ONOS Branch is: $ONOSBranch"
                    echo "TestON Branch is: $TestONBranch"
                    echo "Test date: "
                    date

                    cd ~
                    export PATH=$PATH:onos/tools/test/bin

                    timeout 240 stc shutdown
                    timeout 240 stc teardown
                    timeout 240 stc shutdown

                    cd ~/OnosSystemTest/TestON/bin
                    git log |head
                    ./cleanup.sh
                    ''' + "./cli.py run " + SCPF[testName]['test']

                    // Post Results
                    withCredentials([
                        string(credentialsId: 'db_pass', variable: 'pass'),
                        string(credentialsId: 'db_user', variable: 'user'),
                        string(credentialsId: 'db_host', variable: 'host'),
                        string(credentialsId: 'db_port', variable: 'port')]) {
                            def database_command = pass + "|psql --host=" + host + " --port=" + port + " --username=" + user + " --password --dbname onostest -c \"INSERT INTO " + SCPF[testName]['table'] + " VALUES('\$DATE','" + SCPF[testName]['results'] + "','\$BUILD_NUMBER', '\$ONOSBranch', \$line);\""
                            if (testName == "SCPFscaleTopo" || testName == "SCPFswitchLat" || testName == "SCPFportLat") {
                                database_command = pass + "|psql --host=" + host + " --port=" + port + " --username=" + user + " --password --dbname onostest -c \"INSERT INTO " + SCPF[testName]['table'] + " VALUES('\$DATE','" + SCPF[testName]['results'] + "','\$BUILD_NUMBER', \$line, '\$ONOSBranch');\""
                            }
                            sh '''#!/bin/bash

                            export DATE=\$(date +%F_%T)
                            cd ~
                            pwd
                            cd /tmp
                            while read line
                            do

                            echo \$line
                            echo ''' + database_command + '''

                            done< ''' + SCPF[testName]['file']
                    }
                    // Fetch Logs
                    sh '''#!/bin/bash

                    cd ~/OnosSystemTest/TestON/logs
                    echo "Job Name is: ${JOB_NAME}"
                    TestONlogDir=$(ls -t | grep ${TEST_NAME}_  |head -1)
                    echo "########################################################################################"
                    echo "#####  copying ONOS logs from all nodes to TestON/logs directory: ${TestONlogDir}"
                    echo "########################################################################################"
                    cd $TestONlogDir
                    if [ $? -eq 1 ]
                    then
                        echo "Job name does not match any test suite name to move log!"
                    else
                        pwd
                        for i in $OC{1..7}; do onos-fetch-logs $i || echo log does not exist; done
                    fi'''
                }
            }
        }
    }
}
