Bazel, python tests: add more context to failures The Python integration tests will now print the stderr if the inner Bazel failed. This should help diagnosing test failures on CI. Change-Id: I138c1a6327cc263ba6a6e2c720c39ec5d4858d87 PiperOrigin-RevId: 160265298
diff --git a/src/test/py/bazel/bazel_clean_test.py b/src/test/py/bazel/bazel_clean_test.py index 51f085f..dc9f055 100644 --- a/src/test/py/bazel/bazel_clean_test.py +++ b/src/test/py/bazel/bazel_clean_test.py
@@ -22,33 +22,36 @@ def testBazelClean(self): self.ScratchFile('WORKSPACE') self.ScratchFile('foo/BUILD', [ - 'genrule(', ' name = "x",', ' outs = ["x.out"],', - ' cmd = "touch $@",', ')' + 'genrule(', + ' name = "x",', + ' outs = ["x.out"],', + ' cmd = "touch $@",', + ')', ]) - exit_code, stdout, _ = self.RunBazel(['info', 'bazel-genfiles']) - self.assertEqual(exit_code, 0) + exit_code, stdout, stderr = self.RunBazel(['info', 'bazel-genfiles']) + self.AssertExitCode(exit_code, 0, stderr) bazel_genfiles = stdout[0] - exit_code, stdout, _ = self.RunBazel(['info', 'output_base']) - self.assertEqual(exit_code, 0) + exit_code, stdout, stderr = self.RunBazel(['info', 'output_base']) + self.AssertExitCode(exit_code, 0, stderr) output_base = stdout[0] - exit_code, _, _ = self.RunBazel(['build', '//foo:x']) - self.assertEqual(exit_code, 0) + exit_code, _, stderr = self.RunBazel(['build', '//foo:x']) + self.AssertExitCode(exit_code, 0, stderr) self.assertTrue(os.path.exists(os.path.join(bazel_genfiles, 'foo/x.out'))) - exit_code, _, _ = self.RunBazel(['clean']) - self.assertEqual(exit_code, 0) + exit_code, _, stderr = self.RunBazel(['clean']) + self.AssertExitCode(exit_code, 0, stderr) self.assertFalse(os.path.exists(os.path.join(bazel_genfiles, 'foo/x.out'))) self.assertTrue(os.path.exists(output_base)) - exit_code, _, _ = self.RunBazel(['build', '//foo:x']) - self.assertEqual(exit_code, 0) + exit_code, _, stderr = self.RunBazel(['build', '//foo:x']) + self.AssertExitCode(exit_code, 0, stderr) self.assertTrue(os.path.exists(os.path.join(bazel_genfiles, 'foo/x.out'))) - exit_code, _, _ = self.RunBazel(['clean', '--expunge']) - self.assertEqual(exit_code, 0) + exit_code, _, stderr = self.RunBazel(['clean', '--expunge']) + self.AssertExitCode(exit_code, 0, stderr) self.assertFalse(os.path.exists(os.path.join(bazel_genfiles, 'foo/x.out'))) self.assertFalse(os.path.exists(output_base))
diff --git a/src/test/py/bazel/bazel_server_mode_test.py b/src/test/py/bazel/bazel_server_mode_test.py index b132b0e..dbe71fb 100644 --- a/src/test/py/bazel/bazel_server_mode_test.py +++ b/src/test/py/bazel/bazel_server_mode_test.py
@@ -22,12 +22,12 @@ def testBazelServerMode(self): self.ScratchFile('WORKSPACE') - exit_code, stdout, _ = self.RunBazel(['info', 'server_pid']) - self.assertEqual(exit_code, 0) + exit_code, stdout, stderr = self.RunBazel(['info', 'server_pid']) + self.AssertExitCode(exit_code, 0, stderr) pid1 = stdout[0] - exit_code, stdout, _ = self.RunBazel(['info', 'server_pid']) - self.assertEqual(exit_code, 0) + exit_code, stdout, stderr = self.RunBazel(['info', 'server_pid']) + self.AssertExitCode(exit_code, 0, stderr) pid2 = stdout[0] self.assertEqual(pid1, pid2)
diff --git a/src/test/py/bazel/bazel_windows_test.py b/src/test/py/bazel/bazel_windows_test.py index 27bc373..163606b 100644 --- a/src/test/py/bazel/bazel_windows_test.py +++ b/src/test/py/bazel/bazel_windows_test.py
@@ -22,14 +22,17 @@ self.ScratchFile('WORKSPACE') self.ScratchFile('foo/BUILD', ['cc_binary(name="x", srcs=["x.cc"])']) self.ScratchFile('foo/x.cc', [ - '#include <stdio.h>', 'int main(int, char**) {' - ' printf("hello\\n");', ' return 0;', '}' + '#include <stdio.h>', + 'int main(int, char**) {' + ' printf("hello\\n");', + ' return 0;', + '}', ]) exit_code, _, stderr = self.RunBazel( ['--batch', 'build', '//foo:x', '--cpu=x64_windows_msys'], env_remove={'BAZEL_SH'}) - self.assertEqual(exit_code, 2) + self.AssertExitCode(exit_code, 2, stderr) self.assertIn('\'BAZEL_SH\' environment variable is not set', '\n'.join(stderr)) @@ -37,13 +40,13 @@ '--batch', '--host_jvm_args=-Dbazel.windows_unix_root=', 'build', '//foo:x', '--cpu=x64_windows_msys' ]) - self.assertEqual(exit_code, 37) + self.AssertExitCode(exit_code, 37, stderr) self.assertIn('"bazel.windows_unix_root" JVM flag is not set', '\n'.join(stderr)) - exit_code, _, _ = self.RunBazel( + exit_code, _, stderr = self.RunBazel( ['--batch', 'build', '//foo:x', '--cpu=x64_windows_msys']) - self.assertEqual(exit_code, 0) + self.AssertExitCode(exit_code, 0, stderr) if __name__ == '__main__':
diff --git a/src/test/py/bazel/test_base.py b/src/test/py/bazel/test_base.py index 7d0bba7..71e89dc 100644 --- a/src/test/py/bazel/test_base.py +++ b/src/test/py/bazel/test_base.py
@@ -55,6 +55,17 @@ os.mkdir(self._tests_root) os.chdir(self._tests_root) + def AssertExitCode(self, actual_exit_code, expected_exit_code, stderr_lines): + """Assert that `actual_exit_code` == `expected_exit_code`.""" + if actual_exit_code != expected_exit_code: + self.fail('\n'.join([ + 'Bazel exited with %d (expected %d), stderr:' % (actual_exit_code, + expected_exit_code), + '(start stderr)----------------------------------------', + ] + (stderr_lines or []) + [ + '(end stderr)------------------------------------------', + ])) + @staticmethod def GetEnv(name, default=None): """Returns environment variable `name`.