Exemplo n.º 1
0
        public void PublishSubscribeTest()
        {
            MyBroker.Reset();

            string identifier1 = "topic1";
            string identifier2 = "topic2";

            Publisher <string> publisher1 = new Publisher <string>("Publisher1");
            Publisher <string> publisher2 = new Publisher <string>("Publisher2");

            Subscriber <string> subscriber1 = new TestSubscriber("Subscriber1");
            Subscriber <string> subscriber2 = new TestSubscriber("Subscriber2");
            Subscriber <string> subscriber3 = new TestSubscriber("Subscriber3");
            Subscriber <string> subscriber4 = new TestSubscriber("Subscriber4");

            MyBroker.Instance.Register(publisher1, identifier1);
            MyBroker.Instance.Register(publisher1, identifier2);
            MyBroker.Instance.Register(publisher2, identifier2);

            MyBroker.Instance.Subscribe(subscriber1, identifier1);
            MyBroker.Instance.Subscribe(subscriber2, identifier2);
            MyBroker.Instance.Subscribe(subscriber3, identifier1);
            MyBroker.Instance.Subscribe(subscriber3, identifier2);
            MyBroker.Instance.Subscribe(subscriber4, identifier2);

            TestTopic testTopic1;
            TestTopic testTopic2;

            MyBroker.Instance.Publish(publisher1, testTopic1 = new TestTopic(identifier1, "(testTopic1)" + GetCallSite()));
            MyBroker.Instance.Publish(publisher2, testTopic2 = new TestTopic(identifier2, "(testTopic2)" + GetCallSite()));

            Assert.IsTrue(testTopic1.Notifications == 2);
            Assert.IsTrue(testTopic2.Notifications == 3);

            MyBroker.Instance.Unsubscribe();

            MyBroker.Instance.Subscribe(subscriber1, identifier1, publisher1);
            MyBroker.Instance.Subscribe(subscriber1, identifier2, publisher1);
            MyBroker.Instance.Subscribe(subscriber2, identifier1, publisher2);
            MyBroker.Instance.Subscribe(subscriber3, identifier2, publisher1);
            MyBroker.Instance.Subscribe(subscriber4, identifier2, publisher2);

            MyBroker.Instance.Publish(publisher1, testTopic1 = new TestTopic(identifier1, "(testTopic1)" + GetCallSite()));

            Assert.IsTrue(testTopic1.Notifications == 1);

            MyBroker.Instance.Publish(publisher1, testTopic2 = new TestTopic(identifier2, "(testTopic2)" + GetCallSite()));

            Assert.IsTrue(testTopic2.Notifications == 2);

            MyBroker.Instance.Publish(publisher2, testTopic2 = new TestTopic(identifier2, "(testTopic2)" + GetCallSite()));

            Assert.IsTrue(testTopic2.Notifications == 1);
        }
Exemplo n.º 2
0
        public void SubscribeUnsubscribeTest()
        {
            MyBroker.Reset();

            string topicIdentifier1 = "Topic1";
            string topicIdentifier2 = "Topic2";

            // Create publishers

            Publisher <string> publisher1 = new Publisher <string>("Publisher1");
            Publisher <string> publisher2 = new Publisher <string>("Publisher2");

            // Register publishers

            MyBroker.Instance.Register(publisher1, topicIdentifier1);

            // Create subscribers

            Subscriber <string> subscriber1 = new TestSubscriber("Subscriber1");
            Subscriber <string> subscriber2 = new TestSubscriber("Subscriber2");
            Subscriber <string> subscriber3 = new TestSubscriber("Subscriber3");
            Subscriber <string> subscriber4 = new TestSubscriber("Subscriber4");

            // Ensure nothing is subscribed to the topics

            Assert.IsFalse(MyBroker.Instance.IsSubscribed());

            Assert.IsFalse(MyBroker.Instance.IsSubscribed(topicIdentifier1));
            Assert.IsFalse(MyBroker.Instance.IsSubscribed(topicIdentifier2));

            Assert.IsFalse(MyBroker.Instance.IsSubscribed(subscriber1));
            Assert.IsFalse(MyBroker.Instance.IsSubscribed(subscriber2));
            Assert.IsFalse(MyBroker.Instance.IsSubscribed(subscriber3));
            Assert.IsFalse(MyBroker.Instance.IsSubscribed(subscriber4));

            Assert.IsFalse(MyBroker.Instance.IsSubscribed(subscriber1, topicIdentifier1));
            Assert.IsFalse(MyBroker.Instance.IsSubscribed(subscriber1, topicIdentifier2));
            Assert.IsFalse(MyBroker.Instance.IsSubscribed(subscriber2, topicIdentifier1));
            Assert.IsFalse(MyBroker.Instance.IsSubscribed(subscriber2, topicIdentifier2));
            Assert.IsFalse(MyBroker.Instance.IsSubscribed(subscriber3, topicIdentifier1));
            Assert.IsFalse(MyBroker.Instance.IsSubscribed(subscriber3, topicIdentifier2));
            Assert.IsFalse(MyBroker.Instance.IsSubscribed(subscriber4, topicIdentifier1));
            Assert.IsFalse(MyBroker.Instance.IsSubscribed(subscriber4, topicIdentifier2));

            // Subscribe subscriber1 to topicIdentifier1

            MyBroker.Instance.Subscribe(subscriber1, topicIdentifier1);

            // Ensure subscriber1 was subscribed to topicIdentifier1

            Assert.IsTrue(MyBroker.Instance.IsSubscribed());

            Assert.IsTrue(MyBroker.Instance.IsSubscribed(topicIdentifier1));
            Assert.IsFalse(MyBroker.Instance.IsSubscribed(topicIdentifier2));

            Assert.IsTrue(MyBroker.Instance.IsSubscribed(subscriber1));
            Assert.IsFalse(MyBroker.Instance.IsSubscribed(subscriber2));
            Assert.IsFalse(MyBroker.Instance.IsSubscribed(subscriber3));
            Assert.IsFalse(MyBroker.Instance.IsSubscribed(subscriber4));

            Assert.IsTrue(MyBroker.Instance.IsSubscribed(subscriber1, topicIdentifier1));
            Assert.IsFalse(MyBroker.Instance.IsSubscribed(subscriber1, topicIdentifier2));
            Assert.IsFalse(MyBroker.Instance.IsSubscribed(subscriber2, topicIdentifier1));
            Assert.IsFalse(MyBroker.Instance.IsSubscribed(subscriber2, topicIdentifier2));
            Assert.IsFalse(MyBroker.Instance.IsSubscribed(subscriber3, topicIdentifier1));
            Assert.IsFalse(MyBroker.Instance.IsSubscribed(subscriber3, topicIdentifier2));
            Assert.IsFalse(MyBroker.Instance.IsSubscribed(subscriber4, topicIdentifier1));
            Assert.IsFalse(MyBroker.Instance.IsSubscribed(subscriber4, topicIdentifier2));

            MyBroker.Instance.Subscribe(subscriber2, topicIdentifier1);
            MyBroker.Instance.Subscribe(subscriber2, topicIdentifier2);
            MyBroker.Instance.Subscribe(subscriber3, topicIdentifier1);
            MyBroker.Instance.Subscribe(subscriber3, topicIdentifier2);
            MyBroker.Instance.Subscribe(subscriber4, topicIdentifier2);

            Assert.IsTrue(MyBroker.Instance.SubscriberCount() == 4);
        }
Exemplo n.º 3
0
        public void RegisterUnregisterTest()
        {
            MyBroker.Reset();

            string topicIdentifier1 = "Topic1";
            string topicIdentifier2 = "Topic2";

            // Create publisher1

            Publisher <string> publisher1 = new Publisher <string>("Publisher1");

            // Ensure publisher1 is not registered to Topic1 nor any other publishers are registered

            Assert.IsFalse(MyBroker.Instance.IsRegistered(publisher1, topicIdentifier1));
            Assert.IsTrue(MyBroker.Instance.PublisherCount(topicIdentifier1) == 0);
            Assert.IsTrue(MyBroker.Instance.PublisherCount() == 0);
            Assert.IsTrue(MyBroker.Instance.Publishers(topicIdentifier1).Count == 0);
            Assert.IsTrue(MyBroker.Instance.Publishers().Count == 0);

            // Register publisher1 for topicIdentifier1

            MyBroker.Instance.Register(publisher1, topicIdentifier1);

            // Ensure publisher1 was registered

            Assert.IsTrue(MyBroker.Instance.IsRegistered(publisher1, topicIdentifier1));
            Assert.IsTrue(MyBroker.Instance.PublisherCount(topicIdentifier1) == 1);
            Assert.IsTrue(MyBroker.Instance.PublisherCount() == 1);
            Assert.IsTrue(MyBroker.Instance.Publishers(topicIdentifier1).Count == 1);
            Assert.IsTrue(MyBroker.Instance.Publishers().Count == 1);

            // Ensure re-registering publisher1 has no effect

            MyBroker.Instance.Register(publisher1, topicIdentifier1);

            Assert.IsTrue(MyBroker.Instance.IsRegistered(publisher1, topicIdentifier1));
            Assert.IsTrue(MyBroker.Instance.PublisherCount(topicIdentifier1) == 1);
            Assert.IsTrue(MyBroker.Instance.PublisherCount() == 1);
            Assert.IsTrue(MyBroker.Instance.Publishers(topicIdentifier1).Count == 1);
            Assert.IsTrue(MyBroker.Instance.Publishers().Count == 1);
            // Create publisher2

            Publisher <string> publisher2 = new Publisher <string>("Publisher2");

            // Ensure this publisher2 is not registered to Topic2

            Assert.IsFalse(MyBroker.Instance.IsRegistered(publisher2, topicIdentifier2));
            Assert.IsTrue(MyBroker.Instance.PublisherCount(topicIdentifier2) == 0);

            // Register publisher2 for topicIdentifier1 and topicIdentifier2

            MyBroker.Instance.Register(publisher2, topicIdentifier1);
            MyBroker.Instance.Register(publisher2, topicIdentifier2);

            // Ensure publisher2 was registered

            Assert.IsTrue(MyBroker.Instance.IsRegistered(publisher2, topicIdentifier1));
            Assert.IsTrue(MyBroker.Instance.IsRegistered(publisher2, topicIdentifier2));
            Assert.IsTrue(MyBroker.Instance.PublisherCount(topicIdentifier1) == 2);
            Assert.IsTrue(MyBroker.Instance.PublisherCount(topicIdentifier2) == 1);
            Assert.IsTrue(MyBroker.Instance.PublisherCount() == 2);
            Assert.IsTrue(MyBroker.Instance.Publishers(topicIdentifier1).Count == 2);
            Assert.IsTrue(MyBroker.Instance.Publishers(topicIdentifier2).Count == 1);
            Assert.IsTrue(MyBroker.Instance.Publishers().Count == 2);

            // Unregister publisher1 form topicIdentifier1

            MyBroker.Instance.Unregister(publisher1, topicIdentifier1);

            // Ensure pubisher1 was unregistered

            Assert.IsFalse(MyBroker.Instance.IsRegistered(publisher1, topicIdentifier1));
            Assert.IsTrue(MyBroker.Instance.PublisherCount(topicIdentifier1) == 1);
            Assert.IsTrue(MyBroker.Instance.PublisherCount() == 1);
            Assert.IsTrue(MyBroker.Instance.Publishers(topicIdentifier1).Count == 1);
            Assert.IsTrue(MyBroker.Instance.Publishers().Count == 1);

            // Unregister publisher2 form topicIdentifier1

            MyBroker.Instance.Unregister(publisher2, topicIdentifier1);

            // Ensure pubisher2 was unregistered

            Assert.IsFalse(MyBroker.Instance.IsRegistered(publisher2, topicIdentifier1));
            Assert.IsTrue(MyBroker.Instance.PublisherCount(topicIdentifier1) == 0);
            Assert.IsTrue(MyBroker.Instance.PublisherCount() == 1);
            Assert.IsTrue(MyBroker.Instance.Publishers(topicIdentifier1).Count == 0);
            Assert.IsTrue(MyBroker.Instance.Publishers().Count == 1);

            // Unregister publisher2 form topicIdentifier2

            MyBroker.Instance.Unregister(publisher2, topicIdentifier2);

            // Ensure pubisher2 was unregistered

            Assert.IsFalse(MyBroker.Instance.IsRegistered(publisher2, topicIdentifier2));
            Assert.IsTrue(MyBroker.Instance.PublisherCount(topicIdentifier2) == 0);
            Assert.IsTrue(MyBroker.Instance.PublisherCount() == 0);
            Assert.IsTrue(MyBroker.Instance.Publishers(topicIdentifier2).Count == 0);
            Assert.IsTrue(MyBroker.Instance.Publishers().Count == 0);

            // Reregister publisher1 and 2 as before

            MyBroker.Instance.Register(publisher1, topicIdentifier1);
            MyBroker.Instance.Register(publisher2, topicIdentifier1);
            MyBroker.Instance.Register(publisher2, topicIdentifier2);

            // Ensure publisher 1 and publisher2 are registered

            Assert.IsTrue(MyBroker.Instance.IsRegistered(publisher1, topicIdentifier1));
            Assert.IsTrue(MyBroker.Instance.IsRegistered(publisher2, topicIdentifier1));
            Assert.IsTrue(MyBroker.Instance.IsRegistered(publisher2, topicIdentifier2));
            Assert.IsTrue(MyBroker.Instance.PublisherCount(topicIdentifier1) == 2);
            Assert.IsTrue(MyBroker.Instance.PublisherCount(topicIdentifier2) == 1);
            Assert.IsTrue(MyBroker.Instance.PublisherCount() == 2);
            Assert.IsTrue(MyBroker.Instance.Publishers(topicIdentifier1).Count == 2);
            Assert.IsTrue(MyBroker.Instance.Publishers(topicIdentifier2).Count == 1);
            Assert.IsTrue(MyBroker.Instance.Publishers().Count == 2);

            // Unregister publisher2 from all topics

            MyBroker.Instance.Unregister(publisher2);

            // Ensure publisher2 was unregistered

            Assert.IsTrue(MyBroker.Instance.IsRegistered(publisher1, topicIdentifier1));
            Assert.IsFalse(MyBroker.Instance.IsRegistered(publisher2, topicIdentifier1));
            Assert.IsFalse(MyBroker.Instance.IsRegistered(publisher2, topicIdentifier2));
            Assert.IsTrue(MyBroker.Instance.PublisherCount(topicIdentifier1) == 1);
            Assert.IsTrue(MyBroker.Instance.PublisherCount(topicIdentifier2) == 0);
            Assert.IsTrue(MyBroker.Instance.PublisherCount() == 1);
            Assert.IsTrue(MyBroker.Instance.Publishers(topicIdentifier1).Count == 1);
            Assert.IsTrue(MyBroker.Instance.Publishers(topicIdentifier2).Count == 0);
            Assert.IsTrue(MyBroker.Instance.Publishers().Count == 1);

            // Unregister publisher1 from all topics

            MyBroker.Instance.Unregister(publisher1);

            // Ensure publisher1 was unregistered

            Assert.IsFalse(MyBroker.Instance.IsRegistered(publisher1, topicIdentifier1));
            Assert.IsTrue(MyBroker.Instance.PublisherCount(topicIdentifier1) == 0);
            Assert.IsTrue(MyBroker.Instance.PublisherCount() == 0);
            Assert.IsTrue(MyBroker.Instance.Publishers(topicIdentifier1).Count == 0);
            Assert.IsTrue(MyBroker.Instance.Publishers().Count == 0);

            // Reregister publisher1 and 2 as before

            MyBroker.Instance.Register(publisher1, topicIdentifier1);
            MyBroker.Instance.Register(publisher2, topicIdentifier1);
            MyBroker.Instance.Register(publisher2, topicIdentifier2);

            // Ensure publisher 1 and publisher2 are registered

            Assert.IsTrue(MyBroker.Instance.IsRegistered(publisher1, topicIdentifier1));
            Assert.IsTrue(MyBroker.Instance.IsRegistered(publisher2, topicIdentifier1));
            Assert.IsTrue(MyBroker.Instance.IsRegistered(publisher2, topicIdentifier2));
            Assert.IsTrue(MyBroker.Instance.PublisherCount(topicIdentifier1) == 2);
            Assert.IsTrue(MyBroker.Instance.PublisherCount(topicIdentifier2) == 1);
            Assert.IsTrue(MyBroker.Instance.PublisherCount() == 2);
            Assert.IsTrue(MyBroker.Instance.Publishers(topicIdentifier1).Count == 2);
            Assert.IsTrue(MyBroker.Instance.Publishers(topicIdentifier2).Count == 1);
            Assert.IsTrue(MyBroker.Instance.Publishers().Count == 2);

            // Unregister publisher1 and publisher2 from all topics

            MyBroker.Instance.Unregister();

            // Ensure publisher1 and publisher2 were unregistered

            Assert.IsFalse(MyBroker.Instance.IsRegistered(publisher1, topicIdentifier1));
            Assert.IsFalse(MyBroker.Instance.IsRegistered(publisher2, topicIdentifier1));
            Assert.IsFalse(MyBroker.Instance.IsRegistered(publisher2, topicIdentifier2));
            Assert.IsTrue(MyBroker.Instance.PublisherCount(topicIdentifier1) == 0);
            Assert.IsTrue(MyBroker.Instance.PublisherCount(topicIdentifier2) == 0);
            Assert.IsTrue(MyBroker.Instance.PublisherCount() == 0);
            Assert.IsTrue(MyBroker.Instance.Publishers(topicIdentifier1).Count == 0);
            Assert.IsTrue(MyBroker.Instance.Publishers(topicIdentifier2).Count == 0);
            Assert.IsTrue(MyBroker.Instance.Publishers().Count == 0);
        }