public void LastPersistedInfoWorks()
        {
            var test = new MemoryLog();
            test.Initialize();

            test.Term = 1;
            test.CreateData(null, new[] { (byte)5 });

            Assert.AreEqual(1u, test.GetLastTerm());
            Assert.AreEqual(1u, test.GetLastIndex());
        }
        public void AppendEntriesDataValid()
        {
            var test = new MemoryLog();
            test.Initialize();

            test.Term = 1;
            test.CreateData(null, new[] { (byte)5 });

            var index = test[1];
            var data = test.GetData(index);
            Assert.AreEqual((byte)5, data[0]);
        }
        public void TermChangeResetsVoteFor()
        {
            var test = new MemoryLog();
            test.Initialize();

            test.Term = 1;
            test.VotedFor = new IPEndPoint(IPAddress.Loopback, 123);

            test.Term = 2;
            Assert.AreEqual(2u, test.Term);
            Assert.AreEqual(null, test.VotedFor);
        }
        public void LogIsBetter()
        {
            var test = new MemoryLog();
            test.Initialize();
            test.Term = 1;

            Assert.AreEqual(false, test.LogIsBetter(0, 1));

            test.CreateData(null, new[] { (byte)5 });

            Assert.AreEqual(true, test.LogIsBetter(0, 1));
            Assert.AreEqual(false, test.LogIsBetter(1, 1));
        }
        public override Server CreateServer()
        {
            var sid = ++id;
            var port = sid + 7000;
            var log = new MemoryLog();
            var server = new Server(sid, new IPEndPoint(IPAddress.Loopback, port), log, transport);
            transport.Start(server.ID);
            log.Initialize();
            server.ChangeState(new FollowerState(server));


            servers.Add(server);

            return server;
        }
        public void CanAppendLog()
        {
            var test = new MemoryLog();
            test.Initialize();

            test.Term = 1;
            test.CreateData(null, new[] { (byte)5 });

            test.Term = 2;
            test.CreateData(null, new[] { (byte)6 });

            Assert.AreEqual(2u, test.Length);
            Assert.AreEqual(1u, test[1].Term);
            Assert.AreEqual(2u, test[2].Term);
        }