"""Test module to execute a benchmark through ssh on a remote device.
This assumes all relevant directories and files are present on the remote
device (typically shared by NFS)."""
from litsupport import testplan
import logging


def mutateCommandline(context, commandline, suffix=""):
    shfilename = context.tmpBase + suffix + ".sh"
    shfile = open(shfilename, "w")
    shfile.write(commandline + "\n")
    logging.info("Created shfile '%s'", shfilename)
    shfile.close()

    config = context.config
    remote_commandline = config.remote_client
    if config.remote_user:
        remote_commandline += " -l %s" % config.remote_user
    if config.remote_port:
        remote_commandline += " -p %s" % config.remote_port
    if config.remote_flags:
        remote_commandline += config.remote_flags
    remote_commandline += " %s" % config.remote_host
    remote_commandline += " /bin/sh %s" % shfilename
    return remote_commandline


def mutateScript(context, script, suffix=""):
    mutate = lambda c, cmd: mutateCommandline(c, cmd, suffix)
    return testplan.mutateScript(context, script, mutate)


def mutatePlan(context, plan):
    plan.preparescript = mutateScript(context, plan.preparescript, "-prepare")
    plan.runscript = mutateScript(context, plan.runscript)
