From 5dc09ae3c0ad3c8e790f26b232b04b255ea14bb7 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 27 Oct 2020 15:04:05 -0400 Subject: [PATCH] increase timeout, properly handle timeouts, and fix symbol lookup in exception handling --- unittest/tools/test_lammps_shell.py | 109 ++++++++++++++++++---------- 1 file changed, 72 insertions(+), 37 deletions(-) diff --git a/unittest/tools/test_lammps_shell.py b/unittest/tools/test_lammps_shell.py index afbbca033b..1768bcf753 100644 --- a/unittest/tools/test_lammps_shell.py +++ b/unittest/tools/test_lammps_shell.py @@ -22,68 +22,97 @@ class LammpsShell(unittest.TestCase): def InputRunner(self,text): """Test tab expansions""" try: - [outs,errs] = self.proc.communicate(input=text, timeout=1) - except TimeoutExpired: - proc.kill() - [outs,errs] = proc.communicate() + [outs,errs] = self.proc.communicate(input=text, timeout=10) + self.timeout = 0 + except subprocess.TimeoutExpired: + self.proc.kill() + [outs,errs] = self.proc.communicate() + self.timeout = 1 return outs.decode('UTF-8') def testExpandClearHistory(self): """Test expansion of a shell specific command""" matches = re.findall(shell_prompt_re, self.InputRunner(b'clear_his\t\n'), re.MULTILINE) - self.assertEqual(matches[0][1],"clear_history") + if self.timeout: + self.fail("Timeout") + else: + self.assertEqual(matches[0][1],"clear_history") def testExpandDimension(self): """Test expansion of a LAMMPS command""" matches = re.findall(shell_prompt_re, self.InputRunner(b'dimens\t\n'), re.MULTILINE) - self.assertEqual(matches[0][1],"dimension") + if self.timeout: + self.fail("Timeout") + else: + self.assertEqual(matches[0][1],"dimension") def testExpandPairStyle(self): """Test expansion of a pair style""" matches = re.findall(shell_prompt_re, self.InputRunner(b'pair_st\t zer\t\n'), re.MULTILINE) - self.assertEqual(matches[0][1],"pair_style") - self.assertEqual(matches[0][2],"zero") + if self.timeout: + self.fail("Timeout") + else: + self.assertEqual(matches[0][1],"pair_style") + self.assertEqual(matches[0][2],"zero") def testExpandBondStyle(self): """Test expansion of a bond style""" matches = re.findall(shell_prompt_re, self.InputRunner(b'bond_st\t zer\t\n'), re.MULTILINE) - self.assertEqual(matches[0][1],"bond_style") - self.assertEqual(matches[0][2],"zero") + if self.timeout: + self.fail("Timeout") + else: + self.assertEqual(matches[0][1],"bond_style") + self.assertEqual(matches[0][2],"zero") def testExpandAngleStyle(self): """Test expansion of a angle style""" matches = re.findall(shell_prompt_re, self.InputRunner(b'angle_st\t zer\t\n'), re.MULTILINE) - self.assertEqual(matches[0][1],"angle_style") - self.assertEqual(matches[0][2],"zero") + if self.timeout: + self.fail("Timeout") + else: + self.assertEqual(matches[0][1],"angle_style") + self.assertEqual(matches[0][2],"zero") def testExpandDihedralStyle(self): """Test expansion of a dihedral style""" matches = re.findall(shell_prompt_re, self.InputRunner(b'dihedral_st\t zer\t\n'), re.MULTILINE) - self.assertEqual(matches[0][1],"dihedral_style") - self.assertEqual(matches[0][2],"zero") + if self.timeout: + self.fail("Timeout") + else: + self.assertEqual(matches[0][1],"dihedral_style") + self.assertEqual(matches[0][2],"zero") def testExpandImproperStyle(self): """Test expansion of a improper style""" matches = re.findall(shell_prompt_re, self.InputRunner(b'improper_st\t zer\t\n'), re.MULTILINE) - self.assertEqual(matches[0][1],"improper_style") - self.assertEqual(matches[0][2],"zero") + if self.timeout: + self.fail("Timeout") + else: + self.assertEqual(matches[0][1],"improper_style") + self.assertEqual(matches[0][2],"zero") def testExpandComputeGroup(self): """Test expansion of a group-ID and a compute command""" matches = re.findall(cmd_group_re, self.InputRunner(b'compute test al\tcentro/at\t\n'), re.MULTILINE) - self.assertEqual(matches[0][1],"compute") - self.assertEqual(matches[0][2],"test") - self.assertEqual(matches[0][3],"all") - self.assertEqual(matches[0][4],"centro/atom") + if self.timeout: + self.fail("Timeout") + else: + self.assertEqual(matches[0][1],"compute") + self.assertEqual(matches[0][2],"test") + self.assertEqual(matches[0][3],"all") + self.assertEqual(matches[0][4],"centro/atom") def testExpandFixGroup(self): """Test expansion of a group-ID and a fix command""" matches = re.findall(cmd_group_re, self.InputRunner(b'fix test al\tcontroll\t\n'), re.MULTILINE) - self.assertEqual(matches[0][1],"fix") - self.assertEqual(matches[0][2],"test") - self.assertEqual(matches[0][3],"all") - self.assertEqual(matches[0][4],"controller") + if self.timeout: + self.fail("Timeout") + else: + self.assertEqual(matches[0][1],"fix") + self.assertEqual(matches[0][2],"test") + self.assertEqual(matches[0][3],"all") + self.assertEqual(matches[0][4],"controller") def testExpandSource(self): """Test expansion of a shell command and a file name""" @@ -92,24 +121,30 @@ class LammpsShell(unittest.TestCase): out.close() matches = re.findall(shell_prompt_re, self.InputRunner(b'sour\t.tmp.in.sou\t\n'), re.MULTILINE) os.remove('.tmp.in.source') - self.assertEqual(matches[0][1],"source") - self.assertEqual(matches[0][2],".tmp.in.source") + if self.timeout: + self.fail("Timeout") + else: + self.assertEqual(matches[0][1],"source") + self.assertEqual(matches[0][2],".tmp.in.source") def testHistory(self): """Test history expansion""" out = self.InputRunner(b'clear_history\nunits real\ndimension 2\n!!:p\n!-3:p\n!dim:p\n!uni:p\nprint !!:$\nprint !dim:1\n') idx = 0 - lines = out.splitlines() - for line in lines: - if line.startswith('LAMMPS Shell>'): break - idx += 1 - - self.assertEqual(lines[idx+4],"dimension 2") - self.assertEqual(lines[idx+6],"units real") - self.assertEqual(lines[idx+8],"dimension 2") - self.assertEqual(lines[idx+10],"units real") - self.assertEqual(lines[idx+12],"real") - self.assertEqual(lines[idx+14],"2") + if self.timeout: + self.fail("Timeout") + else: + lines = out.splitlines() + for line in lines: + if line.startswith('LAMMPS Shell>'): break + idx += 1 + + self.assertEqual(lines[idx+4],"dimension 2") + self.assertEqual(lines[idx+6],"units real") + self.assertEqual(lines[idx+8],"dimension 2") + self.assertEqual(lines[idx+10],"units real") + self.assertEqual(lines[idx+12],"real") + self.assertEqual(lines[idx+14],"2") ########################### if __name__ == "__main__":