Esempio n. 1
0
        public void GetAssemblyMetadata_WhenStreamDoesNotContainPEHeaderSignature_ReturnsNull()
        {
            var stream = new MemoryStream();

            stream.SetLength(1024); // only contains nulls

            Assert.IsNull(AssemblyUtils.GetAssemblyMetadata(stream, AssemblyMetadataFields.Default));
        }
Esempio n. 2
0
        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);
        }
Esempio n. 3
0
        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);
        }
Esempio n. 4
0
        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);
        }
Esempio n. 5
0
        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);
        }
Esempio n. 7
0
        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));
            }
Esempio n. 9
0
        public void GetAssemblyMetadata_WhenStreamIsEmpty_ReturnsNull()
        {
            var stream = new MemoryStream();

            Assert.IsNull(AssemblyUtils.GetAssemblyMetadata(stream, AssemblyMetadataFields.Default));
        }
Esempio n. 10
0
 public void GetAssemblyMetadata_WhenFilePathIsNull_Throws()
 {
     Assert.Throws <ArgumentNullException>(() => AssemblyUtils.GetAssemblyMetadata((string)null, AssemblyMetadataFields.Default));
 }
Esempio n. 11
0
 public void GetAssemblyMetadata_WhenStreamIsNull_Throws()
 {
     Assert.Throws <ArgumentNullException>(() => AssemblyUtils.GetAssemblyMetadata((Stream)null, AssemblyMetadataFields.Default));
 }
Esempio n. 12
0
        public void GetAssemblyMetadata_WhenStreamIsAPEFileButNotAnAssembly_ReturnsNull()
        {
            var path = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.System), @"kernel32.dll");

            Assert.IsNull(AssemblyUtils.GetAssemblyMetadata(path, AssemblyMetadataFields.Default));
        }