MulticasterTest.cpp
上传用户:dzyhzl
上传日期:2019-04-29
资源大小:56270k
文件大小:5k
源码类别:

模拟服务器

开发平台:

C/C++

  1. #include "MulticasterTest.h"
  2. #include "TestSuite.h"
  3. MulticasterTest::MulticasterTest (std::string name)
  4. : TestCase (name)
  5. {
  6. }
  7. MulticasterTest::~MulticasterTest()
  8. {
  9. }
  10. void MulticasterTest::setUp ()
  11. {
  12.     m_multicaster = new Multicaster;
  13.     m_o1          = new Observer;
  14.     m_o2          = new Observer;
  15.     m_o3          = new Observer;
  16.     m_o4          = new Observer;
  17. }
  18. void MulticasterTest::tearDown ()
  19. {
  20.     delete m_o4;
  21.     delete m_o3;
  22.     delete m_o2;
  23.     delete m_o1;
  24.     delete m_multicaster;
  25. }
  26. void MulticasterTest::testSinglePublish ()
  27. {
  28.     // Make sure we can subscribe and publish to an address
  29.     Value value;
  30.     assert (m_multicaster->subscribe (m_o1, "alpha"));
  31.     assert (m_multicaster->publish (NULL, "alpha", value));
  32.     assert (*m_o1 == Observer ("alpha", 1));
  33. }
  34. void MulticasterTest::testMultipleHomogenousPublish ()
  35. {
  36.     // Make sure we can multicast to an address
  37.     Value value;
  38.     assert (m_multicaster->subscribe (m_o1, "alpha"));
  39.     assert (m_multicaster->subscribe (m_o2, "alpha"));
  40.     assert (m_multicaster->subscribe (m_o3, "alpha"));
  41.     assert (m_multicaster->subscribe (m_o4, "alpha"));
  42.     assert (m_multicaster->publish (NULL, "alpha", value));
  43.     assert (*m_o1 == Observer ("alpha", 1));
  44.     assert (*m_o2 == Observer ("alpha", 1));
  45.     assert (*m_o3 == Observer ("alpha", 1));
  46.     assert (*m_o4 == Observer ("alpha", 1));
  47. }
  48. void MulticasterTest::testMultipleHeterogenousPublish ()
  49. {
  50.     // Make sure we can multicast to several addresses at once
  51.     Value value;
  52.     assert (m_multicaster->subscribe (m_o1, "alpha"));
  53.     assert (m_multicaster->subscribe (m_o2, "beta"));
  54.     assert (m_multicaster->subscribe (m_o3, "alpha"));
  55.     assert (m_multicaster->subscribe (m_o4, "beta"));
  56.     assert (m_multicaster->publish (NULL, "alpha", value));
  57.     assert (*m_o1 == Observer ("alpha", 1));
  58.     assert (*m_o2 == Observer ());
  59.     assert (*m_o3 == Observer ("alpha", 1));
  60.     assert (*m_o4 == Observer ());
  61. }
  62. void MulticasterTest::testSingleUnsubscribe ()
  63. {
  64.     // Make sure we can unsubscribe one of two observers on the same address
  65.     Value value;
  66.     assert (m_multicaster->subscribe (m_o1, "alpha"));
  67.     assert (m_multicaster->subscribe (m_o2, "alpha"));
  68.     assert (m_multicaster->unsubscribe (m_o1, "alpha"));
  69.     assert (m_multicaster->publish (NULL, "alpha", value));
  70.     assert (*m_o1 == Observer ());
  71.     assert (*m_o2 == Observer ("alpha", 1));
  72. }
  73. void MulticasterTest::testMultipleUnsubscribe ()
  74. {
  75.     // Make sure we unsubscribe all occurrences of an observer on the same address
  76.     Value value;
  77.     assert (m_multicaster->subscribe (m_o1, "alpha"));
  78.     assert (m_multicaster->subscribe (m_o1, "alpha"));
  79.     assert (m_multicaster->unsubscribe (m_o1, "alpha"));
  80.     assert (m_multicaster->publish (NULL, "alpha", value));
  81.     assert (*m_o1 == Observer ());
  82. }
  83. void MulticasterTest::testSimpleUnsubscribeAll ()
  84. {
  85.     // Make sure we unsubscribe all occurrences of an observer on all addresses
  86.     Value value;
  87.     assert (m_multicaster->subscribe (m_o1, "alpha"));
  88.     assert (m_multicaster->subscribe (m_o1, "beck"));
  89.     assert (m_multicaster->subscribe (m_o1, "gamma"));
  90.     m_multicaster->unsubscribeFromAll (m_o1);
  91.     assert (m_multicaster->publish (NULL, "alpha", value));
  92.     assert (m_multicaster->publish (NULL, "beck", value));
  93.     assert (m_multicaster->publish (NULL, "gamma", value));
  94.     assert (*m_o1 == Observer ());
  95. }
  96. void MulticasterTest::testComplexUnsubscribeAll ()
  97. {
  98.     // Make sure we unsubscribe all occurrences of an observer on all addresses
  99.     // in the presence of many observers
  100.     Value value;
  101.     assert (m_multicaster->subscribe (m_o1, "alpha"));
  102.     assert (m_multicaster->subscribe (m_o1, "beck"));
  103.     assert (m_multicaster->subscribe (m_o1, "gamma"));
  104.     assert (m_multicaster->subscribe (m_o2, "beck"));
  105.     assert (m_multicaster->subscribe (m_o2, "gamma"));
  106.     assert (m_multicaster->subscribe (m_o2, "demeter"));
  107.     m_multicaster->unsubscribeFromAll (m_o2);
  108.     assert (m_multicaster->publish (NULL, "alpha", value));
  109.     assert (m_multicaster->publish (NULL, "beck", value));
  110.     assert (m_multicaster->publish (NULL, "gamma", value));
  111.     assert (m_multicaster->publish (NULL, "demeter", value));
  112.     assert (*m_o1 == Observer ("gamma", 3));
  113.     assert (*m_o2 == Observer ());
  114. }
  115. Test *MulticasterTest::suite ()
  116. {
  117.     TestSuite *suite = new TestSuite ("Multicaster");
  118.     suite->addTest (new MulticasterTest("testSinglePublish"));
  119.     suite->addTest (new MulticasterTest("testMultipleHomogenousPublish"));
  120.     suite->addTest (new MulticasterTest("testMultipleHeterogenousPublish"));
  121.     suite->addTest (new MulticasterTest("testSingleUnsubscribe"));
  122.     suite->addTest (new MulticasterTest("testMultipleUnsubscribe"));
  123.     suite->addTest (new MulticasterTest("testSimpleUnsubscribeAll"));
  124.     suite->addTest (new MulticasterTest("testComplexUnsubscribeAll"));
  125.     return suite;
  126. }