public override ServerResponse Execute(ServerRequest request, CancellationToken cancellationToken) { if (!TryParseArguments(request, out var parsed)) { return(new RejectedServerResponse()); } var exitCode = 0; var output = string.Empty; var commandArgs = parsed.args.ToArray(); var writer = ServerLogger.IsLoggingEnabled ? new StringWriter() : TextWriter.Null; var checker = new DefaultExtensionDependencyChecker(Loader, writer); var app = new Application(cancellationToken, Loader, checker) { Out = writer, Error = writer, }; exitCode = app.Execute(commandArgs); if (ServerLogger.IsLoggingEnabled) { output = writer.ToString(); ServerLogger.Log(output); } return(new CompletedServerResponse(exitCode, utf8output: false, output: string.Empty)); }
public void Check_ReturnsFalse_WhenAssemblyHasDifferentMVID() { using (var directory = TempDirectory.Create()) { // Arrange var output = new StringWriter(); // Load Beta.dll from the future Alpha.dll path to prime the assembly loader var alphaFilePath = LoaderTestResources.Beta.WriteToFile(directory.DirectoryPath, "Alpha.dll"); var betaFilePath = LoaderTestResources.Beta.WriteToFile(directory.DirectoryPath, "Beta.dll"); var gammaFilePath = LoaderTestResources.Gamma.WriteToFile(directory.DirectoryPath, "Gamma.dll"); var deltaFilePath = LoaderTestResources.Delta.WriteToFile(directory.DirectoryPath, "Delta.dll"); var loader = new TestDefaultExtensionAssemblyLoader(Path.Combine(directory.DirectoryPath, "shadow")); var checker = new DefaultExtensionDependencyChecker(loader, output); // This will cause the loader to cache some inconsistent information. loader.LoadFromPath(alphaFilePath); LoaderTestResources.Alpha.WriteToFile(directory.DirectoryPath, "Alpha.dll"); // Act var result = checker.Check(new[] { alphaFilePath, gammaFilePath, deltaFilePath, }); // Assert Assert.False(result, "Check should not have passed: " + output.ToString()); } }
public override ServerResponse Execute(ServerRequest request, CancellationToken cancellationToken) { if (!TryParseArguments(request, out var parsed)) { return(new RejectedServerResponse()); } var exitCode = 0; var commandArgs = parsed.args.ToArray(); var outputWriter = new StringWriter(); var errorWriter = new StringWriter(); var checker = new DefaultExtensionDependencyChecker(Loader, outputWriter, errorWriter); var app = new Application(cancellationToken, Loader, checker, AssemblyReferenceProvider, outputWriter, errorWriter); exitCode = app.Execute(commandArgs); var output = outputWriter.ToString(); var error = errorWriter.ToString(); outputWriter.Dispose(); errorWriter.Dispose(); // This will no-op if server logging is not enabled. ServerLogger.Log(output); ServerLogger.Log(error); return(new CompletedServerResponse(exitCode, utf8output: false, output, error)); }
public static int Main(string[] args) { DebugMode.HandleDebugSwitch(ref args); var cancel = new CancellationTokenSource(); Console.CancelKeyPress += (sender, e) => { cancel.Cancel(); }; // Prevent shadow copying. var loader = new DefaultExtensionAssemblyLoader(baseDirectory: null); var checker = new DefaultExtensionDependencyChecker(loader, Console.Error); var application = new Application(cancel.Token, loader, checker); return(application.Execute(args)); }
public void Check_ReturnsFalse_WithMissingDependency() { using (var directory = TempDirectory.Create()) { // Arrange var output = new StringWriter(); var alphaFilePath = LoaderTestResources.Alpha.WriteToFile(directory.DirectoryPath, "Alpha.dll"); var loader = new TestDefaultExtensionAssemblyLoader(Path.Combine(directory.DirectoryPath, "shadow")); var checker = new DefaultExtensionDependencyChecker(loader, output); // Act var result = checker.Check(new[] { alphaFilePath, }); // Assert Assert.False(result, "Check should not have passed: " + output.ToString()); } }
public static int Main(string[] args) { DebugMode.HandleDebugSwitch(ref args); var cancel = new CancellationTokenSource(); Console.CancelKeyPress += (sender, e) => { cancel.Cancel(); }; var outputWriter = new StringWriter(); var errorWriter = new StringWriter(); // Prevent shadow copying. var loader = new DefaultExtensionAssemblyLoader(baseDirectory: null); var checker = new DefaultExtensionDependencyChecker(loader, outputWriter, errorWriter); var application = new Application( cancel.Token, loader, checker, (path, properties) => MetadataReference.CreateFromFile(path, properties), outputWriter, errorWriter); var result = application.Execute(args); var output = outputWriter.ToString(); var error = errorWriter.ToString(); outputWriter.Dispose(); errorWriter.Dispose(); Console.Write(output); Console.Error.Write(error); // This will no-op if server logging is not enabled. ServerLogger.Log(output); ServerLogger.Log(error); return(result); }
public void Check_ReturnsFalse_WhenLoaderThrows() { using (var directory = TempDirectory.Create()) { // Arrange var output = new StringWriter(); var deltaFilePath = LoaderTestResources.Delta.WriteToFile(directory.DirectoryPath, "Delta.dll"); var loader = new Mock <ExtensionAssemblyLoader>(); loader .Setup(l => l.LoadFromPath(It.IsAny <string>())) .Throws(new InvalidOperationException()); var checker = new DefaultExtensionDependencyChecker(loader.Object, output); // Act var result = checker.Check(new[] { deltaFilePath, }); // Assert Assert.False(result, "Check should not have passed: " + output.ToString()); } }
public void Check_ReturnsTrue_WithAllDependenciesProvided() { using (var directory = TempDirectory.Create()) { // Arrange var output = new StringWriter(); var alphaFilePath = LoaderTestResources.Alpha.WriteToFile(directory.DirectoryPath, "Alpha.dll"); var betaFilePath = LoaderTestResources.Beta.WriteToFile(directory.DirectoryPath, "Beta.dll"); var gammaFilePath = LoaderTestResources.Gamma.WriteToFile(directory.DirectoryPath, "Gamma.dll"); var deltaFilePath = LoaderTestResources.Delta.WriteToFile(directory.DirectoryPath, "Delta.dll"); var loader = new TestDefaultExtensionAssemblyLoader(Path.Combine(directory.DirectoryPath, "shadow")); var checker = new DefaultExtensionDependencyChecker(loader, output); // Act var result = checker.Check(new[] { alphaFilePath, betaFilePath, gammaFilePath, deltaFilePath, }); // Assert Assert.True(result, "Check should have passed: " + output.ToString()); } }