public void TestBasicAddIndependentFragments()
        {
            var          fragment1         = CreatePipGraphFragment(nameof(TestBasicAddIndependentFragments) + "1");
            var          processBuilder1   = fragment1.GetProcessBuilder();
            var          argumentsBuilder1 = new ArgumentsBuilder(processBuilder1);
            AbsolutePath outputPathToVerify1;

            argumentsBuilder1
            .AddInputOption("input", fragment1.CreateSourceFile("f"))
            .AddOutputOption("output", outputPathToVerify1 = fragment1.CreateOutputFile("g").Path);
            (Process process1, ProcessOutputs _)           = fragment1.ScheduleProcessBuilder(processBuilder1);

            // Fragment2 is independent of fragment1.
            var          fragment2         = CreatePipGraphFragment(nameof(TestBasicAddIndependentFragments) + "2");
            var          processBuilder2   = fragment2.GetProcessBuilder();
            var          argumentsBuilder2 = new ArgumentsBuilder(processBuilder2);
            AbsolutePath outputPathToVerify2;

            argumentsBuilder2
            .AddInputOption("input", fragment2.CreateSourceFile("i"))
            .AddOutputOption("output", outputPathToVerify2 = fragment2.CreateOutputFile("h").Path);
            (Process process2, ProcessOutputs _)           = fragment2.ScheduleProcessBuilder(processBuilder2);

            var graph = SerializeDeserializeFragmentsInParallel(fragment1, fragment2);

            VerifyGraphSuccessfullyConstructed(graph);
            VerifyProducerExists(graph, fragment1, outputPathToVerify1);
            VerifyProducerExists(graph, fragment2, outputPathToVerify2);
            VerifyMatchingArguments(graph, fragment1, process1);
            VerifyMatchingArguments(graph, fragment2, process2);
        }
        public void TestBasicDependencyBetweenFragments()
        {
            var          fragment1         = CreatePipGraphFragment(nameof(TestBasicDependencyBetweenFragments) + "1");
            var          processBuilder1   = fragment1.GetProcessBuilder();
            var          argumentsBuilder1 = new ArgumentsBuilder(processBuilder1);
            AbsolutePath outputPathToVerify1;

            argumentsBuilder1
            .AddInputOption("input", fragment1.CreateSourceFile("f"))
            .AddOutputOption("output", outputPathToVerify1 = fragment1.CreateOutputFile("g").Path);
            (Process process1, ProcessOutputs _)           = fragment1.ScheduleProcessBuilder(processBuilder1);

            // Fragment2 depends on fragment1 on output file g produced by fragment1.
            var          fragment2         = CreatePipGraphFragment(nameof(TestBasicDependencyBetweenFragments) + "2");
            var          processBuilder2   = fragment2.GetProcessBuilder();
            var          argumentsBuilder2 = new ArgumentsBuilder(processBuilder2);
            AbsolutePath outputPathToVerify2;

            argumentsBuilder2
            .AddInputOption("input", fragment2.CreateOutputFile("g"))     // fragment2 depends on g without any producer within the fragment.
            .AddOutputOption("output", outputPathToVerify2 = fragment2.CreateOutputFile("h").Path);
            (Process process2, ProcessOutputs _)           = fragment2.ScheduleProcessBuilder(processBuilder2);

            var graph = SerializeDeserializeFragmentsSynchronously(fragment1, fragment2);

            VerifyGraphSuccessfullyConstructed(graph);
            VerifyProducerExists(graph, fragment1, outputPathToVerify1);
            VerifyProducerExists(graph, fragment2, outputPathToVerify2);
            VerifyMatchingArguments(graph, fragment1, process1);
            VerifyMatchingArguments(graph, fragment2, process2);
        }
        public void TestAddingIpcPip()
        {
            var fragment = CreatePipGraphFragment(nameof(TestAddingIpcPip));

            (IIpcMoniker moniker, PipId servicePipId) = CreateService(fragment);

            var          processBuilder   = fragment.GetProcessBuilder();
            var          argumentsBuilder = new ArgumentsBuilder(processBuilder);
            AbsolutePath outputPathToVerify;

            argumentsBuilder
            .AddInputOption("input", fragment.CreateSourceFile("f"))
            .AddOutputOption("output", outputPathToVerify = fragment.CreateOutputFile("g").Path);
            (Process process, ProcessOutputs _)           = fragment.ScheduleProcessBuilder(processBuilder);

            var addFileProcessBuilder = fragment.GetIpcProcessBuilder();

            new ArgumentsBuilder(addFileProcessBuilder)
            .AddOption("--command", "addFile")
            .AddIpcMonikerOption("--ipcMoniker", moniker)
            .AddInputOption("--file", fragment.CreateOutputFile("g"));

            fragment.ScheduleIpcPip(
                moniker,
                servicePipId,
                addFileProcessBuilder,
                fragment.CreateOutputFile("add"),
                false);

            var graph = SerializeDeserializeFragmentsSynchronously(fragment);

            VerifyGraphSuccessfullyConstructed(graph);
        }
        public void TestBasicCreation()
        {
            var          fragment         = CreatePipGraphFragment(nameof(TestBasicCreation));
            var          processBuilder   = fragment.GetProcessBuilder();
            var          argumentsBuilder = new ArgumentsBuilder(processBuilder);
            AbsolutePath outputPathToVerify;

            argumentsBuilder
            .AddInputOption("input", fragment.CreateSourceFile("f"))
            .AddOutputOption("output", outputPathToVerify = fragment.CreateOutputFile("g").Path);
            (Process process, ProcessOutputs _)           = fragment.ScheduleProcessBuilder(processBuilder);

            var graph = SerializeDeserializeFragmentsSynchronously(fragment);

            VerifyGraphSuccessfullyConstructed(graph);
            VerifyProducerExists(graph, fragment, outputPathToVerify);
            VerifyMatchingArguments(graph, fragment, process);
        }