public void PluginsMultipleLoad() { int pluginLoadIterations = 0; int constructorSimulator = 0; int constructorWidget = 0; int constructorExtension = 0; TestConstants.Prepare(); GlobalEvents.Hook <PluginsLoaded>((x) => { pluginLoadIterations++; Assert.AreNotEqual(x.Simulators, null); Assert.AreNotEqual(x.Widgets, null); Assert.AreNotEqual(x.Extensions, null); Assert.AreEqual(x.Simulators.ToList().Count, cfgSimulatorPlugins - cfgSimulatorPluginsInvalid); Assert.AreEqual(x.Widgets.ToList().Count, cfgWidgetPlugins - cfgWidgetPluginsInvalid); Assert.AreEqual(x.Extensions.ToList().Count, cfgExtensionPlugins - cfgExtensionPluginsInvalid); }, true); // Count number of constructors. GlobalEvents.Hook <PluginTestExtensionConstructor>((x) => constructorExtension++, false); GlobalEvents.Hook <PluginTestWidgetConstructor>((x) => constructorWidget++, false); GlobalEvents.Hook <PluginTestSimulatorConstructor>((x) => constructorSimulator++, false); using (var pluginHost = new SimTelemetry.Domain.Plugins.Plugins()) { pluginHost.PluginDirectory = TestConstants.SimulatorsBinFolder; var rand = new Random().Next(1, 5); Debug.WriteLine("Initializing " + rand + " times"); for (int i = 0; i < rand; i++) { pluginHost.Load(); pluginHost.Unload(); } pluginHost.Load(); pluginHost.Unload(); } using (var pluginHost = new SimTelemetry.Domain.Plugins.Plugins()) { pluginHost.PluginDirectory = TestConstants.SimulatorsBinFolder; pluginHost.Load(); } // Verify everything! Assert.AreEqual(constructorSimulator, pluginLoadIterations * cfgSimulatorPlugins); Assert.AreEqual(constructorExtension, pluginLoadIterations * cfgExtensionPlugins); Assert.AreEqual(constructorWidget, pluginLoadIterations * cfgWidgetPlugins); Assert.AreEqual(TestConstants.Warnings, pluginLoadIterations * (cfgWidgetPluginsInvalid + cfgSimulatorPluginsInvalid + cfgExtensionPluginsInvalid)); }
public void TrackDataProviderTests() { TestConstants.Prepare(); using (var pluginHost = new Plugins()) { pluginHost.PluginDirectory = TestConstants.SimulatorsBinFolder; pluginHost.Load(); Assert.Greater(pluginHost.Simulators.Count, 0); var testSim = pluginHost.Simulators[0]; var w = new Stopwatch(); w.Start(); var mem = GC.GetTotalMemory(true); var trackRepo = new TrackRepository(testSim.TrackProvider); var tracks = trackRepo.GetIds().Count(); w.Stop(); Debug.WriteLine("[TIME] Retrieving ID list (" + tracks + ") costs " + w.ElapsedMilliseconds + "ms"); w.Reset(); w.Start(); var Spa = trackRepo.GetByFile("67_SPA.GDB"); Assert.AreNotEqual(null, Spa); Debug.WriteLine(Spa.Name + " " + Spa.Length); w.Stop(); Debug.WriteLine("[TIME] Retrieving Spa 1967 costs " + w.ElapsedMilliseconds + "ms"); w.Reset(); // Building all tracks can take seconds. /*w.Start(); * foreach(var track in trackRepo.GetAll()) * Debug.WriteLine(track.Name + "=" + track.Length); * w.Stop(); * Debug.WriteLine("[TIME] Retrieving all tracks costs " + w.ElapsedMilliseconds + "ms");*/ w.Start(); Spa = trackRepo.GetByFile("67_SPA.GDB"); Assert.AreNotEqual(null, Spa); Debug.WriteLine(Spa.Name + " " + Spa.Length); w.Stop(); Debug.WriteLine("[TIME] Retrieving Spa 1967 costs " + w.ElapsedMilliseconds + "ms"); Assert.LessOrEqual(w.ElapsedMilliseconds, 1); w.Reset(); var dmem = GC.GetTotalMemory(true) - mem; Debug.WriteLine(dmem); w.Reset(); } }
public void PluginsFound() { bool pluginsLoadedEventFire = false; TestConstants.Prepare(); // Listen to warnings: GlobalEvents.Hook <PluginsLoaded>((x) => { Assert.AreNotEqual(x.Simulators, null); Assert.AreNotEqual(x.Widgets, null); Assert.AreNotEqual(x.Extensions, null); Assert.AreEqual(x.Simulators.ToList().Count, cfgSimulatorPlugins - cfgSimulatorPluginsInvalid); Assert.AreEqual(x.Widgets.ToList().Count, cfgWidgetPlugins - cfgWidgetPluginsInvalid); Assert.AreEqual(x.Extensions.ToList().Count, cfgExtensionPlugins - cfgExtensionPluginsInvalid); pluginsLoadedEventFire = true; }, true); // Manually count the no of plugins in the bin directory. var files = Directory.GetFiles(TestConstants.SimulatorsBinFolder); var plugins = files.Where(x => Path.GetFileName(x).Contains("SimTelemetry.Plugins.") && x.ToLower().EndsWith(".dll")); using (var pluginHost = new Plugins()) { pluginHost.PluginDirectory = TestConstants.SimulatorsBinFolder; pluginHost.Load(); // Resolve the no. of plugins there are available: var iPluginsManualCount = plugins.ToList().Count; var iPluginsTelemetry = pluginHost.Simulators.ToList().Count; Assert.AreNotEqual(0, iPluginsManualCount); Assert.AreEqual(iPluginsTelemetry, iPluginsManualCount); } Assert.AreEqual(pluginsLoadedEventFire, true); Assert.AreEqual(TestConstants.Warnings, cfgWidgetPluginsInvalid + cfgSimulatorPluginsInvalid + cfgExtensionPluginsInvalid); }
public void SimulatorBasicTests() { TestConstants.Prepare(); var trackScanCount = 0; var modScanCount = 0; // Events fired from test object: GlobalEvents.Hook <PluginTestSimulatorModScanner>((x) => { modScanCount++; }, true); GlobalEvents.Hook <PluginTestSimulatorTrackScanner>((x) => { trackScanCount++; }, true); using (var pluginHost = new Plugins()) { pluginHost.PluginDirectory = TestConstants.SimulatorsBinFolder; pluginHost.Load(); Assert.Greater(pluginHost.Simulators.Count, 0); var testSim = pluginHost.Simulators[0]; var testSimulator = testSim.GetSimulator(); Assert.AreEqual(0, trackScanCount); Assert.AreEqual(0, modScanCount); Assert.AreEqual("rFactor", testSimulator.Name); Assert.AreEqual("rfactor", testSimulator.ProcessName); Assert.AreEqual("1.255", testSimulator.Version); var tracks = testSimulator.Tracks; var mods = testSimulator.Mods; Assert.AreEqual(1, modScanCount); Assert.AreEqual(1, trackScanCount); Assert.AreEqual(1, tracks.Count(x => x.ID != string.Empty)); Assert.AreEqual(1, mods.Count(x => x.Name != "")); } }
public void CarDataProviderTests() { TestConstants.Prepare(); using (var pluginHost = new Plugins()) { pluginHost.PluginDirectory = TestConstants.SimulatorsBinFolder; pluginHost.Load(); Assert.Greater(pluginHost.Simulators.Count, 0); var testSim = pluginHost.Simulators[0]; var w = new Stopwatch(); w.Start(); var carRepo = new CarRepository(testSim.CarProvider); var cars = carRepo.GetIds().Count(); // I got over 1106 cars installed, so that's more than 1000. Assert.Greater(cars, 100); w.Stop(); Debug.WriteLine("[TIME] Retrieving ID list (" + cars + ") costs " + w.ElapsedMilliseconds + "ms"); w.Reset(); w.Start(); var f1Car = carRepo.GetByFile("JButton05.veh"); Assert.AreNotEqual(f1Car, null); if (f1Car != null) { Debug.WriteLine("#" + f1Car.StartNumber + ". " + f1Car.Driver); } Debug.WriteLine("[TIME] Retrieving JButton05.veh car costs " + w.ElapsedMilliseconds + "ms"); w.Stop(); w.Reset(); // This test is very very very slow: /*w.Start(); * cars = carRepo.GetAll().Count(); * w.Stop(); * Debug.WriteLine("[TIME] Retrieving all (other) cars costs " + w.ElapsedMilliseconds + "ms"); * w.Reset();*/ w.Start(); f1Car = carRepo.GetByFile("TSATO05.veh"); Assert.AreNotEqual(f1Car, null); if (f1Car != null) { Debug.WriteLine("#" + f1Car.StartNumber + ". " + f1Car.Driver); } Debug.WriteLine("[TIME] Retrieving TSATO05.veh car costs " + w.ElapsedMilliseconds + "ms"); w.Stop(); w.Reset(); // Verify that when cached, this is very quick: w.Start(); f1Car = carRepo.GetByFile("JButton05.veh"); Assert.AreNotEqual(f1Car, null); if (f1Car != null) { Debug.WriteLine("#" + f1Car.StartNumber + ". " + f1Car.Driver); } Debug.WriteLine("[TIME] Retrieving JButton05.veh car costs " + w.ElapsedMilliseconds + "ms"); w.Stop(); w.Reset(); } }