Skip to content

Commit

Permalink
Fix --nozip_undeclared_test_outputs on Windows
Browse files Browse the repository at this point in the history
Without this change, testing with `--nozip_undeclared_test_outputs` always fails with this error:

```
FATAL: MappedOutputFile(): CreateFileW() failed: (error: 3): The system cannot find the path specified.
```

Closes bazelbuild#16973.

PiperOrigin-RevId: 494953454
Change-Id: I8338e897a9e4f4fdcd6dad511ee8e777182fefcd
  • Loading branch information
fmeum authored and Copybara-Service committed Dec 13, 2022
1 parent ac504cb commit cd10d50
Show file tree
Hide file tree
Showing 2 changed files with 58 additions and 2 deletions.
54 changes: 54 additions & 0 deletions src/test/py/bazel/bazel_windows_test.py
Expand Up @@ -397,6 +397,60 @@ def testRunWithScriptPath(self):
self.AssertExitCode(exit_code, 0, stderr)
self.assertIn('Hello from test!', '\n'.join(stdout))

def testZipUndeclaredTestOutputs(self):
self.CreateWorkspaceWithDefaultRepos('WORKSPACE')
self.ScratchFile(
'BUILD',
[
'sh_test(',
' name = "foo_test",',
' srcs = ["foo.sh"],',
')',
'',
],
)
self.ScratchFile(
'foo.sh',
[
'touch "$TEST_UNDECLARED_OUTPUTS_DIR/foo.txt"',
],
)

exit_code, stdout, stderr = self.RunBazel(['info', 'bazel-testlogs'])
self.AssertExitCode(exit_code, 0, stderr)
bazel_testlogs = stdout[0]

output_file = os.path.join(bazel_testlogs, 'foo_test/test.outputs/foo.txt')
output_zip = os.path.join(
bazel_testlogs, 'foo_test/test.outputs/outputs.zip'
)

# Run the test with undeclared outputs zipping.
exit_code, _, stderr = self.RunBazel(
[
'test',
'--zip_undeclared_test_outputs',
'//:foo_test',
],
)
self.AssertExitCode(exit_code, 0, stderr)
# FIXME: The Windows test runner does not delete the undeclared outputs
# after zipping, which differs from the behavior on other platforms.
self.assertTrue(os.path.exists(output_file))
self.assertTrue(os.path.exists(output_zip))

# Run the test without undeclared outputs zipping.
exit_code, _, stderr = self.RunBazel(
[
'test',
'--nozip_undeclared_test_outputs',
'//:foo_test',
],
)
self.AssertExitCode(exit_code, 0, stderr)
self.assertTrue(os.path.exists(output_file))
self.assertFalse(os.path.exists(output_zip))


if __name__ == '__main__':
unittest.main()
6 changes: 4 additions & 2 deletions tools/test/windows/tw.cc
Expand Up @@ -1298,8 +1298,10 @@ bool StartSubprocess(const Path& path, const std::wstring& args,
}

bool ArchiveUndeclaredOutputs(const UndeclaredOutputs& undecl) {
if (undecl.root.Get().empty()) {
// TEST_UNDECLARED_OUTPUTS_DIR was undefined, there's nothing to archive.
if (undecl.root.Get().empty() || undecl.zip.Get().empty()) {
// TEST_UNDECLARED_OUTPUTS_DIR was undefined, so there's nothing to archive,
// or TEST_UNDECLARED_OUTPUTS_ZIP was undefined as
// --nozip_undeclared_test_outputs was specified.
return true;
}

Expand Down

0 comments on commit cd10d50

Please sign in to comment.