#!/bin/bash
# This script is executed by Sandcastle
# to determine next steps to run

REPORT_EMAIL="'report': [
    {
        'type':'email',
        'triggers':['fail'],
        'emails':['leveldb@fb.com']
    }
]"

#
# RocksDB unit test
#
UNIT_TEST_COMMANDS="[
    {
        'name':'Rocksdb Unit Test',
        'steps': [
            {
                'name':'Build RocksDB',
                'shell':'make -j$(nproc) clean all',
                'user':'root'
            },
            {
                'name':'Test RocksDB',
                'shell':'make J=1 check',
                'user':'root'
            }
        ],
        $REPORT_EMAIL
    }
]"

#
# RocksDB unit test on gcc-4.8.1
#
UNIT_TEST_COMMANDS_481="[
    {
        'name':'Rocksdb Unit Test',
        'steps': [
            {
                'name':'Build RocksDB',
                'shell':'ROCKSDB_FBCODE_BUILD_WITH_481=1 make -j$(nproc) clean all',
                'user':'root'
            },
            {
                'name':'Test RocksDB',
                'shell':'make J=1 check',
                'user':'root'
            }
        ],
        $REPORT_EMAIL
    }
]"


#
# RocksDB stress/crash test
#
STRESS_CRASH_TEST_COMMANDS="[
    {
        'name':'Rocksdb Stress/Crash Test',
        'steps': [
            {
                'name':'Build and run RocksDB stress tests',
                'shell':'TEST_TMPDIR=/dev/shm make -j$(nproc) clean db_stress',
                'user':'root'
            },
            {
                'name':'Build and run RocksDB crash tests',
                'shell':'TEST_TMPDIR=/dev/shm make crash_test',
                'user':'root'
            }
        ],
        $REPORT_EMAIL
    }
]"


#
# RocksDB test under address sanitizer
#
ASAN_TEST_COMMANDS="[
    {
        'name':'Rocksdb Unit Test',
        'steps': [
            {
                'name':'Build RocksDB for ASAN',
                'shell':'COMPILE_WITH_ASAN=1 make -j$(nproc) clean all',
                'user':'root'
            },
            {
                'name':'Test RocksDB under ASAN',
                'shell':'set -o pipefail && make J=1 asan_check |& /usr/facebook/ops/scripts/asan_symbolize.py -d',
                'user':'root'
            }
        ],
        $REPORT_EMAIL
    }
]"

#
# RocksDB crash testing under address sanitizer
#
ASAN_CRASH_TEST_COMMANDS="[
    {
        'name':'Rocksdb Unit Test',
        'steps': [
            {
                'name':'Build and run RocksDB asan_crash_test',
                'shell':'make -j$(nproc) J=1 clean asan_crash_test',
                'user':'root'
            },
        ],
        $REPORT_EMAIL
    }
]"

#
# RocksDB unit test with CLANG
#
CLANG_UNIT_TEST_COMMANDS="[
    {
        'name':'Rocksdb Unit Test',
        'steps': [
            {
                'name':'Build RocksDB with CLANG',
                'shell':'USE_CLANG=1 make clean all',
                'user':'root'
            },
            {
                'name':'Test RocksDB built using CLANG',
                'shell':'make J=1 check',
                'user':'root'
            }
        ],
        $REPORT_EMAIL
    }
]"


case $1 in
  unit)
    echo $UNIT_TEST_COMMANDS
    ;;
  unit_481)
    echo $UNIT_TEST_COMMANDS_481
    ;;
  stress_crash)
    echo $STRESS_CRASH_TEST_COMMANDS
    ;;
  asan)
    echo $ASAN_TEST_COMMANDS
    ;;
  asan_crash)
    echo $ASAN_CRASH_TEST_COMMANDS
    ;;
  clang_unit)
    echo $CLANG_UNIT_TEST_COMMANDS
    ;;
  *)
    echo $UNIT_TEST_COMMANDS
    ;;
esac