in go/pkg/fakes/server.go [149:244]
func (e *TestEnv) Set(cmd *command.Command, opt *command.ExecutionOptions, res *command.Result, opts ...option) (cmdDg, acDg digest.Digest) {
e.t.Helper()
cmd.FillDefaultFieldValues()
if err := cmd.Validate(); err != nil {
e.t.Fatalf("command validation failed: %v", err)
}
t, _ := time.Parse(time.RFC3339, "2006-01-02T15:04:05Z")
ar := &repb.ActionResult{
ExitCode: int32(res.ExitCode),
ExecutionMetadata: &repb.ExecutedActionMetadata{
QueuedTimestamp: timeToProto(t.Add(time.Millisecond)),
WorkerStartTimestamp: timeToProto(t.Add(2 * time.Millisecond)),
WorkerCompletedTimestamp: timeToProto(t.Add(3 * time.Millisecond)),
InputFetchStartTimestamp: timeToProto(t.Add(4 * time.Millisecond)),
InputFetchCompletedTimestamp: timeToProto(t.Add(5 * time.Millisecond)),
ExecutionStartTimestamp: timeToProto(t.Add(6 * time.Millisecond)),
ExecutionCompletedTimestamp: timeToProto(t.Add(7 * time.Millisecond)),
OutputUploadStartTimestamp: timeToProto(t.Add(8 * time.Millisecond)),
OutputUploadCompletedTimestamp: timeToProto(t.Add(9 * time.Millisecond)),
},
}
for _, o := range opts {
if err := o.Apply(ar, e.Server, e.ExecRoot); err != nil {
e.t.Fatalf("error applying option %+v: %v", o, err)
}
}
execRoot, workingDir, remoteWorkingDir := cmd.ExecRoot, cmd.WorkingDir, cmd.RemoteWorkingDir
root, inputs, _, err := e.Client.GrpcClient.ComputeMerkleTree(execRoot, workingDir, remoteWorkingDir, cmd.InputSpec, e.Client.FileMetadataCache)
if err != nil {
e.t.Fatalf("error building input tree in fake setup: %v", err)
return digest.Empty, digest.Empty
}
for _, inp := range inputs {
ch, err := chunker.New(inp, false, int(e.Client.GrpcClient.ChunkMaxSize))
if err != nil {
e.t.Fatalf("error getting data from input entry: %v", err)
}
bytes, err := ch.FullData()
if err != nil {
e.t.Fatalf("error getting data from input chunker: %v", err)
}
e.Server.CAS.Put(bytes)
}
cmdPb := cmd.ToREProto(false)
bytes, err := proto.Marshal(cmdPb)
if err != nil {
e.t.Fatalf("error inserting command digest blob into CAS %v", err)
}
e.Server.CAS.Put(bytes)
cmdDg = digest.TestNewFromMessage(cmdPb)
ac := &repb.Action{
CommandDigest: cmdDg.ToProto(),
InputRootDigest: root.ToProto(),
DoNotCache: opt.DoNotCache,
}
if cmd.Timeout > 0 {
ac.Timeout = ptypes.DurationProto(cmd.Timeout)
}
acDg = digest.TestNewFromMessage(ac)
bytes, err = proto.Marshal(ac)
if err != nil {
e.t.Fatalf("error inserting action digest blob into CAS %v", err)
}
e.Server.CAS.Put(bytes)
e.Server.Exec.adg = acDg
e.Server.Exec.ActionResult = ar
switch res.Status {
case command.TimeoutResultStatus:
if res.Err == nil {
e.Server.Exec.Status = status.New(codes.DeadlineExceeded, "timeout")
} else {
e.Server.Exec.Status = status.New(codes.DeadlineExceeded, res.Err.Error())
}
case command.RemoteErrorResultStatus:
st, ok := status.FromError(res.Err)
if !ok {
if res.Err == nil {
st = status.New(codes.Internal, "remote error")
} else {
st = status.New(codes.Internal, res.Err.Error())
}
}
e.Server.Exec.Status = st
case command.CacheHitResultStatus:
if !e.Server.Exec.Cached { // Assume the user means in this case the actual ActionCache should miss.
e.Server.ActionCache.Put(acDg, ar)
}
}
return cmdDg, acDg
}