[Api] flag to check state - started
authorJaeyun Jung <jy1210.jung@samsung.com>
Mon, 20 Mar 2023 05:00:57 +0000 (14:00 +0900)
committerSangjung Woo <again4you@gmail.com>
Mon, 20 Mar 2023 06:01:49 +0000 (15:01 +0900)
Add internal flag to check edge-handle is started.

Signed-off-by: Jaeyun Jung <jy1210.jung@samsung.com>
src/libnnstreamer-edge/nnstreamer-edge-internal.c
tests/unittest_nnstreamer-edge.cc

index 500a36ed11c552097f7bc88b99a72c02d8b0b6db..e682880313aee342abfd7cac3101a1b448a8e3e3 100644 (file)
@@ -49,6 +49,7 @@ typedef struct
   int dest_port; /**< destination port number (broker or target device) */
   nns_edge_node_type_e node_type;
   nns_edge_metadata_h metadata;
+  bool is_started;
 
   /* Edge event callback and user data */
   nns_edge_event_cb event_cb;
@@ -1242,6 +1243,7 @@ nns_edge_create_handle (const char *id, nns_edge_connect_type_e connect_type,
   eh->dest_host = nns_edge_strdup ("localhost");
   eh->dest_port = 0;
   eh->node_type = node_type;
+  eh->is_started = false;
   eh->broker_h = NULL;
   eh->connections = NULL;
   eh->listening = false;
@@ -1358,6 +1360,7 @@ nns_edge_start (nns_edge_h edge_h)
   }
 
 done:
+  eh->is_started = (ret == NNS_EDGE_ERROR_NONE);
   nns_edge_unlock (eh);
   return ret;
 }
@@ -1404,6 +1407,7 @@ nns_edge_release_handle (nns_edge_h edge_h)
   eh->event_cb = NULL;
   eh->user_data = NULL;
   eh->broker_h = NULL;
+  eh->is_started = false;
 
   nns_edge_queue_clear (eh->send_queue);
   if (eh->send_thread) {
@@ -1576,6 +1580,11 @@ nns_edge_connect (nns_edge_h edge_h, const char *dest_host, int dest_port)
   }
 
   nns_edge_lock (eh);
+  if (!eh->is_started) {
+    nns_edge_loge ("Invalid state, the edge handle is not started.");
+    nns_edge_unlock (eh);
+    return NNS_EDGE_ERROR_IO;
+  }
 
   if (!eh->event_cb) {
     nns_edge_loge ("NNStreamer-edge event callback is not registered.");
index 9bd8cdced115dd399d0c851e0790d2cee64f04d9..edc5525258047883217d04647c14d3d86863f779 100644 (file)
@@ -549,6 +549,29 @@ TEST(edge, connectInvalidParam05_n)
   EXPECT_EQ (ret, NNS_EDGE_ERROR_NONE);
 }
 
+/**
+ * @brief Connect - invalid param.
+ */
+TEST(edge, connectInvalidParam06_n)
+{
+  nns_edge_h edge_h;
+  int ret;
+
+  ret = nns_edge_create_handle ("temp-id", NNS_EDGE_CONNECT_TYPE_TCP,
+      NNS_EDGE_NODE_TYPE_QUERY_CLIENT, &edge_h);
+  EXPECT_EQ (ret, NNS_EDGE_ERROR_NONE);
+
+  ret = nns_edge_set_event_callback (edge_h, _test_edge_event_cb, NULL);
+  EXPECT_EQ (ret, NNS_EDGE_ERROR_NONE);
+
+  /* not started */
+  ret = nns_edge_connect (edge_h, "127.0.0.1", 80);
+  EXPECT_NE (ret, NNS_EDGE_ERROR_NONE);
+
+  ret = nns_edge_release_handle (edge_h);
+  EXPECT_EQ (ret, NNS_EDGE_ERROR_NONE);
+}
+
 /**
  * @brief Disconnect - invalid param.
  */