Exemple #1
0
        public void NextReceived(MockDataHandler mdh, MemBlock current)
        {
            DateTime start = DateTime.UtcNow.AddSeconds(5);

            while (mdh.LastReceived == current && DateTime.UtcNow < start)
            {
                Thread.Sleep(50);
            }
        }
Exemple #2
0
        public void SHUpdateTest()
        {
            callback_count = 0;
            int                 spi     = SecurityPolicy.DefaultSPI;
            MockSender          sender1 = new MockSender(null, null, null, 2);
            MockSender          sender2 = new MockSender(null, null, null, 2);
            SecurityAssociation sa1     = new SecurityAssociation(sender1, spi);

            sa1.StateChange += StateChange;
            sender2.Receiver = sa1;
            MockDataHandler mdh1 = new MockDataHandler();

            sa1.Subscribe(mdh1, null);
            SecurityAssociation sa2 = new SecurityAssociation(sender2, spi);

            sender1.Receiver = sa2;
            MockDataHandler mdh2 = new MockDataHandler();

            sa2.Subscribe(mdh2, null);

            Setup(ref sa1, ref sa2);

            sa1.RequestUpdate += Callback;
            sa2.RequestUpdate += Callback;

            byte[]   b    = null;
            Random   rand = new Random();
            MemBlock mb   = null;

            int current_epoch = sa1.CurrentEpoch;

            for (int i = 0; i < 80; i++)
            {
                b = new byte[128];
                rand.NextBytes(b);
                mb = MemBlock.Reference(b);
                sa1.Send(mb);
                Assert.IsTrue(mdh2.Contains(mb), "Contains" + i);
                if (i % 20 == 0 && i != 0)
                {
                    Assert.AreEqual(callback_count, 1, "Callback count " + i);
                    callback_count = 0;
                    Thread.Sleep(SecurityAssociation.TIMEOUT * 2 + 5);
                    Setup(ref sa1, ref sa2);
                }
                else
                {
                    if (i % 20 == 1 && i != 1)
                    {
                        Assert.IsFalse(current_epoch == sa1.CurrentEpoch, "Current epoch " + i);
                        current_epoch = sa1.CurrentEpoch;
                    }
                    Assert.AreEqual(current_epoch, sa1.CurrentEpoch, "Current epoch " + i);
                }
            }
        }
Exemple #3
0
        protected void ConnectionHandlerTest(Node node0, Node node1,
                                             ConnectionHandler ch0, ConnectionHandler ch1)
        {
            var          mdh0 = new MockDataHandler();
            var          mdh1 = new MockDataHandler();
            MemBlock     zero = MemBlock.Reference(new byte[] { 0 });
            EventHandler cb   = delegate(object o, EventArgs ea) {
                Assert.AreEqual(o, zero, "Zero");
            };

            mdh0.HandleDataCallback += cb;
            mdh1.HandleDataCallback += cb;
            ch0.Subscribe(mdh0, null);
            ch1.Subscribe(mdh1, null);

            Assert.AreEqual(mdh0.Count, 0, "MDH0 0");
            Assert.AreEqual(mdh1.Count, 0, "MDH1 0");
            ch0.ConnectTo(node1.Address);
            Assert.IsTrue(AreConnected(node0, node1), "ConnectionHandler ConnectTo");
            SimpleTimer.RunSteps(fifteen_mins * 2, false);
            Assert.IsFalse(Simulator.AreConnected(node0, node1));
            ch0.Send(node1.Address, zero);
            SimpleTimer.RunSteps(fifteen_mins / 60, false);
            Assert.AreEqual(mdh0.Count, 0, "MDH0 1");
            Assert.AreEqual(mdh1.Count, 0, "MDH1 1");
            Assert.IsTrue(AreConnected(node0, node1), "ConnectionHandler ConnectTo0");
            SimpleTimer.RunSteps(fifteen_mins / 3, false);
            ch0.Send(node1.Address, zero);
            SimpleTimer.RunSteps(fifteen_mins / 60, false);
            Assert.AreEqual(mdh0.Count, 0, "MDH0 2");
            Assert.AreEqual(mdh1.Count, 1, "MDH1 2");
            Assert.IsTrue(Simulator.AreConnected(node0, node1), "Continuous 0");
            SimpleTimer.RunSteps(fifteen_mins / 3, false);
            ch0.Send(node1.Address, zero);
            SimpleTimer.RunSteps(fifteen_mins / 60, false);
            Assert.AreEqual(mdh0.Count, 0, "MDH0 3");
            Assert.AreEqual(mdh1.Count, 2, "MDH1 3");
            Assert.IsTrue(Simulator.AreConnected(node0, node1), "Continuous 1");
            SimpleTimer.RunSteps(fifteen_mins / 3, false);
            ch0.Send(node1.Address, zero);
            SimpleTimer.RunSteps(fifteen_mins / 60, false);
            Assert.AreEqual(mdh0.Count, 0, "MDH0 4");
            Assert.AreEqual(mdh1.Count, 3, "MDH1 4");
            Assert.IsTrue(Simulator.AreConnected(node0, node1), "Continuous 2");
            SimpleTimer.RunSteps(fifteen_mins / 3, false);
            ch1.Send(node0.Address, zero);
            SimpleTimer.RunSteps(fifteen_mins / 60, false);
            Assert.AreEqual(mdh0.Count, 1, "MDH0 5");
            Assert.AreEqual(mdh1.Count, 3, "MDH1 5");
            Assert.IsTrue(Simulator.AreConnected(node0, node1), "Continuous 3");
            SimpleTimer.RunSteps(fifteen_mins * 2, false);
            Assert.IsFalse(Simulator.AreConnected(node0, node1), "Dead");
            Assert.AreEqual(mdh0.Count, 1, "MDH0 6");
            Assert.AreEqual(mdh1.Count, 3, "MDH1 6");
        }
Exemple #4
0
        public void Test()
        {
            int                spi     = SecurityPolicy.DefaultSPI;
            MockSender         sender1 = new MockSender(null, null, null, 2);
            MockSender         sender2 = new MockSender(null, null, null, 2);
            PeerSecAssociation sa1     = new PeerSecAssociation(sender1, null, spi);

            sa1.StateChangeEvent += StateChange;
            sender2.Receiver      = sa1;
            MockDataHandler mdh1 = new MockDataHandler();

            sa1.Subscribe(mdh1, null);
            PeerSecAssociation sa2 = new PeerSecAssociation(sender2, null, spi);

            sender1.Receiver = sa2;
            MockDataHandler mdh2 = new MockDataHandler();

            sa2.Subscribe(mdh2, null);

            byte[]   b    = null;
            Random   rand = new Random();
            MemBlock mb   = null;

            int current_epoch = sa1.CurrentEpoch;

            for (int i = 0; i < 5; i++)
            {
                Setup(sa1, sa2);

                b = new byte[128];
                rand.NextBytes(b);
                mb = MemBlock.Reference(b);
                sa1.Send(mb);

                Assert.IsTrue(mdh2.Contains(mb), "Contains" + i);
                Assert.AreEqual(state, sa1.State, "State == Active" + i);
                Assert.IsFalse(current_epoch == sa1.CurrentEpoch, "Current epoch " + i);
                current_epoch = sa1.CurrentEpoch;
            }

            sa1.CheckState();
            sa1.CheckState();
            b = new byte[128];
            rand.NextBytes(b);
            mb = MemBlock.Reference(b);
            try {
                sa1.Send(mb);
            } catch {}
            Assert.IsTrue(!mdh2.Contains(mb), "Failed!");
            Assert.AreEqual(state, sa1.State, "State == Failed");
        }
Exemple #5
0
        public DtlsOverlordClientServer(bool threaded, bool good_client,
                                        bool good_server, double noisy)
        {
            var server_ch = new OpenSslCertificateHandler();

            if (good_server)
            {
                server_ch.AddSignedCertificate(X509);
            }
            server_ch.AddCACertificate(X509);
            Server   = new DtlsOverlord(Rsa, server_ch, PType);
            ServerIn = new MockDataHandler();
            Server.Subscribe(ServerIn, null);

            var client_ch = new OpenSslCertificateHandler();

            if (good_client)
            {
                client_ch.AddCACertificate(X509);
            }
            client_ch.AddSignedCertificate(X509);
            Client   = new DtlsOverlord(Rsa, client_ch, PType);
            ClientIn = new MockDataHandler();
            Client.Subscribe(ClientIn, null);

            if (threaded)
            {
                ToServer = new ThreadedMockSender(null, null, Server, 1, noisy);
                ToClient = new ThreadedMockSender(ToServer, null, Client, 1, noisy);
            }
            else
            {
                ToServer = new MockSender(null, null, Server, 1, noisy);
                ToClient = new MockSender(ToServer, null, Client, 1, noisy);
            }
            ToServer.ReturnPath = ToClient;
        }
Exemple #6
0
        public void Test()
        {
            Timer           t   = new Timer(Timeout, null, 0, 500);
            PeerSecOverlord so0 = CreateValidSO("valid0");
            PeerSecOverlord so1 = CreateValidSO("valid1");

            //Test block one
            {
                MockSender ms0 = new MockSender(null, null, so1, 0);
                MockSender ms1 = new MockSender(ms0, null, so0, 0);
                ms0.ReturnPath = ms1;

                SecurityAssociation sa0 = so0.CreateSecurityAssociation(ms0);
                SecurityAssociation sa1 = so1.CreateSecurityAssociation(ms1);
                Assert.AreEqual(sa0.State, SecurityAssociation.States.Active, "sa0 should be active!");
                Assert.AreEqual(sa1.State, SecurityAssociation.States.Active, "sa1 should be active!");
                Assert.AreEqual(so0.SACount, 1, "so0 should contain just one!");
                Assert.AreEqual(so1.SACount, 1, "so1 should contain just one!");

                Random rand = new Random();
                byte[] b    = new byte[128];
                rand.NextBytes(b);
                MemBlock mb = MemBlock.Reference(b);
                sa1.Send(mb);

                new SecurityPolicy(12345, "DES", "MD5");
                sa0 = so0.CreateSecurityAssociation(ms0, 12345);
                Assert.AreEqual(sa0.State, SecurityAssociation.States.Active, "sa0 should be active!");
                Assert.AreEqual(so0.SACount, 2, "so0 should contain just one!");
                Assert.AreEqual(so1.SACount, 2, "so1 should contain just one!");

                b = new byte[128];
                rand.NextBytes(b);
                mb = MemBlock.Reference(b);
                sa0.Send(mb);
            }

            // create ~250 valid SAs for one guy...
            for (int i = 2; i < 250; i++)
            {
                PeerSecOverlord so  = CreateValidSO("valid" + i);
                MockSender      msa = new MockSender(null, null, so, 0);
                MockSender      msb = new MockSender(msa, null, so0, 0);
                msa.ReturnPath = msb;

                SecurityAssociation sab = so.CreateSecurityAssociation(msb);
                Assert.AreEqual(sab.State, SecurityAssociation.States.Active, "sab should be active! " + i);
                SecurityAssociation saa = so0.CreateSecurityAssociation(msa);
                Assert.AreEqual(saa.State, SecurityAssociation.States.Active, "saa should be active! " + i);

                MockDataHandler mdha = new MockDataHandler();
                saa.Subscribe(mdha, null);
                MockDataHandler mdhb = new MockDataHandler();
                sab.Subscribe(mdhb, null);

                Random rand = new Random();
                byte[] b    = new byte[128];
                rand.NextBytes(b);
                MemBlock mb = MemBlock.Reference(b);
                sab.Send(mb);
                Assert.IsTrue(mdha.Contains(mb), "mdhb Contains " + i);

                b = new byte[128];
                rand.NextBytes(b);
                mb = MemBlock.Reference(b);
                sab.Send(mb);
                Assert.IsTrue(mdha.Contains(mb), "mdha Contains " + i);
            }

            for (int i = 250; i < 500; i++)
            {
                int             ij  = (250 % 3) + 1;
                PeerSecOverlord so  = CreateInvalidSO("valid" + i, ij);
                MockSender      msa = new MockSender(null, null, so, 0);
                MockSender      msb = new MockSender(msa, null, so0, 0);
                msa.ReturnPath = msb;

                SecurityAssociation sab = so.CreateSecurityAssociation(msb);
                SecurityAssociation saa = so0.CreateSecurityAssociation(msa);
                Assert.AreEqual(sab.State, SecurityAssociation.States.Waiting, "sab should be waiting! " + i);
                Assert.AreEqual(saa.State, SecurityAssociation.States.Waiting, "saa should be waiting! " + i);
            }

            // create ~250 valid SAs for one guy...
            for (int i = 500; i < 750; i++)
            {
                PeerSecOverlord so  = CreateValidSO("valid" + i);
                MockSender      msa = new MockSender(null, null, so, 0);
                MockSender      msb = new MockSender(msa, null, so0, 0);
                msa.ReturnPath = msb;

                SecurityAssociation sab = so.CreateSecurityAssociation(msb);
                Assert.AreEqual(sab.State, SecurityAssociation.States.Active, "sab should be active! " + i);
                SecurityAssociation saa = so0.CreateSecurityAssociation(msa);
                Assert.AreEqual(saa.State, SecurityAssociation.States.Active, "saa should be active! " + i);

                MockDataHandler mdha = new MockDataHandler();
                saa.Subscribe(mdha, null);
                MockDataHandler mdhb = new MockDataHandler();
                sab.Subscribe(mdhb, null);

                Random rand = new Random();
                byte[] b    = new byte[128];
                rand.NextBytes(b);
                MemBlock mb = MemBlock.Reference(b);
                sab.Send(mb);
                Assert.IsTrue(mdha.Contains(mb), "mdhb Contains " + i);

                b = new byte[128];
                rand.NextBytes(b);
                mb = MemBlock.Reference(b);
                sab.Send(mb);
                Assert.IsTrue(mdha.Contains(mb), "mdha Contains " + i);
            }

            Random randr = new Random();

            byte[] br = new byte[128];
            randr.NextBytes(br);
            MemBlock mbr = MemBlock.Reference(br);

            // New logic requires that we call this first, to set all SAs to not
            // running, the following for loop sets all "Active" SAs back to _running
            // Thus keeping the original intent of this test.  The new logic only
            // affects testing paths.
            so0.CheckSAs(DateTime.UtcNow);

            foreach (Dictionary <ISender, PeerSecAssociation> sender_to_sa in so0.SPI.Values)
            {
                foreach (SecurityAssociation sa in sender_to_sa.Values)
                {
                    if (sa.State == SecurityAssociation.States.Active)
                    {
                        sa.Send(mbr);
                    }
                }
            }

            so0.CheckSAs(DateTime.UtcNow);
            Assert.AreEqual(500, so0.SACount, "Count!");

            so0.CheckSAs(DateTime.UtcNow);
            Assert.AreEqual(0, so0.SACount, "Count!");

            t.Dispose();
        }
Exemple #7
0
        public void Test()
        {
            Timer            t   = new Timer(Timeout, null, 0, 500);
            SecurityOverlord so0 = CreateValidSO("valid0");
            SecurityOverlord so1 = CreateValidSO("valid1");

            //Test block one
            {
                MockSender ms0 = new MockSender(null, null, so1, 0);
                MockSender ms1 = new MockSender(ms0, null, so0, 0);
                ms0.ReturnPath = ms1;

                SecurityAssociation sa0 = so0.CreateSecurityAssociation(ms0, true);
                SecurityAssociation sa1 = so1.CreateSecurityAssociation(ms1, true);
                Assert.AreEqual(sa0.State, SecurityAssociation.SAState.Active, "sa0 should be active!");
                Assert.AreEqual(sa1.State, SecurityAssociation.SAState.Active, "sa1 should be active!");
                Assert.AreEqual(so0.SACount, 1, "so0 should contain just one!");
                Assert.AreEqual(so1.SACount, 1, "so1 should contain just one!");

                Random rand = new Random();
                byte[] b    = new byte[128];
                rand.NextBytes(b);
                MemBlock mb = MemBlock.Reference(b);
                sa1.Send(mb);

                new SecurityPolicy(12345, "DES", "MD5");
                sa0 = so0.CreateSecurityAssociation(ms0, 12345, true);
                Assert.AreEqual(sa0.State, SecurityAssociation.SAState.Active, "sa0 should be active!");
                Assert.AreEqual(so0.SACount, 2, "so0 should contain just one!");
                Assert.AreEqual(so1.SACount, 2, "so1 should contain just one!");

                b = new byte[128];
                rand.NextBytes(b);
                mb = MemBlock.Reference(b);
                sa0.Send(mb);
            }

            // create ~250 valid SAs for one guy...
            for (int i = 2; i < 250; i++)
            {
                SecurityOverlord so  = CreateValidSO("valid" + i);
                MockSender       msa = new MockSender(null, null, so, 0);
                MockSender       msb = new MockSender(msa, null, so0, 0);
                msa.ReturnPath = msb;

                SecurityAssociation sab = so.CreateSecurityAssociation(msb, true);
                Assert.AreEqual(sab.State, SecurityAssociation.SAState.Active, "sab should be active! " + i);
                SecurityAssociation saa = so0.CreateSecurityAssociation(msa, true);
                Assert.AreEqual(saa.State, SecurityAssociation.SAState.Active, "saa should be active! " + i);

                MockDataHandler mdha = new MockDataHandler();
                saa.Subscribe(mdha, null);
                MockDataHandler mdhb = new MockDataHandler();
                sab.Subscribe(mdhb, null);

                Random rand = new Random();
                byte[] b    = new byte[128];
                rand.NextBytes(b);
                MemBlock mb = MemBlock.Reference(b);
                sab.Send(mb);
                Assert.IsTrue(mdha.Contains(mb), "mdhb Contains " + i);

                b = new byte[128];
                rand.NextBytes(b);
                mb = MemBlock.Reference(b);
                sab.Send(mb);
                Assert.IsTrue(mdha.Contains(mb), "mdha Contains " + i);
            }

            for (int i = 250; i < 500; i++)
            {
                int ij = (250 % 3) + 1;
                SecurityOverlord so  = CreateInvalidSO("valid" + i, ij);
                MockSender       msa = new MockSender(null, null, so, 0);
                MockSender       msb = new MockSender(msa, null, so0, 0);
                msa.ReturnPath = msb;

                SecurityAssociation sab = so.CreateSecurityAssociation(msb, true);
                SecurityAssociation saa = so0.CreateSecurityAssociation(msa, true);
                Assert.AreEqual(sab.State, SecurityAssociation.SAState.Waiting, "sab should be waiting! " + i);
                Assert.AreEqual(saa.State, SecurityAssociation.SAState.Waiting, "saa should be waiting! " + i);
            }

            // create ~250 valid SAs for one guy...
            for (int i = 500; i < 750; i++)
            {
                SecurityOverlord so  = CreateValidSO("valid" + i);
                MockSender       msa = new MockSender(null, null, so, 0);
                MockSender       msb = new MockSender(msa, null, so0, 0);
                msa.ReturnPath = msb;

                SecurityAssociation sab = so.CreateSecurityAssociation(msb, true);
                Assert.AreEqual(sab.State, SecurityAssociation.SAState.Active, "sab should be active! " + i);
                SecurityAssociation saa = so0.CreateSecurityAssociation(msa, true);
                Assert.AreEqual(saa.State, SecurityAssociation.SAState.Active, "saa should be active! " + i);

                MockDataHandler mdha = new MockDataHandler();
                saa.Subscribe(mdha, null);
                MockDataHandler mdhb = new MockDataHandler();
                sab.Subscribe(mdhb, null);

                Random rand = new Random();
                byte[] b    = new byte[128];
                rand.NextBytes(b);
                MemBlock mb = MemBlock.Reference(b);
                sab.Send(mb);
                Assert.IsTrue(mdha.Contains(mb), "mdhb Contains " + i);

                b = new byte[128];
                rand.NextBytes(b);
                mb = MemBlock.Reference(b);
                sab.Send(mb);
                Assert.IsTrue(mdha.Contains(mb), "mdha Contains " + i);
            }

            Random randr = new Random();

            byte[] br = new byte[128];
            randr.NextBytes(br);
            MemBlock mbr = MemBlock.Reference(br);

            foreach (Dictionary <ISender, SecurityAssociation> sender_to_sa in so0.SPI.Values)
            {
                foreach (SecurityAssociation sa in sender_to_sa.Values)
                {
                    sa.Send(mbr);
                }
            }

            Thread.Sleep(SecurityAssociation.TIMEOUT * 5);
            so0.SAGarbageCollect();
            Assert.AreEqual(500, so0.SACount, "Count!");

            so0.SAGarbageCollect();
            Assert.AreEqual(0, so0.SACount, "Count!");

            t.Dispose();
        }