@@ -360,6 +360,41 @@ public void downloadOutputs_nestedOutputDirectories_works() throws Exception {
360360 assertThat (context .isLockOutputFilesCalled ()).isTrue ();
361361 }
362362
363+ @ Test
364+ public void downloadOutputs_outputDirectoriesWithNestedFile_works () throws Exception {
365+ // Test that downloading an output directory containing a named output file works.
366+
367+ // arrange
368+ Digest fooDigest = cache .addContents (remoteActionExecutionContext , "foo-contents" );
369+ Digest barDigest = cache .addContents (remoteActionExecutionContext , "bar-ontents" );
370+ Tree subdirTreeMessage =
371+ Tree .newBuilder ()
372+ .setRoot (
373+ Directory .newBuilder ()
374+ .addFiles (FileNode .newBuilder ().setName ("foo" ).setDigest (fooDigest ))
375+ .addFiles (FileNode .newBuilder ().setName ("bar" ).setDigest (barDigest )))
376+ .build ();
377+ Digest subdirTreeDigest =
378+ cache .addContents (remoteActionExecutionContext , subdirTreeMessage .toByteArray ());
379+ ActionResult .Builder builder = ActionResult .newBuilder ();
380+ builder .addOutputFilesBuilder ().setPath ("outputs/subdir/foo" ).setDigest (fooDigest );
381+ builder .addOutputDirectoriesBuilder ().setPath ("outputs/subdir" ).setTreeDigest (subdirTreeDigest );
382+ RemoteActionResult result =
383+ RemoteActionResult .createFromCache (CachedActionResult .remote (builder .build ()));
384+ Spawn spawn = newSpawnFromResult (result );
385+ FakeSpawnExecutionContext context = newSpawnExecutionContext (spawn );
386+ RemoteExecutionService service = newRemoteExecutionService ();
387+ RemoteAction action = service .buildRemoteAction (spawn , context );
388+
389+ // act
390+ service .downloadOutputs (action , result );
391+
392+ // assert
393+ assertThat (digestUtil .compute (execRoot .getRelative ("outputs/subdir/foo" ))).isEqualTo (fooDigest );
394+ assertThat (digestUtil .compute (execRoot .getRelative ("outputs/subdir/bar" ))).isEqualTo (barDigest );
395+ assertThat (context .isLockOutputFilesCalled ()).isTrue ();
396+ }
397+
363398 @ Test
364399 public void downloadOutputs_outputDirectoriesWithSameHash_works () throws Exception {
365400 // Test that downloading an output directory works when two Directory
0 commit comments