public void GetAssemblyMetadata_WhenStreamDoesNotContainPEHeaderSignature_ReturnsNull() { var stream = new MemoryStream(); stream.SetLength(1024); // only contains nulls Assert.IsNull(AssemblyUtils.GetAssemblyMetadata(stream, AssemblyMetadataFields.Default)); }
public void GetAssemblyMetadata_WhenAssemblyReferencesFieldSpecified_ReturnsMetadataIncludingAssemblyReferences() { var path = "MbUnit.TestResources.dll"; AssemblyMetadata metadata = AssemblyUtils.GetAssemblyMetadata(path, AssemblyMetadataFields.AssemblyReferences); Assembly assembly = typeof(SimpleTest).Assembly; Assert.AreElementsEqual(assembly.GetReferencedAssemblies(), metadata.AssemblyReferences); }
public void GetAssemblyMetadata_WhenRuntimeVersionFieldSpecified_ReturnsMetadataIncludingRuntimeVersion() { var path = "MbUnit.TestResources.dll"; AssemblyMetadata metadata = AssemblyUtils.GetAssemblyMetadata(path, AssemblyMetadataFields.RuntimeVersion); Assembly assembly = typeof(SimpleTest).Assembly; Assert.AreEqual("v2.0.50727", metadata.RuntimeVersion); }
public void GetAssemblyMetadata_WhenAttemptingToAccessAssemblyReferencesButNotRead_Throws() { var path = "MbUnit.TestResources.dll"; AssemblyMetadata metadata = AssemblyUtils.GetAssemblyMetadata(path, AssemblyMetadataFields.Default); IList <AssemblyName> x; Assert.Throws <InvalidOperationException>(() => x = metadata.AssemblyReferences); }
public void GetAssemblyMetadata_WhenStreamIsAnx64Assembly_ReturnsMetadata() { var path = "MbUnit.TestResources.x64.dll"; AssemblyMetadata metadata = AssemblyUtils.GetAssemblyMetadata(path, AssemblyMetadataFields.Default); Assert.Multiple(() => { Assert.IsNotNull(metadata); Assert.AreEqual(2, metadata.MajorRuntimeVersion); Assert.AreEqual(5, metadata.MinorRuntimeVersion); Assert.AreEqual(ProcessorArchitecture.Amd64, metadata.ProcessorArchitecture); }); }
private static IList <AssemblyName> GetAssemblyReferences(IFileInspector fileInspector) { Stream stream; if (fileInspector.TryGetStream(out stream)) { AssemblyMetadata assemblyMetadata = AssemblyUtils.GetAssemblyMetadata(stream, AssemblyMetadataFields.AssemblyReferences); if (assemblyMetadata != null) { return(assemblyMetadata.AssemblyReferences); } } return(EmptyArray <AssemblyName> .Instance); }
private void ExploreOrRunAssembly(ITestIsolationContext testIsolationContext, TestPackage testPackage, TestExplorationOptions testExplorationOptions, TestExecutionOptions testExecutionOptions, RemoteMessageSink remoteMessageSink, IProgressMonitor progressMonitor, string taskName, FileInfo file) { using (progressMonitor.BeginTask(taskName, 100)) { if (progressMonitor.IsCanceled) { return; } string assemblyPath = file.FullName; progressMonitor.SetStatus("Getting test assembly metadata."); AssemblyMetadata assemblyMetadata = AssemblyUtils.GetAssemblyMetadata(assemblyPath, AssemblyMetadataFields.RuntimeVersion); progressMonitor.Worked(2); if (progressMonitor.IsCanceled) { return; } if (assemblyMetadata != null) { Type driverType = GetType(); object[] driverArguments = GetRemoteTestDriverArguments(); HostSetup hostSetup = CreateHostSetup(testPackage, assemblyPath, assemblyMetadata); using (var remoteProgressMonitor = new RemoteProgressMonitor( progressMonitor.CreateSubProgressMonitor(97))) { testIsolationContext.RunIsolatedTask <ExploreOrRunTask>(hostSetup, (statusMessage) => progressMonitor.SetStatus(statusMessage), new object[] { driverType, driverArguments, assemblyPath, testExplorationOptions, testExecutionOptions, remoteMessageSink, remoteProgressMonitor }); } // Record one final work unit after the isolated task has been fully cleaned up. progressMonitor.SetStatus(""); progressMonitor.Worked(1); } } }
private TestResult RunTests(string assemblyPath) { AssemblyMetadata assemblyMetadata = AssemblyUtils.GetAssemblyMetadata(assemblyPath, AssemblyMetadataFields.Default); if (assemblyMetadata == null) { ITestContext testContext = listOfTestCommands[0].StartPrimaryChildStep(topTestStep); testContext.LifecyclePhase = LifecyclePhases.Execute; testContext.LogWriter.Failures.WriteLine("Test assembly does not exist or is not a valid .Net assembly. [{0}]", assemblyPath ?? String.Empty); return(testContext.FinishStep(TestOutcome.Error, null)); } // Remark: We cannot use the RemoteLoader directly from this AppDomain. // csUnit v2.5 contains a bug in its detection of the NUnitAdapter. It tries // to enumerate ALL types in ALL assemblies that are loaded in the AppDomain. // Bad news for us because some of these types derived from other types in // assemblies that cannot be loaded (eg. VisualStudio APIs). // So csUnit promptly blows up. The workaround is to create our own AppDomain. // We cannot use the csUnit Loader because it does things like report // events asynchronously and possibly out of order or even in parallel. -- Jeff. // See also: http://sourceforge.net/tracker/index.php?func=detail&aid=2111390&group_id=23919&atid=380010 HostSetup hostSetup = new HostSetup(); hostSetup.ApplicationBaseDirectory = Path.GetDirectoryName(assemblyPath); hostSetup.WorkingDirectory = hostSetup.ApplicationBaseDirectory; hostSetup.ShadowCopy = true; hostSetup.ConfigurationFileLocation = ConfigurationFileLocation.AppBase; hostSetup.ProcessorArchitecture = assemblyMetadata.ProcessorArchitecture; string configFile = assemblyPath + ".config"; if (File.Exists(configFile)) { hostSetup.Configuration.ConfigurationXml = File.ReadAllText(configFile); } var hostFactory = (IHostFactory)RuntimeAccessor.ServiceLocator.ResolveByComponentId(IsolatedAppDomainHostFactory.ComponentId); using (IHost host = hostFactory.CreateHost(hostSetup, RuntimeAccessor.Logger)) { HostAssemblyResolverHook.InstallCallback(host); Type loaderType = typeof(RemoteLoader); using (RemoteLoader loader = (RemoteLoader)host.GetHostService().CreateInstance( loaderType.Assembly.FullName, loaderType.FullName).Unwrap()) { // Attach ourself to get feedback loader.Listener = this; // Load the test assembly loader.LoadAssembly(assemblyPath); // Run the tests of that assembly TextWriter consoleOutputWriter = new ContextualLogTextWriter(MarkupStreamNames.ConsoleOutput); var spec = new CallbackTestSpec(this); loader.RunTests(spec, consoleOutputWriter); } } return(topResult ?? new TestResult(TestOutcome.Error)); }
public void GetAssemblyMetadata_WhenStreamIsEmpty_ReturnsNull() { var stream = new MemoryStream(); Assert.IsNull(AssemblyUtils.GetAssemblyMetadata(stream, AssemblyMetadataFields.Default)); }
public void GetAssemblyMetadata_WhenFilePathIsNull_Throws() { Assert.Throws <ArgumentNullException>(() => AssemblyUtils.GetAssemblyMetadata((string)null, AssemblyMetadataFields.Default)); }
public void GetAssemblyMetadata_WhenStreamIsNull_Throws() { Assert.Throws <ArgumentNullException>(() => AssemblyUtils.GetAssemblyMetadata((Stream)null, AssemblyMetadataFields.Default)); }
public void GetAssemblyMetadata_WhenStreamIsAPEFileButNotAnAssembly_ReturnsNull() { var path = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.System), @"kernel32.dll"); Assert.IsNull(AssemblyUtils.GetAssemblyMetadata(path, AssemblyMetadataFields.Default)); }