[TEST] Add converter and decoder subplugins test
authorGichan Jang <gichan2.jang@samsung.com>
Thu, 8 Apr 2021 02:21:45 +0000 (11:21 +0900)
committerjaeyun-jung <39614140+jaeyun-jung@users.noreply.github.com>
Thu, 8 Apr 2021 10:16:14 +0000 (19:16 +0900)
Add tensor converter and decoder subplugin test

Signed-off-by: Gichan Jang <gichan2.jang@samsung.com>
gst/nnstreamer/tensor_converter/tensor_converter.c
tests/nnstreamer_converter/unittest_converter.cc
tests/nnstreamer_decoder/unittest_decoder.cc

index 22fefb4..46bcaa3 100644 (file)
@@ -1897,11 +1897,32 @@ nnstreamer_converter_find (const char *name)
 }
 
 /**
+ * @brief Validate converter sub-plugin's data.
+ */
+static gboolean
+nnstreamer_converter_validate (const NNStreamerExternalConverter * converter)
+{
+  if (!converter || !converter->name) {
+    /* invalid name */
+    return FALSE;
+  }
+
+  if (!converter->query_caps || !converter->get_out_config
+      || !converter->convert) {
+    /* invalid methods in converter sub-plugin */
+    return FALSE;
+  }
+
+  return TRUE;
+}
+
+/**
  * @brief Converter's external subplugins should call this at init.
  */
 int
 registerExternalConverter (NNStreamerExternalConverter * ex)
 {
+  g_return_val_if_fail (nnstreamer_converter_validate (ex), FALSE);
   return register_subplugin (NNS_SUBPLUGIN_CONVERTER, ex->name, ex);
 }
 
index 2ba79ad..c80c2c4 100644 (file)
@@ -14,6 +14,7 @@
 #include <unittest_util.h>\r
 #include <tensor_converter_custom.h>\r
 #include <flatbuffers/flexbuffers.h>\r
+#include <nnstreamer_plugin_api_converter.h>\r
 \r
 #define TEST_TIMEOUT_MS (1000U)\r
 \r
@@ -184,6 +185,147 @@ TEST (tensorConverterCustom, invalidParam3_n)
   EXPECT_NE (0, nnstreamer_converter_custom_unregister ("tconv"));\r
 }\r
 \r
+/** @brief tensor converter plugin's query caps callback */\r
+static GstCaps *\r
+conv_query_caps (const GstTensorsConfig *config)\r
+{\r
+  return NULL;\r
+}\r
+\r
+/** @brief tensor converter plugin's get out caps callback */\r
+static gboolean\r
+conv_get_out_config (const GstCaps *in_cap, GstTensorsConfig *config)\r
+{\r
+  return TRUE;\r
+}\r
+\r
+/** @brief tensor converter plugin's convert callback\r
+ */\r
+static GstBuffer *\r
+conv_convert (GstBuffer *in_buf, gsize *frame_size, guint *frames_in, GstTensorsConfig *config)\r
+{\r
+  return NULL;\r
+}\r
+\r
+/**\r
+ * @brief Get default external converter\r
+ */\r
+static NNStreamerExternalConverter *\r
+get_default_external_converter (const gchar *name)\r
+{\r
+  NNStreamerExternalConverter *sub = g_try_new0 (NNStreamerExternalConverter, 1);\r
+  g_assert (sub);\r
+\r
+  sub->name = (char *) g_strdup (name);\r
+  sub->query_caps = conv_query_caps;\r
+  sub->get_out_config = conv_get_out_config;\r
+  sub->convert = conv_convert;\r
+\r
+  return sub;\r
+}\r
+\r
+/**\r
+ * @brief Free converter subplugin\r
+ */\r
+static void\r
+free_default_external_converter (NNStreamerExternalConverter *sub)\r
+{\r
+  g_free ((char *)sub->name);\r
+  g_free (sub);\r
+}\r
+\r
+/**\r
+ * @brief Test for plugin registration\r
+ */\r
+TEST (tensorConverter, subpluginNoraml)\r
+{\r
+  NNStreamerExternalConverter *sub = get_default_external_converter ("mode");\r
+\r
+  EXPECT_TRUE (registerExternalConverter (sub));\r
+\r
+  unregisterExternalConverter ("mode");\r
+  free_default_external_converter (sub);\r
+}\r
+\r
+/**\r
+ * @brief Test for plugin registration with invalid param\r
+ */\r
+TEST (tensorConverter, subpluginInvalidParam0_n)\r
+{\r
+  EXPECT_FALSE (registerExternalConverter (NULL));\r
+}\r
+\r
+/**\r
+ * @brief Test for plugin registration with invalid param\r
+ */\r
+TEST (tensorConverter, subpluginInvalidParam1_n)\r
+{\r
+  NNStreamerExternalConverter *sub = get_default_external_converter (NULL);\r
+\r
+  EXPECT_FALSE (registerExternalConverter (sub));\r
+\r
+  free_default_external_converter (sub);\r
+}\r
+\r
+/**\r
+ * @brief Test for plugin registration with invalid param\r
+ */\r
+TEST (tensorConverter, subpluginInvalidParam2_n)\r
+{\r
+  NNStreamerExternalConverter *sub = get_default_external_converter ("mode");\r
+\r
+  sub->query_caps = NULL;\r
+  EXPECT_FALSE (registerExternalConverter (sub));\r
+\r
+  free_default_external_converter (sub);\r
+}\r
+\r
+/**\r
+ * @brief Test for plugin registration with invalid param\r
+ */\r
+TEST (tensorConverter, subpluginInvalidParam3_n)\r
+{\r
+  NNStreamerExternalConverter *sub = get_default_external_converter ("mode");\r
+\r
+  sub->get_out_config = NULL;\r
+  EXPECT_FALSE (registerExternalConverter (sub));\r
+\r
+  free_default_external_converter (sub);\r
+}\r
+\r
+/**\r
+ * @brief Test for plugin registration with invalid param\r
+ */\r
+TEST (tensorConverter, subpluginInvalidParam4_n)\r
+{\r
+  NNStreamerExternalConverter *sub = get_default_external_converter ("mode");\r
+\r
+  sub->convert = NULL;\r
+  EXPECT_FALSE (registerExternalConverter (sub));\r
+\r
+  free_default_external_converter (sub);\r
+}\r
+\r
+/**\r
+ * @brief Test for plugin registration with invalid param\r
+ */\r
+TEST (tensorConverter, subpluginInvalidParam5_n)\r
+{\r
+  NNStreamerExternalConverter *sub = get_default_external_converter ("any");\r
+\r
+  EXPECT_FALSE (registerExternalConverter (sub));\r
+\r
+  free_default_external_converter (sub);\r
+}\r
+\r
+/**\r
+ * @brief Test for plugin registration with invalid param\r
+ */\r
+TEST (tensorConverter, subpluginFindInvalidParam_n)\r
+{\r
+  EXPECT_FALSE (nnstreamer_converter_find (NULL));\r
+}\r
+\r
 /**\r
  * @brief Main GTest\r
  */\r
index b0df2c4..8af0f11 100644 (file)
@@ -14,6 +14,7 @@
 #include <unittest_util.h>\r
 #include <tensor_decoder_custom.h>\r
 #include <flatbuffers/flexbuffers.h>\r
+#include <nnstreamer_plugin_api_decoder.h>\r
 \r
 #define TEST_TIMEOUT_MS (1000U)\r
 \r
@@ -175,6 +176,147 @@ TEST (tensorDecoderCustom, invalidParam3_n)
   EXPECT_NE (0, nnstreamer_decoder_custom_unregister ("tdec"));\r
 }\r
 \r
+/** @brief tensordec-plugin's init callback */\r
+static int\r
+decsub_init (void **pdata)\r
+{\r
+  return TRUE;\r
+}\r
+\r
+/** @brief tensordec-plugin's getOutCaps callback */\r
+static GstCaps *\r
+decsub_getOutCaps (void **pdata, const GstTensorsConfig *config)\r
+{\r
+  return NULL;\r
+}\r
+\r
+/** @brief tensordec-plugin's decode callback */\r
+static GstFlowReturn\r
+decsub_decode (void **pdata, const GstTensorsConfig * config,\r
+    const GstTensorMemory * input, GstBuffer * outbuf)\r
+{\r
+  return GST_FLOW_OK;\r
+}\r
+\r
+/**\r
+ * @brief Get default decoder subplugin\r
+ */\r
+static GstTensorDecoderDef *\r
+get_default_decoder (const gchar *name)\r
+{\r
+  GstTensorDecoderDef *sub = g_try_new0 (GstTensorDecoderDef, 1);\r
+  g_assert (sub);\r
+\r
+  sub->modename = (char *) g_strdup (name);\r
+  sub->init = decsub_init;\r
+  sub->getOutCaps = decsub_getOutCaps;\r
+  sub->decode = decsub_decode;\r
+\r
+  return sub;\r
+}\r
+\r
+/**\r
+ * @brief Free decoder subplugin\r
+ */\r
+static void\r
+free_default_decoder (GstTensorDecoderDef *sub)\r
+{\r
+  g_free ((char *)sub->modename);\r
+  g_free (sub);\r
+}\r
+\r
+/**\r
+ * @brief Test for plugin registration\r
+ */\r
+TEST (tensorDecoder, subpluginNoraml)\r
+{\r
+  GstTensorDecoderDef *sub = get_default_decoder ("mode");\r
+\r
+  EXPECT_TRUE (nnstreamer_decoder_probe (sub));\r
+\r
+  nnstreamer_decoder_exit ("mode");\r
+  free_default_decoder (sub);\r
+}\r
+\r
+/**\r
+ * @brief Test for plugin registration with invalid param\r
+ */\r
+TEST (tensorDecoder, probeSubplugInvalidParam0_n)\r
+{\r
+  GstTensorDecoderDef *sub = get_default_decoder (NULL);\r
+\r
+  EXPECT_FALSE (nnstreamer_decoder_probe (sub));\r
+\r
+  free_default_decoder (sub);\r
+}\r
+\r
+/**\r
+ * @brief Test for plugin registration with invalid param\r
+ */\r
+TEST (tensorDecoder, probeSubplugInvalidParam1_n)\r
+{\r
+  GstTensorDecoderDef *sub = get_default_decoder ("mode");\r
+\r
+  sub->init = NULL;\r
+  EXPECT_FALSE (nnstreamer_decoder_probe (sub));\r
+\r
+  free_default_decoder (sub);\r
+}\r
+\r
+/**\r
+ * @brief Test for plugin registration with invalid param\r
+ */\r
+TEST (tensorDecoder, probeSubplugInvalidParam2_n)\r
+{\r
+  GstTensorDecoderDef *sub = get_default_decoder ("mode");\r
+\r
+  sub->getOutCaps = NULL;\r
+  EXPECT_FALSE (nnstreamer_decoder_probe (sub));\r
+\r
+  free_default_decoder (sub);\r
+}\r
+\r
+/**\r
+ * @brief Test for plugin registration with invalid param\r
+ */\r
+TEST (tensorDecoder, probeSubplugInvalidParam3_n)\r
+{\r
+  GstTensorDecoderDef *sub = get_default_decoder ("mode");\r
+\r
+  sub->decode = NULL;\r
+  EXPECT_FALSE (nnstreamer_decoder_probe (sub));\r
+\r
+  free_default_decoder (sub);\r
+}\r
+\r
+/**\r
+ * @brief Test for plugin registration with invalid param\r
+ */\r
+TEST (tensorDecoder, probeSubplugInvalidParam4_n)\r
+{\r
+  GstTensorDecoderDef *sub = get_default_decoder ("any");\r
+\r
+  EXPECT_FALSE (nnstreamer_decoder_probe (sub));\r
+\r
+  free_default_decoder (sub);\r
+}\r
+\r
+/**\r
+ * @brief Test for plugin registration with invalid param\r
+ */\r
+TEST (tensorDecoder, probeSubplugInvalidParam5_n)\r
+{\r
+  EXPECT_FALSE (nnstreamer_decoder_probe (NULL));\r
+}\r
+\r
+/**\r
+ * @brief Test for plugin registration with invalid param\r
+ */\r
+TEST (tensorDecoder, subplugFindInvalidParam_n)\r
+{\r
+  EXPECT_EQ (NULL, nnstreamer_decoder_find (NULL));\r
+}\r
+\r
 /**\r
  * @brief Main GTest\r
  */\r