Search in sources :

Example 91 with Digest

use of com.google.cloud.kms.v1.Digest in project bazel-buildfarm by bazelbuild.

the class MemoryInstanceTest method actionWithMaximumTimeoutIsValid.

@Test
public void actionWithMaximumTimeoutIsValid() throws InterruptedException {
    Digest actionDigestWithExcessiveTimeout = createAction(Action.newBuilder().setTimeout(MAXIMUM_ACTION_TIMEOUT));
    Watcher watcher = mock(Watcher.class);
    instance.execute(actionDigestWithExcessiveTimeout, /* skipCacheLookup=*/
    true, ExecutionPolicy.getDefaultInstance(), ResultsCachePolicy.getDefaultInstance(), RequestMetadata.getDefaultInstance(), watcher);
    verify(watcher, atLeastOnce()).observe(any(Operation.class));
}
Also used : Digest(build.bazel.remote.execution.v2.Digest) Watcher(build.buildfarm.common.Watcher) Operation(com.google.longrunning.Operation) Test(org.junit.Test)

Example 92 with Digest

use of com.google.cloud.kms.v1.Digest in project bazel-buildfarm by bazelbuild.

the class MemoryInstanceTest method createAction.

private Digest createAction(Action.Builder actionBuilder) {
    Command command = Command.newBuilder().addArguments("echo").build();
    ByteString commandBlob = command.toByteString();
    Digest commandDigest = DIGEST_UTIL.compute(commandBlob);
    storage.put(commandDigest.getHash(), commandBlob);
    Directory root = Directory.getDefaultInstance();
    Digest rootDigest = DIGEST_UTIL.compute(root);
    Action action = actionBuilder.setCommandDigest(commandDigest).setInputRootDigest(rootDigest).build();
    ByteString actionBlob = action.toByteString();
    Digest actionDigest = DIGEST_UTIL.compute(actionBlob);
    storage.put(actionDigest.getHash(), actionBlob);
    return actionDigest;
}
Also used : Action(build.bazel.remote.execution.v2.Action) Command(build.bazel.remote.execution.v2.Command) Digest(build.bazel.remote.execution.v2.Digest) ByteString(com.google.protobuf.ByteString) Directory(build.bazel.remote.execution.v2.Directory)

Example 93 with Digest

use of com.google.cloud.kms.v1.Digest in project bazel-buildfarm by bazelbuild.

the class AbstractServerInstanceTest method undeclaredWorkingDirectoryIsInvalid.

@Test
public void undeclaredWorkingDirectoryIsInvalid() {
    AbstractServerInstance instance = new DummyServerInstance();
    Digest inputRootDigest = DIGEST_UTIL.compute(Directory.getDefaultInstance());
    PreconditionFailure.Builder preconditionFailureBuilder = PreconditionFailure.newBuilder();
    instance.validateCommand(Command.newBuilder().addArguments("foo").setWorkingDirectory("not/an/input").build(), inputRootDigest, ImmutableSet.of(), ImmutableSet.of(), ImmutableMap.of(inputRootDigest, Directory.getDefaultInstance()), preconditionFailureBuilder);
    PreconditionFailure preconditionFailure = preconditionFailureBuilder.build();
    assertThat(preconditionFailure.getViolationsCount()).isEqualTo(1);
    Violation violation = preconditionFailure.getViolationsList().get(0);
    assertThat(violation.getType()).isEqualTo(VIOLATION_TYPE_INVALID);
    assertThat(violation.getSubject()).isEqualTo(INVALID_COMMAND);
    assertThat(violation.getDescription()).isEqualTo("working directory is not an input directory");
}
Also used : Violation(com.google.rpc.PreconditionFailure.Violation) PreconditionFailure(com.google.rpc.PreconditionFailure) Digest(build.bazel.remote.execution.v2.Digest) Test(org.junit.Test)

Example 94 with Digest

use of com.google.cloud.kms.v1.Digest in project bazel-buildfarm by bazelbuild.

the class AbstractServerInstanceTest method outputDirectoriesFilesAreEnsuredPresent.

@SuppressWarnings("unchecked")
@Test
public void outputDirectoriesFilesAreEnsuredPresent() throws Exception {
    // our test subjects - these should appear in the findMissingBlobs request
    Digest fileDigest = DIGEST_UTIL.compute(ByteString.copyFromUtf8("Output Directory Root File Content"));
    Digest childFileDigest = DIGEST_UTIL.compute(ByteString.copyFromUtf8("Output Directory Child File Content"));
    Digest otherFileDigest = DIGEST_UTIL.compute(ByteString.copyFromUtf8("Another Output Directory File Content"));
    // setup block and ensureOutputsPresent trigger
    RequestMetadata requestMetadata = RequestMetadata.newBuilder().setCorrelatedInvocationsId("https://localhost:12345/test/build?ENSURE_OUTPUTS_PRESENT=true#92af266a-c5bf-48ca-a723-344ae516a786").build();
    ContentAddressableStorage contentAddressableStorage = mock(ContentAddressableStorage.class);
    ActionCache actionCache = mock(ActionCache.class);
    AbstractServerInstance instance = new DummyServerInstance(contentAddressableStorage, actionCache);
    Tree tree = Tree.newBuilder().setRoot(Directory.newBuilder().addFiles(FileNode.newBuilder().setDigest(fileDigest)).build()).addChildren(Directory.newBuilder().addFiles(FileNode.newBuilder().setDigest(childFileDigest)).build()).build();
    Tree otherTree = Tree.newBuilder().setRoot(Directory.newBuilder().addFiles(FileNode.newBuilder().setDigest(otherFileDigest)).build()).build();
    Digest treeDigest = DIGEST_UTIL.compute(tree);
    doBlob(contentAddressableStorage, treeDigest, tree.toByteString(), requestMetadata);
    Digest otherTreeDigest = DIGEST_UTIL.compute(otherTree);
    doBlob(contentAddressableStorage, otherTreeDigest, otherTree.toByteString(), requestMetadata);
    ActionKey actionKey = DigestUtil.asActionKey(DIGEST_UTIL.compute(ByteString.copyFromUtf8("action")));
    ActionResult actionResult = ActionResult.newBuilder().addOutputDirectories(OutputDirectory.newBuilder().setTreeDigest(treeDigest).build()).addOutputDirectories(OutputDirectory.newBuilder().setTreeDigest(otherTreeDigest).build()).build();
    when(actionCache.get(actionKey)).thenReturn(immediateFuture(actionResult));
    // invocation
    assertThat(instance.getActionResult(actionKey, requestMetadata).get()).isEqualTo(actionResult);
    // validation
    ArgumentCaptor<Iterable<Digest>> findMissingBlobsCaptor = ArgumentCaptor.forClass(Iterable.class);
    verify(contentAddressableStorage, times(1)).get(eq(treeDigest), /* offset=*/
    eq(0L), eq(treeDigest.getSizeBytes()), any(ServerCallStreamObserver.class), eq(requestMetadata));
    verify(contentAddressableStorage, times(1)).findMissingBlobs(findMissingBlobsCaptor.capture());
    assertThat(findMissingBlobsCaptor.getValue()).containsAtLeast(fileDigest, childFileDigest, otherFileDigest);
}
Also used : ActionCache(build.buildfarm.ac.ActionCache) ServerCallStreamObserver(io.grpc.stub.ServerCallStreamObserver) ActionResult(build.bazel.remote.execution.v2.ActionResult) Digest(build.bazel.remote.execution.v2.Digest) ContentAddressableStorage(build.buildfarm.cas.ContentAddressableStorage) Tree(build.bazel.remote.execution.v2.Tree) ActionKey(build.buildfarm.common.DigestUtil.ActionKey) RequestMetadata(build.bazel.remote.execution.v2.RequestMetadata) Test(org.junit.Test)

Example 95 with Digest

use of com.google.cloud.kms.v1.Digest in project bazel-buildfarm by bazelbuild.

the class AbstractServerInstanceTest method unsortedDirectoryInputIsInvalid.

@Test
public void unsortedDirectoryInputIsInvalid() {
    Directory emptyDirectory = Directory.getDefaultInstance();
    Digest emptyDirectoryDigest = DIGEST_UTIL.compute(emptyDirectory);
    PreconditionFailure.Builder preconditionFailure = PreconditionFailure.newBuilder();
    AbstractServerInstance.validateActionInputDirectory(ACTION_INPUT_ROOT_DIRECTORY_PATH, Directory.newBuilder().addAllDirectories(ImmutableList.of(DirectoryNode.newBuilder().setName("foo").setDigest(emptyDirectoryDigest).build(), DirectoryNode.newBuilder().setName("bar").setDigest(emptyDirectoryDigest).build())).build(), /* pathDigests=*/
    new Stack<>(), /* visited=*/
    Sets.newHashSet(), /* directoriesIndex=*/
    ImmutableMap.of(emptyDirectoryDigest, emptyDirectory), /* onInputFiles=*/
    file -> {
    }, /* onInputDirectories=*/
    directory -> {
    }, /* onInputDigests=*/
    digest -> {
    }, preconditionFailure);
    assertThat(preconditionFailure.getViolationsCount()).isEqualTo(1);
    Violation violation = preconditionFailure.getViolationsList().get(0);
    assertThat(violation.getType()).isEqualTo(VIOLATION_TYPE_INVALID);
    assertThat(violation.getSubject()).isEqualTo("/: foo > bar");
    assertThat(violation.getDescription()).isEqualTo(DIRECTORY_NOT_SORTED);
}
Also used : Violation(com.google.rpc.PreconditionFailure.Violation) PreconditionFailure(com.google.rpc.PreconditionFailure) Digest(build.bazel.remote.execution.v2.Digest) OutputDirectory(build.bazel.remote.execution.v2.OutputDirectory) Directory(build.bazel.remote.execution.v2.Directory) Test(org.junit.Test)

Aggregations

Digest (build.bazel.remote.execution.v2.Digest)191 ByteString (com.google.protobuf.ByteString)110 Test (org.junit.Test)99 IOException (java.io.IOException)55 Directory (build.bazel.remote.execution.v2.Directory)42 ImmutableList (com.google.common.collect.ImmutableList)35 Path (java.nio.file.Path)33 Status (io.grpc.Status)30 ExecutionException (java.util.concurrent.ExecutionException)29 RequestMetadata (build.bazel.remote.execution.v2.RequestMetadata)27 InputStream (java.io.InputStream)25 Instance (build.buildfarm.instance.Instance)24 Action (build.bazel.remote.execution.v2.Action)22 DigestUtil (build.buildfarm.common.DigestUtil)22 OutputStream (java.io.OutputStream)22 Write (build.buildfarm.common.Write)21 ListenableFuture (com.google.common.util.concurrent.ListenableFuture)21 Operation (com.google.longrunning.Operation)21 UUID (java.util.UUID)20 ExecuteResponse (build.bazel.remote.execution.v2.ExecuteResponse)19