private void AddModuleToGrid(ModuleWrapper module, GridEXRow row)
        {
            AssignNumberValueToCell <uint>(row.Cells[0], module.GetToken());
            AssignNumberValueToCell <ulong>(row.Cells[1], module.GetBaseAddress());
            AssignNumberValueToCell <uint>(row.Cells[2], module.GetSize());

            row.Cells[3].Value = module.IsDynamic();
            row.Cells[4].Value = module.IsInMemory();

            string moduleName = module.GetName();

            try
            {
                row.Cells[5].Value = Path.GetFileName(moduleName);
            }
            catch
            {
            }

            row.Cells[6].Value = moduleName;

            AssemblyWrapper assembly = module.GetAssembly();

            row.Cells[7].Value = assembly.GetName();

            AppDomainWrapper appDomain = assembly.GetAppDomain();

            row.Cells[8].Value = appDomain.GetName();
        }
Beispiel #2
0
        protected override void OnStartup(StartupEventArgs e)
        {
            base.OnStartup(e);
            Tools.Add(new Hammer());
            var appSettings                     = new AppSettings();
            var logger                          = PluginLoaderLogger.Factory(appSettings);
            var appDomain                       = new AppDomainWrapper(AppDomain.CurrentDomain, logger);
            var settings                        = new PluginLoaderSettings(appSettings);
            var typeLoader                      = new TypeLoader <ITool>(PluginLoaderSettings.Default, logger);
            var assemblyNameReader              = new AssemblyNameReader();
            var assemblyCache                   = new AssemblyCache(appDomain, assemblyNameReader, logger);
            var assemblyLoader                  = new AssemblyLoader(appDomain, settings, assemblyCache, assemblyNameReader, logger);
            var waiter                          = new Waiter(logger);
            var assemblyResolveCache            = new AssemblyResolveCache();
            var pluginDependencyObjectCreator   = new PluginDependencyResolverObjectCreator(appDomain, settings, assemblyLoader, waiter, assemblyResolveCache, logger);
            var pluginDependencyResolverFactory = new PluginDependencyResolverCacheFactory(pluginDependencyObjectCreator, logger);
            var pluginCacheFactory              = new PluginCacheFactory <ITool>(typeLoader, pluginDependencyResolverFactory, assemblyLoader, logger);
            var pluginPaths                     = new StaticPluginPaths(new[] { "Plugins" });
            var pluginLoader                    = new PluginLoader <ITool>(pluginPaths, pluginCacheFactory);
            var plugins                         = pluginLoader.LoadPlugins();
            var objectCreator                   = new ObjectCreator <ITool>();
            var toolPluginObjectCreator         = new PluginObjectCreator <ITool>(settings, objectCreator, logger);

            Tools.AddRange(plugins.CreatePluginObjects(toolPluginObjectCreator));
        }
        public static TestInfo GetConventionInfo(string testAssemblyPath)
        {
            var executingAssembly          = Assembly.GetExecutingAssembly();
            var executingAssemblyDirectory = Path.GetDirectoryName(executingAssembly.Location);

            var previousDirectory = Directory.GetCurrentDirectory();

            Directory.SetCurrentDirectory(executingAssemblyDirectory);

            TestInfo info;

            using (var appDomain = new AppDomainWrapper(executingAssemblyDirectory, "FixieTestFinder"))
            {
                var assemblyName = Assembly.GetExecutingAssembly().FullName;
                var className    = typeof(RemoteTestFinder).FullName;
                var remoteFinder = appDomain.CreateObject <RemoteTestFinder>(
                    assemblyName,
                    className);

                info = remoteFinder.FindTests(testAssemblyPath);
            }

            Directory.SetCurrentDirectory(previousDirectory);
            return(info);
        }
        public static string[] LoadTestNames(AppDomainWrapper appDomainWrapper, string dllPath)
        {
            var o = appDomainWrapper.CreateObject <Marshalled.Executor.SpecEnumerator>("NJasmine.dll");

            var result = o.GetTestNames(AssemblyName.GetAssemblyName(dllPath).FullName);

            return(result);
        }
        public static string[] LoadTestNames(AppDomainWrapper appDomainWrapper, string dllPath)
        {
            var o = appDomainWrapper.CreateObject<Marshalled.Executor.SpecEnumerator>("NJasmine.dll");

            var result = o.GetTestNames(AssemblyName.GetAssemblyName(dllPath).FullName);

            return result;
        }
Beispiel #6
0
        public static void Cleanup()
        {
            var applicationDomain = new AppDomainWrapper(AppDomain.CurrentDomain);
            var connectionSetting = ConnectionSettings["Delete-Database"];
            var databaseNames     = new List <string>();
            var fileSystem        = new FileSystem();
            var providerFactories = new DbProviderFactoriesWrapper();

            var connectionStringBuilderFactory = new ConnectionStringBuilderFactory(providerFactories);
            var connectionStringBuilder        = connectionStringBuilderFactory.Create(connectionSetting.ConnectionString, connectionSetting.ProviderName);
            var databaseManagerFactory         = new DatabaseManagerFactory(applicationDomain, connectionStringBuilderFactory, fileSystem, providerFactories);
            var databaseManager   = databaseManagerFactory.Create(connectionSetting.ProviderName);
            var dbProviderFactory = providerFactories.Get(connectionSetting.ProviderName);

            using (var connection = dbProviderFactory.CreateConnection())
            {
                // ReSharper disable PossibleNullReferenceException
                connection.ConnectionString = connectionStringBuilder.ConnectionString;
                // ReSharper restore PossibleNullReferenceException
                connection.Open();

                using (var command = connection.CreateCommand())
                {
                    command.CommandText = "SELECT name FROM master.sys.databases;";
                    command.CommandType = CommandType.Text;

                    using (var reader = command.ExecuteReader())
                    {
                        while (reader.Read())
                        {
                            databaseNames.Add(reader.GetString(0));
                        }
                    }
                }
            }

            foreach (var databaseName in databaseNames.Where(name => name.StartsWith(_testRootDirectoryPath, StringComparison.OrdinalIgnoreCase)))
            {
                connectionStringBuilder.DatabaseFilePath = databaseName;

                // ReSharper disable EmptyGeneralCatchClause
                try
                {
                    databaseManager.DropDatabase(connectionStringBuilder.ConnectionString);
                }
                catch { }
                // ReSharper restore EmptyGeneralCatchClause
            }

            Thread.Sleep(200);

            if (Directory.Exists(_testRootDirectoryPath))
            {
                Directory.Delete(_testRootDirectoryPath, true);
            }
        }
Beispiel #7
0
        static void Main()
        {
            var tools = new List <ITool>
            {
                new Hammer()
            };

            // Common objects
            var appSettings = new AppSettings();
            var logger      = PluginLoaderLogger.Factory(appSettings);
            var appDomain   = new AppDomainWrapper(AppDomain.CurrentDomain, logger);

            PluginLoaderSettings.Default = new MyPluginLoaderSettings(appSettings);
            var settings             = PluginLoaderSettings.Default;
            var assemblyNameReader   = new AssemblyNameReader();
            var assemblyCache        = new AssemblyCache(appDomain, assemblyNameReader, logger);
            var assemblyLoader       = new AssemblyLoader(appDomain, settings, assemblyCache, assemblyNameReader, logger);
            var pluginPaths          = new AppPluginPaths(settings.AppName, settings.PluginFolder, appDomain, logger);
            var waiter               = new Waiter(logger);
            var assemblyResolveCache = new AssemblyResolveCache();
            var pluginDependencyResolverObjectCreator = new PluginDependencyResolverObjectCreator(appDomain, settings, assemblyLoader, waiter, assemblyResolveCache, logger);
            var pluginDependencyResolverFactory       = new PluginDependencyResolverCacheFactory(pluginDependencyResolverObjectCreator, logger);

            // ITool plugin loader objects
            var typeLoader              = new TypeLoader <ITool>(settings, logger);
            var objectCreator           = new ObjectCreator <ITool>();
            var pluginCacheFactory      = new PluginCacheFactory <ITool>(typeLoader, pluginDependencyResolverFactory, assemblyLoader, logger);
            var pluginLoader            = new PluginLoader <ITool>(pluginPaths, pluginCacheFactory);
            var plugins                 = pluginLoader.LoadPlugins();
            var toolPluginObjectCreator = new PluginObjectCreator <ITool>(settings, objectCreator, logger);

            tools.AddRange(plugins.CreatePluginObjects(toolPluginObjectCreator));

            // ICaveManTool<Hammer> plugin loader objects - using RuntimePluginLoader
            var caveManHammerRuntimePluginLoader = RuntimePluginLoaderFactory.Instance.Create <CavemanHammerRuntimePluginLoader, ICaveManTool <Hammer> >();
            var caveManObjectCreator             = new ObjectCreator <ICaveManTool <Hammer> >();
            var caveManToolPluginObjectCreator   = new PluginObjectCreator <ICaveManTool <Hammer> >(settings, caveManObjectCreator, logger);

            tools.AddRange(caveManHammerRuntimePluginLoader.PluginCollection.CreatePluginObjects(caveManToolPluginObjectCreator));

            ShowPrompt(tools);
            // Only 4 plugins will show as this doesn't support plugins with Constructor parameters
            int input = ReadLine(tools);

            while (input != 0)
            {
                if (input <= tools.Count)
                {
                    Console.WriteLine(tools[input - 1].DoWork());
                }
                ShowPrompt(tools);
                input = ReadLine(tools);
            }
        }
 public static void VisitTests(IEnumerable <string> sources, Action <TestCase> visitor)
 {
     foreach (var source in sources.Where(s => IsAlongsideNJasmineDll(s)))
     {
         using (var appDomain = new AppDomainWrapper(source))
         {
             foreach (var result in UsingAppDomain.LoadTestNames(appDomain, source))
             {
                 visitor(new TestCase(result, new Uri(VSExecutorUri), source));
             }
         }
     }
 }
 public static void VisitTests(IEnumerable<string> sources, Action<TestCase> visitor)
 {
     foreach (var source in sources.Where(s => IsAlongsideNJasmineDll(s)))
     {
         using (var appDomain = new AppDomainWrapper(source))
         {
             foreach (var result in UsingAppDomain.LoadTestNames(appDomain, source))
             {
                 visitor(new TestCase(result, new Uri(VSExecutorUri), source));
             }
         }
     }
 }
Beispiel #10
0
        public void AppDomainWrapper_AppDomainWrapper_AssemblyResolve_Registration_NullLogger_Test()
        {
            // Arrange
            var appDomainWrapper = new AppDomainWrapper(AppDomain.CurrentDomain, null)
            {
                Directory = _MockDirectory.Object
            };

            // Act
            appDomainWrapper.AssemblyResolve += AppDomainWrapper_AssemblyResolve;

            // Assert
            _MockRepository.VerifyAll();
        }
Beispiel #11
0
 public SingletonObjects()
 {
     Settings             = PluginLoaderSettings.Default;
     AppSettings          = new AppSettings();
     Logger               = PluginLoaderLogger.Factory(AppSettings);
     AppDomain            = new AppDomainWrapper(System.AppDomain.CurrentDomain, Logger);
     AssemblyNameReader   = new AssemblyNameReader();
     AssemblyCache        = new AssemblyCache(AppDomain, AssemblyNameReader, Logger);
     AssemblyLoader       = new AssemblyLoader(AppDomain, Settings, AssemblyCache, AssemblyNameReader, Logger);
     PluginPaths          = new AppPluginPaths(Settings.AppName, Settings.PluginFolder, AppDomain, Logger);
     Waiter               = new Waiter(Logger);
     AssemblyResolveCache = new AssemblyResolveCache();
     PluginDependencyResolverObjectCreator = new PluginDependencyResolverObjectCreator(AppDomain, Settings, AssemblyLoader, Waiter, AssemblyResolveCache, Logger);
     PluginDependencyResolverFactory       = new PluginDependencyResolverCacheFactory(PluginDependencyResolverObjectCreator, Logger);
 }
Beispiel #12
0
        private static void InternalRunTests(
            IEnumerable<TestCase> tests,
            IRunContext runContext,
            IFrameworkHandle frameworkHandle,
            string explicitlyIncluding)
        {
            var sink = new TestExecutorSinkAdapter(frameworkHandle, tests);

            foreach (var group in tests.GroupBy(t => t.Source))
            {
                using (var appDomain = new AppDomainWrapper(@group.Key))
                {
                    UsingAppDomain.RunTests(@group.Key, appDomain, tests.Select(t => t.FullyQualifiedName).ToArray(), explicitlyIncluding, sink);
                }
            }
        }
Beispiel #13
0
        private static void InternalRunTests(
            IEnumerable <TestCase> tests,
            IRunContext runContext,
            IFrameworkHandle frameworkHandle,
            string explicitlyIncluding)
        {
            var sink = new TestExecutorSinkAdapter(frameworkHandle, tests);

            foreach (var group in tests.GroupBy(t => t.Source))
            {
                using (var appDomain = new AppDomainWrapper(@group.Key))
                {
                    UsingAppDomain.RunTests(@group.Key, appDomain, tests.Select(t => t.FullyQualifiedName).ToArray(), explicitlyIncluding, sink);
                }
            }
        }
Beispiel #14
0
        public void AppDomainWrapper_TryLoad_RawAssembly_EmptyByteArray_NullLogger()
        {
            // Arrange
            var appDomainWrapper = new AppDomainWrapper(AppDomain.CurrentDomain, null)
            {
                Directory = _MockDirectory.Object
            };

            byte[] rawAssembly = new byte[0];

            // Act
            var result = appDomainWrapper.TryLoad(rawAssembly);

            // Assert
            Assert.IsNull(result);
            _MockRepository.VerifyAll();
        }
Beispiel #15
0
        public static Type FindType <TLoadType>(AssemblyInfo assemblyInfo, string debugDefault = "")
        {
            Type protocol = null;

            var assemblyFile = FileSystem.Current.GetFileFromPathAsync(assemblyInfo.FilePath).Result;

            if (assemblyFile != null)
            {
                using (var stream = assemblyFile.OpenAsync(FileAccess.Read).Result)
                {
                    var asm = AppDomainWrapper.LoadAssembly(stream.ReadFully());
                    if (asm != null)
                    {
                        protocol = asm.DefinedTypes.Single(typeInfo => typeInfo.IsSubclassOf(typeof(TLoadType))).AsType();
                    }
                }
            }

            /*
             * var assemblyFolder = FileSystemWrapper.AssemblyFolder;
             * if (assemblyFolder != null && assemblyFolder.CheckExistsAsync(assemblyInfo.FileName).Result == ExistenceCheckResult.FileExists)
             * {
             *  using (var stream = assemblyFolder.GetFileAsync(assemblyInfo.FileName).Result.OpenAsync(FileAccess.Read).Result)
             *  {
             *      var asm = AppDomainWrapper.LoadAssembly(stream.ReadFully());
             *      if (asm != null)
             *          protocol = asm.DefinedTypes.Single(typeInfo => typeInfo.IsSubclassOf(typeof (TLoadType))).AsType();
             *  }
             * }
             */

            #region Debug
            if (protocol == null)
            {
                var asm = Assembly.Load(new AssemblyName(debugDefault));
                if (asm != null)
                {
                    protocol = asm.DefinedTypes.Single(typeInfo => typeInfo.IsSubclassOf(typeof(TLoadType))).AsType();
                }
            }
            #endregion Debug


            return(protocol);
        }
        public static TestInfo GetConventionInfo(string testAssemblyPath)
        {
            var executingAssembly = Assembly.GetExecutingAssembly();
            var executingAssemblyDirectory = Path.GetDirectoryName(executingAssembly.Location);

            var previousDirectory = Directory.GetCurrentDirectory();
            Directory.SetCurrentDirectory(executingAssemblyDirectory);

            TestInfo info;

            using (var appDomain = new AppDomainWrapper(executingAssemblyDirectory, "FixieTestFinder"))
            {
                var assemblyName = Assembly.GetExecutingAssembly().FullName;
                var className = typeof(RemoteTestFinder).FullName;
                var remoteFinder = appDomain.CreateObject<RemoteTestFinder>(
                    assemblyName,
                    className);

                info = remoteFinder.FindTests(testAssemblyPath);
            }

            Directory.SetCurrentDirectory(previousDirectory);
            return info;
        }
 static PlayPacketResponses()
 {
     new ServerPlayPacketTypes().CreatePacketInstancesOut(out Packets, AppDomainWrapper.GetAssembly(typeof(PlayPacketResponses)));
 }
Beispiel #18
0
 static StatusPacketResponses()
 {
     new ClientStatusPacketTypes().CreatePacketInstancesOut(out Packets, AppDomainWrapper.GetAssembly(typeof(StatusPacketResponses)));
 }
Beispiel #19
0
 static Messages()
 {
     new ForgeMessageTypes().CreatePacketInstancesOut(out Packets, AppDomainWrapper.GetAssembly(typeof(ForgeMessages)));
 }
Beispiel #20
0
 static StatusPacketResponses()
 {
     new ServerStatusPacketTypes().CreateHandlerInstancesOut(out Handlers, AppDomainWrapper.GetAssembly(typeof(StatusPacketResponses)));
 }
Beispiel #21
0
        public static void RunTests(string dllPath, AppDomainWrapper appDomainWrapper, string[] testNames, string explictlyIncluding, ITestResultListener sink)
        {
            var o = appDomainWrapper.CreateObject<Marshalled.Executor.SpecRunner>("NJasmine.dll");

            o.RunTests(AssemblyName.GetAssemblyName(dllPath).FullName, testNames, explictlyIncluding, sink);
        }
 static PlayPacketResponses()
 {
     new ClientPlayPacketTypes().CreateHandlerInstancesOut(out Handlers, AppDomainWrapper.GetAssembly(typeof(PlayPacketResponses)));
 }
 static MessageHandlers()
 {
     new ForgeMessageTypes().CreateHandlerInstancesOut(out Handlers, AppDomainWrapper.GetAssembly(typeof(ForgeMessageHandlers)));
 }
        private void ShowThreads()
        {
            threadsGrid.BeginGridUpdate();
            threadsGrid.ClearItems();
            List <ThreadWrapper> threads = NuGenDebugEventHandler.Instance.EventObjects.Controller.EnumerateThreads();

            foreach (ThreadWrapper thread in threads)
            {
                EvaluatedThreadName = "<no name>";
                ValueWrapper threadObject       = null;
                ValueWrapper dereferencedObject = null;

                if (!HasSearchedForNameMethod)
                {
                    threadObject = thread.GetObject();

                    if (threadObject != null && !threadObject.IsNull())
                    {
                        dereferencedObject = threadObject.DereferenceValue();

                        if (dereferencedObject != null)
                        {
                            ClassWrapper  threadClass     = dereferencedObject.GetClassInformation();
                            uint          threadTypeToken = threadClass.GetToken();
                            ModuleWrapper module          = threadClass.GetModule();

                            FindGetThreadNameMethod(threadTypeToken, module);
                        }
                    }
                }

                if (HasSearchedForNameMethod)
                {
                    if (GetThreadNameMethod == null)
                    {
                        EvaluatedThreadName = "<definition of the Thread class is not loaded>";
                    }
                    else
                    {
                        if (threadObject == null)
                        {
                            threadObject = thread.GetObject();

                            if (threadObject != null && !threadObject.IsNull())
                            {
                                dereferencedObject = threadObject.DereferenceValue();
                            }
                        }

                        if (dereferencedObject != null)
                        {
                            FrameWrapper threadActiveFrame = thread.GetActiveFrame();

                            if (threadActiveFrame != null)
                            {
                                NuGenFrameRefresher threadActiveFrameRefresher = new NuGenFrameRefresher(thread, threadActiveFrame.ChainIndex, threadActiveFrame.FrameIndex, threadActiveFrame.IsActiveFrame);

                                GetThreadName(thread, threadObject, threadActiveFrameRefresher);
                            }
                        }
                    }
                }

                GridEXRow row = threadsGrid.AddItem();

                uint       threadID = thread.GetID();
                GridEXCell idCell   = row.Cells[0];
                NuGenHelperFunctions.TaggedObjects.Add((int)idCell.Value, threadID);
                idCell.Value       = NuGenHelperFunctions.FormatNumber(threadID);
                row.Cells[1].Value = EvaluatedThreadName;

                AppDomainWrapper appDomain = thread.GetAppDomain();

                if (appDomain != null)
                {
                    row.Cells[2].Value = appDomain.GetName();
                }

                NuGenHelperFunctions.TaggedObjects.Add((String)row.Cells[1].Value + (String)row.Cells[2].Value, thread);
            }

            threadsGrid.EndGridUpdate();
        }
Beispiel #25
0
        /// <summary>
        /// Starts a runner instance
        /// </summary>
        /// <returns>The awaitable task.</returns>
        /// <param name="domain">The AppDomain to use.</param>
        /// <param name="config">The server configuration.</param>
        /// <param name="usessl">If set to <c>true</c> use ssl.</param>
        /// <param name="port">The port to listen on.</param>
        private async Task StartRunnerAsync(System.AppDomain domain, ServerConfig config, bool usessl, string address, int port)
        {
            var enabled = !string.IsNullOrWhiteSpace(address);

            // Ensure it parses
            ParseUtil.ParseEndPoint(address, port);

            var prev = m_handlers.Where(x => x.UseSSL == usessl).FirstOrDefault();

            if (enabled)
            {
                var addcrashhandler = true;
                var wrapper         = new AppDomainWrapper(domain);
                wrapper.SetupFromFile(usessl, m_path, config.Storage);
                if (prev == null)
                {
                    prev = new RunnerInstance(wrapper, address, port, usessl, config);
                    m_handlers.Add(prev);
                }
                else
                {
                    if (prev.RunnerTask.IsFaulted || prev.RunnerTask.IsCanceled || prev.RunnerTask.IsCompleted)
                    {
                        var cur = new RunnerInstance(wrapper, address, port, usessl, config);
                        m_handlers.Remove(prev);
                        m_handlers.Add(cur);

                        prev = cur;
                    }
                    else if (prev.Port != port || !string.Equals(prev.Address, address, StringComparison.Ordinal))
                    {
                        // Address or port change, start new listener first
                        var cur = new RunnerInstance(wrapper, address, port, usessl, config);

                        if (!prev.RunnerTask.IsFaulted)
                        {
                            await prev.StopAsync();
                        }

                        m_handlers.Remove(prev);
                        m_handlers.Add(cur);

                        prev = cur;
                    }
                    else if (prev.Config.SocketBacklog != config.SocketBacklog)
                    {
                        await prev.RestartAsync(wrapper, address, port, usessl, config);
                    }
                    else
                    {
                        addcrashhandler = false;   // We already have it
                        prev.Wrapper    = wrapper; // Assign the new wrapper
                    }
                }

                if (addcrashhandler)
                {
                    var dummy = prev.RunnerTask.ContinueWith(x =>
                    {
                        if (!prev.ShouldStop && InstanceCrashed != null)
                        {
                            InstanceCrashed(address, usessl, x.IsFaulted ? x.Exception : new Exception("Unexpected stop"));
                        }
                    });
                }
            }
            else if (prev != null)
            {
                await prev.StopAsync();

                m_handlers.Remove(prev);
            }
        }
Beispiel #26
0
 /// <summary>Initializes a new instance of the <see cref="T:System.Object" /> class.</summary>
 public MyAppDomain()
 {
     _appDomain = AppDomainWrapper.CurrentDomain;
 }
        public static void RunTests(string dllPath, AppDomainWrapper appDomainWrapper, string[] testNames, string explictlyIncluding, ITestResultListener sink)
        {
            var o = appDomainWrapper.CreateObject <Marshalled.Executor.SpecRunner>("NJasmine.dll");

            o.RunTests(AssemblyName.GetAssemblyName(dllPath).FullName, testNames, explictlyIncluding, sink);
        }