private (IIpcMoniker ipcMoniker, PipId servicePipId) CreateService(TestPipGraphFragment fragment) { var ipcMoniker = fragment.GetIpcMoniker(); var apiServerMoniker = fragment.GetApiServerMoniker(); var shutdownBuilder = fragment.GetProcessBuilder(); new ArgumentsBuilder(shutdownBuilder) .AddIpcMonikerOption("--ipcMoniker", ipcMoniker) .AddIpcMonikerOption("--serverMoniker", apiServerMoniker) .AddOutputOption("--output", fragment.CreateOutputFile("shutdown.txt")); shutdownBuilder.ServiceKind = global::BuildXL.Pips.Operations.ServicePipKind.ServiceShutdown; (Process shutdownProcess, ProcessOutputs _) = fragment.ScheduleProcessBuilder(shutdownBuilder); var finalProcessBuilder = fragment.GetIpcProcessBuilder(); new ArgumentsBuilder(finalProcessBuilder) .AddOption("--command", "final") .AddIpcMonikerOption("--ipcMoniker", ipcMoniker); var finalOutputFile = fragment.CreateOutputFile("final.txt"); var finalizationPip = fragment.ScheduleIpcPip( ipcMoniker, null, finalProcessBuilder, finalOutputFile, true); XAssert.IsTrue(finalizationPip.IsValid); var serviceProcessBuilder = fragment.GetProcessBuilder(); new ArgumentsBuilder(serviceProcessBuilder) .AddIpcMonikerOption("--ipcMoniker", ipcMoniker) .AddIpcMonikerOption("--serverMoniker", apiServerMoniker) .AddOutputOption("--output", fragment.CreateOutputFile("service.txt")); serviceProcessBuilder.ServiceKind = global::BuildXL.Pips.Operations.ServicePipKind.Service; serviceProcessBuilder.ShutDownProcessPipId = shutdownProcess.PipId; serviceProcessBuilder.FinalizationPipIds = ReadOnlyArray <PipId> .FromWithoutCopy(new[] { finalizationPip }); (Process serviceProcess, ProcessOutputs _) = fragment.ScheduleProcessBuilder(serviceProcessBuilder); var createProcessBuilder = fragment.GetIpcProcessBuilder(); new ArgumentsBuilder(createProcessBuilder) .AddOption("--command", "create") .AddIpcMonikerOption("--ipcMoniker", ipcMoniker); var createOutputFile = fragment.CreateOutputFile("create.txt"); var createPip = fragment.ScheduleIpcPip( ipcMoniker, serviceProcess.PipId, createProcessBuilder, createOutputFile, false); XAssert.IsTrue(createPip.IsValid); return(ipcMoniker, serviceProcess.PipId); }
public static (IIpcMoniker ipcMoniker, PipId servicePipId) CreateService(TestPipGraphFragment fragment, ServiceRelatedPips pips = null) { var ipcMoniker = fragment.GetIpcMoniker(); var apiServerMoniker = fragment.GetApiServerMoniker(); var shutdownBuilder = fragment.GetProcessBuilder(); new ArgumentsBuilder(shutdownBuilder) .AddIpcMonikerOption("--ipcMoniker ", ipcMoniker) .AddIpcMonikerOption("--serverMoniker ", apiServerMoniker) .AddOutputFileOption("--output ", fragment.CreateOutputFile("shutdown.txt")) .Finish(); shutdownBuilder.ServiceKind = ServicePipKind.ServiceShutdown; (Process shutdownProcess, ProcessOutputs _) = fragment.ScheduleProcessBuilder(shutdownBuilder); var finalProcessBuilder = fragment.GetIpcProcessBuilder(); new ArgumentsBuilder(finalProcessBuilder) .AddStringOption("--command ", "final") .AddIpcMonikerOption("--ipcMoniker ", ipcMoniker) .Finish(); var finalOutputFile = fragment.CreateOutputFile("final.txt"); var finalizationPip = fragment.ScheduleIpcPip( ipcMoniker, null, finalProcessBuilder, finalOutputFile, true); XAssert.IsTrue(finalizationPip.PipId.IsValid); var serviceProcessBuilder = fragment.GetProcessBuilder(); new ArgumentsBuilder(serviceProcessBuilder) .AddIpcMonikerOption("--ipcMoniker ", ipcMoniker) .AddIpcMonikerOption("--serverMoniker ", apiServerMoniker) .AddOutputFileOption("--output ", fragment.CreateOutputFile("service.txt")) .Finish(); serviceProcessBuilder.ServiceKind = ServicePipKind.Service; serviceProcessBuilder.ShutDownProcessPipId = shutdownProcess.PipId; serviceProcessBuilder.FinalizationPipIds = ReadOnlyArray <PipId> .FromWithoutCopy(new[] { finalizationPip.PipId }); (Process serviceProcess, ProcessOutputs _) = fragment.ScheduleProcessBuilder(serviceProcessBuilder); var createProcessBuilder = fragment.GetIpcProcessBuilder(); new ArgumentsBuilder(createProcessBuilder) .AddStringOption("--command ", "create") .AddIpcMonikerOption("--ipcMoniker ", ipcMoniker) .Finish(); var createOutputFile = fragment.CreateOutputFile("create.txt"); var createPip = fragment.ScheduleIpcPip( ipcMoniker, serviceProcess.PipId, createProcessBuilder, createOutputFile, false); XAssert.IsTrue(createPip.PipId.IsValid); if (pips != null) { pips.ShutDown = shutdownProcess; pips.Final = finalizationPip; pips.ServiceStart = serviceProcess; pips.Create = createPip; } return(ipcMoniker, serviceProcess.PipId); }