pipeline {
    agent {
        label "${params.BUILD_NODE}"
    }
    options {
        timeout(time: 60, unit: 'MINUTES')
    }
    environment {
        SWITCH_USER = "jenkins"
        STRATUM_PORT = "${params.STRATUM_PORT}"
        SWITCH_ADDR = "${params.SWITCH_IP}:${STRATUM_PORT}"
        SWITCH_SSH = "${SWITCH_USER}@${params.SWITCH_IP}"
        CHASSIS_CONFIG = "/home/jenkins/chassis_config.pb.txt"
        TREX_DIR = "/srv/trex-core-2.85-scapy-2.4.5/scripts"
        PLATFORM = "x86-64-accton-wedge100bf-32qs-r0"
    }

    stages {
        stage('Start Stratum') {
            steps {
                step([$class: 'WsCleanup'])
                git branch: "${params.GIT_BRANCH}", credentialsId: 'github-onf-bot-ssh-key', url: "${params.GIT_URL}"
                sshagent(credentials: ['menlo-pdp-32qs-jenkins']) {
                    sh returnStdout: false, label: "Start Stratum on ${params.SWITCH_IP}", script: '''
                        . ./.env
                        ssh ${SWITCH_SSH} "docker ps | grep stratum | cut -d' ' -f1 | xargs docker stop; pkill stratum_bf" || true
                        scp ./ptf/tests/linerate/chassis_config.pb.txt ${SWITCH_SSH}:/home/jenkins/
                        ssh ${SWITCH_SSH} "docker pull ${STRATUM_DOCKER_IMG}"
                        ssh ${SWITCH_SSH} "docker run -itd --rm --privileged --name stratum_bfrt \
                            -v /dev:/dev -v /sys:/sys  \
                            -v /lib/modules/4.14.49-OpenNetworkLinux:/lib/modules/4.14.49-OpenNetworkLinux \
                            --env PLATFORM=${PLATFORM} \
                            --network host \
                            -v ${CHASSIS_CONFIG}:/etc/stratum/${PLATFORM}/chassis_config.pb.txt \
                            -v /var/log:/var/log/stratum \
                            ${STRATUM_DOCKER_IMG} \
                            --enable_onlp=false \
                            -bf_switchd_background=false \
                            -external_stratum_urls=0.0.0.0:${STRATUM_PORT}"
                    '''
                    sh "until nc -z ${params.SWITCH_IP} ${STRATUM_PORT}; do sleep 1; done"
                }
            }
        }
        stage('Run fabric-tna tests') {
            steps {
                script {
                    withDockerRegistry([url: "https://registry.opennetworking.org", credentialsId: "onf-internal-registry"]) {
                        sh returnStdout: false, label: "Build fabric-tna and run linerate tests", script: """
                            PROFILE=${params.PROFILE} SWITCH_ADDR=${SWITCH_ADDR} bash .jenkins/linerate.sh
                        """
                    }
                }
            }
        }
    }
    post {
        always {
            sshagent(credentials: ['menlo-pdp-32qs-jenkins']) {
                sh returnStdout: false, label: "Stop Stratum", script: """
                    ssh ${SWITCH_SSH} "docker ps | grep stratum | cut -d' ' -f1 | xargs docker stop; pkill stratum_bf" || true
                """
            }
            archiveArtifacts(artifacts: 'logs/**/**', allowEmptyArchive: true, excludes: 'logs/**/int-traffic-trace-*.pcap')
        }
    }
}
