def run(*dtox_args, **kwargs): """Runs docker run with optional dtox_args. Returns ProcResult. kwargs: - tox_ini=<string>: contents of the tox.ini file to be used - setup=<func>: run setup(env) before actual docker run command """ env = STE(TESTS_WORKDIR) command = ["docker", "run", "--rm", "-i"] # map tests work dir into /src command.extend(["-v", '{}:/src:ro'.format(TESTS_WORKDIR)]) # write tox.ini if specified tox_ini = kwargs.pop("tox_ini", None) if tox_ini is not None: env.writefile("tox.ini", content=tox_ini) # run setup function if specified setup = kwargs.pop("setup", None) if setup is not None: setup(env) command.append(DOCKER_IMAGE) command.extend(dtox_args) r = env.run(*command, **kwargs) # make sure it isn't a docker run failure if "Unable to find image" in r.stderr: raise ValueError(r.stderr) return r
class TestIntegration(unittest.TestCase): def setUp(self): self.env = TestFileEnvironment(test_path, template_path=template_path) def test_init(self): result = self.env.run("gpc", "init", expect_stderr=True) created_filenames = result.files_created.keys() self.assertTrue("log" in created_filenames) self.assertTrue("log/data" in created_filenames) self.assertTrue("log/schema.sql" in created_filenames) self.assertTrue("storage" in created_filenames) def test_make_target(self): self.env.run("gpc", "init", expect_stderr=True) self.env.writefile("gpc.yaml", frompath="simple.yaml") result = self.env.run("gpc", "make", "c", expect_stderr=True) created_filenames = list(result.files_created.keys()) self.assertTrue("c" in created_filenames) created_filenames.remove("c") self.assertTrue(any([s.startswith("storage/") for s in created_filenames])) self.assertTrue(any([s.startswith("log/data/") for s in created_filenames])) def test_make_target_cached(self): call(["cp", "-r", template_path + "/.gpc", test_path]) call(["cp", "-r", template_path + "/log", test_path]) call(["cp", "-r", template_path + "/storage", test_path]) self.env.writefile("gpc.yaml", frompath="simple.yaml") result = self.env.run("gpc", "make", "c", expect_stderr=True) created_filenames = result.files_created.keys() self.assertTrue("c" in created_filenames) self.assertTrue(len(created_filenames) == 1)
def test_dojorun_dryrun(self): """Testing dojorun.py script in dry-run mode.""" env = self.get_env() # Build new env to run the script in dry-run mode # Copy file from data to env. env = TestFileEnvironment(template_path=pdj_data.dirpath) env.writefile("Si.psp8", frompath="Si.psp8") env.writefile("Si.djrepo", frompath="Si.djrepo_empty") env.run(self.script, "Si.psp8", self.loglevel, self.verbose, "--dry-run")
def test_dojorun_dryrun(self): """Testing dojorun.py script in dry-run mode.""" env = self.get_env() # Build new env to run the script in dry-run mode # Copy file from data to env. env = TestFileEnvironment(template_path=pdj_data.dirpath) env.writefile("Si.psp8", frompath="Si.psp8") env.writefile("Si.djrepo", frompath="Si.djrepo_empty") env.run(self.script, "Si.psp8", self.loglevel, self.verbose, "--dry-run")
def get_env(self): #import tempfile #env = TestFileEnvironment(tempfile.mkdtemp(suffix='', prefix='test_' + script)) env = TestFileEnvironment() # Use Agg backend for plots. env.writefile("matplotlibrc", "backend : Agg") # Start with --help. If this does not work... env.run(self.script, "--help") # Script must provide a version option r = env.run(self.script, "--version", expect_stderr=True) assert r.stderr.strip() == "%s version %s" % (os.path.basename(self.script), abilab.__version__) return env
def get_env(self): #import tempfile #env = TestFileEnvironment(tempfile.mkdtemp(suffix='', prefix='test_' + script)) env = TestFileEnvironment() # Use Agg backend for plots. env.writefile("matplotlibrc", "backend : Agg") # Start with --help. If this does not work... env.run(self.script, "--help") # Script must provide a version option r = env.run(self.script, "--version", expect_stderr=True) assert r.stderr.strip() == "%s version %s" % (os.path.basename( self.script), abilab.__version__) return env
class EnvironmentUnderTest(object): def __init__(self): self.reset() def reset(self): environ = os.environ.copy() environ.update({'PATH': os.path.join(TEST_OUTPUT_DIR, 'bin', os.pathsep, environ['PATH'])}) self._env = TestFileEnvironment(environ=environ) self._env.run(sys.executable, '-m', 'virtualenv', '--no-site-packages', self._env.base_path) self._env.run('python setup.py install', cwd=package_dir) def run(self, *args, **kw): return self._env.run(*args, **kw) def mkdir(self, path): return os.mkdir(os.path.join(self._env.base_path, path)) def writefile(self, *args, **kw): return self._env.writefile(*args, **kw)
class EnvbTest(object): env_file = '' def setUp(self): self.env = TestFileEnvironment('tmp') assert self.env_file self.env.writefile('.env', content=self.env_file)
class TestPyfdaCommandLineTool(TestCase): def setUp(self): self.env = TestFileEnvironment( base_path=TEST_DIR, template_path=TEMPLATE_DIR, cwd=os.getcwd(), ignore_hidden=False) self.env.writefile(INPUT_FILE_NAME, frompath='test_freq_2_then_1_then_8_then_4.fda') def test_no_arguments(self): 'Test: pyfda.py' cmd = './pyfda.py' result = self.env.run(cmd, expect_error=True) self.assertEqual(result.returncode, 2,\ 'Expect returncode=2, got %r' % result.returncode) self.assertEqual(result.stderr[:7], 'usage: ', \ 'Incorrect usage message') message = 'error: too few arguments\n' self.assertEqual(result.stderr[-len(message):], message, \ 'Incorrect error message') def test_setup_missing_frequency_argument(self): 'Test: pyfda setup' cmd = './pyfda.py setup' result = self.env.run(cmd, expect_error=True) self.assertEqual(result.returncode, 1,\ 'Expect returncode=1, got %r' % result.returncode) expected = 'error: Missing --frequency argument with command: setup\n' self.assertEqual(result.stderr, expected, 'Incorrect error message') def test_info_missing_fda_file(self): 'Test: pyfda info' cmd = './pyfda.py info' result = self.env.run(cmd, expect_error=True) self.assertEqual(result.returncode, 1,\ 'Expect returncode=1, got %r' % result.returncode) expected = 'error: Missing fda_file argument with command: info\n' self.assertEqual(result.stderr, expected, 'Incorrect error message') def test_convert_missing_fda_file(self): 'Test: pyfda convert' cmd = './pyfda.py convert' result = self.env.run(cmd, expect_error=True) self.assertEqual(result.returncode, 1,\ 'Expect returncode=1, got %r' % result.returncode) expected = 'error: Missing fda_file argument with command: convert\n' self.assertEqual(result.stderr, expected, 'Incorrect error message') def test_convert_too_much_temperature_arguments(self): 'Test: pyfda convert file.fda --celsius --fahrenheit' cmd = './pyfda.py convert file.fda --celsius --fahrenheit' result = self.env.run(cmd, expect_error=True) self.assertEqual(result.returncode, 1,\ 'Expect returncode=1, got %r' % result.returncode) expected = 'error: --celsius and --fahrenheit can not ' \ 'be both specified.\n' self.assertEqual(result.stderr, expected, 'Incorrect error message') def test_convert_too_much_length_arguments(self): 'Test: pyfda convert file.fda --feet --meters' cmd = './pyfda.py convert file.fda --feet --meters' result = self.env.run(cmd, expect_error=True) self.assertEqual(result.returncode, 1,\ 'Expect returncode=1, got %r' % result.returncode) expected = 'error: --meters and --feet can not be both specified.\n' self.assertEqual(result.stderr, expected, 'Incorrect error message') def test_convert_incorrect_last_negative_value(self): 'Test: pyfda convert file.fda --last -1' cmd = './pyfda.py convert file.fda --last -1' result = self.env.run(cmd, expect_error=True) self.assertEqual(result.returncode, 1,\ 'Expect returncode=1, got %r' % result.returncode) expected = 'error: --last argument must be positive.\n' self.assertEqual(result.stderr, expected, 'Incorrect error message') def test_convert_incorrect_last_non_integer_value(self): 'Test: pyfda convert file.fda --last toto' cmd = './pyfda.py convert file.fda --last toto' result = self.env.run(cmd, expect_error=True) self.assertEqual(result.returncode, 2,\ 'Expect returncode=1, got %r' % result.returncode) expected = 'error: argument --last: invalid int value:' self.assertTrue(expected in result.stderr, 'Incorrect error message') def test_print_fda_file_info(self): 'Test: pyfda info sample.fda' cmd = './pyfda.py info ' + INPUT_FILE_PATH result = self.env.run(cmd, expect_error=False) self.assertEqual(result.returncode, 0,\ 'Expect returncode=0, got %r' % result.returncode) expected = \ """Reading file %s... Found 4 flights: 0: 216 records @ 2Hz - 108.000 seconds 1: 136 records @ 1Hz - 136.000 seconds 2: 496 records @ 8Hz - 62.000 seconds 3: 176 records @ 4Hz - 44.000 seconds """ % INPUT_FILE_PATH self.assertEqual(expected, result.stdout, 'Incorrect output') def test_print_fda_file_convert_all_csv(self): 'Test: pyfda --prefix=test_convert convert sample.fda' cmd = './pyfda.py --prefix=%s convert %s' % ( CONVERTED_PREFIX, INPUT_FILE_PATH) result = self.env.run(cmd, expect_error=False) self.assertEqual(result.returncode, 0,\ 'Expect returncode=0, got %r' % result.returncode) expected = \ """Reading file %s... Found 4 flights: Converting 4 flight(s) to CSV... Writing %s_000.csv file Writing %s_001.csv file Writing %s_002.csv file Writing %s_003.csv file """ % (INPUT_FILE_PATH, CONVERTED_PREFIX, CONVERTED_PREFIX, CONVERTED_PREFIX, CONVERTED_PREFIX) self.assertEqual(expected, result.stdout, 'Incorrect output') # TODO: Check converted file contents. def test_print_fda_file_convert_last_csv(self): 'Test: pyfda --last --prefix=test_convert convert sample.fda' cmd = './pyfda.py --last --prefix=%s convert %s' % ( CONVERTED_PREFIX, INPUT_FILE_PATH) result = self.env.run(cmd, expect_error=False) self.assertEqual(result.returncode, 0,\ 'Expect returncode=0, got %r' % result.returncode) expected = \ """Reading file %s... Found 4 flights: Converting 1 flight(s) to CSV... Writing %s_003.csv file """ % (INPUT_FILE_PATH, CONVERTED_PREFIX) self.assertEqual(expected, result.stdout, 'Incorrect output') # TODO: Check converted file content. def test_print_fda_file_convert_last_two_csv(self): 'Test: pyfda --last=2 --prefix=test_convert convert sample.fda' cmd = './pyfda.py --last=2 --prefix=%s convert %s' % ( CONVERTED_PREFIX, INPUT_FILE_PATH) result = self.env.run(cmd, expect_error=False) self.assertEqual(result.returncode, 0,\ 'Expect returncode=0, got %r' % result.returncode) expected = \ """Reading file %s... Found 4 flights: Converting 2 flight(s) to CSV... Writing %s_002.csv file Writing %s_003.csv file """ % (INPUT_FILE_PATH, CONVERTED_PREFIX, CONVERTED_PREFIX) self.assertEqual(expected, result.stdout, 'Incorrect output')