public void local_module_published_once_one_module_revieved() { PrepareSharedLibrary(); string publishingModuleSrc = GetSourceCodePath(typeof(SDPublishingModule)); string listeningModuleSrc = GetSourceCodePath(typeof(SDListeningModule)); string listener1 = GenerateListener(RuntimePath, _sharedDll, listeningModuleSrc, 1); string listener2 = GenerateListener(RuntimePath, _sharedDll, listeningModuleSrc, 2); string publisherDll = Compiler.GenerateModuleFromCode(publishingModuleSrc, _sharedDll); ManifestBuilderConfiguration manifestConfiguration = ManifestBuilderConfiguration.Default; manifestConfiguration.ModulesDependenciesProvider = new SingleModulesDependencyProvider(); Compiler.GenerateManifestForModule(publisherDll, KeyFile, manifestConfiguration); // use the default Nomad Configuration ListenerKernel = new NomadKernel(); IModuleDiscovery listnerDiscovery = new CompositeModuleDiscovery(new SingleModuleDiscovery(listener1), new SingleModuleDiscovery(listener2) ); ListenerKernel.LoadModules(listnerDiscovery); DistributedMessageCarrier firstCarrier = CreateCarrier(ListenerKernel); IModuleDiscovery publisherDiscovery = new SingleModuleDiscovery(publisherDll); ListenerKernel.LoadModules(publisherDiscovery); Thread.Sleep(PUBLISH_TIMEOUT); int firstMsg = firstCarrier.GetStatus.Count; Assert.AreEqual(5, firstMsg, "The number of delivered messages is not exactly 5"); }
public void local_module_publishes_and_later_loaded_listener_module_does_not_receive_outdated_messages() { // path for this test (using the test method name) use in each code PrepareSharedLibrary(); string publishingModuleSrc = GetSourceCodePath(typeof(InThePastPublishingModule)); string listeningModuleSrc = GetSourceCodePath(typeof(SimpleListeningModule)); string listener1 = GenerateListener(RuntimePath, _sharedDll, listeningModuleSrc, 1); string publisherDll = Compiler.GenerateModuleFromCode(publishingModuleSrc, _sharedDll); ManifestBuilderConfiguration manifestConfiguration = ManifestBuilderConfiguration.Default; manifestConfiguration.ModulesDependenciesProvider = new SingleModulesDependencyProvider(); Compiler.GenerateManifestForModule(publisherDll, KeyFile, manifestConfiguration); // preaparing modules discoveries. IModuleDiscovery listenerDiscovery = new SingleModuleDiscovery(listener1); IModuleDiscovery publisherDiscovery = new SingleModuleDiscovery(publisherDll); // create non-distributed kernel PublisherKernel = new NomadKernel(); // publisher module load PublisherKernel.LoadModules(publisherDiscovery); // postponed listener module load PublisherKernel.LoadModules(listenerDiscovery); // assert the events being published var fi = new FileInfo(listener1 + "_CounterFile"); Assert.False(fi.Exists); }
/// <summary> /// Wrapps up the generating manifest. Uses <see cref="WholeDirectoryModulesDependenciesProvider"/> with /// the <see cref="ManifestBuilderConfiguration"/> file. /// </summary> public string SetUpModuleWithManifest(string outputDirectory, string srcPath, params string[] references) { // NOTE: we are using whole directory module discovery instead of file one ManifestBuilderConfiguration configuration = ManifestBuilderConfiguration.Default; configuration.ModulesDependenciesProvider = new WholeDirectoryModulesDependenciesProvider(); return(SetUpModuleWithManifest(outputDirectory, srcPath, configuration, references)); }
public void distributed_module_publishes_and_two_later_loaded_listener_modules_receive_those_messages() { // path for this test (using the test method name) use in each code PrepareSharedLibrary(); string publishingModuleSrc = GetSourceCodePath(typeof(MixedBufferedPublishingModule)); string listeningModuleSrc = GetSourceCodePath(typeof(SimpleListeningModule)); string listener1 = GenerateListener(RuntimePath, _sharedDll, listeningModuleSrc, 1); string listener2 = GenerateListener(RuntimePath, _sharedDll, listeningModuleSrc, 1); string publisherDll = Compiler.GenerateModuleFromCode(publishingModuleSrc, _sharedDll); ManifestBuilderConfiguration manifestConfiguration = ManifestBuilderConfiguration.Default; manifestConfiguration.ModulesDependenciesProvider = new SingleModulesDependencyProvider(); Compiler.GenerateManifestForModule(publisherDll, KeyFile, manifestConfiguration); // create listener site string listenerSite = "net.tcp://127.0.0.1:5555/IDEA"; // create published sites string publisherSite = "net.tcp://127.0.0.1:7777/IDEA"; // create listener1 kernel NomadConfiguration config1 = NomadConfiguration.Default; config1.DistributedConfiguration = DistributedConfiguration.Default; config1.DistributedConfiguration.LocalURI = new Uri(listenerSite); ListenerKernel = new NomadKernel(config1); IModuleDiscovery listenerDiscovery = new SingleModuleDiscovery(listener1); ListenerKernel.LoadModules(listenerDiscovery); // create publishing kernel NomadConfiguration publisherConfig = NomadConfiguration.Default; publisherConfig.DistributedConfiguration = DistributedConfiguration.Default; publisherConfig.DistributedConfiguration.LocalURI = new Uri(publisherSite); publisherConfig.DistributedConfiguration.URLs.Add(listenerSite); PublisherKernel = new NomadKernel(publisherConfig); IModuleDiscovery publisherDiscovery = new SingleModuleDiscovery(publisherDll); PublisherKernel.LoadModules(publisherDiscovery); // postponed load of a second listener module IModuleDiscovery listenerDiscovery2 = new SingleModuleDiscovery(listener2); ListenerKernel.LoadModules(listenerDiscovery2); // assert the events being published AssertEventPublished(listener1); // assert that last loaded listener2 received valid events AssertEventPublished(listener2); }
protected string GenerateListener(string runtimePath, string sharedDll, string listeningModuleSrc, int counter) { Compiler.OutputName = Path.Combine(runtimePath, "listener" + counter + ".dll"); string listenerDll = Compiler.GenerateModuleFromCode(listeningModuleSrc, sharedDll); ManifestBuilderConfiguration manifestConfiguration = ManifestBuilderConfiguration.Default; manifestConfiguration.ModulesDependenciesProvider = new SingleModulesDependencyProvider(); Compiler.GenerateManifestForModule(listenerDll, KeyFile, manifestConfiguration); return(listenerDll); }
/// <summary> /// Wrapps the generating manifest with values that should be provided. Provides access to <paramref name="configuration"/>. /// </summary> /// <param name="modulePath"></param> /// <param name="keyLocation"></param> /// <param name="configuration"></param> /// <returns></returns> public string GenerateManifestForModule(string modulePath, string keyLocation, ManifestBuilderConfiguration configuration) { string directory = Path.GetFullPath(Path.GetDirectoryName(modulePath)); var builder = new ManifestBuilder("TEST_ISSUER_COMPILER", keyLocation, Path.GetFileName(modulePath), directory, KeyStorage.Nomad, string.Empty, configuration); builder.CreateAndPublish(); return(modulePath + ModuleManifest.ManifestFileNameSuffix); }
public void local_module_publishes_and_later_loaded_listener_module_receives_those_messages() { // path for this test (using the test method name) use in each code PrepareSharedLibrary(); string publishingModuleSrc = GetSourceCodePath(typeof(BufferedPublishingModule)); string listeningModuleSrc = GetSourceCodePath(typeof(SimpleListeningModule)); string listener1 = GenerateListener(RuntimePath, _sharedDll, listeningModuleSrc, 1); string publisherDll = Compiler.GenerateModuleFromCode(publishingModuleSrc, _sharedDll); ManifestBuilderConfiguration manifestConfiguration = ManifestBuilderConfiguration.Default; manifestConfiguration.ModulesDependenciesProvider = new SingleModulesDependencyProvider(); Compiler.GenerateManifestForModule(publisherDll, KeyFile, manifestConfiguration); // preaparing modules discoveries. IModuleDiscovery listenerDiscovery = new SingleModuleDiscovery(listener1); IModuleDiscovery publisherDiscovery = new SingleModuleDiscovery(publisherDll); // create non-distributed kernel PublisherKernel = new NomadKernel(); // publisher module load PublisherKernel.LoadModules(publisherDiscovery); // postponed listener module load PublisherKernel.LoadModules(listenerDiscovery); // assert the events being published var fi = new FileInfo(listener1 + "_CounterFile"); if (fi.Exists) { using (StreamReader counterReader = fi.OpenText()) { int value = Convert.ToInt32(counterReader.ReadLine()); // Verifying that locally the event aggregator works properly Assert.AreEqual(5, value); counterReader.Close(); } } else { Assert.Fail("No counter file from listener module in local postponed configuration"); } }
public void module_publishes_module_listens() { // path for this test (using the test method name) use in each code PrepareSharedLibrary(); string publishingModuleSrc = GetSourceCodePath(typeof(SimplePublishingModule)); string listeningModuleSrc = GetSourceCodePath(typeof(SimpleListeningModule)); string listener1 = GenerateListener(RuntimePath, _sharedDll, listeningModuleSrc, 1); string publisherDll = Compiler.GenerateModuleFromCode(publishingModuleSrc, _sharedDll); ManifestBuilderConfiguration manifestConfiguration = ManifestBuilderConfiguration.Default; manifestConfiguration.ModulesDependenciesProvider = new SingleModulesDependencyProvider(); Compiler.GenerateManifestForModule(publisherDll, KeyFile, manifestConfiguration); // create listener site string listenerSite = "net.tcp://127.0.0.1:5555/IDEA"; // create published sites string publisherSite = "net.tcp://127.0.0.1:7777/IDEA"; // create kernels with configuration NomadConfiguration config1 = NomadConfiguration.Default; config1.DistributedConfiguration = DistributedConfiguration.Default; config1.DistributedConfiguration.LocalURI = new Uri(listenerSite); ListenerKernel = new NomadKernel(config1); IModuleDiscovery listenerDiscovery = new SingleModuleDiscovery(listener1); ListenerKernel.LoadModules(listenerDiscovery); // create publishing kernel NomadConfiguration publisherConfig = NomadConfiguration.Default; publisherConfig.DistributedConfiguration = DistributedConfiguration.Default; publisherConfig.DistributedConfiguration.LocalURI = new Uri(publisherSite); publisherConfig.DistributedConfiguration.URLs.Add(listenerSite); PublisherKernel = new NomadKernel(publisherConfig); IModuleDiscovery publisherDiscovery = new SingleModuleDiscovery(publisherDll); PublisherKernel.LoadModules(publisherDiscovery); // assert the events being published AssertEventPublished(listener1, 5); }
/// <summary> /// Set up the Two Modules A,B into with provided version. Based on <see cref="ModuleCompiler.DefaultSimpleModuleSource"/> /// </summary> /// <param name="directory"></param> /// <param name="versionString"></param> /// <returns></returns> private IModuleDiscovery SetUpModulesWithVersion(string directory, string versionString) { string moduleA = directory + @"\ModuleA"; string moduleB = directory + @"\ModuleB"; ManifestBuilderConfiguration builderConfiguration = ManifestBuilderConfiguration.Default; builderConfiguration.VersionProvider = GetVersionProviderForVersion(versionString); ModuleCompiler.SetUpModuleWithManifest(moduleA, ModuleCompiler.DefaultSimpleModuleSource, builderConfiguration); ModuleCompiler.SetUpModuleWithManifest(moduleB, ModuleCompiler.DefaultSimpleModuleSourceAlternative, builderConfiguration); return(new CompositeModuleDiscovery(new DirectoryModuleDiscovery(moduleA, SearchOption.TopDirectoryOnly), new DirectoryModuleDiscovery(moduleB, SearchOption.TopDirectoryOnly))); }
/// <summary> /// Generates the manifest for the file with coping all the dependencies and then removing them /// </summary> /// <remarks> /// This method will be problematic with duplcate names and so on... /// </remarks> /// <param name="references">Path to all references</param> ///<returns> /// The path to the generated manifest /// </returns> public string SetUpModuleWithManifest(string outputDirectory, string srcPath, ManifestBuilderConfiguration configuration, params string[] references) { OutputDirectory = outputDirectory; string modulePath = GenerateModuleFromCode(srcPath, references); // copy the references into folder with foreach (string reference in references) { File.Copy(reference, Path.Combine(outputDirectory, Path.GetFileName(reference))); } string KeyFile = @"alaMaKota.xml"; if (File.Exists(KeyFile)) { File.Delete(KeyFile); } KeysGeneratorProgram.Main(new[] { KeyFile }); // manifest generating is for folder string file = GenerateManifestForModule(modulePath, KeyFile, configuration); if (File.Exists(KeyFile)) { File.Delete(KeyFile); } // remove those references foreach (string reference in references) { File.Delete(Path.Combine(outputDirectory, Path.GetFileName(reference))); } return(file); }
public void module_published_once_only_one_module_recieved() { // path for this test (using the test method name) use in each code PrepareSharedLibrary(); string publishingModuleSrc = GetSourceCodePath(typeof(SDPublishingModule)); string listeningModuleSrc = GetSourceCodePath(typeof(SDListeningModule)); string listener1 = GenerateListener(RuntimePath, _sharedDll, listeningModuleSrc, 1); string listener2 = GenerateListener(RuntimePath, _sharedDll, listeningModuleSrc, 2); string publisherDll = Compiler.GenerateModuleFromCode(publishingModuleSrc, _sharedDll); ManifestBuilderConfiguration manifestConfiguration = ManifestBuilderConfiguration.Default; manifestConfiguration.ModulesDependenciesProvider = new SingleModulesDependencyProvider(); Compiler.GenerateManifestForModule(publisherDll, KeyFile, manifestConfiguration); // create listeners sites string site1 = "net.tcp://127.0.0.1:5555/IDEA"; string site2 = "net.tcp://127.0.0.1:6666/IDEA"; // create published sites string publisherSite = "net.tcp://127.0.0.1:7777/IDEA"; // create kernels with configuration NomadConfiguration config1 = NomadConfiguration.Default; config1.DistributedConfiguration = DistributedConfiguration.Default; config1.DistributedConfiguration.LocalURI = new Uri(site1); config1.DistributedConfiguration.URLs.Add(site2); config1.DistributedConfiguration.URLs.Add(publisherSite); ListenerKernel = new NomadKernel(config1); IModuleDiscovery listnerDiscovery = new SingleModuleDiscovery(listener1); ListenerKernel.LoadModules(listnerDiscovery); DistributedMessageCarrier firstCarrier = CreateCarrier(ListenerKernel); NomadConfiguration config2 = NomadConfiguration.Default; config2.DistributedConfiguration = DistributedConfiguration.Default; config2.DistributedConfiguration.LocalURI = new Uri(site2); config2.DistributedConfiguration.URLs.Add(site1); config2.DistributedConfiguration.URLs.Add(publisherSite); ListenerKernelSecond = new NomadKernel(config2); IModuleDiscovery listenerDiscovery2 = new SingleModuleDiscovery(listener2); ListenerKernelSecond.LoadModules(listenerDiscovery2); DistributedMessageCarrier secondCarrier = CreateCarrier(ListenerKernelSecond); // create publishing kernel NomadConfiguration publisherConfig = NomadConfiguration.Default; publisherConfig.DistributedConfiguration = DistributedConfiguration.Default; publisherConfig.DistributedConfiguration.LocalURI = new Uri(publisherSite); publisherConfig.DistributedConfiguration.URLs.Add(site1); publisherConfig.DistributedConfiguration.URLs.Add(site2); PublisherKernel = new NomadKernel(publisherConfig); IModuleDiscovery publisherDiscovery = new SingleModuleDiscovery(publisherDll); PublisherKernel.LoadModules(publisherDiscovery); // assert the events being published // wait for publishing messages etc Thread.Sleep(PUBLISH_TIMEOUT); int firstMsg = firstCarrier.GetStatus.Count; int secondMsg = secondCarrier.GetStatus.Count; Assert.AreEqual(5, firstMsg + secondMsg, "The number of delivered messages is not exactly 5"); }