test: add cyclic graph test case 55/315455/1
authorVibhav Aggarwal <v.aggarwal@samsung.com>
Mon, 2 Dec 2024 05:59:07 +0000 (14:59 +0900)
committerVibhav Aggarwal <v.aggarwal@samsung.com>
Mon, 2 Dec 2024 05:59:07 +0000 (14:59 +0900)
Change-Id: Idf2869250763bb2f4d5f6e1745feb676979dd14a
Signed-off-by: Vibhav Aggarwal <v.aggarwal@samsung.com>
test/services/test_task_manager.cpp

index 14d22408dfd6d06c0a4d5c5dc6280822d6b0e444..99795f97cc358819a29ced160c75163680e45626 100644 (file)
@@ -27,6 +27,7 @@
 #include "BridgeNode.h"
 #include "BranchNode.h"
 #include "EndpointNode.h"
+#include "SingleoException.h"
 
 #define IMG_FACE TEST_RES_PATH "/usr/share/capi-media-vision/res/inference/images/faceDetection.jpg"
 #define IMG_BANANA TEST_RES_PATH "/usr/share/capi-media-vision/res/inference/images/banana.jpg"
@@ -591,4 +592,63 @@ TEST(SingloTaskManager, MultipleNodesBasedGraphFShouldWork)
 
                taskManager->clear();
        }
+}
+
+// GraphG:
+//         input  ----> face_detection ----> bridge ----> face_landmark_detection ----> endpoint ----> output
+//                            ↑                 ↓
+//                         bridge <---- face_detection
+TEST(SingloTaskManager, CyclicGraphGShouldNotWork)
+{
+       cv::Mat cv_image = cv::imread(IMG_FACE, cv::IMREAD_COLOR);
+       cv::cvtColor(cv_image, cv_image, cv::COLOR_BGR2RGB);
+       const vector<Point> answer { { 243, 133 }, { 404, 135 }, { 347, 197 }, { 250, 266 }, { 385, 266 } };
+
+       ASSERT_FALSE(cv_image.empty());
+
+       ImageDataType image_data;
+
+       image_data.width = cv_image.cols;
+       image_data.height = cv_image.rows;
+       image_data.byte_per_pixel = cv_image.channels();
+       image_data.ptr = cv_image.data;
+
+       auto factory = InferenceTaskFactory::instance().create("MvInferenceTaskFactory");
+
+       auto taskManager = make_unique<TaskManager>();
+
+       taskManager->requestNewNode(NodeType::STARTPOINT, "startpoint");
+
+       auto face_detection_node_a = taskManager->requestNewNode(NodeType::INFERENCE, "face_detectionA");
+       dynamic_cast<InferenceNode *>(face_detection_node_a)->setInferenceTask(factory->createFaceDetection());
+
+       auto face_detection_node_b = taskManager->requestNewNode(NodeType::INFERENCE, "face_detectionB");
+       dynamic_cast<InferenceNode *>(face_detection_node_b)->setInferenceTask(factory->createFaceDetection());
+
+       auto bridge_node_a = taskManager->requestNewNode(NodeType::BRIDGE, "bridgeA");
+       dynamic_cast<BridgeNode *>(bridge_node_a)->setCb(BridgeNodeCallbackFD);
+
+       auto bridge_node_b = taskManager->requestNewNode(NodeType::BRIDGE, "bridgeB");
+       dynamic_cast<BridgeNode *>(bridge_node_b)->setCb(BridgeNodeCallbackFD);
+
+       auto face_landmark_node = taskManager->requestNewNode(NodeType::INFERENCE, "face_landmark");
+       dynamic_cast<InferenceNode *>(face_landmark_node)->setInferenceTask(factory->createFaceLandmarkDetection());
+
+       taskManager->requestNewNode(NodeType::ENDPOINT, "endpoint");
+
+       taskManager->resetPipeline();
+
+       taskManager->addEdge("startpoint", "face_detectionA");
+       taskManager->addEdge("face_detectionA", "bridgeA");
+       taskManager->addEdge("bridgeA", "face_landmark");
+       taskManager->addEdge("face_landmark", "endpoint");
+       taskManager->addEdge("bridgeA", "face_detectionB");
+       taskManager->addEdge("face_detectionB", "bridgeB");
+       taskManager->addEdge("bridgeB", "face_detectionA");
+
+       taskManager->addInput(image_data);
+
+       EXPECT_THROW(taskManager->run(), singleo::exception::InvalidOperation);
+
+       taskManager->clear();
 }
\ No newline at end of file