public void ConsumeFilterPassingFile(bool topOnly) { FileArtifact source; if (topOnly) { source = FileArtifact.CreateSourceFile(SourceRootPath.Combine(Context.PathTable, "file.txt")); } else { var nestedDir = AbsolutePath.Create(Context.PathTable, Path.Combine(SourceRoot, "nested")); source = FileArtifact.CreateSourceFile(nestedDir.Combine(Context.PathTable, "file.txt")); } WriteSourceFile(source); var output = CreateOutputFileArtifact(ObjectRoot); SealDirectory sealedDirectory = CreateSourceSealDirectory(SourceRootPath, topOnly ? SealDirectoryKind.SourceTopDirectoryOnly : SealDirectoryKind.SourceAllDirectories, "*.txt", "*.cs"); DirectoryArtifact dir = PipGraphBuilder.AddSealDirectory(sealedDirectory); var builder = CreatePipBuilder(new Operation[] { Operation.ReadFile(source, doNotInfer: true), Operation.WriteFile(output), }); builder.AddInputDirectory(dir); SchedulePipBuilder(builder); RunScheduler().AssertSuccess(); }
public void AffectedSourceInsideSourceSealDirectory() { var sourceDirectory = CreateUniqueDirectory(SourceRootPath); var fileInsideSourceDirectory = CreateSourceFile(sourceDirectory, "file_"); var sourceSealDirectory = CreateSourceSealDirectory(sourceDirectory, SealDirectoryKind.SourceTopDirectoryOnly, "file_*"); PipGraphBuilder.AddSealDirectory(sourceSealDirectory); var changeAffectedWrittenFile = CreateUniqueObjPath("change"); var pipBuilder = CreatePipBuilder(new Operation[] { // Ensure that pip reads the changeAffectedWrittenFile if it exists. Operation.ReadFile(FileArtifact.CreateSourceFile(changeAffectedWrittenFile), doNotInfer: true), Operation.ReadFile(fileInsideSourceDirectory, doNotInfer: true), Operation.WriteFile(CreateOutputFileArtifact()), }); pipBuilder.AddInputDirectory(sourceSealDirectory.Directory); pipBuilder.SetChangeAffectedInputListWrittenFile(changeAffectedWrittenFile); SchedulePipBuilder(pipBuilder); var inputChangesFile = CreateOutputFileArtifact(); File.WriteAllText(ArtifactToString(inputChangesFile), ArtifactToString(fileInsideSourceDirectory)); Configuration.Schedule.InputChanges = inputChangesFile; RunScheduler().AssertSuccess(); var actualAffectedInput = File.ReadAllText(changeAffectedWrittenFile.ToString(Context.PathTable)); XAssert.AreEqual(ArtifactToString(fileInsideSourceDirectory), actualAffectedInput); }
public void ConsumeFilterNotPassingFile() { FileArtifact source = FileArtifact.CreateSourceFile(SourceRootPath.Combine(Context.PathTable, "file.txt")); WriteSourceFile(source); var output = CreateOutputFileArtifact(ObjectRoot); SealDirectory sealedDirectory = CreateSourceSealDirectory(SourceRootPath, SealDirectoryKind.SourceTopDirectoryOnly, "*.cs"); DirectoryArtifact dir = PipGraphBuilder.AddSealDirectory(sealedDirectory); var builder = CreatePipBuilder(new Operation[] { Operation.ReadFile(source, doNotInfer: true), Operation.WriteFile(output), }); builder.AddInputDirectory(dir); SchedulePipBuilder(builder); RunScheduler().AssertFailure(); AssertVerboseEventLogged(ProcessesLogEventId.PipProcessDisallowedFileAccess); AssertVerboseEventLogged(LogEventId.DependencyViolationMissingSourceDependency); AssertWarningEventLogged(LogEventId.ProcessNotStoredToCacheDueToFileMonitoringViolations); AssertErrorEventLogged(LogEventId.FileMonitoringError); }
public void TestSealDirectoryDump() { var sealPath = CreateOutputDirectoryArtifact(TemporaryDirectory); SealDirectory sealDirectory = CreateSealDirectory(sealPath.Path, SealDirectoryKind.Full, scrub: true, new[] { CreateSourceFile(), CreateSourceFile(), CreateSourceFile() }); sealDirectory.SetDirectoryArtifact(sealPath); PipGraphBuilder.AddSealDirectory(sealDirectory); RunAndAssertDumpPip(sealDirectory); }
public void TestAddSealDirectory() { var root = CreateUniqueSourcePath("root"); var seal = CreateSealDirectory(root, SealDirectoryKind.Partial); PipGraphBuilder.AddSealDirectory(seal); var builder = new PatchablePipGraph( oldPipGraph: PipGraphBuilder.DirectedGraph, oldPipTable: PipTable, graphBuilder: CreatePipGraphBuilder(), maxDegreeOfParallelism: Environment.ProcessorCount); var stats = builder.PartiallyReloadGraph(new HashSet <AbsolutePath>()); Assert.Equal(1, stats.NumPipsReloaded); }