private void CreateDirectoryWithLongPath(string root, IMutableFileSystem fileSystem) { const int MaxPath = 260; // Create root/0001/.../00XX. int i = 0; string current = root; while (true) { current = Path.Combine(current, i.ToString("D4")); var path = AbsolutePath.Create(fileSystem.GetPathTable(), current); fileSystem.CreateDirectory(path); if (current.Length > MaxPath) { return; } } }
/// <nodoc /> public static DsTestWriter Create(string sourceRoot, IEnumerable <BuildSpec> buildSpecs, IMutableFileSystem fileSystem) { // Putting source into the nested folder in order to avoid file access violation when writing package files outside the source cone. var testWriter = new DsTestWriter(fileSystem.GetPathTable(), fileSystem, sourceRoot); foreach (var spec in buildSpecs) { if (spec.FileName == Names.ConfigDsc) { testWriter.ConfigWriter.SetConfigContent(spec.Content); testWriter.ConfigWriter.UseLegacyConfigExtension(); } else if (spec.FileName == Names.ConfigBc) { testWriter.ConfigWriter.SetConfigContent(spec.Content); } else { testWriter.ConfigWriter.AddBuildSpec(spec.FileName, spec.Content); } } return(testWriter); }
/// <nodoc /> public DsTestWriter(PathTable pathTable, IMutableFileSystem pathBasedFileSystem = null, string rootPath = null) : this(rootPath) { FileSystem = pathBasedFileSystem ?? new InMemoryFileSystem(pathTable); PathTable = pathTable; }
protected BaseEngineTest(ITestOutputHelper output) : base(output) { m_testOutput = output; m_ignoreWarnings = OperatingSystemHelper.IsUnixOS; // ignoring /bin/sh is being used as a source file RegisterEventSource(global::BuildXL.Scheduler.ETWLogger.Log); RegisterEventSource(global::BuildXL.FrontEnd.Script.ETWLogger.Log); RegisterEventSource(global::BuildXL.FrontEnd.Core.ETWLogger.Log); RegisterEventSource(global::BuildXL.Engine.ETWLogger.Log); RegisterEventSource(global::BuildXL.Processes.ETWLogger.Log); ParseAndEvaluateLogger = Logger.CreateLogger(); InitializationLogger = InitializationLogger.CreateLogger(); var pathTable = new PathTable(); FileSystem = new PassThroughMutableFileSystem(pathTable); Context = EngineContext.CreateNew(CancellationToken.None, pathTable, FileSystem); MainSourceResolverModules = new List <AbsolutePath>(); var rootPath = AbsolutePath.Create(Context.PathTable, TestRoot); var logsPath = Combine(AbsolutePath.Create(Context.PathTable, TemporaryDirectory), "logs"); Configuration = new CommandLineConfiguration() { DisableDefaultSourceResolver = true, Resolvers = new List <IResolverSettings> { new SourceResolverSettings { Kind = "SourceResolver", Modules = MainSourceResolverModules, }, new SourceResolverSettings { Kind = "SourceResolver", Modules = new List <AbsolutePath> { AbsolutePath.Create(Context.PathTable, Path.Combine(GetTestExecutionLocation(), "Sdk", "Prelude", "package.config.dsc")), AbsolutePath.Create(Context.PathTable, Path.Combine(GetTestExecutionLocation(), "Sdk", "Transformers", "package.config.dsc")), AbsolutePath.Create(Context.PathTable, Path.Combine(GetTestExecutionLocation(), "Sdk", "Deployment", "module.config.dsc")), }, }, }, Layout = { SourceDirectory = rootPath, OutputDirectory = Combine(rootPath, "out"), ObjectDirectory = Combine(rootPath, "obj"), CacheDirectory = Combine(AbsolutePath.Create(Context.PathTable, TemporaryDirectory), "cache"), }, Cache = { CacheSpecs = SpecCachingOption.Disabled, CacheLogFilePath = logsPath.Combine(Context.PathTable,PathAtom.Create(Context.StringTable, "cache.log")), }, Engine = { ReuseEngineState = false, LogStatistics = false, TrackBuildsInUserFolder = false, }, FrontEnd = { MaxFrontEndConcurrency = 1, LogStatistics = false, }, Schedule = { MaxIO = 1, MaxProcesses = 1, }, Sandbox = { FileSystemMode = FileSystemMode.RealAndMinimalPipGraph, OutputReportingMode = OutputReportingMode.FullOutputOnError, }, Logging = { LogsDirectory = logsPath, LogStats = false, LogExecution = false, LogCounters = false, LogMemory = false, StoreFingerprints = false, NoWarnings = { 909, // Disable warnings about experimental feature }, } }; AbsolutePath Combine(AbsolutePath parent, string name) { return(parent.Combine(Context.PathTable, PathAtom.Create(Context.StringTable, name))); } }
protected BaseEngineTest(ITestOutputHelper output) : base(output) { m_testOutput = output; m_ignoreWarnings = OperatingSystemHelper.IsUnixOS; // ignoring /bin/sh is being used as a source file RegisterEventSource(global::BuildXL.Scheduler.ETWLogger.Log); RegisterEventSource(global::BuildXL.Pips.ETWLogger.Log); RegisterEventSource(global::BuildXL.FrontEnd.Script.ETWLogger.Log); RegisterEventSource(global::BuildXL.FrontEnd.Core.ETWLogger.Log); RegisterEventSource(global::BuildXL.Engine.ETWLogger.Log); RegisterEventSource(global::BuildXL.Processes.ETWLogger.Log); ParseAndEvaluateLogger = Logger.CreateLoggerWithTracking(); InitializationLogger = InitializationLogger.CreateLogger(); var pathTable = new PathTable(); FileSystem = new PassThroughMutableFileSystem(pathTable); Context = EngineContext.CreateNew(CancellationToken.None, pathTable, FileSystem); MainSourceResolverModules = new List <AbsolutePath>(); var rootPath = AbsolutePath.Create(Context.PathTable, TestRoot); var logsPath = Combine(AbsolutePath.Create(Context.PathTable, TemporaryDirectory), "logs"); Configuration = new CommandLineConfiguration() { DisableDefaultSourceResolver = true, Resolvers = new List <IResolverSettings> { new SourceResolverSettings { Kind = "SourceResolver", Modules = MainSourceResolverModules, }, new SourceResolverSettings { Kind = "SourceResolver", Modules = new List <AbsolutePath> { AbsolutePath.Create(Context.PathTable, Path.Combine(GetTestExecutionLocation(), "Sdk", "Prelude", "package.config.dsc")), AbsolutePath.Create(Context.PathTable, Path.Combine(GetTestExecutionLocation(), "Sdk", "Transformers", "package.config.dsc")), AbsolutePath.Create(Context.PathTable, Path.Combine(GetTestExecutionLocation(), "Sdk", "Deployment", "module.config.dsc")), }, }, }, Layout = { SourceDirectory = rootPath, OutputDirectory = Combine(rootPath, "out"), ObjectDirectory = Combine(rootPath, "obj"), CacheDirectory = Combine(AbsolutePath.Create(Context.PathTable, TemporaryDirectory), "cache"), }, Cache = { CacheSpecs = SpecCachingOption.Disabled, CacheLogFilePath = logsPath.Combine(Context.PathTable,PathAtom.Create(Context.StringTable, "cache.log")), }, Engine = { ReuseEngineState = false, LogStatistics = false, TrackBuildsInUserFolder = false, }, FrontEnd = { MaxFrontEndConcurrency = 1, LogStatistics = false, }, Schedule = { MaxIO = 1, MaxProcesses = 1, }, Sandbox = { FileSystemMode = FileSystemMode.RealAndMinimalPipGraph, OutputReportingMode = OutputReportingMode.FullOutputOnError, }, Logging = { LogsDirectory = logsPath, LogStats = false, LogExecution = false, LogCounters = false, LogMemory = false, StoreFingerprints = false, NoWarnings = { 909, // Disable warnings about experimental feature }, } }; if (TryGetSubstSourceAndTarget(out string substSource, out string substTarget)) { // Directory translation is needed here particularly when the test temporary directory // is inside a directory that is actually a junction to another place. // For example, the temporary directory is D:\src\BuildXL\Out\Object\abc\t_1, but // the path D:\src\BuildXL\Out or D:\src\BuildXL\Out\Object is a junction to K:\Out. // Some tool, like cmd, can access the path in K:\Out, and thus the test will have a DFA // if there's no directory translation. // This problem does not occur when only substs are involved, but no junctions. The method // TryGetSubstSourceAndTarget works to get translations due to substs or junctions. AbsolutePath substSourcePath = AbsolutePath.Create(Context.PathTable, substSource); AbsolutePath substTargetPath = AbsolutePath.Create(Context.PathTable, substTarget); Configuration.Engine.DirectoriesToTranslate.Add( new TranslateDirectoryData(I($"{substSource}<{substTarget}"), substSourcePath, substTargetPath)); } AbsolutePath Combine(AbsolutePath parent, string name) { return(parent.Combine(Context.PathTable, PathAtom.Create(Context.StringTable, name))); } }