Example #1
0
        public void OptionsBuilderOut()
        {
            try
            {
                var network = new DummyNetworkInterface();
                var builder = new NodeBuilder();
                builder.UseNetwork(network);
                builder.UseTransient <SimpleDummyMiddleware>();
                builder.UseTransient <OptionsBuilderMiddleware, MwOptions>(o =>
                {
                    o.SomeId = "2nd Middleware";
                });
                builder.UseSingleton <FirstMiddleware>();
                var node = builder.Build();

                var context = new PipelineContext();
                node.SendAsync(context).Wait();

                Assert.AreEqual(network.OutDatas.Count(), 1);

                var outData = network.OutDatas.First();
                Assert.AreEqual(outData.Destination.Port, 9999);
                Assert.AreEqual(outData.Source.Port, 8888);

                var state = outData.State as InMemoryNodeContract;
                Assert.IsNotNull(state);
                Assert.IsTrue(state.Id.Contains("SimpleDummyMiddleware"));
                Assert.IsTrue(state.Id.Contains("2nd Middleware"));
            }
            catch (Exception ex)
            {
                Debug.WriteLine(ex.Message);
            }
        }
Example #2
0
        public override IReadOnlyList <INode> GetNodes(ISqlLoader loader, IGeneratorOption option, MethodInfo mi)
        {
            var parameters = BuildHelper.GetParameters(option, mi);
            var tableName  = table ??
                             (type != null ? BuildHelper.GetTableNameOfType(option, type) : null) ??
                             BuildHelper.GetTableName(option, mi);

            if (String.IsNullOrEmpty(tableName))
            {
                throw new BuilderException($"Table name resolve failed. type=[{mi.DeclaringType.FullName}], method=[{mi.Name}]");
            }

            var sql = new StringBuilder();

            sql.Append("INSERT INTO ");
            sql.Append(tableName);
            sql.Append(" (");
            BuildHelper.AddInsertColumns(sql, mi, parameters);
            sql.Append(") VALUES (");
            BuildHelper.AddInsertValues(sql, mi, parameters);
            sql.Append(")");

            var tokenizer = new SqlTokenizer(sql.ToString());
            var builder   = new NodeBuilder(tokenizer.Tokenize());

            return(builder.Build());
        }
Example #3
0
        public override IReadOnlyList <INode> GetNodes(ISqlLoader loader, IGeneratorOption option, MethodInfo mi)
        {
            var parameters = BuildHelper.GetParameters(option, mi);
            var keys       = BuildHelper.GetKeyParameters(parameters);
            var tableName  = table ??
                             (type != null ? BuildHelper.GetTableNameOfType(option, type) : null) ??
                             BuildHelper.GetTableName(option, mi);
            var conditions = keys.Count > 0 ? keys : parameters;

            if (String.IsNullOrEmpty(tableName))
            {
                throw new BuilderException($"Table name resolve failed. type=[{mi.DeclaringType.FullName}], method=[{mi.Name}]");
            }

            if (!Force && (conditions.Count == 0))
            {
                throw new BuilderException($"Delete all requires force option. type=[{mi.DeclaringType.FullName}], method=[{mi.Name}]");
            }

            var sql = new StringBuilder();

            sql.Append("DELETE FROM ");
            sql.Append(tableName);
            BuildHelper.AddCondition(sql, conditions);

            var tokenizer = new SqlTokenizer(sql.ToString());
            var builder   = new NodeBuilder(tokenizer.Tokenize());

            return(builder.Build());
        }
Example #4
0
        public void MiddlewareOrderOut()
        {
            var network = new DummyNetworkInterface();
            var builder = new NodeBuilder();

            builder.UseNetwork(network);
            SimpleDummyMiddleware.Tag = MethodBase.GetCurrentMethod().Name;
            builder.UseTransient <SimpleDummyMiddleware>();
            builder.UseSingleton <FirstMiddleware>();
            var node = builder.Build();

            var context = new PipelineContext();

            node.SendAsync(context).Wait();

            Assert.AreEqual(network.OutDatas.Count(), 1);

            var outData = network.OutDatas.First();

            Assert.AreEqual(outData.Destination.Port, 9999);
            Assert.AreEqual(outData.Source.Port, 8888);

            var state = outData.State as InMemoryNodeContract;

            Assert.IsNotNull(state);
            Assert.IsTrue(state.Id.Contains("FirstMiddleware"));
            Assert.IsTrue(state.Id.Contains("SimpleDummyMiddleware"));
        }
Example #5
0
        public void Setup()
        {
            var addressList = Dns.GetHostEntry("localhost").AddressList;

            _localhost = addressList.First(p => p.AddressFamily == AddressFamily.InterNetwork);

            var ipLocalEndPoint = new IPEndPoint(_localhost, 7000);

            var builder = new NodeBuilder();

            builder
            .UseMsgPack(ipLocalEndPoint)
            .Use <TestMiddleware>(MiddlewareScope.Transient)
            .UseEndpoint(Endpoint1);

            _node1 = builder.Build();

            ipLocalEndPoint = new IPEndPoint(_localhost, 8000);

            builder = new NodeBuilder();
            builder
            .UseMsgPack(ipLocalEndPoint)
            .Use <TestMiddleware>(MiddlewareScope.Transient)
            .UseEndpoint(Endpoint2);

            _node2 = builder.Build();
        }
        public override IReadOnlyList <INode> GetNodes(ISqlLoader loader, IGeneratorOption option, MethodInfo mi)
        {
            var tokenizer = new SqlTokenizer(sql);
            var tokens    = tokenizer.Tokenize();
            var builder   = new NodeBuilder(tokens);

            return(builder.Build());
        }
Example #7
0
        public void OptionsBuilderIn()
        {
            PipelineContext receivedContext = null;

            var network = new DummyNetworkInterface();
            var builder = new NodeBuilder();

            builder
            .UseNetwork(network)
            .UseTransient <SimpleDummyMiddleware>()
            .UseTransient <OptionsBuilderMiddleware, MwOptions>(o =>
            {
                o.SomeId = "2nd Middleware";
            })
            .UseSingleton <FirstMiddleware>()
            .UseEndpoint(c =>
            {
                receivedContext = c;
                return(Task.CompletedTask);
            });

            var node = builder.Build();

            var context = new PipelineContext();

            node.SendAsync(context).Wait();

            Assert.AreEqual(network.OutDatas.Count(), 1);

            var outData = network.OutDatas.First();

            Assert.AreEqual(outData.Destination.Port, 9999);
            Assert.AreEqual(outData.Source.Port, 8888);

            var state = outData.State as InMemoryNodeContract;

            Assert.IsNotNull(state);
            Assert.IsTrue(state.Id.Contains("SimpleDummyMiddleware"));
            Assert.IsTrue(state.Id.Contains("2nd Middleware"));

            context = network.GenerateRandomInData();
            Thread.Sleep(2000);

            Assert.IsNotNull(receivedContext);
            Assert.IsNotNull(context);
            Assert.AreEqual(receivedContext.Raw.Length, context.Raw.Length);
            Assert.AreEqual(receivedContext.Raw[10], context.Raw[10]);
            Assert.AreEqual(receivedContext.Source, context.Source);

            state = receivedContext.State as InMemoryNodeContract;
            Assert.AreEqual(state.Id, "Lekker");
        }
Example #8
0
        public override IReadOnlyList <INode> GetNodes(ISqlLoader loader, IGeneratorOption option, MethodInfo mi)
        {
            var parameters = BuildHelper.GetParameters(option, mi);
            var order      = BuildHelper.PickParameter <OrderAttribute>(parameters);
            var tableName  = table ??
                             (type != null ? BuildHelper.GetTableNameOfType(option, type) : null) ??
                             BuildHelper.GetReturnTableName(option, mi);

            if (String.IsNullOrEmpty(tableName))
            {
                throw new BuilderException($"Table name resolve failed. type=[{mi.DeclaringType.FullName}], method=[{mi.Name}]");
            }

            var sql = new StringBuilder();

            sql.Append("SELECT * FROM ");
            sql.Append(tableName);
            BuildHelper.AddCondition(sql, parameters);

            if (order != null)
            {
                sql.Append(" ORDER BY ");
                sql.Append($"/*# {order.Name} */dummy");
            }
            else if (!String.IsNullOrEmpty(Order))
            {
                sql.Append(" ORDER BY ");
                sql.Append(Order);
            }
            else
            {
                var columns = BuildHelper.MakeKeyColumns(option, mi.ReturnType);
                if (!String.IsNullOrEmpty(columns))
                {
                    sql.Append(" ORDER BY ");
                    sql.Append(columns);
                }
            }

            var tokenizer = new SqlTokenizer(sql.ToString());
            var builder   = new NodeBuilder(tokenizer.Tokenize());

            return(builder.Build());
        }
Example #9
0
        public override IReadOnlyList <INode> GetNodes(ISqlLoader loader, IGeneratorOption option, MethodInfo mi)
        {
            var parameters = BuildHelper.GetParameters(option, mi);
            var tableName  = table ?? BuildHelper.GetTableNameOfType(option, type);

            if (String.IsNullOrEmpty(tableName))
            {
                throw new BuilderException($"Table name resolve failed. type=[{mi.DeclaringType.FullName}], method=[{mi.Name}]");
            }

            var sql = new StringBuilder();

            sql.Append("SELECT ");
            sql.Append(field);
            sql.Append(" FROM ");
            sql.Append(tableName);
            BuildHelper.AddCondition(sql, parameters);

            var tokenizer = new SqlTokenizer(sql.ToString());
            var builder   = new NodeBuilder(tokenizer.Tokenize());

            return(builder.Build());
        }
Example #10
0
        public void DummyNetworkInterfaceOnlyOut()
        {
            var network = new DummyNetworkInterface();
            var builder = new NodeBuilder();

            builder.UseNetwork(network);
            builder.UseTransient <SimpleDummyMiddleware>();
            var node = builder.Build();

            var model = new InMemoryNodeContract(MethodBase.GetCurrentMethod().Name, new byte[10]);

            _rand.NextBytes(model.RawData);

            node.SendAsync(new InMemoryNodeContract()).Wait();
            Assert.AreEqual(network.OutDatas.Count(), 1);

            var outData = network.OutDatas.First();

            Assert.AreEqual(outData.Destination.Port, 9999);
            Assert.AreEqual(outData.Source.Port, 8888);
            var state = outData.State as InMemoryNodeContract;

            Assert.IsNotNull(state);
        }
Example #11
0
        internal PrefetchQuery <TElement> RegisterPath <TValue>(Expression <Func <TElement, TValue> > expression)
        {
            var node = NodeBuilder.Build(session.Domain.Model, expression);

            return(node == null ? this : new PrefetchQuery <TElement>(session, source, nodes.Add(node)));
        }