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 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;
            }
        }
Beispiel #3
0
        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 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 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();
        }
Beispiel #6
0
        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;
            }
        }
Beispiel #7
0
            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;
                }
            }
Beispiel #8
0
            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;
                }
            }
Beispiel #9
0
        public void RPipeExternal()
        {
            PersistenceClient <Guid, PipeTest1> persistence, persistence2;
            CommandInitiator         init;
            DebugMemoryDataCollector collectorS, collectorC;

            var fabric       = new ManualFabricBridge();
            var bridgeOut    = new ManualCommunicationBridgeAgent(fabric, CommunicationBridgeMode.RoundRobin);
            var bridgeReturn = new ManualCommunicationBridgeAgent(fabric, CommunicationBridgeMode.Broadcast);

            var server = new MicroservicePipeline($"{nameof(RPipeExternal)}server");
            var client = new MicroservicePipeline($"{nameof(RPipeExternal)}client");

            server.ToMicroservice().Events.ProcessRequestError += Events_ProcessRequestError;
            server.ToMicroservice().Events.ProcessRequestUnresolved += Events_ProcessRequestUnresolved;

            client.ToMicroservice().Events.ProcessRequestError += Events_ProcessRequestError;
            client.ToMicroservice().Events.ProcessRequestUnresolved += Events_ProcessRequestUnresolved;

            server
            .AdjustPolicyTaskManagerForDebug()
            .AddDebugMemoryDataCollector(out collectorS)
            .AddChannelIncoming("inChannel")
            .AttachPersistenceManagerHandlerMemory(
                (PipeTest1 e) => e.Id
                , (s) => new Guid(s)
                , resourceProfile: "Entity")
            .AttachListener(bridgeOut.GetListener())

            .Revert()
            .AddChannelOutgoing("return")
            .AttachSender(bridgeReturn.GetSender())
            .Revert()
            ;

            client
            .AdjustPolicyTaskManagerForDebug()
            .AddDebugMemoryDataCollector(out collectorC)
            .AddChannelIncoming("return")
            .AttachCommandInitiator(out init)
            .AttachListener(bridgeReturn.GetListener())
            .Revert()
            .AddChannelOutgoing("inChannel")
            .AttachPersistenceClient("return", out persistence)
            .AttachSender(bridgeOut.GetSender())
            .Revert()
            ;

            server.Start();
            client.Start();

            var result = persistence.Create(new PipeTest1()
            {
                Message = "Hello"
            }
                                            , new RepositorySettings()
            {
                WaitTime = TimeSpan.FromMinutes(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);
        }