#!/usr/bin/env python3
#
# Determine if this tool can run a test based on a test spec.
#

import pscheduler

logger = pscheduler.Log(prefix='tool-ethr', quiet=True)

json = pscheduler.json_load(exit_on_error=True)

logger.debug('can-run for %s' % json)

try:
    if json['type'] != 'throughput':
        pscheduler.succeed_json({
            'can-run': False,
            'reasons': [ 'Unsupported test type' ]
        })
except KeyError:
    pscheduler.succeed_json({
        'can-run': False,
        'reasons': [ 'Missing test type' ]
    })


try:
    spec = json['spec']
    pscheduler.json_check_schema(spec, 7)
except KeyError:
    pscheduler.succeed_json({
        'can-run': False,
        'reasons': ['Missing test specification']
    })
except ValueError as ex:
    pscheduler.succeed_json({
        'can-run': False,
        'reasons': [str(ex)]
    })


errors = []

supported_options = [
    'schema',
    'source', 'source-node',
    'dest', 'dest-node',
    'bandwidth',
    'buffer-length',
    'duration',
    'ip-tos',
    'ip-version',
    'link-rtt',
    'local-address',
    'loopback',
    'omit',
    'parallel',
    'reverse',
    'single-ended',
    'single-ended-port',
    'udp'
]

for option in spec:
    if option not in supported_options:
        logger.debug('Ethr unsupported option %s' % option)
        errors.append('Ethr does not support %s option' % option)

logger.debug('can-run succeeded')

result = {
    'can-run': len(errors) == 0
}

if len(errors) > 0:
    result['reasons'] = errors

pscheduler.succeed_json(result)
