def test_screen(): try: # Launch some screens subprocess.screen_kill('my_1st_screen', fail=False) subprocess.screen_kill('my_2nd_screen', fail=False) assert subprocess.screen_launch('my_1st_screen', 'top', fail=False)['stderr'] == b'' assert subprocess.screen_launch('my_2nd_screen', 'top', fail=False)['stderr'] == b'' assert subprocess.screen_launch('my_2nd_screen', 'top', fail=False)['stderr'] == b'' # List the launched screen sessions assert subprocess.screen_list(name='my_1st_screen') == [ regex.Match(r'\d+\.my_1st_screen') ] assert subprocess.screen_list(name='my_2nd_screen') == [ regex.Match(r'\d+\.my_2nd_screen'), regex.Match(r'\d+\.my_2nd_screen') ] finally: # Cleanup log = mock.Mock() subprocess.screen_kill(name='my_1st_screen', log=log) subprocess.screen_kill(name='my_2nd_screen', log=log) if log.call_args_list: validate_list(log.call_args_list, [ r"call\('Execute screen -ls my_1st_screen'\)", r"call\('Execute screen -S \d+\.my_1st_screen -X quit'\)", r"call\('Execute screen -ls my_2nd_screen'\)", r"call\('Execute screen -S \d+\.my_2nd_screen -X quit'\)", r"call\('Execute screen -S \d+\.my_2nd_screen -X quit'\)" ])
def test_screen(self): try: # Launch some screens screen_kill('my_1st_screen', fail=False) screen_kill('my_2nd_screen', fail=False) self.assertEqual(len(screen_launch('my_1st_screen', 'top', fail=False)['stderr']), 0) self.assertEqual(len(screen_launch('my_2nd_screen', 'top', fail=False)['stderr']), 0) self.assertEqual(len(screen_launch('my_2nd_screen', 'top', fail=False)['stderr']), 0) # List the launched screen sessions screens = screen_list(name='my_1st_screen') self.assertGreaterEqual(len(screens), 1) self.assertTrue(screens[0].endswith('my_1st_screen')) screens = screen_list(name='my_2nd_screen') self.assertGreaterEqual(len(screens), 1) self.assertTrue(screens[0].endswith('my_2nd_screen')) finally: # Cleanup log = Mock() screen_kill(name='my_1st_screen', log=log) screen_kill(name='my_2nd_screen', log=log) if log.call_args_list: validate_list(log.call_args_list, [ r"call\(u*'Execute screen -ls my_1st_screen'\)", r"call\(u*'Attempt 1 out of 1: Failed'\)", r"call\(u*'Execute screen -S \d+\.my_1st_screen -X quit'\)", r"call\(u*'Execute screen -ls my_2nd_screen'\)", r"call\(u*'Attempt 1 out of 1: Failed'\)", r"call\(u*'Execute screen -S \d+\.my_2nd_screen -X quit'\)", r"call\(u*'Execute screen -S \d+\.my_2nd_screen -X quit'\)" ])
def test_screen(self): try: # Launch some screens screen_kill('my_1st_screen', fail=False) screen_kill('my_2nd_screen', fail=False) self.equal(len(screen_launch('my_1st_screen', 'top', fail=False)['stderr']), 0) self.equal(len(screen_launch('my_2nd_screen', 'top', fail=False)['stderr']), 0) self.equal(len(screen_launch('my_2nd_screen', 'top', fail=False)['stderr']), 0) # List the launched screen sessions screens = screen_list(name='my_1st_screen') self.greater_equal(len(screens), 1) self.true(screens[0].endswith('my_1st_screen')) screens = screen_list(name='my_2nd_screen') self.greater_equal(len(screens), 1) self.true(screens[0].endswith('my_2nd_screen')) finally: # Cleanup log = mock.Mock() screen_kill(name='my_1st_screen', log=log) screen_kill(name='my_2nd_screen', log=log) if log.call_args_list: validate_list(log.call_args_list, [ r"call\(u*'Execute screen -ls my_1st_screen'\)", r"call\(u*'Attempt 1 out of 1: Failed'\)", r"call\(u*'Execute screen -S \d+\.my_1st_screen -X quit'\)", r"call\(u*'Execute screen -ls my_2nd_screen'\)", r"call\(u*'Attempt 1 out of 1: Failed'\)", r"call\(u*'Execute screen -S \d+\.my_2nd_screen -X quit'\)", r"call\(u*'Execute screen -S \d+\.my_2nd_screen -X quit'\)" ])
def test_retry_missing_binary_no_retry(self): log = Mock() with self.assertRaises(OSError): cmd('hfuejnvwqkdivengz', log=log, tries=5) validate_list(log.call_args_list, [ r"call\(u*'Execute hfuejnvwqkdivengz'\)", r"call\(FileNotFoundError.*\)" if six.PY3 else r"call\(OSError.*\)" ])
def test_retry_missing_binary_no_retry(): log = mock.Mock() with pytest.raises(OSError): subprocess.cmd('hfuejnvwqkdivengz', log=log, tries=5) validate_list(log.call_args_list, [ r"call\(u*'Execute hfuejnvwqkdivengz'\)", r'call\(FileNotFoundError.*\)' ])
def test_retry_missing_binary_no_retry(self): log = mock.Mock() with self.raises(OSError): cmd('hfuejnvwqkdivengz', log=log, tries=5) validate_list(log.call_args_list, [ r"call\(u*'Execute hfuejnvwqkdivengz'\)", r"call\(FileNotFoundError.*\)" if six.PY3 else r"call\(OSError.*\)" ])
def test_retry_no_success(self): log = Mock() cmd('ls hfuejnvwqkdivengz', log=log, fail=False, tries=5, delay_min=0.0, delay_max=0.95) validate_list(log.call_args_list, [ r"call\(u*'Execute ls hfuejnvwqkdivengz'\)", r"call\(u*'Attempt 1 out of 5: Will retry in 0\.[0-9]+ seconds'\)", r"call\(u*'Attempt 2 out of 5: Will retry in 0\.[0-9]+ seconds'\)", r"call\(u*'Attempt 3 out of 5: Will retry in 0\.[0-9]+ seconds'\)", r"call\(u*'Attempt 4 out of 5: Will retry in 0\.[0-9]+ seconds'\)", r"call\(u*'Attempt 5 out of 5: Failed'\)" ])
def test_retry_no_success(self): log = mock.Mock() cmd('ls hfuejnvwqkdivengz', log=log, fail=False, tries=5, delay_min=0.0, delay_max=0.95) validate_list(log.call_args_list, [ r"call\(u*'Execute ls hfuejnvwqkdivengz'\)", r"call\(u*'Attempt 1 out of 5: Will retry in 0\.[0-9]+ seconds'\)", r"call\(u*'Attempt 2 out of 5: Will retry in 0\.[0-9]+ seconds'\)", r"call\(u*'Attempt 3 out of 5: Will retry in 0\.[0-9]+ seconds'\)", r"call\(u*'Attempt 4 out of 5: Will retry in 0\.[0-9]+ seconds'\)", r"call\(u*'Attempt 5 out of 5: Failed'\)" ])
def test_cmd(self): cmd_log = mock_cmd() cmd([u'echo', u'it seem to work'], log=cmd_log) assert_equal(cmd(u'cat missing_file', fail=False, log=cmd_log)[u'returncode'], 1) validate_list(cmd_log.call_args_list, [ r"call\(u*\"Execute \[u*'echo', u*'it seem to work'\]\"\)", r"call\(u*'Execute cat missing_file'\)"]) assert(cmd(u'my.funny.missing.script.sh', fail=False)[u'stderr'] != u'') result = cmd(u'cat {0}'.format(__file__)) # There are at least 30 lines in this source file ! assert(len(result[u'stdout'].splitlines()) > 30)
def test_cmd(self): log = Mock() cmd(['echo', 'it seem to work'], log=log) self.assertEqual(cmd('cat missing_file', fail=False, log=log)['returncode'], 1) validate_list(log.call_args_list, [ r"call\(u*'Execute echo it seem to work'\)", r"call\(u*'Execute cat missing_file'\)", r"call\(u*'Attempt 1 out of 1: Failed'\)" ]) self.assertNotEqual(cmd('my.funny.missing.script.sh', fail=False)['stderr'], '') result = cmd('cat {0}'.format(__file__)) # There are at least 30 lines in this source file ! self.assertGreater(len(result['stdout'].splitlines()), 30)
def test_cmd(self): log = mock.Mock() cmd(['echo', 'it seem to work'], log=log) self.equal(cmd('cat missing_file', fail=False, log=log)['returncode'], 1) validate_list(log.call_args_list, [ r"call\(u*'Execute echo it seem to work'\)", r"call\(u*'Execute cat missing_file'\)", r"call\(u*'Attempt 1 out of 1: Failed'\)" ]) self.not_equal(cmd('my.funny.missing.script.sh', fail=False)['stderr'], '') result = cmd('cat {0}'.format(__file__)) # There are at least 30 lines in this source file ! self.greater(len(result['stdout'].splitlines()), 30)
def test_cmd(): log = mock.Mock() subprocess.cmd(['echo', 'it seem to work'], log=log) assert subprocess.cmd('cat missing_file', fail=False, log=log)['returncode'] == 1 validate_list(log.call_args_list, [ r"call\(u*'Execute echo it seem to work'\)", r"call\(u*'Execute cat missing_file'\)", r"call\(u*'Attempt 1 out of 1: Failed'\)" ]) assert subprocess.cmd('my.funny.missing.script.sh', fail=False)['stderr'] != '' result = subprocess.cmd(f'cat {__file__}') # There are at least 30 lines in this source file ! assert len(result['stdout'].splitlines()) > 30
def test_screen(self): try: # Launch some screens assert_equal(len(screen_launch(u'my_1st_screen', u'top', fail=False)[u'stderr']), 0) assert_equal(len(screen_launch(u'my_2nd_screen', u'top', fail=False)[u'stderr']), 0) assert_equal(len(screen_launch(u'my_2nd_screen', u'top', fail=False)[u'stderr']), 0) # List the launched screen sessions screens = screen_list(name=u'my_1st_screen') assert(len(screens) >= 1 and screens[0].endswith(u'my_1st_screen')) screens = screen_list(name=u'my_2nd_screen') assert(len(screens) >= 1 and screens[0].endswith(u'my_2nd_screen')) finally: # Cleanup kill_log = mock_cmd() screen_kill(name=u'my_1st_screen', log=kill_log) screen_kill(name=u'my_2nd_screen', log=kill_log) #raise NotImplementedError(kill_log.call_args_list) validate_list(kill_log.call_args_list, [ r"call\(u*\"Execute \[u*'screen', u*'-ls', u*'my_1st_screen'\]\"\)", r"call\(u*\"Execute \[u*'screen', u*'-S', u*'\d+\.my_1st_screen', u*'-X', u*'quit'\]\"\)", r"call\(u*\"Execute \[u*'screen', u*'-ls', u*'my_2nd_screen'\]\"\)", r"call\(u*\"Execute \[u*'screen', u*'-S', u*'\d+\.my_2nd_screen', u*'-X', u*'quit'\]\"\)", r"call\(u*\"Execute \[u*'screen', u*'-S', u*'\d+\.my_2nd_screen', u*'-X', u*'quit'\]\"\)"])
def test_validate_list_fail_size(self): with self.assertRaises(IndexError): validate_list([1, 2], [1, 2, 3])
def test_validate_list_fail_size(self): with self.raises(IndexError): validate_list([1, 2], [1, 2, 3])
def test_validate_list_fail_value(self): with self.raises(ValueError): regexes = [r'\d+', r"call\(\[u*'my_var', recursive=(True|False)\]\)"] validate_list([10, "call(['my_var', recursive='error'])"], regexes)
def test_retry_first_try(self): log = mock.Mock() cmd('ls', log=log, tries=5, delay_min=1, delay_max=1) validate_list(log.call_args_list, [r"call\(u*'Execute ls'\)"])
def test_validate_list(): regexes = [r'\d+', r"call\(\[u*'my_var', recursive=(True|False)\]\)"] validate_list([10, "call(['my_var', recursive=False])"], regexes)
def test_validate_list_fail_size(): with pytest.raises(IndexError): validate_list([1, 2], [1, 2, 3])
def test_validate_list_fail_value(): with pytest.raises(ValueError): regexes = [r'\d+', r"call\(\[u*'my_var', recursive=(True|False)\]\)"] validate_list([10, "call(['my_var', recursive='error'])"], regexes)
def test_validate_list_fail_value(self): regexes = [r'\d+', r"call\(\[u*'my_var', recursive=(True|False)\]\)"] validate_list([10, u"call([u'my_var', recursive='error'])"], regexes)
def test_validate_list_fail_size(self): validate_list([1, 2], [1, 2, 3])
def test_validate_list(self): regexes = [r'\d+', r"call\(\[u*'my_var', recursive=(True|False)\]\)"] validate_list([10, "call([u'my_var', recursive=False])"], regexes)
def test_retry_first_try(self): log = Mock() cmd('ls', log=log, tries=5, delay_min=1, delay_max=1) validate_list(log.call_args_list, [ r"call\(u*'Execute ls'\)" ])