Add working TopicTree unit test
This commit is contained in:
+3
-3
@@ -1,9 +1,9 @@
|
|||||||
default:
|
default:
|
||||||
#$(CXX) -std=c++17 -fsanitize=address TopicTree.cpp -o TopicTree
|
$(CXX) -std=c++17 -fsanitize=address TopicTree.cpp -o TopicTree
|
||||||
#./TopicTree
|
./TopicTree
|
||||||
$(CXX) -std=c++17 -fsanitize=address HttpRouter.cpp -o HttpRouter
|
$(CXX) -std=c++17 -fsanitize=address HttpRouter.cpp -o HttpRouter
|
||||||
./HttpRouter
|
./HttpRouter
|
||||||
$(CXX) -std=c++17 -fsanitize=address BloomFilter.cpp -o BloomFilter
|
$(CXX) -std=c++17 -fsanitize=address BloomFilter.cpp -o BloomFilter
|
||||||
./BloomFilter
|
./BloomFilter
|
||||||
$(CXX) -std=c++17 -fsanitize=address ExtensionsNegotiator.cpp -o ExtensionsNegotiator
|
$(CXX) -std=c++17 -fsanitize=address ExtensionsNegotiator.cpp -o ExtensionsNegotiator
|
||||||
./ExtensionsNegotiator
|
./ExtensionsNegotiator
|
||||||
|
|||||||
+66
-8
@@ -7,14 +7,16 @@ void testUnsubscribeInside() {
|
|||||||
std::cout << "TestUnsubscribeInside" << std::endl;
|
std::cout << "TestUnsubscribeInside" << std::endl;
|
||||||
|
|
||||||
uWS::TopicTree *topicTree;
|
uWS::TopicTree *topicTree;
|
||||||
std::map<void *, std::string> expectedResult;
|
std::map<void *, std::pair<std::string, std::string>> expectedResult;
|
||||||
|
|
||||||
|
topicTree = new uWS::TopicTree([&topicTree, &expectedResult](uWS::Subscriber *s, std::pair<std::string_view, std::string_view> dataChannels) {
|
||||||
|
std::string_view data = dataChannels.second;
|
||||||
|
|
||||||
topicTree = new uWS::TopicTree([&topicTree, &expectedResult](uWS::Subscriber *s, std::string_view data) {
|
|
||||||
/* Check for unexpected subscribers */
|
/* Check for unexpected subscribers */
|
||||||
assert(expectedResult.find(s) != expectedResult.end());
|
assert(expectedResult.find(s) != expectedResult.end());
|
||||||
|
|
||||||
/* Check for unexpected data */
|
/* Check for unexpected data */
|
||||||
assert(expectedResult[s] == data);
|
assert(expectedResult[s].first == dataChannels.first && expectedResult[s].second == dataChannels.second);
|
||||||
|
|
||||||
/* This one causes mess-up */
|
/* This one causes mess-up */
|
||||||
topicTree->unsubscribeAll(s);
|
topicTree->unsubscribeAll(s);
|
||||||
@@ -28,8 +30,8 @@ void testUnsubscribeInside() {
|
|||||||
|
|
||||||
/* Fill out expectedResult */
|
/* Fill out expectedResult */
|
||||||
expectedResult = {
|
expectedResult = {
|
||||||
{s1, "Ett!"},
|
{s1, {"Ett!", "Ett!"}},
|
||||||
{s2, "Två!"}
|
{s2, {"Två!", "Två!"}}
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Make sure s1 < s2 */
|
/* Make sure s1 < s2 */
|
||||||
@@ -44,8 +46,62 @@ void testUnsubscribeInside() {
|
|||||||
topicTree->subscribe("1", s1);
|
topicTree->subscribe("1", s1);
|
||||||
|
|
||||||
/* This order matters, as it fills triggeredTopics array in order */
|
/* This order matters, as it fills triggeredTopics array in order */
|
||||||
topicTree->publish("1", "Ett!");
|
topicTree->publish("1", {std::string_view("Ett!"), std::string_view("Ett!")});
|
||||||
topicTree->publish("2", "Två!");
|
topicTree->publish("2", {std::string_view("Två!"), std::string_view("Ett!")});
|
||||||
|
|
||||||
|
topicTree->drain();
|
||||||
|
|
||||||
|
/* Release resources */
|
||||||
|
topicTree->unsubscribeAll(s1);
|
||||||
|
topicTree->unsubscribeAll(s2);
|
||||||
|
|
||||||
|
delete s1;
|
||||||
|
delete s2;
|
||||||
|
|
||||||
|
delete topicTree;
|
||||||
|
}
|
||||||
|
|
||||||
|
void testPublisherHoles() {
|
||||||
|
std::cout << "TestPublisherHoles" << std::endl;
|
||||||
|
|
||||||
|
uWS::TopicTree *topicTree;
|
||||||
|
std::map<void *, std::pair<std::string, std::string>> expectedResult;
|
||||||
|
|
||||||
|
topicTree = new uWS::TopicTree([&topicTree, &expectedResult](uWS::Subscriber *s, std::pair<std::string_view, std::string_view> dataChannels) {
|
||||||
|
|
||||||
|
/* Check for unexpected subscribers */
|
||||||
|
assert(expectedResult.find(s) != expectedResult.end());
|
||||||
|
|
||||||
|
/* Check for unexpected data */
|
||||||
|
assert(expectedResult[s].first == dataChannels.first && expectedResult[s].second == dataChannels.second);
|
||||||
|
|
||||||
|
/* We actually don't use this one */
|
||||||
|
return 0;
|
||||||
|
});
|
||||||
|
|
||||||
|
uWS::Subscriber *s1 = new uWS::Subscriber(nullptr);
|
||||||
|
uWS::Subscriber *s2 = new uWS::Subscriber(nullptr);
|
||||||
|
|
||||||
|
/* Fill out expectedResult */
|
||||||
|
expectedResult = {
|
||||||
|
{s1, {"Två!", "Två!"}}, // todo: this one should not receive what he sent himself
|
||||||
|
{s2, {"Två!", "Två!"}}
|
||||||
|
};
|
||||||
|
|
||||||
|
/* Make sure s1 < s2 */
|
||||||
|
if (s2 < s1) {
|
||||||
|
uWS::Subscriber *tmp = s1;
|
||||||
|
s1 = s2;
|
||||||
|
s2 = tmp;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* This order does not matter as it fills a tree */
|
||||||
|
topicTree->subscribe("1", s2);
|
||||||
|
topicTree->subscribe("1", s1);
|
||||||
|
|
||||||
|
/* This order matters, as it fills triggeredTopics array in order */
|
||||||
|
//topicTree->publish("1", {std::string_view("Ett!"), std::string_view("Ett!")});
|
||||||
|
topicTree->publish("1", {std::string_view("Två!"), std::string_view("Två!")});
|
||||||
|
|
||||||
topicTree->drain();
|
topicTree->drain();
|
||||||
|
|
||||||
@@ -60,5 +116,7 @@ void testUnsubscribeInside() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
int main() {
|
int main() {
|
||||||
testUnsubscribeInside();
|
//testUnsubscribeInside();
|
||||||
|
|
||||||
|
testPublisherHoles();
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user