public void Rewrite1() { try { CommandInitiator init; var ms = new MicroservicePipeline() .AddChannelIncoming("deadletter").Revert() .AddChannelIncoming("freddy") .AttachCommand(new RewriteCommandVerifyFail()) .AttachMessageRedirectRule( new ServiceMessageHeader("freddy", "one", "two") , new ServiceMessageHeader("findlay", "three", "four") ).Revert() .AddChannelIncoming("findlay") .AttachCommand(new RewriteCommandVerifySuccess()).Revert() .AddChannelOutgoing("response") ; ms.Start(); } catch (Exception ex) { throw; } }
protected virtual void Init() { var fabric = new ManualFabricBridge(); var bridgeOut = fabric[FabricMode.Queue]; var bridgein = fabric[FabricMode.Broadcast]; mWebApi = new UnityWebApiMicroservicePipeline("Web") .CallOut(WebApiConfigure) .AddChannelOutgoing("Request", "This is the outgoing request channel") .AttachSender(mBridgeRequest.GetSender()) .Revert() .AddChannelIncoming("Response", "This is the response channel back from the Service") .AttachListener(mBridgeResponse.GetListener()) .Revert(); mService1 = new MicroservicePipeline("Service") .CallOut(ServiceConfigure) .AddChannelIncoming("Request", "This is the incoming request channel from the API") .AttachListener(mBridgeRequest.GetListener()) .Revert() .AddChannelOutgoing("Response", "This is the outgoing request channel") .AttachSender(mBridgeResponse.GetSender()) .Revert() ; mService1.Start(); mWebApi.Start(); }
protected virtual void Init() { mBridgeRequest = new CommunicationBridge(CommunicationBridgeMode.RoundRobin); mBridgeResponse = new CommunicationBridge(CommunicationBridgeMode.Broadcast); mWebApi = new UnityWebApiMicroservicePipeline("Web") .CallOut(WebApiConfigure) .AddChannelOutgoing("Request", "This is the outgoing request channel") .AttachSender(mBridgeRequest.GetSender()) .Revert() .AddChannelIncoming("Response", "This is the response channel back from the Service") .AttachListener(mBridgeResponse.GetListener()) .Revert(); mService1 = new MicroservicePipeline("Service") .CallOut(ServiceConfigure) .AddChannelIncoming("Request", "This is the incoming request channel from the API") .AttachListener(mBridgeRequest.GetListener()) .Revert() .AddChannelOutgoing("Response", "This is the outgoing request channel") .AttachSender(mBridgeResponse.GetSender()) .Revert() ; mService1.Start(); mWebApi.Start(); }
public void CommandLocal1() { try { DebugMemoryDataCollector memp1; ICommandInitiator init; var p1 = new MicroservicePipeline(nameof(CommandLocal1), serviceReference: typeof(CommandLocal)) .AddDebugMemoryDataCollector(out memp1) //.AdjustPolicyCommunication((p, c) => p.BoundaryLoggingActiveDefault = true) .AddICommandInitiator(out init) .AddChannelIncoming("fredo") .AttachCommand(typeof(ITestCommandLocal1), (ctx) => { var message = ctx.RequestPayloadGet <string>(); ctx.ResponseSet(200, "howdy"); return(Task.FromResult(0)); } ) .Revert(); p1.Start(); var ok = init.Process <ITestCommandLocal1, string, string>("Hello").Result; p1.Stop(); } catch (Exception ex) { throw; } }
public void TestMethod1() { try { var fabric = new ManualFabricBridge(); var bridgeOut = fabric[FabricMode.Queue]; var bridgein = fabric[FabricMode.Broadcast]; PersistenceClient <Guid, BridgeMe> init; DebugMemoryDataCollector memp1, memp2; var p1 = new MicroservicePipeline("Sender") .AdjustPolicyCommunication((p, c) => p.BoundaryLoggingActiveDefault = true) .AddDebugMemoryDataCollector(out memp1) .AddChannelIncoming("cresponse") .AttachListener(bridgein.GetListener()) .Revert() .AddChannelOutgoing("crequest") .AttachSender(bridgeOut.GetSender()) .AttachPersistenceClient("cresponse", out init) .Revert() ; var p2 = new MicroservicePipeline("Receiver") .AdjustPolicyCommunication((p, c) => p.BoundaryLoggingActiveDefault = true) .AddDebugMemoryDataCollector(out memp2) .AddChannelIncoming("crequest") .AttachListener(bridgeOut.GetListener()) .AttachCommand(new PersistenceManagerHandlerMemory <Guid, BridgeMe>((e) => e.Id, (s) => new Guid(s))) .Revert() .AddChannelOutgoing("cresponse") .AttachSender(bridgein.GetSender()) ; p2.ToMicroservice().Events.ExecuteBegin += CommunicationBridgeTests_OnExecuteBegin; p1.Start(); p2.Start(); int check1 = p1.ToMicroservice().Commands.Count(); int check2 = p2.ToMicroservice().Commands.Count(); var entity = new BridgeMe() { Message = "Momma" }; var rs = init.Create(entity, new RepositorySettings() { WaitTime = TimeSpan.FromMinutes(5) }).Result; var rs2 = init.Read(entity.Id).Result; Assert.IsTrue(rs2.IsSuccess); Assert.IsTrue(rs2.Entity.Message == "Momma"); } catch (Exception ex) { throw; } }
public void TestMethod1() { var pipeline = new MicroservicePipeline("AzureTest"); pipeline.Start(); pipeline.Stop(); }
public void Pipeline() { var pipe = new MicroservicePipeline(); pipe.Start(); pipe.Stop(); }
public void Tcp1() { try { var bridgeOut = new CommunicationBridge(CommunicationBridgeMode.RoundRobin, new TcpCommunicationBridgeAgent(new IPEndPoint(IPAddress.Loopback, 8088))); var bridgein = new CommunicationBridge(CommunicationBridgeMode.Broadcast, new TcpCommunicationBridgeAgent(new IPEndPoint(IPAddress.Loopback, 8088))); PersistenceClient <Guid, BridgeMe> init; DebugMemoryDataCollector memp1, memp2; var p1 = new MicroservicePipeline("Sender") .AdjustPolicyCommunicationBoundaryLoggingActive() .AddDebugMemoryDataCollector(out memp1) .AddChannelIncoming("cresponse") .AttachListener(bridgein.GetListener()) .Revert() .AddChannelOutgoing("crequest") .AttachSender(bridgeOut.GetSender()) .AttachPersistenceClient("cresponse", out init) .Revert() ; var p2 = new MicroservicePipeline("Receiver") .AdjustPolicyCommunicationBoundaryLoggingActive() .AddDebugMemoryDataCollector(out memp2) .AddChannelIncoming("crequest") .AttachListener(bridgeOut.GetListener()) .AttachPersistenceManagerHandlerMemory((BridgeMe e) => e.Id, (s) => new Guid(s)) .Revert() .AddChannelOutgoing("cresponse") .AttachSender(bridgein.GetSender()) ; p2.ToMicroservice().Events.ExecuteBegin += CommunicationBridgeTests_OnExecuteBegin; p1.Start(); p2.Start(); int check1 = p1.ToMicroservice().Commands.Count(); int check2 = p2.ToMicroservice().Commands.Count(); var entity = new BridgeMe() { Message = "Momma" }; var rs = init.Create(entity, new RepositorySettings() { WaitTime = TimeSpan.FromMinutes(5) }).Result; var rs2 = init.Read(entity.Id).Result; Assert.IsTrue(rs2.IsSuccess); Assert.IsTrue(rs2.Entity.Message == "Momma"); } catch (Exception ex) { throw; } }
public void TestMethod1() { try { var bridgeOut = new CommunicationBridge(CommunicationBridgeMode.RoundRobin); var bridgein = new CommunicationBridge(CommunicationBridgeMode.Broadcast); PersistenceClient <Guid, BridgeMe> init; DebugMemoryDataCollector memp1, memp2; var p1 = new MicroservicePipeline("Sender") .AdjustPolicyCommunication((p, c) => p.BoundaryLoggingActiveDefault = true) .AddDebugMemoryDataCollector(out memp1) .AddChannelIncoming("cresponse") .AttachListener(bridgein.GetListener()) .Revert() .AddChannelOutgoing("crequest") .AttachSender(bridgeOut.GetSender()) .AttachPersistenceClient("cresponse", out init) ; var p2 = new MicroservicePipeline("Receiver") .AdjustPolicyCommunication((p, c) => p.BoundaryLoggingActiveDefault = true) .AddDataCollector((c) => new DebugMemoryDataCollector(), (c) => memp2 = c) .AddChannelIncoming("crequest") .AttachMessageRedirectRule( canRedirect: (p) => p.Message.MessageType.Equals("bridgeme", StringComparison.InvariantCultureIgnoreCase) , redirect: (p) => p.Message.MessageType = "BridgeMe2" ) .AttachListener(bridgeOut.GetListener()) .AttachCommand(new PersistenceManagerHandlerMemory <Guid, BridgeMe2>((e) => e.Id, (s) => new Guid(s))) .Revert() .AddChannelOutgoing("cresponse") .AttachSender(bridgein.GetSender()) ; p1.Start(); p2.Start(); int check1 = p1.ToMicroservice().Commands.Count(); int check2 = p2.ToMicroservice().Commands.Count(); var entity = new BridgeMe() { Message = "Momma" }; var rs = init.Create(entity, new RepositorySettings() { WaitTime = TimeSpan.FromSeconds(20) }).Result; Assert.IsTrue(!rs.IsSuccess && rs.ResponseCode == 422); } catch (Exception ex) { throw; } }
public void PersistenceSingle() { try { PersistenceClient <Guid, Sample1> repo; var p1 = new MicroservicePipeline("Local") .AddChannelIncoming("request") .AttachPersistenceManagerHandlerMemory( keyMaker: (Sample1 e) => e.Id , keyDeserializer: (s) => new Guid(s) , versionPolicy: ((e) => e.VersionId.ToString("N").ToUpperInvariant(), (e) => e.VersionId = Guid.NewGuid(), true) ) .AttachPersistenceClient(out repo) .Revert() ; p1.Start(); var sample = new Sample1() { Message = "Hello mom" }; var id = sample.Id; //Run a set of simple version entity tests. //Create Assert.IsTrue(repo.Create(sample).Result.IsSuccess); //Read var result = repo.Read(id).Result; Assert.IsTrue(result.IsSuccess); Assert.IsTrue(result.Entity.Message == "Hello mom"); //Update success var rs = repo.Update(sample).Result; Assert.IsTrue(rs.IsSuccess); //We have enabled version policy and optimistic locking so the next command should fail. //Update fail as old version Assert.IsFalse(repo.Update(sample).Result.IsSuccess); //But this one should pass. //Update pass as new entity. Assert.IsTrue(repo.Update(rs.Entity).Result.IsSuccess); //Read Assert.IsTrue(repo.Read(sample.Id).Result.IsSuccess); //Delete Assert.IsTrue(repo.Delete(sample.Id).Result.IsSuccess); //Read fail. Assert.IsFalse(repo.Read(sample.Id).Result.IsSuccess); p1.Stop(); } catch (Exception ex) { throw; } }
static void Main(string[] args) { var pipeline = new MicroservicePipeline("Server"); pipeline.Start(); Console.WriteLine("Press a key to stop."); Console.ReadKey(); pipeline.Stop(); Console.WriteLine("Service stopped."); Console.ReadKey(); }
public void RPipeInternal() { PersistenceClient <Guid, PipeTest1> persistence, persistence2; CommandInitiator init; var server = new MicroservicePipeline(nameof(RPipeInternal)); server.ToMicroservice().Events.ProcessRequestError += Events_ProcessRequestError; server.ToMicroservice().Events.ProcessRequestUnresolved += Events_ProcessRequestUnresolved; server .AddChannelIncoming("inChannel") .AttachPersistenceManagerHandlerMemory((PipeTest1 e) => e.Id, (s) => new Guid(s), resourceProfile: "Entity") .AttachPersistenceClient(out persistence) .Revert() .AddChannelIncoming("inChannel2") .AttachPersistenceClient(out persistence2) .Revert() .AddChannelIncoming("backout") .AttachCommandInitiator(out init) ; server.Start(); var result = persistence.Create(new PipeTest1() { Message = "Hello" } , new RepositorySettings() { WaitTime = TimeSpan.FromSeconds(5) } ).Result; Assert.IsTrue(result.ResponseCode == 201); var result2 = persistence2.Create(new PipeTest1() { Message = "Hello" } , new RepositorySettings() { WaitTime = TimeSpan.FromSeconds(5) } ).Result; Assert.IsTrue(result2.ResponseCode == 501); var result3 = init.Process <string, string>(("franky", "four", "fingers"), "" , new RequestSettings { WaitTime = TimeSpan.FromSeconds(5) }, routing: ProcessOptions.RouteInternal ).Result; Assert.IsTrue(result3.ResponseCode == 501); }
public void PersistenceLocal1() { try { DebugMemoryDataCollector memp1; PersistenceClient <Guid, Sample1> init; var p1 = new MicroservicePipeline(nameof(PersistenceLocal1)) .AddDebugMemoryDataCollector(out memp1) .AdjustPolicyCommunication((p, c) => p.BoundaryLoggingActiveDefault = true) .AddChannelIncoming("fredo") .AttachPersistenceManagerHandlerMemory( (Sample1 e) => e.Id, (s) => new Guid(s) , versionPolicy: ((e) => e.VersionId.ToString("N").ToUpperInvariant(), (e) => e.VersionId = Guid.NewGuid(), true) , resourceProfile: ("paul1", true) ) .AttachPersistenceClient(out init) .Revert() ; p1.Start(); var sample = new Sample1(); //Run a set of simple version entity tests. //Create Assert.IsTrue(init.Create(sample).Result.IsSuccess); //Read Assert.IsTrue(init.Read(sample.Id).Result.IsSuccess); //Update success var rs = init.Update(sample).Result; Assert.IsTrue(rs.IsSuccess); //We have enabled version policy and optimitic locking so the next command should fail. //Update fail as old version Assert.IsFalse(init.Update(sample).Result.IsSuccess); //But this one should pass. //Update pass as new entity. Assert.IsTrue(init.Update(rs.Entity).Result.IsSuccess); //Read Assert.IsTrue(init.Read(sample.Id).Result.IsSuccess); //Delete Assert.IsTrue(init.Delete(sample.Id).Result.IsSuccess); //Read fail. Assert.IsFalse(init.Read(sample.Id).Result.IsSuccess); p1.Stop(); } catch (Exception ex) { throw; } }
public void TestReroute() { var bridgeOut = new ManualCommunicationBridgeAgent(new ManualFabricBridge(), CommunicationBridgeMode.RoundRobin); bool success = false; ManualResetEvent mre = new ManualResetEvent(false); DebugMemoryDataCollector memp1, memp2; var p1 = new MicroservicePipeline("Sender") .AdjustPolicyCommunication((p, c) => p.BoundaryLoggingActiveDefault = true) .AddDebugMemoryDataCollector(out memp1) .AddChannelIncoming("fredo") .AttachCommand(typeof(IContractInitial), (ctx) => { ctx.Responses.Add(new TransmissionPayload(ctx.Request.Message.Clone().SetDestination <IContractFinal>())); return(Task.FromResult(0)); }) .Revert() .AddChannelOutgoing("crequest") .AttachSender(bridgeOut.GetSender()) .Revert() ; var p2 = new MicroservicePipeline("Receiver") .AdjustPolicyCommunication((p, c) => p.BoundaryLoggingActiveDefault = true) .AddDebugMemoryDataCollector(out memp2) .AddChannelIncoming("crequest") .AttachListener(bridgeOut.GetListener()) .AttachCommand(typeof(IContractFinal), (ctx) => { var value = ctx.PayloadSerializer.PayloadDeserialize <string>(ctx.Request); success = value == "Hello"; mre.Set(); return(Task.FromResult(0)); }) .Revert() ; p1.Start(); p2.Start(); //Send the message to the command asynchronously. p1.ToMicroservice().Dispatch.Process <IContractInitial>("Hello"); mre.WaitOne(); Assert.IsTrue(success); p1.Stop(); p2.Stop(); }
public void Pipeline1() { //var fabric = new ManualFabricBridge(); var fabric = new AzureServiceBusFabricBridge(connMgmt); var server = new MicroservicePipeline() .ConfigResolverSetTestContext(TestContext) .FabricConfigure(fabric) .AdjustPolicyTaskManagerForDebug() .AddChannelIncoming("incoming") .AttachListener(fabric.Queue.GetListener()) .AttachCommand((ctx) => { var incoming = ctx.RequestPayloadGet <string>(); ctx.ResponseSet(200, "Howdy"); return(Task.FromResult(0)); } , ("one", "two")) .Revert() .AddChannelOutgoing("outgoing") .AttachSender(fabric.Broadcast.GetSender()) .Revert() ; ICommandInitiator init; var client = new MicroservicePipeline() .ConfigResolverSetTestContext(TestContext) .AdjustPolicyTaskManagerForDebug() .AddChannelOutgoing("incoming") .AttachSender(fabric.Queue.GetSender()) .Revert() .AddChannelIncoming("outgoing") .AttachListener(fabric.Broadcast.GetListener()) .AttachICommandInitiator(out init) .Revert() ; server.Start(); client.Start(); int t1 = Environment.TickCount; var result1 = init.Process <string, string>(("incoming", "one", "two"), "Hello").Result; int t2 = Environment.TickCount; var result2 = init.Process <string, string>(("incoming", "one", "two"), "Hello").Result; int t3 = Environment.TickCount; var result3 = init.Process <string, string>(("incoming", "one", "two"), "Hello").Result; int t4 = Environment.TickCount; }
public void Initialise() { mMs = new MicroservicePipeline(); mMs.AddChannelIncoming("internal") .AttachPersistenceManagerHandlerMemory((MyTestEntity1 e) => e.Id, (e) => new Guid(e)) .AttachPersistenceManagerHandlerMemory((MyTestEntity2 e) => e.Id , (e) => new Guid(e) , versionPolicy: new VersionPolicy <MyTestEntity2>((e) => e.VersionId.ToString("N").ToUpperInvariant(), (e) => e.VersionId = Guid.NewGuid()) ) .AttachPersistenceClient(out mPersistenceService1) .AttachPersistenceClient(out mPersistenceService2) ; mMs.Start(); }
public void Pipeline() { var pipe = new MicroservicePipeline(); pipe .AddChannelIncoming("freddyin", autosetPartition01: false) .AttachPriorityPartition(0, 1, 2) .Revert() .AddChannelOutgoing("freddyout", autosetPartition01: false) .AttachPriorityPartition(1, 2) ; pipe.Start(); pipe.Stop(); }
public void TestMethod1() { CommandInitiator init; try { var sender = new MicroservicePipeline("initiator") .ConfigurationOverrideSet(AzureServiceBusExtensionMethods.KeyServiceBusConnection, SbConn) .AddChannelOutgoing("remote") .AttachAzureServiceBusQueueSender() .Revert() .AddChannelIncoming("response") .AttachAzureServiceBusTopicListener(listenOnOriginatorId: true) .AttachCommandInitiator(out init) ; var listener = new MicroservicePipeline("responder") .ConfigurationOverrideSet(AzureServiceBusExtensionMethods.KeyServiceBusConnection, SbConn) .AddChannelIncoming("remote") .AttachAzureServiceBusQueueListener() .AttachCommand(new SimpleCommand()) .Revert() .AddChannelIncoming("deadletter") .AttachMessageRedirectRule((p) => true, new ServiceMessageHeader("remote", "process", "deadletter")) .AttachAzureServiceBusQueueListener("remote", isDeadLetterListener: true) .Revert() .AddChannelOutgoing("response") .AttachAzureServiceBusTopicSender() ; listener.Start(); sender.Start(); var rs = init.Process <ISimpleCommand, string, string>("hello")?.Result; Assert.IsTrue(rs?.Response == "mom"); sender.Stop(); listener.Stop(); } catch (Exception ex) { Assert.Fail(ex.Message); } }
public void Test1() { var msp = new MicroservicePipeline(); msp.ConfigurationOverrideSet("override", "one"); var value1 = msp.Configuration.PlatformOrConfigCache("override"); Assert.IsTrue(value1 == "one"); msp.ConfigurationOverrideSet("override", "two"); var value2 = msp.Configuration.PlatformOrConfigCache("override"); Assert.IsTrue(value2 == "two"); msp.Start(); msp.Stop(); }
public void Bug180() { try { ServiceMessageHeader destination = ("internalIn/frankie/benny"); ICommandInitiator init; DebugMemoryDataCollector collector; var pipeline = new MicroservicePipeline("TestPipeline") .AdjustPolicyTaskManagerForDebug() .AddDebugMemoryDataCollector(out collector) .AddICommandInitiator(out init) .AddChannelIncoming("internalIn", internalOnly: true) .AttachCommand((c) => { c.ResponseSet(200); return(Task.FromResult(0)); }, ("frankie", "benny")) .AttachCommand((ctx) => { ctx.ResponseSet(200); return(Task.FromResult(0)); }, ("internalIn", "frankie4fingers", "benny")) .Revert() .AddChannelOutgoing("internalOut", internalOnly: true) .Revert(); pipeline.Start(); var rs = init.Process <string, string>(destination, "hello").Result; pipeline.Stop(); } catch (Exception ex) { Assert.Fail(ex.Message); } }
public void CommandLocal1() { try { DebugMemoryDataCollector memp1; ICommandInitiator init; var p1 = new MicroservicePipeline(nameof(CommandLocal1)) .AddDebugMemoryDataCollector(out memp1) .AdjustPolicyCommunication((p, c) => p.BoundaryLoggingActiveDefault = true) .AddChannelIncoming("fredo") .AttachCommand(typeof(ITestCommandLocal1), (rq, rsc, pl) => { var payload = rq.PayloadUnpack <string>(pl); var rs = rq.ToResponse(); rs.PayloadPack <string>(pl, "howdy"); rsc.Add(rs); return(Task.FromResult(0)); } ) .AttachICommandInitiator(out init) .Revert() ; p1.Start(); //var ok = init.Process<ITestCommandLocal1, string, string>("Hello", new RequestSettings).Result; p1.Stop(); } catch (Exception ex) { throw; } }
public void TestMethod1() { var fabric = new ManualFabricBridge(); var incoming = fabric[FabricMode.Queue]; var response = fabric[FabricMode.Broadcast]; ICommandInitiator init; var ms1 = new MicroservicePipeline("server") .AdjustPolicyTaskManagerForDebug() .AddChannelIncoming("freddy") .AttachListener(incoming.GetListener()) .AttachCommand((ctx) => throw new Exception("All messed up"), ("one", "two")) .Revert() .AddChannelOutgoing("response") .AttachSender(response.GetSender()) .Revert(); var ms2 = new MicroservicePipeline("client") .AdjustPolicyTaskManagerForDebug() .AddChannelOutgoing("freddy") .AttachSender(incoming.GetSender()) .Revert() .AddChannelIncoming("response") .AttachListener(response.GetListener()) .AttachICommandInitiator(out init) .Revert() ; ms1.Start(); ms2.Start(); var rs = init.Process <string, string>(("freddy", "one", "two"), "hello").Result; Assert.IsTrue(rs.ResponseCode == 500); }
public void Pipeline1() { try { var pipeline = new MicroservicePipeline("TestPipeline"); IPipelineChannelIncoming <MicroservicePipeline> cpipeIn = null; IPipelineChannelOutgoing <MicroservicePipeline> cpipeOut = null; PersistenceInternalService <Guid, Blah> persistence = null; PersistenceBlahMemory persistBlah = null; DebugMemoryDataCollector collector; int signalChange = 0; pipeline .AddDebugMemoryDataCollector(out collector) .AdjustPolicyTaskManager((t, c) => { t.ConcurrentRequestsMin = 1; t.ConcurrentRequestsMax = 4; }) .CallOut(ConfigureServiceRoot) .CallOut(CallOutDefault) .AddChannelIncoming("internalIn", internalOnly: true) .CallOut(ChannelInConfigure, (c) => true) .AttachCommand(new PersistenceBlahMemory(profile: "Blah"), assign: (p) => persistBlah = p) .AttachCommand(new PersistenceInternalService <Guid, Blah>(), assign: (c) => persistence = c, channelResponse: cpipeOut) .CallOut((c) => cpipeIn = c) .Revert() .AddChannelOutgoing("internalOut", internalOnly: true) .CallOut(ChannelOutConfigure, (c) => false) .CallOut((c) => cpipeOut = c) .Revert(); persistBlah.OnEntityChangeAction += ((o, e) => { signalChange++; }); pipeline.Start(); Guid cId = Guid.NewGuid(); var blah = new Blah { ContentId = cId, Message = "Hello", VersionId = Guid.NewGuid() }; var result = persistence.Create(blah).Result; Assert.IsTrue(result.IsSuccess); var result2 = persistence.Read(cId).Result; Assert.IsTrue(result2.IsSuccess); blah.VersionId = Guid.NewGuid(); var result3 = persistence.Update(blah).Result; Assert.IsTrue(result3.IsSuccess); var result4 = persistence.Delete(blah.ContentId).Result; Assert.IsTrue(result4.IsSuccess); Assert.IsTrue(signalChange == 3); Assert.IsTrue(calloutDefault.HasValue); Assert.IsTrue(calloutIn.HasValue); Assert.IsFalse(calloutOut.HasValue); pipeline.Stop(); } catch (Exception ex) { Assert.Fail(ex.Message); } }
public void PipelineCaseInsensitive() { try { DebugMemoryDataCollector collector1, collector2; CommandInitiator init = null; var fabric = new ManualFabricBridge(); var bridgeOut = new ManualCommunicationBridgeAgent(fabric, CommunicationBridgeMode.RoundRobin); var bridgeReturn = new ManualCommunicationBridgeAgent(fabric, CommunicationBridgeMode.Broadcast); var pClient = new MicroservicePipeline("Client"); var pServer = new MicroservicePipeline("Server"); pServer .AdjustPolicyTaskManagerForDebug() .AddDebugMemoryDataCollector(out collector2) .AddPayloadSerializerDefaultJson() .AddChannelIncoming("INTERNALIN", internalOnly: false , autosetPartition01: false) .AttachPriorityPartition((0, 1.0M), (1, 0.9M)) .AttachListener(bridgeOut.GetListener()) .AttachMessagePriorityOverrideForResponse() .AttachCommand((CommandMethodRequestContext ctx) => { var payload = ctx.DtoGet <Blah>(); ctx.ResponseSet(200, payload.Message); return(Task.FromResult(0)); }, ("FRANKY", "johnny5")) .AttachCommand((CommandMethodRequestContext ctx) => { var payload = ctx.DtoGet <Blah>(); ctx.ResponseSet(201, payload.Message); return(Task.FromResult(0)); }, ("franky", "JoHnny6")) .Revert() .AddChannelOutgoing("return") .AttachSender(bridgeReturn.GetSender()) .Revert(); ; pClient .AdjustPolicyTaskManagerForDebug() .AddDebugMemoryDataCollector(out collector1) .AddChannelIncoming("Return") .AttachListener(bridgeReturn.GetListener()) .AttachMessagePriorityOverrideForResponse() .AttachCommandInitiator(out init) .Revert() .AddChannelOutgoing("internalIn", internalOnly: false , autosetPartition01: false) .AttachPriorityPartition(0, 1) .AttachSender(bridgeOut.GetSender()) .Revert() ; pClient.Start(); pServer.Start(); var list = new List <Task <ResponseWrapper <string> > >(); list.Add(init.Process <ICaseSensitiveTest1, Blah, string>(new Blah() { Message = "hello1" })); list.Add(init.Process <Blah, string>("Internalin", "franky", "johnny5", new Blah() { Message = "hello2" })); list.Add(init.Process <Blah, string>(("InternalIn", "Franky", "johnny5"), new Blah() { Message = "hello3" })); list.Add(init.Process <Blah, string>(("internalIN", "FRANKY", "johnny6"), new Blah() { Message = "hello3" })); var result = Task.WhenAll(list).Result; result.ForEach((r) => Assert.IsTrue(r.ResponseCode == 200 || r.ResponseCode == 201)); pClient.Stop(); pServer.Stop(); } catch (Exception ex) { Assert.Fail(ex.Message); } }
public void Redirect1() { try { var fabric = new ManualFabricBridge(); var bridgeOut = fabric[FabricMode.Queue]; var bridgein = fabric[FabricMode.Broadcast]; ICommandInitiator init; DebugMemoryDataCollector memp1, memp2; var client = new MicroservicePipeline("Sender") .AdjustPolicyCommunicationBoundaryLoggingActive() .AddDebugMemoryDataCollector(out memp1) .AddChannelIncoming("cresponse", autosetPartition01: false) .AttachPriorityPartition((0, 0.9M), (1, 1.1M)) .AttachListener(bridgein.GetListener()) .AttachICommandInitiator(out init) .Revert() .AddChannelOutgoing("crequest") .AttachSender(bridgeOut.GetSender()) ; var server = new MicroservicePipeline("Receiver") .AdjustPolicyCommunicationBoundaryLoggingActive() .AddDebugMemoryDataCollector(out memp2) .AddChannelIncoming("credirect") .AttachCommand((CommandMethodRequestContext ctx) => { ctx.ResponseSet(201, "Hi"); return(Task.FromResult(0)); }, ("one", "two")) .Revert() .AddChannelIncoming("crequest") .AttachMessageRedirectRule( canRedirect: (p) => p.Message.MessageType.Equals("bridgeme", StringComparison.InvariantCultureIgnoreCase) , redirect: (p) => { p.Message.MessageType = "BridgeMe2"; p.Message.ActionType = "Whatever"; } ) .AttachMessageRedirectRule( canRedirect: (p) => p.Message.MessageType.Equals("redirectme", StringComparison.InvariantCultureIgnoreCase) , redirect: (p) => { p.Message.ChannelId = "credirect"; p.Message.MessageType = "one"; p.Message.ActionType = "two"; } ) .AttachListener(bridgeOut.GetListener()) .AttachCommand((CommandMethodRequestContext ctx) => { ctx.ResponseSet(400, "Blah"); return(Task.FromResult(0)); }, ("BridgeMe", "create")) .AttachCommand((CommandMethodRequestContext ctx) => { ctx.ResponseSet(200, "Yah!"); return(Task.FromResult(0)); }, ("bridgeMe2", "whatever")) .Revert() .AddChannelOutgoing("cresponse") .AttachSender(bridgein.GetSender()) ; client.Start(); server.Start(); int check1 = client.ToMicroservice().Commands.Count(); int check2 = server.ToMicroservice().Commands.Count(); var entity = new BridgeMe() { Message = "Momma" }; var rs = init.Process <BridgeMe, string>(("crequest", "BRIDGEME", "create"), entity).Result; Assert.IsTrue(rs.ResponseCode == 200); var rs2 = init.Process <BridgeMe, string>(("crequest", "redirectme", "hmm"), entity).Result; Assert.IsTrue(rs2.ResponseCode == 201); client.Stop(); server.Stop(); } catch (Exception ex) { throw; } }
public void PersistenceAzureClientServer() { try { //Either use a .runsettings file to set this value 'CI_ServiceBusConnection' or just manually set the value here if you want to run the test. var sbConnection = TestContext.GetCISettingAsString(AzureServiceBusExtensionMethods.KeyServiceBusConnection); PersistenceClient <Guid, Sample1> repo; var p1 = new MicroservicePipeline("Server") .ConfigurationOverrideSet(AzureServiceBusExtensionMethods.KeyServiceBusConnection, sbConnection) .AddChannelIncoming("request") .AttachPersistenceManagerHandlerMemory( keyMaker: (Sample1 e) => e.Id , keyDeserializer: (s) => new Guid(s) , versionPolicy: ((e) => e.VersionId.ToString("N").ToUpperInvariant(), (e) => e.VersionId = Guid.NewGuid(), true) ) .AttachAzureServiceBusQueueListener() .Revert() .AddChannelOutgoing("response") .AttachAzureServiceBusTopicSender() ; var p2 = new MicroservicePipeline("Client") .ConfigurationOverrideSet(AzureServiceBusExtensionMethods.KeyServiceBusConnection, sbConnection) .AddChannelIncoming("response") .AttachAzureServiceBusTopicListener() .Revert() .AddChannelOutgoing("request") .AttachAzureServiceBusQueueSender() .AttachPersistenceClient("response", out repo) .Revert() ; p1.Start(); p2.Start(); var sample = new Sample1() { Message = "Hello mom" }; var id = sample.Id; //Run a set of simple version entity tests. //Create Assert.IsTrue(repo.Create(sample).Result.IsSuccess); //Read var result = repo.Read(id).Result; Assert.IsTrue(result.IsSuccess); Assert.IsTrue(result.Entity.Message == "Hello mom"); //Update success var rs = repo.Update(sample).Result; Assert.IsTrue(rs.IsSuccess); //We have enabled version policy and optimistic locking so the next command should fail. //Update fail as old version Assert.IsFalse(repo.Update(sample).Result.IsSuccess); //But this one should pass. //Update pass as new entity. Assert.IsTrue(repo.Update(rs.Entity).Result.IsSuccess); //Read Assert.IsTrue(repo.Read(sample.Id).Result.IsSuccess); //Delete Assert.IsTrue(repo.Delete(sample.Id).Result.IsSuccess); //Read fail. Assert.IsFalse(repo.Read(sample.Id).Result.IsSuccess); p1.Stop(); p2.Stop(); } catch (Exception ex) { throw; } }
public void Pipeline3() { try { var pipeline = new MicroservicePipeline("TestPipeline"); var destination = ServiceMessageHeader.FromKey("internalIn/frankie/benny"); var fragment = ServiceMessageHeaderFragment.FromKey("frankie/benny"); ICommandInitiator init; DebugMemoryDataCollector collector; pipeline .AddDebugMemoryDataCollector(out collector) .AdjustPolicyTaskManagerForDebug() .AddChannelIncoming("internalIn", internalOnly: true) .AttachCommand((ctx) => { string entity; if (ctx.DtoTryGet(out entity)) { Assert.AreEqual(entity, "Hello"); ctx.ResponseSet(200, entity + "Good good", "It's all good"); } else { ctx.ResponseSet(400, description: "It's all messed up."); } ctx.Collector.LogMessage("It's all good."); return(Task.FromResult(0)); } , fragment) .Revert() .AddChannelIncoming("internalRs", internalOnly: true) .AttachICommandInitiator(out init) .Revert(); pipeline.Start(); var rs1 = init.Process <string, string>(destination, "Hello", new RequestSettings() { CorrelationId = "freddy" }).Result; var rs2 = init.Process <string, string>(destination, null, new RequestSettings() { CorrelationId = "johnny" }).Result; Assert.IsTrue(rs1.ResponseCode.Value == 200); Assert.IsTrue(rs1.Response == "HelloGood good"); Assert.IsTrue(rs2.ResponseCode.Value == 400); pipeline.Stop(); } catch (Exception ex) { Assert.Fail(ex.Message); } }
public void PersistenceClientServer() { try { var fabric = new ManualFabricBridge(); var bridgeRequest = new ManualCommunicationBridgeAgent(fabric, CommunicationBridgeMode.RoundRobin); var bridgeResponse = new ManualCommunicationBridgeAgent(fabric, CommunicationBridgeMode.Broadcast); PersistenceClient <Guid, Sample1> repo; var p1 = new MicroservicePipeline("Server") .AddChannelIncoming("request") .AttachPersistenceManagerHandlerMemory( keyMaker: (Sample1 e) => e.Id , keyDeserializer: (s) => new Guid(s) , versionPolicy: ((e) => e.VersionId.ToString("N").ToUpperInvariant(), (e) => e.VersionId = Guid.NewGuid(), true) ) .AttachListener(bridgeRequest.GetListener()) .Revert() .AddChannelOutgoing("response") .AttachSender(bridgeResponse.GetSender()) ; var p2 = new MicroservicePipeline("Client") .AddChannelIncoming("response") .AttachListener(bridgeResponse.GetListener()) .Revert() .AddChannelOutgoing("request") .AttachSender(bridgeRequest.GetSender()) .AttachPersistenceClient("response", out repo) .Revert() ; p1.Start(); p2.Start(); var sample = new Sample1() { Message = "Hello mom" }; var id = sample.Id; //Run a set of simple version entity tests. //Create Assert.IsTrue(repo.Create(sample).Result.IsSuccess); //Read var result = repo.Read(id).Result; Assert.IsTrue(result.IsSuccess); Assert.IsTrue(result.Entity.Message == "Hello mom"); //Update success var rs = repo.Update(sample).Result; Assert.IsTrue(rs.IsSuccess); //We have enabled version policy and optimistic locking so the next command should fail. //Update fail as old version Assert.IsFalse(repo.Update(sample).Result.IsSuccess); //But this one should pass. //Update pass as new entity. Assert.IsTrue(repo.Update(rs.Entity).Result.IsSuccess); //Read Assert.IsTrue(repo.Read(sample.Id).Result.IsSuccess); //Delete Assert.IsTrue(repo.Delete(sample.Id).Result.IsSuccess); //Read fail. Assert.IsFalse(repo.Read(sample.Id).Result.IsSuccess); p1.Stop(); p2.Stop(); } catch (Exception ex) { throw; } }
public void TestMethod1() { try { var fabric = new ManualFabricBridge(); var bridgeOut = new ManualCommunicationBridgeAgent(fabric, CommunicationBridgeMode.RoundRobin); var bridgein = new ManualCommunicationBridgeAgent(fabric, CommunicationBridgeMode.Broadcast); PersistenceClient <Guid, SecureMe> init; DebugMemoryDataCollector memp1, memp2; var p1 = new MicroservicePipeline("Sender") .AdjustPolicyCommunication((p, c) => p.BoundaryLoggingActiveDefault = true) .AddAuthenticationHandlerJwtToken("id1", JwtHashAlgorithm.HS256, Encoding.UTF8.GetBytes("My big secret")) .AddDebugMemoryDataCollector(out memp1) .AddChannelIncoming("cresponse", boundaryLoggingEnabled: true) .AttachListener(bridgein.GetListener()) .Revert() .AddChannelOutgoing("crequest", boundaryLoggingEnabled: true) .AttachSender(bridgeOut.GetSender()) .AttachTransportPayloadSignature("id1") .AttachPersistenceClient("cresponse", out init) .Revert() ; var p2 = new MicroservicePipeline("Receiver") .AdjustPolicyCommunication((p, c) => p.BoundaryLoggingActiveDefault = true) .AddAuthenticationHandlerJwtToken("id1", JwtHashAlgorithm.HS256, Encoding.UTF8.GetBytes("My big secret")) .AddDebugMemoryDataCollector(out memp2) .AddChannelIncoming("crequest", boundaryLoggingEnabled: true) .AttachListener(bridgeOut.GetListener()) .AttachTransportPayloadVerification("id1") .AttachCommand(new PersistenceManagerHandlerMemory <Guid, SecureMe>((e) => e.Id, (s) => new Guid(s))) .Revert() .AddChannelOutgoing("cresponse", boundaryLoggingEnabled: true) .AttachSender(bridgein.GetSender()) .Revert() ; p1.Start(); p2.Start(); int check1 = p1.ToMicroservice().Commands.Count(); int check2 = p2.ToMicroservice().Commands.Count(); var entity = new SecureMe() { Message = "Momma" }; var rs = init.Create(entity, new RepositorySettings() { WaitTime = TimeSpan.FromSeconds(30) }).Result; var rs2 = init.Read(entity.Id).Result; Assert.IsTrue(rs2.IsSuccess); Assert.IsTrue(rs2.Entity.Message == "Momma"); } catch (Exception ex) { throw; } }
public void TestMethod1() { try { var fabric = new ManualFabricBridge(); var bridgeOut = fabric[FabricMode.Queue]; var bridgein = fabric[FabricMode.Broadcast]; var key = CreateSalt(128); var encOut = new AesEncryptionHandler(key, keySize: 128); var encIn = new AesEncryptionHandler(key, keySize: 128); PersistenceClient <Guid, SecureMe> init; DebugMemoryDataCollector memp1, memp2; var p1 = new MicroservicePipeline("Sender") .AddEncryptionHandler("rogue1", encOut) .AdjustPolicyCommunication((p, c) => p.BoundaryLoggingActiveDefault = true) .AddDataCollector((c) => new DebugMemoryDataCollector(), (c) => memp1 = c) .AddChannelIncoming("cresponse") .AttachListener(bridgein.GetListener()) .Revert() .AddChannelOutgoing("crequest") .AttachTransportPayloadEncryption("rogue1") .AttachSender(bridgeOut.GetSender()) .AttachPersistenceClient("cresponse", out init) .Revert() ; var p2 = new MicroservicePipeline("Receiver") .AddEncryptionHandler("rogue2", encIn) .AdjustPolicyCommunication((p, c) => p.BoundaryLoggingActiveDefault = true) .AddDataCollector((c) => new DebugMemoryDataCollector(), (c) => memp2 = c) .AddChannelIncoming("crequest") .AttachTransportPayloadDecryption("rogue2") .AttachListener(bridgeOut.GetListener()) .AttachCommand(new PersistenceManagerHandlerMemory <Guid, SecureMe>((e) => e.Id, (s) => new Guid(s))) .Revert() .AddChannelOutgoing("cresponse") .AttachSender(bridgein.GetSender()) ; p1.Start(); p2.Start(); int check1 = p1.ToMicroservice().Commands.Count(); int check2 = p2.ToMicroservice().Commands.Count(); var entity = new SecureMe() { Message = "Momma" }; var rs = init.Create(entity, new RepositorySettings() { WaitTime = TimeSpan.FromMinutes(5) }).Result; var rs2 = init.Read(entity.Id).Result; Assert.IsTrue(rs2.IsSuccess); Assert.IsTrue(rs2.Entity.Message == "Momma"); } catch (Exception ex) { throw; } }