-
Mael Madon authoredMael Madon authored
helper.py 2.05 KiB
#!/usr/bin/env python3
import os
import os.path
import subprocess
import filecmp
from collections import namedtuple
class RobinInstance(object):
def __init__(self, output_dir, batcmd, schedcmd, simulation_timeout, ready_timeout, success_timeout, failure_timeout):
self.output_dir = output_dir
self.batcmd = batcmd
self.schedcmd = schedcmd
self.simulation_timeout = simulation_timeout
self.ready_timeout = ready_timeout
self.success_timeout = success_timeout
self.failure_timeout = failure_timeout
def to_yaml(self):
# Manual dump to avoid dependencies
return f'''output-dir: '{self.output_dir}'
batcmd: "{self.batcmd}"
schedcmd: "{self.schedcmd}"
simulation-timeout: {self.simulation_timeout}
ready-timeout: {self.ready_timeout}
success-timeout: {self.success_timeout}
failure-timeout: {self.failure_timeout}
'''
def to_file(self, filename):
create_dir_rec_if_needed(os.path.dirname(filename))
write_file(filename, self.to_yaml())
def gen_batsim_cmd(platform, workload, output_dir, more_flags):
return f"batsim -p '{platform}' -w '{workload}' -e '{output_dir}' {more_flags}"
def write_file(filename, content):
file = open(filename, "w")
file.write(content)
file.close()
def create_dir_rec_if_needed(dirname):
if not os.path.exists(dirname):
os.makedirs(dirname)
def run_robin(filename):
return subprocess.run(['robin', filename])
def init_instance(test_name):
output_dir = os.path.abspath(f'test-out/{test_name}')
robin_filename = os.path.abspath(f'test-instances/{test_name}.yaml')
schedconf_filename = f'{output_dir}/schedconf.json'
create_dir_rec_if_needed(output_dir)
return (output_dir, robin_filename, schedconf_filename)
def has_expected_output(test_file):
return os.path.exists('test/expected_log/' + test_file + '_jobs.csv')
def equals_expected_output(test_file):
expected = 'test/expected_log/' + test_file + '_jobs.csv'
obtained = 'test-out/' + test_file + '_jobs.csv'
return filecmp.cmp(expected, obtained)