コード例 #1
0
        public void UntilWorksTest()
        {
            var storage         = new InMemoryStorageEngine();
            var executionEngine = ExecutionEngineFactory.StartNew(storage);

            executionEngine.Schedule(() =>
            {
                var holder = new UntilTestHolder();
                var task   = holder.Start();
                Roots.Entangle(holder);
                Roots.Entangle(task);
                return(Sync.Next());
            }).Wait();

            executionEngine.Dispose();

            executionEngine = ExecutionEngineFactory.Continue(storage);

            executionEngine.Schedule(() =>
            {
                var holder  = Roots.Resolve <UntilTestHolder>();
                holder.Stop = true;
                return(Roots.Resolve <CTask>());
            }).Wait();

            var completed = executionEngine.Schedule(() => Roots.Resolve <UntilTestHolder>().Completed).Result;

            completed.ShouldBe(true);
        }
        //todo deactivated as it crashed the test framework [TestMethod]
        public void OutgoingMessageIsResetOnSocketReset()
        {
            const string hostname             = "127.0.0.1";
            const int    port                 = 10100;
            const string connectionIdentifier = "1";

            var server = new SingleConnectionServer();

            server.StartListening();

            var engine = ExecutionEngineFactory.StartNew(new InMemoryStorageEngine());

            engine.Schedule(() =>
            {
                var unackedMessageQueue = new OutgoingMessageQueue();
                var deliverer           = new OutgoingMessageDeliverer(hostname, port, connectionIdentifier, unackedMessageQueue);

                Roots.Entangle(deliverer);
                Roots.Entangle(unackedMessageQueue);
                deliverer.Send("HELLO WORLD".GetUtf8Bytes());
            });

            Thread.Sleep(1_000);

            server.DisposeConnectedSocket();

            Thread.Sleep(1_000);

            server.GetNodeIdentifier().ShouldBe("1");
            server.GetReceivedMessages().Count.ShouldBe(2);
        }
コード例 #3
0
ファイル: LoadCaseFromQueryAction.cs プロジェクト: ywscr/NBi
        public virtual void Execute(CaseSet testCases)
        {
            var queryEngineFactory = new ExecutionEngineFactory();
            var queryEngine        = queryEngineFactory.Instantiate(new Query(Query, ConnectionString));
            var ds = queryEngine.Execute();

            testCases.Content = ds.Tables[0];
        }
コード例 #4
0
ファイル: OrderedConstraint.cs プロジェクト: ywscr/NBi
        protected IList <object> GetMembersFromResultSet(IQuery query)
        {
            var engineFactory = new ExecutionEngineFactory();
            var qe            = engineFactory.Instantiate(query);
            var members       = qe.ExecuteList <string>();

            return(members.Cast <object>().ToList());
        }
コード例 #5
0
        private static Engine Start(IStorageEngine storageEngine)
        {
            var engine = ExecutionEngineFactory.StartNew(storageEngine);

            engine.Schedule(() => new HeartbeatSender().Start());

            return(engine);
        }
        //[TestMethod]
        public void SentMessageIsProcessed()
        {
            var       hostname = "127.0.0.1";
            const int port     = 10_000;

            var storage    = new InMemoryStorageEngine();
            var scheduler1 = ExecutionEngineFactory.StartNew(storage);

            scheduler1.Schedule(() =>
            {
                var msgHandler         = new MessageHandler();
                var connectionListener = new ConnectionServer(hostname, port, msgHandler.Handle);

                Roots.Entangle(msgHandler);
                Roots.Entangle(connectionListener);
            });

            var senderId  = Guid.Empty;
            var msgSender = new TestMessageSender(hostname, port, senderId);

            msgSender.Connect();
            msgSender.SendMessage("HELLO".GetUtf8Bytes(), 0);
            Thread.Sleep(1000);

            var messageHandler = scheduler1.Resolve <MessageHandler>().Result;
            var messages       = messageHandler.GetMessages();

            messages.Count.ShouldBe(1);
            messages[0].ShouldBe("HELLO");

            scheduler1.Do <ConnectionServer>(c => c.Shutdown());

            Thread.Sleep(1000);

            scheduler1.Dispose();
            scheduler1     = ExecutionEngineFactory.Continue(storage);
            messageHandler = scheduler1.Resolve <MessageHandler>().Result;
            Console.WriteLine(messageHandler);

            msgSender = new TestMessageSender(hostname, port, senderId);
            msgSender.Connect();
            msgSender.SendMessage("HELLO2".GetUtf8Bytes(), 1);
            Thread.Sleep(1000);

            messages = messageHandler.GetMessages();
            messages.Count.ShouldBe(2);
            messages[0].ShouldBe("HELLO");
            messages[1].ShouldBe("HELLO2");

            scheduler1.Dispose();
        }
コード例 #7
0
        public void ReadFromQuery(string sql, string connectionString)
        {
            var queryEngineFactory = new ExecutionEngineFactory();
            var queryEngine        = queryEngineFactory.Instantiate(new Query(sql, connectionString));
            var ds = queryEngine.Execute();

            content = ds.Tables[0];

            variables.Clear();
            foreach (DataColumn col in Content.Columns)
            {
                variables.Add(col.ColumnName);
            }
        }
        public void DetectSelfCircularDependency()
        {
            var a = new Node {
                Name = "A"
            };

            a.Edges.Add(a);

            var engine = ExecutionEngineFactory.StartNew(new InMemoryStorageEngine(), detectCircularDependencies: true);

            engine.Entangle(a).Wait();

            Should.Throw <CircularDependencyException>(engine.Sync);
        }
        public void DetectCircularDependencyInComplexGraph()
        {
            var a = new Node {
                Name = "A"
            };
            var b = new Node {
                Name = "B"
            };
            var c = new Node {
                Name = "C"
            };
            var d = new Node {
                Name = "D"
            };
            var e = new Node {
                Name = "E"
            };
            var f = new Node {
                Name = "F"
            };
            var g = new Node {
                Name = "G"
            };
            var h = new Node {
                Name = "H"
            };

            a.Add(b);
            a.Add(c);

            c.Add(g);
            c.Add(f);

            g.Add(b);

            b.Add(d);

            d.Add(h);

            d.Add(f);
            f.Add(e);
            e.Add(d);

            var engine = ExecutionEngineFactory.StartNew(new InMemoryStorageEngine(), detectCircularDependencies: true);

            engine.Entangle(a).Wait();

            Should.Throw <CircularDependencyException>(engine.Sync);
        }
        public void OutgoingConnectionSendsMessageSuccessfully()
        {
            const string hostname             = "127.0.0.1";
            const int    port                 = 10100;
            const string connectionIdentifier = "1";

            var server = new SingleConnectionServer();

            server.StartListening();

            var engine = ExecutionEngineFactory.StartNew(new InMemoryStorageEngine());

            engine.Schedule(() =>
            {
                var unackedMessageQueue = new OutgoingMessageQueue();
                var deliverer           = new OutgoingMessageDeliverer(hostname, port, connectionIdentifier, unackedMessageQueue);

                Roots.Entangle(deliverer);
                Roots.Entangle(unackedMessageQueue);
                deliverer.Send("HELLO WORLD".GetUtf8Bytes());
            });

            Thread.Sleep(1_000);

            server.GetNodeIdentifier().ShouldBe("1");
            server.GetReceivedMessages()[0].Item2.ShouldBe("HELLO WORLD");

            var unackeds = engine.Schedule(() =>
            {
                var q = Roots.Resolve <OutgoingMessageQueue>();
                return(q.GetSyncedUnackedMessages().ToArray());
            }).Result;

            unackeds.Length.ShouldBe(1);
            unackeds[0].Item1.ShouldBe(0);
            unackeds[0].Item2.Array.ToUtf8String().ShouldBe("HELLO WORLD");

            server.AckUntil(0);

            Thread.Sleep(1_000);

            unackeds = engine.Schedule(() =>
            {
                var q = Roots.Resolve <OutgoingMessageQueue>();
                return(q.GetSyncedUnackedMessages().ToArray());
            }).Result;

            unackeds.Length.ShouldBe(0);
        }
コード例 #11
0
        public void YieldWorksTest()
        {
            var             executionEngine = ExecutionEngineFactory.StartNew(new InMemoryStorageEngine());
            YieldTestHolder holder          = null;
            var             task            = executionEngine.Schedule(() =>
            {
                holder = new YieldTestHolder();
                return(holder.Start());
            });

            task.Wait();
            var yieldCompleted = executionEngine.Schedule(() => holder.YieldCompleted).Result;

            yieldCompleted.ShouldBe(true);
        }
        public void DoNotDetectCircularDependencyOnNonCircularGraph()
        {
            var a = new Node {
                Name = "A"
            };
            var b = new Node {
                Name = "B"
            };

            a.Edges.Add(b);

            var engine = ExecutionEngineFactory.StartNew(new InMemoryStorageEngine(), detectCircularDependencies: true);

            engine.Entangle(a).Wait();

            engine.Sync().Wait();
        }
コード例 #13
0
        public static void Do()
        {
            var storageEngine   = new InMemoryStorageEngine();
            var executionEngine = ExecutionEngineFactory.StartNew(storageEngine);

            executionEngine.Schedule(() =>
            {
                var network = new Network();
                var source  = new Source <object>();
                Roots.Entangle(source);

                var proposer = new PaxosProposer(source, network);
                _            = proposer.StartRound("hello", 0);

                _ = OutsideFlow(source, network);
            });
        }
コード例 #14
0
        public void Instantiate_BoltConnectionString_BoltExecutionEngine()
        {
            var config          = new BoltConfig();
            var sessionProvider = new ClientProvider(config);
            var commandProvider = new CommandProvider(config);
            var factory         = new ExecutionEngineFactory(sessionProvider, commandProvider, config);

            var query = Mock.Of <IQuery>
                        (
                x => x.ConnectionString == "bolt://*****:*****@host:7687/" &&
                x.Statement == "MATCH(actor: Person) RETURN actor.name"
                        );

            var engine = factory.Instantiate(query);

            Assert.That(engine, Is.Not.Null);
            Assert.That(engine, Is.TypeOf <BoltExecutionEngine>());
        }
コード例 #15
0
        public void Instantiate_GremlinConnectionString_GremlinExecutionEngine()
        {
            var config          = new GremlinConfig();
            var clientProvider  = new ClientProvider(config);
            var commandProvider = new CommandProvider(config);
            var factory         = new ExecutionEngineFactory(clientProvider, commandProvider, config);

            var query = Mock.Of <IQuery>
                        (
                x => x.ConnectionString == $@"Hostname=your-endpoint.gremlin.cosmosdb.azure.com;port=443;EnableSsl=true;Username=/dbs/database/colls/;password=p@ssw0rd;api=gremlin" &&
                x.Statement == "g.V().Count()"
                        );

            var engine = factory.Instantiate(query);

            Assert.That(engine, Is.Not.Null);
            Assert.That(engine, Is.TypeOf <GremlinExecutionEngine>());
        }
コード例 #16
0
        public void Instantiate_GraphConnectionString_GraphExecutionEngine()
        {
            var config          = new GraphConfig();
            var clientProvider  = new ClientProvider(config);
            var commandProvider = new CommandProvider(config);
            var factory         = new ExecutionEngineFactory(clientProvider, commandProvider, config);

            var query = Mock.Of <IQuery>
                        (
                x => x.ConnectionString == $"Endpoint=https://xyz.documents.azure.com:443;AuthKey={base64AuthKey};database=db;graph=FoF" &&
                x.Statement == "g.V().Count()"
                        );

            var engine = factory.Instantiate(query);

            Assert.That(engine, Is.Not.Null);
            Assert.That(engine, Is.TypeOf <GraphExecutionEngine>());
        }
コード例 #17
0
        public void Instantiate_SqlConnectionString_SqlExecutionEngine()
        {
            var config          = new SqlConfig();
            var clientProvider  = new ClientProvider(config);
            var commandProvider = new CommandProvider(config);
            var factory         = new ExecutionEngineFactory(clientProvider, commandProvider, config);

            var query = Mock.Of <IQuery>
                        (
                x => x.ConnectionString == $"Endpoint=https://xyz.documents.azure.com:443;AuthKey={base64AuthKey};database=db;collection=FoF;api=sql" &&
                x.Statement == "SELECT * FROM Families f WHERE f.id = \"WakefieldFamily\""
                        );

            var engine = factory.Instantiate(query);

            Assert.That(engine, Is.Not.Null);
            Assert.That(engine, Is.TypeOf <SqlExecutionEngine>());
        }
コード例 #18
0
        public static void Continue()
        {
            var storage   = new SimpleFileStorageEngine(@"./TravelAgent.txt", false);
            var scheduler = ExecutionEngineFactory.Continue(storage);

            while (true)
            {
                Console.WriteLine("PRESS ENTER TO STOP PING PONG APP");
                Console.ReadLine();

                scheduler.Dispose();

                Console.WriteLine("PRESS ENTER TO START PING PONG APP");
                Console.ReadLine();

                scheduler = ExecutionEngineFactory.Continue(storage);
            }
        }
コード例 #19
0
        public void EmptyMessageQueueCanBeSerializeAndDeserialized()
        {
            var storage = new InMemoryStorageEngine();
            var c       = ExecutionEngineFactory.StartNew(storage);

            c.Schedule(() =>
            {
                var q = new MessageQueue();
                Roots.Entangle(q);
            });

            c.Sync().Wait();

            c.Dispose();

            c = ExecutionEngineFactory.Continue(storage);
            c.Schedule(Roots.Resolve <MessageQueue>);
            c.Sync().Wait();
        }
コード例 #20
0
        public void Instantiate_ElasticsearchConnectionString_ElasticsearchExecutionEngine()
        {
            var config          = new ElasticsearchConfig();
            var clientProvider  = new ClientProvider(config);
            var commandProvider = new CommandProvider(config);
            var factory         = new ExecutionEngineFactory(clientProvider, commandProvider, config);

            var query = Mock.Of <IQuery>
                        (
                x => x.ConnectionString == $@"Hostname=localhost;port=9200;Username=admin;password=p@ssw0rd;api=Elasticsearch" &&
                x.Statement == @"GET index/type/_search { ""query"": {""match_all"": { }} }"

                        );

            var engine = factory.Instantiate(query);

            Assert.That(engine, Is.Not.Null);
            Assert.That(engine, Is.TypeOf <ElasticsearchExecutionEngine>());
        }
コード例 #21
0
        private static void Continue()
        {
            var storage = new SimpleFileStorageEngine("./ping_pong.txt", false);
            //var storage = new SqlServerStorageEngine("1", DatabaseHelper.ConnectionString("localhost", "ping_pong", "sa", "Pa55word"));

            var engine = ExecutionEngineFactory.Continue(storage);

            while (true)
            {
                Console.WriteLine("PRESS ENTER TO STOP PING PONG APP");
                Console.ReadLine();

                engine.Dispose();

                Console.WriteLine("PRESS ENTER TO START PING PONG APP");
                Console.ReadLine();

                engine = ExecutionEngineFactory.Continue(storage);
            }
        }
コード例 #22
0
        public static void StartNew()
        {
            var storage   = new SimpleFileStorageEngine(@"./TravelAgent.txt", true);
            var scheduler = ExecutionEngineFactory.StartNew(storage);

            scheduler.Schedule(() =>
            {
                var workflow = new Workflow();
                _            = workflow.Do();
            });

            Console.WriteLine("PRESS ENTER TO STOP PING PONG APP");
            Console.ReadLine();

            scheduler.Dispose();

            Console.WriteLine("PRESS ENTER TO START PING PONG APP");
            Console.ReadLine();

            Continue();
        }
コード例 #23
0
        public void Instantiate_FakeConnectionString_FakeExecutionEngine()
        {
            var localServiceLocator = new ServiceLocator();

            var query = Mock.Of <IQuery>(x => x.ConnectionString == "fake://MyConnectionString");

            var sessionFactory = localServiceLocator.GetSessionFactory();

            sessionFactory.RegisterFactories(new[] { typeof(FakeSessionFactory) });

            var commandFactory = localServiceLocator.GetCommandFactory();

            commandFactory.RegisterFactories(new[] { typeof(FakeCommandFactory) });

            var factory = new ExecutionEngineFactory(sessionFactory, commandFactory);

            factory.RegisterEngines(new[] { typeof(FakeExecutionEngine) });

            var engine = factory.Instantiate(query);

            Assert.IsInstanceOf <FakeExecutionEngine>(engine);
        }
コード例 #24
0
        public static void StartNew(StorageEngineImplementation storageEngine)
        {
            var storage = new SimpleFileStorageEngine("./ping_pong.txt", true);

            /*DatabaseHelper.CreateDatabaseIfNotExist("localhost", "ping_pong", "sa", "Pa55word");
             * var storage = new SqlServerStorageEngine("1", DatabaseHelper.ConnectionString("localhost", "ping_pong", "sa", "Pa55word"));
             *
             *  storage.Initialize();
             *  storage.Clear();*/
            var scheduler = ExecutionEngineFactory.StartNew(storage);

            scheduler.Schedule(() =>
            {
                var messages = new Source <string>();
                var pinger   = new Pinger {
                    Messages = messages
                };
                var ponger = new Ponger {
                    Messages = messages
                };

                _ = ponger.Start();
                _ = pinger.Start();
            });

            Console.WriteLine("PRESS ENTER TO STOP PING PONG APP");
            Console.ReadLine();

            scheduler.Dispose();
            storage.Dispose();

            Console.WriteLine("PRESS ENTER TO START PING PONG APP");
            Console.ReadLine();

            Continue();
        }
コード例 #25
0
 public void Initialize()
 {
     StableStorageEngine = new InMemoryStorageEngine();
     Scheduler           = ExecutionEngineFactory.StartNew(StableStorageEngine);
 }
コード例 #26
0
        public void NonEmptyMessageQueueCanBeSerializeAndDeserialized()
        {
            var storage = new InMemoryStorageEngine();
            var c       = ExecutionEngineFactory.StartNew(storage);

            c.Schedule(() =>
            {
                var q         = new MessageQueue();
                var hello     = new ImmutableByteArray(Encoding.UTF8.GetBytes("hello"));
                var helloTask = new CTask();
                var world     = new ImmutableByteArray(Encoding.UTF8.GetBytes("world"));
                var worldTask = new CTask();
                q.Add(hello, helloTask);
                q.Add(world, worldTask);
                Roots.Entangle(q);
                Roots.Entangle(new CImmutableList <CTask>(new [] { helloTask, worldTask }));
            });

            c.Sync().Wait();

            c.Dispose();

            c = ExecutionEngineFactory.Continue(storage);
            c.Schedule(() =>
            {
                var queue = Roots.Resolve <MessageQueue>();
                var elms  = queue.GetAll().ToArray();
                elms.Length.ShouldBe(2);
                var s1 = Encoding.UTF8.GetString(elms[0].Array);
                s1.ShouldBe("hello");
                var s2 = Encoding.UTF8.GetString(elms[1].Array);
                s2.ShouldBe("world");

                Roots.Resolve <CImmutableList <CTask> >()[0].SignalCompletion();
            }).Wait();

            c.Sync().Wait();
            c.Dispose();

            c = ExecutionEngineFactory.Continue(storage);
            c.Schedule(() =>
            {
                var queue = Roots.Resolve <MessageQueue>();
                var elms  = queue.GetAll().ToArray();
                elms.Length.ShouldBe(1);
                var s1 = Encoding.UTF8.GetString(elms[0].Array);
                s1.ShouldBe("world");

                Roots.Resolve <CImmutableList <CTask> >()[1].SignalCompletion();
            }).Wait();

            c.Sync().Wait();
            c.Dispose();

            c = ExecutionEngineFactory.Continue(storage);
            c.Schedule(() =>
            {
                var queue = Roots.Resolve <MessageQueue>();
                var elms  = queue.GetAll().ToArray();
                elms.Length.ShouldBe(0);
            }).Wait();

            c.Sync().Wait();
            c.Dispose();
        }
コード例 #27
0
 private static Engine Continue(IStorageEngine storageEngine)
 => ExecutionEngineFactory.Continue(storageEngine);