|
25 | 25 | import static org.mockito.Mockito.verifyNoMoreInteractions; |
26 | 26 | import static org.mockito.Mockito.when; |
27 | 27 |
|
| 28 | +import build.bazel.remote.execution.v2.Action; |
| 29 | +import build.bazel.remote.execution.v2.ActionResult; |
| 30 | +import build.bazel.remote.execution.v2.ExecuteOperationMetadata; |
28 | 31 | import build.bazel.remote.execution.v2.RequestMetadata; |
29 | 32 | import build.buildfarm.common.DigestUtil; |
| 33 | +import build.buildfarm.common.DigestUtil.ActionKey; |
30 | 34 | import build.buildfarm.common.DigestUtil.HashFunction; |
31 | 35 | import build.buildfarm.common.config.BuildfarmConfigs; |
32 | 36 | import build.buildfarm.common.config.Queue; |
|
44 | 48 | import build.buildfarm.v1test.QueueEntry; |
45 | 49 | import build.buildfarm.v1test.ShardWorker; |
46 | 50 | import build.buildfarm.v1test.WorkerChange; |
| 51 | +import build.buildfarm.v1test.WorkerExecutedMetadata; |
47 | 52 | import build.buildfarm.worker.resources.LocalResourceSet; |
48 | 53 | import com.google.common.collect.ImmutableList; |
49 | 54 | import com.google.common.collect.ImmutableMap; |
50 | 55 | import com.google.common.collect.ImmutableSet; |
51 | 56 | import com.google.longrunning.Operation; |
| 57 | +import com.google.protobuf.Any; |
52 | 58 | import com.google.protobuf.ByteString; |
53 | 59 | import com.google.protobuf.util.JsonFormat; |
54 | 60 | import java.io.IOException; |
@@ -502,4 +508,34 @@ public void testAddWorker() throws IOException { |
502 | 508 | JsonFormat.printer().print(shardWorker)); |
503 | 509 | verify(jedis, times(1)).publish(anyString(), anyString()); |
504 | 510 | } |
| 511 | + |
| 512 | + @Test |
| 513 | + public void putActionResultPurgesUnknownAuxiliaryMetadatas() throws Exception { |
| 514 | + UnifiedJedis jedis = mock(UnifiedJedis.class); |
| 515 | + RedisClient client = new RedisClient(jedis); |
| 516 | + DistributedState state = new DistributedState(); |
| 517 | + state.actionCache = mock(RedisMap.class); |
| 518 | + RedisShardBackplane backplane = createBackplane("put-action-result-purges-test"); |
| 519 | + backplane.start(client, state, "putActionResultPurges/test:0000", name -> {}); |
| 520 | + DigestUtil digestUtil = new DigestUtil(HashFunction.SHA256); |
| 521 | + ActionKey actionKey = digestUtil.computeActionKey(Action.getDefaultInstance()); |
| 522 | + |
| 523 | + ActionResult.Builder actionResult = ActionResult.newBuilder(); |
| 524 | + // action results cannot currently parse ExecuteOperationMetadata, ensure this continues to be |
| 525 | + // true. |
| 526 | + actionResult |
| 527 | + .getExecutionMetadataBuilder() |
| 528 | + .addAuxiliaryMetadata(Any.pack(ExecuteOperationMetadata.getDefaultInstance())) |
| 529 | + .addAuxiliaryMetadata(Any.pack(WorkerExecutedMetadata.getDefaultInstance())); |
| 530 | + |
| 531 | + backplane.putActionResult(actionKey, actionResult.build()); |
| 532 | + |
| 533 | + ArgumentCaptor<String> resultCaptor = ArgumentCaptor.forClass(String.class); |
| 534 | + verify(state.actionCache, times(1)) |
| 535 | + .insert(eq(jedis), eq(actionKey.toString()), resultCaptor.capture(), any(Integer.class)); |
| 536 | + verifyNoMoreInteractions(state.actionCache); |
| 537 | + String json = resultCaptor.getValue(); |
| 538 | + assertThat( |
| 539 | + backplane.parseActionResult(json).getExecutionMetadata().getAuxiliaryMetadataCount() == 1); |
| 540 | + } |
505 | 541 | } |
0 commit comments