public void AbsentFileProbeIsAllowedInsideDirectoryDependency(Process.AbsentPathProbeInUndeclaredOpaquesMode absentPathProbeMode, SealDirectoryKind directoryKind) { // we should always allow absent path probes inside opaque directories a pip depends on var opaqueDir = Path.Combine(ObjectRoot, "opaquedir"); AbsolutePath opaqueDirPath = AbsolutePath.Create(Context.PathTable, opaqueDir); FileArtifact absentFile = CreateOutputFileArtifact(opaqueDir); var builderA = CreatePipBuilder(new Operation[] { Operation.WriteFile(CreateOutputFileArtifact()), }); builderA.AddOutputDirectory(opaqueDirPath, directoryKind); var pipA = SchedulePipBuilder(builderA); var builderB = CreatePipBuilder(new Operation[] { Operation.Probe(absentFile, doNotInfer: true), Operation.WriteFile(CreateOutputFileArtifact()) // dummy output }); builderB.AddInputDirectory(pipA.ProcessOutputs.GetOutputDirectories().First().Root); builderB.AbsentPathProbeUnderOpaquesMode = absentPathProbeMode; SchedulePipBuilder(builderB); RunScheduler().AssertSuccess(); }
public void AbsentPathProbeUnderOpaquesModeBehavior(Process.AbsentPathProbeInUndeclaredOpaquesMode absentPathProbeMode, SealDirectoryKind directoryKind) { var opaqueDir = Path.Combine(ObjectRoot, "opaquedir"); AbsolutePath opaqueDirPath = AbsolutePath.Create(Context.PathTable, opaqueDir); FileArtifact absentFile = CreateOutputFileArtifact(opaqueDir); var builderA = CreatePipBuilder(new Operation[] { Operation.Probe(absentFile, doNotInfer: true), Operation.WriteFile(CreateOutputFileArtifact()) // dummy output }); builderA.AbsentPathProbeUnderOpaquesMode = absentPathProbeMode; var resA = SchedulePipBuilder(builderA); // a dummy pip (just to 'declare' opaque directory) var builderB = CreatePipBuilder(new Operation[] { Operation.ReadFile(resA.ProcessOutputs.GetOutputFiles().First()), // force a dependency Operation.WriteFile(CreateOutputFileArtifact()), }); builderB.AddOutputDirectory(opaqueDirPath, directoryKind); SchedulePipBuilder(builderB); var result = RunScheduler(); // In Strict mode we block absent path probes and fail a pip; otherwise, we should allow absent path probes. if (absentPathProbeMode != Process.AbsentPathProbeInUndeclaredOpaquesMode.Strict) { result.AssertSuccess(); AssertVerboseEventLogged(LogEventId.AbsentPathProbeInsideUndeclaredOpaqueDirectory); } else { result.AssertFailure(); AssertErrorEventLogged(EventId.FileMonitoringError); AssertVerboseEventLogged(LogEventId.DependencyViolationAbsentPathProbeInsideUndeclaredOpaqueDirectory); } }