Exemplo n.º 1
0
        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();
        }
Exemplo n.º 2
0
        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);
            }
        }