[UTC][nnstreamer][ACR-1456][add feature check function for each testcases] 55/214555/2
authorHyoungJoo Ahn <hello.ahn@samsung.com>
Tue, 24 Sep 2019 04:31:06 +0000 (13:31 +0900)
committerHyoungJoo Ahn <hello.ahn@samsung.com>
Tue, 24 Sep 2019 04:36:26 +0000 (13:36 +0900)
Change-Id: I960b0ccaacddf4b21dfc64b6e73dbd7b17bc17a4

13 files changed:
src/utc/nnstreamer/tct-nnstreamer-core_mobile.h
src/utc/nnstreamer/tct-nnstreamer-core_tv.h
src/utc/nnstreamer/tct-nnstreamer-core_wearable.h
src/utc/nnstreamer/utc-nnstreamer-common.h [new file with mode: 0644]
src/utc/nnstreamer/utc-nnstreamer-pipeline-sink.c
src/utc/nnstreamer/utc-nnstreamer-pipeline-src.c
src/utc/nnstreamer/utc-nnstreamer-pipeline-switch.c
src/utc/nnstreamer/utc-nnstreamer-pipeline-tensor-data.c
src/utc/nnstreamer/utc-nnstreamer-pipeline-tensor-info.c
src/utc/nnstreamer/utc-nnstreamer-pipeline-valve.c
src/utc/nnstreamer/utc-nnstreamer-pipeline.c
src/utc/nnstreamer/utc-nnstreamer-scenario.c
src/utc/nnstreamer/utc-nnstreamer-single.c

index 4fa0762bfe3c6dc63f62977b363b1caf264f9a63..3aa65b4c72c34eed7b32e8407c493cc49df34bc9 100755 (executable)
@@ -21,6 +21,8 @@
 
 extern void utc_nnstreamer_single_startup (void);
 extern void utc_nnstreamer_single_cleanup (void);
+extern void utc_nnstreamer_pipeline_startup (void);
+extern void utc_nnstreamer_pipeline_cleanup (void);
 extern void utc_nnstreamer_pipeline_sink_startup (void);
 extern void utc_nnstreamer_pipeline_sink_cleanup (void);
 extern void utc_nnstreamer_pipeline_src_startup (void);
@@ -48,80 +50,80 @@ extern int utc_ml_pipeline_start_n (void);
 extern int utc_ml_pipeline_stop_p (void);
 extern int utc_ml_pipeline_stop_n (void);
 
+extern int utc_ml_check_nnfw_availability_p (void);
+extern int utc_ml_check_nnfw_availability_n (void);
 extern int utc_ml_pipeline_sink_register_p (void);
 extern int utc_ml_pipeline_sink_register_n (void);
 extern int utc_ml_pipeline_sink_unregister_p (void);
+
 extern int utc_ml_pipeline_sink_unregister_n (void);
 extern int utc_ml_pipeline_src_get_handle_p (void);
-
 extern int utc_ml_pipeline_src_get_handle_n (void);
 extern int utc_ml_pipeline_src_release_handle_p (void);
 extern int utc_ml_pipeline_src_release_handle_n (void);
+
 extern int utc_ml_pipeline_src_input_data_p (void);
 extern int utc_ml_pipeline_src_input_data_n (void);
-
 extern int utc_ml_pipeline_src_get_tensors_info_p (void);
 extern int utc_ml_pipeline_src_get_tensors_info_n (void);
 extern int utc_ml_pipeline_switch_get_handle_p (void);
+
 extern int utc_ml_pipeline_switch_get_handle_n (void);
 extern int utc_ml_pipeline_switch_release_handle_p (void);
-
 extern int utc_ml_pipeline_switch_release_handle_n (void);
 extern int utc_ml_pipeline_switch_select_p (void);
 extern int utc_ml_pipeline_switch_select_n (void);
+
 extern int utc_ml_pipeline_switch_get_pad_list_p (void);
 extern int utc_ml_pipeline_switch_get_pad_list_n (void);
-
 extern int utc_ml_pipeline_valve_get_handle_p (void);
 extern int utc_ml_pipeline_valve_get_handle_n (void);
 extern int utc_ml_pipeline_valve_release_handle_p (void);
+
 extern int utc_ml_pipeline_valve_release_handle_n (void);
 extern int utc_ml_pipeline_valve_set_open_p (void);
-
 extern int utc_ml_pipeline_valve_set_open_n (void);
 extern int utc_ml_tensors_info_create_p (void);
 extern int utc_ml_tensors_info_create_n (void);
+
 extern int utc_ml_tensors_info_destroy_p (void);
 extern int utc_ml_tensors_info_destroy_n (void);
-
 extern int utc_ml_tensors_info_validate_p (void);
 extern int utc_ml_tensors_info_validate_n (void);
 extern int utc_ml_tensors_info_clone_p (void);
+
 extern int utc_ml_tensors_info_clone_n (void);
 extern int utc_ml_tensors_info_set_count_p (void);
-
 extern int utc_ml_tensors_info_set_count_n (void);
 extern int utc_ml_tensors_info_get_count_p (void);
 extern int utc_ml_tensors_info_get_count_n (void);
+
 extern int utc_ml_tensors_info_set_tensor_name_p (void);
 extern int utc_ml_tensors_info_set_tensor_name_n (void);
-
 extern int utc_ml_tensors_info_get_tensor_name_p (void);
 extern int utc_ml_tensors_info_get_tensor_name_n (void);
 extern int utc_ml_tensors_info_set_tensor_type_p (void);
+
 extern int utc_ml_tensors_info_set_tensor_type_n (void);
 extern int utc_ml_tensors_info_get_tensor_type_p (void);
-
 extern int utc_ml_tensors_info_get_tensor_type_n (void);
 extern int utc_ml_tensors_info_set_tensor_dimension_p (void);
 extern int utc_ml_tensors_info_set_tensor_dimension_n (void);
+
 extern int utc_ml_tensors_info_get_tensor_dimension_p (void);
 extern int utc_ml_tensors_info_get_tensor_dimension_n (void);
-
 extern int utc_ml_tensors_info_get_tensor_size_p (void);
 extern int utc_ml_tensors_info_get_tensor_size_n (void);
 extern int utc_ml_tensors_data_create_p (void);
+
 extern int utc_ml_tensors_data_create_n (void);
 extern int utc_ml_tensors_data_destroy_p (void);
-
 extern int utc_ml_tensors_data_destroy_n (void);
 extern int utc_ml_tensors_data_get_tensor_data_p (void);
 extern int utc_ml_tensors_data_get_tensor_data_n (void);
+
 extern int utc_ml_tensors_data_set_tensor_data_p (void);
 extern int utc_ml_tensors_data_set_tensor_data_n (void);
-
-extern int utc_ml_check_nnfw_availability_p (void);
-extern int utc_ml_check_nnfw_availability_n (void);
 extern int utc_ml_single_open_p (void);
 extern int utc_ml_single_open_n (void);
 extern int utc_ml_single_close_p (void);
@@ -167,92 +169,92 @@ extern int utc_nnstreamer_scenario_filter_tensorflow_lite_p2 (void);
 extern int utc_nnstreamer_scenario_filter_tensorflow_lite_n (void);
 
 testcase tc_array[] = {
-  {"utc_ml_pipeline_construct_p", utc_ml_pipeline_construct_p, NULL, NULL},
-  {"utc_ml_pipeline_construct_n", utc_ml_pipeline_construct_n, NULL, NULL},
-  {"utc_ml_pipeline_destroy_p", utc_ml_pipeline_destroy_p, NULL, NULL},
-  {"utc_ml_pipeline_destroy_n", utc_ml_pipeline_destroy_n, NULL, NULL},
-  {"utc_ml_pipeline_get_state_p", utc_ml_pipeline_get_state_p, NULL, NULL},
-
-  {"utc_ml_pipeline_get_state_n", utc_ml_pipeline_get_state_n, NULL, NULL},
-  {"utc_ml_pipeline_start_p", utc_ml_pipeline_start_p, NULL, NULL},
-  {"utc_ml_pipeline_start_n", utc_ml_pipeline_start_n, NULL, NULL},
-  {"utc_ml_pipeline_stop_p", utc_ml_pipeline_stop_p, NULL, NULL},
-  {"utc_ml_pipeline_stop_n", utc_ml_pipeline_stop_n, NULL, NULL},
-
+  {"utc_ml_pipeline_construct_p", utc_ml_pipeline_construct_p, utc_nnstreamer_pipeline_startup, utc_nnstreamer_pipeline_cleanup},
+  {"utc_ml_pipeline_construct_n", utc_ml_pipeline_construct_n, utc_nnstreamer_pipeline_startup, utc_nnstreamer_pipeline_cleanup},
+  {"utc_ml_pipeline_destroy_p", utc_ml_pipeline_destroy_p, utc_nnstreamer_pipeline_startup, utc_nnstreamer_pipeline_cleanup},
+  {"utc_ml_pipeline_destroy_n", utc_ml_pipeline_destroy_n, utc_nnstreamer_pipeline_startup, utc_nnstreamer_pipeline_cleanup},
+  {"utc_ml_pipeline_get_state_p", utc_ml_pipeline_get_state_p, utc_nnstreamer_pipeline_startup, utc_nnstreamer_pipeline_cleanup},
+
+  {"utc_ml_pipeline_get_state_n", utc_ml_pipeline_get_state_n, utc_nnstreamer_pipeline_startup, utc_nnstreamer_pipeline_cleanup},
+  {"utc_ml_pipeline_start_p", utc_ml_pipeline_start_p, utc_nnstreamer_pipeline_startup, utc_nnstreamer_pipeline_cleanup},
+  {"utc_ml_pipeline_start_n", utc_ml_pipeline_start_n, utc_nnstreamer_pipeline_startup, utc_nnstreamer_pipeline_cleanup},
+  {"utc_ml_pipeline_stop_p", utc_ml_pipeline_stop_p, utc_nnstreamer_pipeline_startup, utc_nnstreamer_pipeline_cleanup},
+  {"utc_ml_pipeline_stop_n", utc_ml_pipeline_stop_n, utc_nnstreamer_pipeline_startup, utc_nnstreamer_pipeline_cleanup},
+
+  {"utc_ml_check_nnfw_availability_p", utc_ml_check_nnfw_availability_p, utc_nnstreamer_pipeline_startup, utc_nnstreamer_pipeline_cleanup},
+  {"utc_ml_check_nnfw_availability_n", utc_ml_check_nnfw_availability_n, utc_nnstreamer_pipeline_startup, utc_nnstreamer_pipeline_cleanup},
   {"utc_ml_pipeline_sink_register_p", utc_ml_pipeline_sink_register_p, utc_nnstreamer_pipeline_sink_startup, utc_nnstreamer_pipeline_sink_cleanup},
-  {"utc_ml_pipeline_sink_register_n", utc_ml_pipeline_sink_register_n, NULL, NULL},
+  {"utc_ml_pipeline_sink_register_n", utc_ml_pipeline_sink_register_n, utc_nnstreamer_pipeline_sink_startup, utc_nnstreamer_pipeline_sink_cleanup},
   {"utc_ml_pipeline_sink_unregister_p", utc_ml_pipeline_sink_unregister_p, utc_nnstreamer_pipeline_sink_startup, utc_nnstreamer_pipeline_sink_cleanup},
-  {"utc_ml_pipeline_sink_unregister_n", utc_ml_pipeline_sink_unregister_n, NULL, NULL},
-  {"utc_ml_pipeline_src_get_handle_p", utc_ml_pipeline_src_get_handle_p, utc_nnstreamer_pipeline_src_startup, utc_nnstreamer_pipeline_src_cleanup},
 
-  {"utc_ml_pipeline_src_get_handle_n", utc_ml_pipeline_src_get_handle_n, NULL, NULL},
+  {"utc_ml_pipeline_sink_unregister_n", utc_ml_pipeline_sink_unregister_n, utc_nnstreamer_pipeline_sink_startup, utc_nnstreamer_pipeline_sink_cleanup},
+  {"utc_ml_pipeline_src_get_handle_p", utc_ml_pipeline_src_get_handle_p, utc_nnstreamer_pipeline_src_startup, utc_nnstreamer_pipeline_src_cleanup},
+  {"utc_ml_pipeline_src_get_handle_n", utc_ml_pipeline_src_get_handle_n, utc_nnstreamer_pipeline_src_startup, utc_nnstreamer_pipeline_src_cleanup},
   {"utc_ml_pipeline_src_release_handle_p", utc_ml_pipeline_src_release_handle_p, utc_nnstreamer_pipeline_src_startup, utc_nnstreamer_pipeline_src_cleanup},
-  {"utc_ml_pipeline_src_release_handle_n", utc_ml_pipeline_src_release_handle_n, NULL, NULL},
+  {"utc_ml_pipeline_src_release_handle_n", utc_ml_pipeline_src_release_handle_n, utc_nnstreamer_pipeline_src_startup, utc_nnstreamer_pipeline_src_cleanup},
+
   {"utc_ml_pipeline_src_input_data_p", utc_ml_pipeline_src_input_data_p, utc_nnstreamer_pipeline_src_startup, utc_nnstreamer_pipeline_src_cleanup},
   {"utc_ml_pipeline_src_input_data_n", utc_ml_pipeline_src_input_data_n, utc_nnstreamer_pipeline_src_startup, utc_nnstreamer_pipeline_src_cleanup},
-
   {"utc_ml_pipeline_src_get_tensors_info_p", utc_ml_pipeline_src_get_tensors_info_p, utc_nnstreamer_pipeline_src_startup, utc_nnstreamer_pipeline_src_cleanup},
-  {"utc_ml_pipeline_src_get_tensors_info_n", utc_ml_pipeline_src_get_tensors_info_n, NULL, NULL},
+  {"utc_ml_pipeline_src_get_tensors_info_n", utc_ml_pipeline_src_get_tensors_info_n, utc_nnstreamer_pipeline_src_startup, utc_nnstreamer_pipeline_src_cleanup},
   {"utc_ml_pipeline_switch_get_handle_p", utc_ml_pipeline_switch_get_handle_p, utc_nnstreamer_pipeline_switch_startup, utc_nnstreamer_pipeline_switch_cleanup},
-  {"utc_ml_pipeline_switch_get_handle_n", utc_ml_pipeline_switch_get_handle_n, NULL, NULL},
-  {"utc_ml_pipeline_switch_release_handle_p", utc_ml_pipeline_switch_release_handle_p, utc_nnstreamer_pipeline_switch_startup, utc_nnstreamer_pipeline_switch_cleanup},
 
-  {"utc_ml_pipeline_switch_release_handle_n", utc_ml_pipeline_switch_release_handle_n, NULL, NULL},
+  {"utc_ml_pipeline_switch_get_handle_n", utc_ml_pipeline_switch_get_handle_n, utc_nnstreamer_pipeline_switch_startup, utc_nnstreamer_pipeline_switch_cleanup},
+  {"utc_ml_pipeline_switch_release_handle_p", utc_ml_pipeline_switch_release_handle_p, utc_nnstreamer_pipeline_switch_startup, utc_nnstreamer_pipeline_switch_cleanup},
+  {"utc_ml_pipeline_switch_release_handle_n", utc_ml_pipeline_switch_release_handle_n, utc_nnstreamer_pipeline_switch_startup, utc_nnstreamer_pipeline_switch_cleanup},
   {"utc_ml_pipeline_switch_select_p", utc_ml_pipeline_switch_select_p, utc_nnstreamer_pipeline_switch_startup, utc_nnstreamer_pipeline_switch_cleanup},
-  {"utc_ml_pipeline_switch_select_n", utc_ml_pipeline_switch_select_n, NULL, NULL},
-  {"utc_ml_pipeline_switch_get_pad_list_p", utc_ml_pipeline_switch_get_pad_list_p, utc_nnstreamer_pipeline_switch_startup, utc_nnstreamer_pipeline_switch_cleanup},
-  {"utc_ml_pipeline_switch_get_pad_list_n", utc_ml_pipeline_switch_get_pad_list_n, NULL, NULL},
+  {"utc_ml_pipeline_switch_select_n", utc_ml_pipeline_switch_select_n, utc_nnstreamer_pipeline_switch_startup, utc_nnstreamer_pipeline_switch_cleanup},
 
+  {"utc_ml_pipeline_switch_get_pad_list_p", utc_ml_pipeline_switch_get_pad_list_p, utc_nnstreamer_pipeline_switch_startup, utc_nnstreamer_pipeline_switch_cleanup},
+  {"utc_ml_pipeline_switch_get_pad_list_n", utc_ml_pipeline_switch_get_pad_list_n, utc_nnstreamer_pipeline_switch_startup, utc_nnstreamer_pipeline_switch_cleanup},
   {"utc_ml_pipeline_valve_get_handle_p", utc_ml_pipeline_valve_get_handle_p, utc_nnstreamer_pipeline_valve_startup, utc_nnstreamer_pipeline_valve_cleanup},
-  {"utc_ml_pipeline_valve_get_handle_n", utc_ml_pipeline_valve_get_handle_n, NULL, NULL},
+  {"utc_ml_pipeline_valve_get_handle_n", utc_ml_pipeline_valve_get_handle_n, utc_nnstreamer_pipeline_valve_startup, utc_nnstreamer_pipeline_valve_cleanup},
   {"utc_ml_pipeline_valve_release_handle_p", utc_ml_pipeline_valve_release_handle_p, utc_nnstreamer_pipeline_valve_startup, utc_nnstreamer_pipeline_valve_cleanup},
-  {"utc_ml_pipeline_valve_release_handle_n", utc_ml_pipeline_valve_release_handle_n, NULL, NULL},
+
+  {"utc_ml_pipeline_valve_release_handle_n", utc_ml_pipeline_valve_release_handle_n, utc_nnstreamer_pipeline_valve_startup, utc_nnstreamer_pipeline_valve_cleanup},
   {"utc_ml_pipeline_valve_set_open_p", utc_ml_pipeline_valve_set_open_p, utc_nnstreamer_pipeline_valve_startup, utc_nnstreamer_pipeline_valve_cleanup},
+  {"utc_ml_pipeline_valve_set_open_n", utc_ml_pipeline_valve_set_open_n, utc_nnstreamer_pipeline_valve_startup, utc_nnstreamer_pipeline_valve_cleanup},
+  {"utc_ml_tensors_info_create_p", utc_ml_tensors_info_create_p, utc_nnstreamer_pipeline_tensor_info_startup, utc_nnstreamer_pipeline_tensor_info_cleanup},
+  {"utc_ml_tensors_info_create_n", utc_ml_tensors_info_create_n, utc_nnstreamer_pipeline_tensor_info_startup, utc_nnstreamer_pipeline_tensor_info_cleanup},
 
-  {"utc_ml_pipeline_valve_set_open_n", utc_ml_pipeline_valve_set_open_n, NULL, NULL},
-  {"utc_ml_tensors_info_create_p", utc_ml_tensors_info_create_p, NULL, NULL},
-  {"utc_ml_tensors_info_create_n", utc_ml_tensors_info_create_n, NULL, NULL},
-  {"utc_ml_tensors_info_destroy_p", utc_ml_tensors_info_destroy_p, NULL, NULL},
-  {"utc_ml_tensors_info_destroy_n", utc_ml_tensors_info_destroy_n, NULL, NULL},
+  {"utc_ml_tensors_info_destroy_p", utc_ml_tensors_info_destroy_p, utc_nnstreamer_pipeline_tensor_info_startup, utc_nnstreamer_pipeline_tensor_info_cleanup},
+  {"utc_ml_tensors_info_destroy_n", utc_ml_tensors_info_destroy_n, utc_nnstreamer_pipeline_tensor_info_startup, utc_nnstreamer_pipeline_tensor_info_cleanup},
+  {"utc_ml_tensors_info_validate_p", utc_ml_tensors_info_validate_p, utc_nnstreamer_pipeline_tensor_info_startup, utc_nnstreamer_pipeline_tensor_info_cleanup},
+  {"utc_ml_tensors_info_validate_n", utc_ml_tensors_info_validate_n, utc_nnstreamer_pipeline_tensor_info_startup, utc_nnstreamer_pipeline_tensor_info_cleanup},
+  {"utc_ml_tensors_info_clone_p", utc_ml_tensors_info_clone_p, utc_nnstreamer_pipeline_tensor_info_startup, utc_nnstreamer_pipeline_tensor_info_cleanup},
 
-  {"utc_ml_tensors_info_validate_p", utc_ml_tensors_info_validate_p, NULL, NULL},
-  {"utc_ml_tensors_info_validate_n", utc_ml_tensors_info_validate_n, NULL, NULL},
-  {"utc_ml_tensors_info_clone_p", utc_ml_tensors_info_clone_p, NULL, NULL},
-  {"utc_ml_tensors_info_clone_n", utc_ml_tensors_info_clone_n, NULL, NULL},
+  {"utc_ml_tensors_info_clone_n", utc_ml_tensors_info_clone_n, utc_nnstreamer_pipeline_tensor_info_startup, utc_nnstreamer_pipeline_tensor_info_cleanup},
   {"utc_ml_tensors_info_set_count_p", utc_ml_tensors_info_set_count_p, utc_nnstreamer_pipeline_tensor_info_startup, utc_nnstreamer_pipeline_tensor_info_cleanup},
-
-  {"utc_ml_tensors_info_set_count_n", utc_ml_tensors_info_set_count_n, NULL, NULL},
+  {"utc_ml_tensors_info_set_count_n", utc_ml_tensors_info_set_count_n, utc_nnstreamer_pipeline_tensor_info_startup, utc_nnstreamer_pipeline_tensor_info_cleanup},
   {"utc_ml_tensors_info_get_count_p", utc_ml_tensors_info_get_count_p, utc_nnstreamer_pipeline_tensor_info_startup, utc_nnstreamer_pipeline_tensor_info_cleanup},
-  {"utc_ml_tensors_info_get_count_n", utc_ml_tensors_info_get_count_n, NULL, NULL},
-  {"utc_ml_tensors_info_set_tensor_name_p", utc_ml_tensors_info_set_tensor_name_p, utc_nnstreamer_pipeline_tensor_info_startup, utc_nnstreamer_pipeline_tensor_info_cleanup},
-  {"utc_ml_tensors_info_set_tensor_name_n", utc_ml_tensors_info_set_tensor_name_n, NULL, NULL},
+  {"utc_ml_tensors_info_get_count_n", utc_ml_tensors_info_get_count_n, utc_nnstreamer_pipeline_tensor_info_startup, utc_nnstreamer_pipeline_tensor_info_cleanup},
 
+  {"utc_ml_tensors_info_set_tensor_name_p", utc_ml_tensors_info_set_tensor_name_p, utc_nnstreamer_pipeline_tensor_info_startup, utc_nnstreamer_pipeline_tensor_info_cleanup},
+  {"utc_ml_tensors_info_set_tensor_name_n", utc_ml_tensors_info_set_tensor_name_n, utc_nnstreamer_pipeline_tensor_info_startup, utc_nnstreamer_pipeline_tensor_info_cleanup},
   {"utc_ml_tensors_info_get_tensor_name_p", utc_ml_tensors_info_get_tensor_name_p, utc_nnstreamer_pipeline_tensor_info_startup, utc_nnstreamer_pipeline_tensor_info_cleanup},
-  {"utc_ml_tensors_info_get_tensor_name_n", utc_ml_tensors_info_get_tensor_name_n, NULL, NULL},
+  {"utc_ml_tensors_info_get_tensor_name_n", utc_ml_tensors_info_get_tensor_name_n, utc_nnstreamer_pipeline_tensor_info_startup, utc_nnstreamer_pipeline_tensor_info_cleanup},
   {"utc_ml_tensors_info_set_tensor_type_p", utc_ml_tensors_info_set_tensor_type_p, utc_nnstreamer_pipeline_tensor_info_startup, utc_nnstreamer_pipeline_tensor_info_cleanup},
-  {"utc_ml_tensors_info_set_tensor_type_n", utc_ml_tensors_info_set_tensor_type_n, NULL, NULL},
-  {"utc_ml_tensors_info_get_tensor_type_p", utc_ml_tensors_info_get_tensor_type_p, utc_nnstreamer_pipeline_tensor_info_startup, utc_nnstreamer_pipeline_tensor_info_cleanup},
 
-  {"utc_ml_tensors_info_get_tensor_type_n", utc_ml_tensors_info_get_tensor_type_n, NULL, NULL},
+  {"utc_ml_tensors_info_set_tensor_type_n", utc_ml_tensors_info_set_tensor_type_n, utc_nnstreamer_pipeline_tensor_info_startup, utc_nnstreamer_pipeline_tensor_info_cleanup},
+  {"utc_ml_tensors_info_get_tensor_type_p", utc_ml_tensors_info_get_tensor_type_p, utc_nnstreamer_pipeline_tensor_info_startup, utc_nnstreamer_pipeline_tensor_info_cleanup},
+  {"utc_ml_tensors_info_get_tensor_type_n", utc_ml_tensors_info_get_tensor_type_n, utc_nnstreamer_pipeline_tensor_info_startup, utc_nnstreamer_pipeline_tensor_info_cleanup},
   {"utc_ml_tensors_info_set_tensor_dimension_p", utc_ml_tensors_info_set_tensor_dimension_p, utc_nnstreamer_pipeline_tensor_info_startup, utc_nnstreamer_pipeline_tensor_info_cleanup},
-  {"utc_ml_tensors_info_set_tensor_dimension_n", utc_ml_tensors_info_set_tensor_dimension_n, NULL, NULL},
-  {"utc_ml_tensors_info_get_tensor_dimension_p", utc_ml_tensors_info_get_tensor_dimension_p, utc_nnstreamer_pipeline_tensor_info_startup, utc_nnstreamer_pipeline_tensor_info_cleanup},
-  {"utc_ml_tensors_info_get_tensor_dimension_n", utc_ml_tensors_info_get_tensor_dimension_n, NULL, NULL},
+  {"utc_ml_tensors_info_set_tensor_dimension_n", utc_ml_tensors_info_set_tensor_dimension_n, utc_nnstreamer_pipeline_tensor_info_startup, utc_nnstreamer_pipeline_tensor_info_cleanup},
 
+  {"utc_ml_tensors_info_get_tensor_dimension_p", utc_ml_tensors_info_get_tensor_dimension_p, utc_nnstreamer_pipeline_tensor_info_startup, utc_nnstreamer_pipeline_tensor_info_cleanup},
+  {"utc_ml_tensors_info_get_tensor_dimension_n", utc_ml_tensors_info_get_tensor_dimension_n, utc_nnstreamer_pipeline_tensor_info_startup, utc_nnstreamer_pipeline_tensor_info_cleanup},
   {"utc_ml_tensors_info_get_tensor_size_p", utc_ml_tensors_info_get_tensor_size_p, utc_nnstreamer_pipeline_tensor_info_startup, utc_nnstreamer_pipeline_tensor_info_cleanup},
-  {"utc_ml_tensors_info_get_tensor_size_n", utc_ml_tensors_info_get_tensor_size_n, NULL, NULL},
+  {"utc_ml_tensors_info_get_tensor_size_n", utc_ml_tensors_info_get_tensor_size_n, utc_nnstreamer_pipeline_tensor_info_startup, utc_nnstreamer_pipeline_tensor_info_cleanup},
   {"utc_ml_tensors_data_create_p", utc_ml_tensors_data_create_p, utc_nnstreamer_pipeline_tensor_data_startup, utc_nnstreamer_pipeline_tensor_data_cleanup},
-  {"utc_ml_tensors_data_create_n", utc_ml_tensors_data_create_n, NULL, NULL},
-  {"utc_ml_tensors_data_destroy_p", utc_ml_tensors_data_destroy_p, utc_nnstreamer_pipeline_tensor_data_startup, NULL},
 
-  {"utc_ml_tensors_data_destroy_n", utc_ml_tensors_data_destroy_n, NULL, NULL},
+  {"utc_ml_tensors_data_create_n", utc_ml_tensors_data_create_n, utc_nnstreamer_pipeline_tensor_data_startup, utc_nnstreamer_pipeline_tensor_data_cleanup},
+  {"utc_ml_tensors_data_destroy_p", utc_ml_tensors_data_destroy_p, utc_nnstreamer_pipeline_tensor_data_startup, utc_nnstreamer_pipeline_tensor_data_cleanup},
+  {"utc_ml_tensors_data_destroy_n", utc_ml_tensors_data_destroy_n, utc_nnstreamer_pipeline_tensor_data_startup, utc_nnstreamer_pipeline_tensor_data_cleanup},
   {"utc_ml_tensors_data_get_tensor_data_p", utc_ml_tensors_data_get_tensor_data_p, utc_nnstreamer_pipeline_tensor_data_startup, utc_nnstreamer_pipeline_tensor_data_cleanup},
-  {"utc_ml_tensors_data_get_tensor_data_n", utc_ml_tensors_data_get_tensor_data_n, NULL, NULL},
-  {"utc_ml_tensors_data_set_tensor_data_p", utc_ml_tensors_data_set_tensor_data_p, utc_nnstreamer_pipeline_tensor_data_startup, utc_nnstreamer_pipeline_tensor_data_cleanup},
-  {"utc_ml_tensors_data_set_tensor_data_n", utc_ml_tensors_data_set_tensor_data_n, NULL, NULL},
+  {"utc_ml_tensors_data_get_tensor_data_n", utc_ml_tensors_data_get_tensor_data_n, utc_nnstreamer_pipeline_tensor_data_startup, utc_nnstreamer_pipeline_tensor_data_cleanup},
 
-  {"utc_ml_check_nnfw_availability_p", utc_ml_check_nnfw_availability_p, NULL, NULL},
-  {"utc_ml_check_nnfw_availability_n", utc_ml_check_nnfw_availability_n, NULL, NULL},
+  {"utc_ml_tensors_data_set_tensor_data_p", utc_ml_tensors_data_set_tensor_data_p, utc_nnstreamer_pipeline_tensor_data_startup, utc_nnstreamer_pipeline_tensor_data_cleanup},
+  {"utc_ml_tensors_data_set_tensor_data_n", utc_ml_tensors_data_set_tensor_data_n, utc_nnstreamer_pipeline_tensor_data_startup, utc_nnstreamer_pipeline_tensor_data_cleanup},
   {"utc_ml_single_open_p", utc_ml_single_open_p, utc_nnstreamer_single_startup, utc_nnstreamer_single_cleanup},
   {"utc_ml_single_open_n", utc_ml_single_open_n, utc_nnstreamer_single_startup, utc_nnstreamer_single_cleanup},
   {"utc_ml_single_close_p", utc_ml_single_close_p, utc_nnstreamer_single_startup, utc_nnstreamer_single_cleanup},
@@ -267,35 +269,35 @@ testcase tc_array[] = {
   {"utc_ml_single_get_output_info_n", utc_ml_single_get_output_info_n, utc_nnstreamer_single_startup, utc_nnstreamer_single_cleanup},
   {"utc_ml_single_set_timeout_p", utc_ml_single_set_timeout_p, utc_nnstreamer_single_startup, utc_nnstreamer_single_cleanup},
   {"utc_ml_single_set_timeout_n", utc_ml_single_set_timeout_n, utc_nnstreamer_single_startup, utc_nnstreamer_single_cleanup},
-  {"utc_nnstreamer_scenario_construct_destruct_empty_pipeline_p", utc_nnstreamer_scenario_construct_destruct_empty_pipeline_p, NULL, NULL},
+  {"utc_nnstreamer_scenario_construct_destruct_empty_pipeline_p", utc_nnstreamer_scenario_construct_destruct_empty_pipeline_p, utc_nnstreamer_scenario_startup, utc_nnstreamer_scenario_cleanup},
 
-  {"utc_nnstreamer_scenario_construct_destruct_pipeline_p1", utc_nnstreamer_scenario_construct_destruct_pipeline_p1, NULL, NULL},
-  {"utc_nnstreamer_scenario_construct_destruct_pipeline_p2", utc_nnstreamer_scenario_construct_destruct_pipeline_p2, NULL, NULL},
-  {"utc_nnstreamer_scenario_construct_pipeline_error_case_n1", utc_nnstreamer_scenario_construct_pipeline_error_case_n1, NULL, NULL},
-  {"utc_nnstreamer_scenario_construct_pipeline_error_case_n2", utc_nnstreamer_scenario_construct_pipeline_error_case_n2, NULL, NULL},
-  {"utc_nnstreamer_scenario_pipeline_state_test_p1", utc_nnstreamer_scenario_pipeline_state_test_p1, NULL, NULL},
+  {"utc_nnstreamer_scenario_construct_destruct_pipeline_p1", utc_nnstreamer_scenario_construct_destruct_pipeline_p1, utc_nnstreamer_scenario_startup, utc_nnstreamer_scenario_cleanup},
+  {"utc_nnstreamer_scenario_construct_destruct_pipeline_p2", utc_nnstreamer_scenario_construct_destruct_pipeline_p2, utc_nnstreamer_scenario_startup, utc_nnstreamer_scenario_cleanup},
+  {"utc_nnstreamer_scenario_construct_pipeline_error_case_n1", utc_nnstreamer_scenario_construct_pipeline_error_case_n1, utc_nnstreamer_scenario_startup, utc_nnstreamer_scenario_cleanup},
+  {"utc_nnstreamer_scenario_construct_pipeline_error_case_n2", utc_nnstreamer_scenario_construct_pipeline_error_case_n2, utc_nnstreamer_scenario_startup, utc_nnstreamer_scenario_cleanup},
+  {"utc_nnstreamer_scenario_pipeline_state_test_p1", utc_nnstreamer_scenario_pipeline_state_test_p1, utc_nnstreamer_scenario_startup, utc_nnstreamer_scenario_cleanup},
 
-  {"utc_nnstreamer_scenario_pipeline_state_test_p2", utc_nnstreamer_scenario_pipeline_state_test_p2, NULL, NULL},
-  {"utc_nnstreamer_scenario_pipeline_state_test_p3", utc_nnstreamer_scenario_pipeline_state_test_p3, NULL, NULL},
-  {"utc_nnstreamer_scenario_valve_error_cases_n", utc_nnstreamer_scenario_valve_error_cases_n, NULL, NULL},
-  {"utc_nnstreamer_scenario_sink_p1", utc_nnstreamer_scenario_sink_p1, NULL, NULL},
-  {"utc_nnstreamer_scenario_sink_p2", utc_nnstreamer_scenario_sink_p2, NULL, NULL},
+  {"utc_nnstreamer_scenario_pipeline_state_test_p2", utc_nnstreamer_scenario_pipeline_state_test_p2, utc_nnstreamer_scenario_startup, utc_nnstreamer_scenario_cleanup},
+  {"utc_nnstreamer_scenario_pipeline_state_test_p3", utc_nnstreamer_scenario_pipeline_state_test_p3, utc_nnstreamer_scenario_startup, utc_nnstreamer_scenario_cleanup},
+  {"utc_nnstreamer_scenario_valve_error_cases_n", utc_nnstreamer_scenario_valve_error_cases_n, utc_nnstreamer_scenario_startup, utc_nnstreamer_scenario_cleanup},
+  {"utc_nnstreamer_scenario_sink_p1", utc_nnstreamer_scenario_sink_p1, utc_nnstreamer_scenario_startup, utc_nnstreamer_scenario_cleanup},
+  {"utc_nnstreamer_scenario_sink_p2", utc_nnstreamer_scenario_sink_p2, utc_nnstreamer_scenario_startup, utc_nnstreamer_scenario_cleanup},
 
-  {"utc_nnstreamer_scenario_sink_error_cases_n", utc_nnstreamer_scenario_sink_error_cases_n, NULL, NULL},
+  {"utc_nnstreamer_scenario_sink_error_cases_n", utc_nnstreamer_scenario_sink_error_cases_n, utc_nnstreamer_scenario_startup, utc_nnstreamer_scenario_cleanup},
   {"utc_nnstreamer_scenario_src_p", utc_nnstreamer_scenario_src_p, utc_nnstreamer_scenario_startup, utc_nnstreamer_scenario_cleanup},
-  {"utc_nnstreamer_scenario_src_error_case_n1", utc_nnstreamer_scenario_src_error_case_n1, NULL, NULL},
-  {"utc_nnstreamer_scenario_src_error_case_n2", utc_nnstreamer_scenario_src_error_case_n2, NULL, NULL},
-  {"utc_nnstreamer_scenario_src_error_case_n3", utc_nnstreamer_scenario_src_error_case_n3, NULL, NULL},
-
-  {"utc_nnstreamer_scenario_switch_pipeline_p1", utc_nnstreamer_scenario_switch_pipeline_p1, NULL, NULL},
-  {"utc_nnstreamer_scenario_switch_pipeline_p2", utc_nnstreamer_scenario_switch_pipeline_p2, NULL, NULL},
-  {"utc_nnstreamer_scenario_switch_pipeline_error_cases_n", utc_nnstreamer_scenario_switch_pipeline_error_cases_n, NULL, NULL},
-  {"utc_nnstreamer_scenario_check_nnfw_availability_p", utc_nnstreamer_scenario_check_nnfw_availability_p, NULL, NULL},
-  {"utc_nnstreamer_scenario_check_tensor_info_utilities_p", utc_nnstreamer_scenario_check_tensor_info_utilities_p, NULL, NULL},
-
-  {"utc_nnstreamer_scenario_filter_tensorflow_lite_p1", utc_nnstreamer_scenario_filter_tensorflow_lite_p1, NULL, NULL},
-  {"utc_nnstreamer_scenario_filter_tensorflow_lite_p2", utc_nnstreamer_scenario_filter_tensorflow_lite_p2, NULL, NULL},
-  {"utc_nnstreamer_scenario_filter_tensorflow_lite_n", utc_nnstreamer_scenario_filter_tensorflow_lite_n, NULL, NULL},
+  {"utc_nnstreamer_scenario_src_error_case_n1", utc_nnstreamer_scenario_src_error_case_n1, utc_nnstreamer_scenario_startup, utc_nnstreamer_scenario_cleanup},
+  {"utc_nnstreamer_scenario_src_error_case_n2", utc_nnstreamer_scenario_src_error_case_n2, utc_nnstreamer_scenario_startup, utc_nnstreamer_scenario_cleanup},
+  {"utc_nnstreamer_scenario_src_error_case_n3", utc_nnstreamer_scenario_src_error_case_n3, utc_nnstreamer_scenario_startup, utc_nnstreamer_scenario_cleanup},
+
+  {"utc_nnstreamer_scenario_switch_pipeline_p1", utc_nnstreamer_scenario_switch_pipeline_p1, utc_nnstreamer_scenario_startup, utc_nnstreamer_scenario_cleanup},
+  {"utc_nnstreamer_scenario_switch_pipeline_p2", utc_nnstreamer_scenario_switch_pipeline_p2, utc_nnstreamer_scenario_startup, utc_nnstreamer_scenario_cleanup},
+  {"utc_nnstreamer_scenario_switch_pipeline_error_cases_n", utc_nnstreamer_scenario_switch_pipeline_error_cases_n, utc_nnstreamer_scenario_startup, utc_nnstreamer_scenario_cleanup},
+  {"utc_nnstreamer_scenario_check_nnfw_availability_p", utc_nnstreamer_scenario_check_nnfw_availability_p, utc_nnstreamer_scenario_startup, utc_nnstreamer_scenario_cleanup},
+  {"utc_nnstreamer_scenario_check_tensor_info_utilities_p", utc_nnstreamer_scenario_check_tensor_info_utilities_p, utc_nnstreamer_scenario_startup, utc_nnstreamer_scenario_cleanup},
+
+  {"utc_nnstreamer_scenario_filter_tensorflow_lite_p1", utc_nnstreamer_scenario_filter_tensorflow_lite_p1, utc_nnstreamer_scenario_startup, utc_nnstreamer_scenario_cleanup},
+  {"utc_nnstreamer_scenario_filter_tensorflow_lite_p2", utc_nnstreamer_scenario_filter_tensorflow_lite_p2, utc_nnstreamer_scenario_startup, utc_nnstreamer_scenario_cleanup},
+  {"utc_nnstreamer_scenario_filter_tensorflow_lite_n", utc_nnstreamer_scenario_filter_tensorflow_lite_n, utc_nnstreamer_scenario_startup, utc_nnstreamer_scenario_cleanup},
   {NULL, NULL}
 };
 
index 4fa0762bfe3c6dc63f62977b363b1caf264f9a63..3aa65b4c72c34eed7b32e8407c493cc49df34bc9 100755 (executable)
@@ -21,6 +21,8 @@
 
 extern void utc_nnstreamer_single_startup (void);
 extern void utc_nnstreamer_single_cleanup (void);
+extern void utc_nnstreamer_pipeline_startup (void);
+extern void utc_nnstreamer_pipeline_cleanup (void);
 extern void utc_nnstreamer_pipeline_sink_startup (void);
 extern void utc_nnstreamer_pipeline_sink_cleanup (void);
 extern void utc_nnstreamer_pipeline_src_startup (void);
@@ -48,80 +50,80 @@ extern int utc_ml_pipeline_start_n (void);
 extern int utc_ml_pipeline_stop_p (void);
 extern int utc_ml_pipeline_stop_n (void);
 
+extern int utc_ml_check_nnfw_availability_p (void);
+extern int utc_ml_check_nnfw_availability_n (void);
 extern int utc_ml_pipeline_sink_register_p (void);
 extern int utc_ml_pipeline_sink_register_n (void);
 extern int utc_ml_pipeline_sink_unregister_p (void);
+
 extern int utc_ml_pipeline_sink_unregister_n (void);
 extern int utc_ml_pipeline_src_get_handle_p (void);
-
 extern int utc_ml_pipeline_src_get_handle_n (void);
 extern int utc_ml_pipeline_src_release_handle_p (void);
 extern int utc_ml_pipeline_src_release_handle_n (void);
+
 extern int utc_ml_pipeline_src_input_data_p (void);
 extern int utc_ml_pipeline_src_input_data_n (void);
-
 extern int utc_ml_pipeline_src_get_tensors_info_p (void);
 extern int utc_ml_pipeline_src_get_tensors_info_n (void);
 extern int utc_ml_pipeline_switch_get_handle_p (void);
+
 extern int utc_ml_pipeline_switch_get_handle_n (void);
 extern int utc_ml_pipeline_switch_release_handle_p (void);
-
 extern int utc_ml_pipeline_switch_release_handle_n (void);
 extern int utc_ml_pipeline_switch_select_p (void);
 extern int utc_ml_pipeline_switch_select_n (void);
+
 extern int utc_ml_pipeline_switch_get_pad_list_p (void);
 extern int utc_ml_pipeline_switch_get_pad_list_n (void);
-
 extern int utc_ml_pipeline_valve_get_handle_p (void);
 extern int utc_ml_pipeline_valve_get_handle_n (void);
 extern int utc_ml_pipeline_valve_release_handle_p (void);
+
 extern int utc_ml_pipeline_valve_release_handle_n (void);
 extern int utc_ml_pipeline_valve_set_open_p (void);
-
 extern int utc_ml_pipeline_valve_set_open_n (void);
 extern int utc_ml_tensors_info_create_p (void);
 extern int utc_ml_tensors_info_create_n (void);
+
 extern int utc_ml_tensors_info_destroy_p (void);
 extern int utc_ml_tensors_info_destroy_n (void);
-
 extern int utc_ml_tensors_info_validate_p (void);
 extern int utc_ml_tensors_info_validate_n (void);
 extern int utc_ml_tensors_info_clone_p (void);
+
 extern int utc_ml_tensors_info_clone_n (void);
 extern int utc_ml_tensors_info_set_count_p (void);
-
 extern int utc_ml_tensors_info_set_count_n (void);
 extern int utc_ml_tensors_info_get_count_p (void);
 extern int utc_ml_tensors_info_get_count_n (void);
+
 extern int utc_ml_tensors_info_set_tensor_name_p (void);
 extern int utc_ml_tensors_info_set_tensor_name_n (void);
-
 extern int utc_ml_tensors_info_get_tensor_name_p (void);
 extern int utc_ml_tensors_info_get_tensor_name_n (void);
 extern int utc_ml_tensors_info_set_tensor_type_p (void);
+
 extern int utc_ml_tensors_info_set_tensor_type_n (void);
 extern int utc_ml_tensors_info_get_tensor_type_p (void);
-
 extern int utc_ml_tensors_info_get_tensor_type_n (void);
 extern int utc_ml_tensors_info_set_tensor_dimension_p (void);
 extern int utc_ml_tensors_info_set_tensor_dimension_n (void);
+
 extern int utc_ml_tensors_info_get_tensor_dimension_p (void);
 extern int utc_ml_tensors_info_get_tensor_dimension_n (void);
-
 extern int utc_ml_tensors_info_get_tensor_size_p (void);
 extern int utc_ml_tensors_info_get_tensor_size_n (void);
 extern int utc_ml_tensors_data_create_p (void);
+
 extern int utc_ml_tensors_data_create_n (void);
 extern int utc_ml_tensors_data_destroy_p (void);
-
 extern int utc_ml_tensors_data_destroy_n (void);
 extern int utc_ml_tensors_data_get_tensor_data_p (void);
 extern int utc_ml_tensors_data_get_tensor_data_n (void);
+
 extern int utc_ml_tensors_data_set_tensor_data_p (void);
 extern int utc_ml_tensors_data_set_tensor_data_n (void);
-
-extern int utc_ml_check_nnfw_availability_p (void);
-extern int utc_ml_check_nnfw_availability_n (void);
 extern int utc_ml_single_open_p (void);
 extern int utc_ml_single_open_n (void);
 extern int utc_ml_single_close_p (void);
@@ -167,92 +169,92 @@ extern int utc_nnstreamer_scenario_filter_tensorflow_lite_p2 (void);
 extern int utc_nnstreamer_scenario_filter_tensorflow_lite_n (void);
 
 testcase tc_array[] = {
-  {"utc_ml_pipeline_construct_p", utc_ml_pipeline_construct_p, NULL, NULL},
-  {"utc_ml_pipeline_construct_n", utc_ml_pipeline_construct_n, NULL, NULL},
-  {"utc_ml_pipeline_destroy_p", utc_ml_pipeline_destroy_p, NULL, NULL},
-  {"utc_ml_pipeline_destroy_n", utc_ml_pipeline_destroy_n, NULL, NULL},
-  {"utc_ml_pipeline_get_state_p", utc_ml_pipeline_get_state_p, NULL, NULL},
-
-  {"utc_ml_pipeline_get_state_n", utc_ml_pipeline_get_state_n, NULL, NULL},
-  {"utc_ml_pipeline_start_p", utc_ml_pipeline_start_p, NULL, NULL},
-  {"utc_ml_pipeline_start_n", utc_ml_pipeline_start_n, NULL, NULL},
-  {"utc_ml_pipeline_stop_p", utc_ml_pipeline_stop_p, NULL, NULL},
-  {"utc_ml_pipeline_stop_n", utc_ml_pipeline_stop_n, NULL, NULL},
-
+  {"utc_ml_pipeline_construct_p", utc_ml_pipeline_construct_p, utc_nnstreamer_pipeline_startup, utc_nnstreamer_pipeline_cleanup},
+  {"utc_ml_pipeline_construct_n", utc_ml_pipeline_construct_n, utc_nnstreamer_pipeline_startup, utc_nnstreamer_pipeline_cleanup},
+  {"utc_ml_pipeline_destroy_p", utc_ml_pipeline_destroy_p, utc_nnstreamer_pipeline_startup, utc_nnstreamer_pipeline_cleanup},
+  {"utc_ml_pipeline_destroy_n", utc_ml_pipeline_destroy_n, utc_nnstreamer_pipeline_startup, utc_nnstreamer_pipeline_cleanup},
+  {"utc_ml_pipeline_get_state_p", utc_ml_pipeline_get_state_p, utc_nnstreamer_pipeline_startup, utc_nnstreamer_pipeline_cleanup},
+
+  {"utc_ml_pipeline_get_state_n", utc_ml_pipeline_get_state_n, utc_nnstreamer_pipeline_startup, utc_nnstreamer_pipeline_cleanup},
+  {"utc_ml_pipeline_start_p", utc_ml_pipeline_start_p, utc_nnstreamer_pipeline_startup, utc_nnstreamer_pipeline_cleanup},
+  {"utc_ml_pipeline_start_n", utc_ml_pipeline_start_n, utc_nnstreamer_pipeline_startup, utc_nnstreamer_pipeline_cleanup},
+  {"utc_ml_pipeline_stop_p", utc_ml_pipeline_stop_p, utc_nnstreamer_pipeline_startup, utc_nnstreamer_pipeline_cleanup},
+  {"utc_ml_pipeline_stop_n", utc_ml_pipeline_stop_n, utc_nnstreamer_pipeline_startup, utc_nnstreamer_pipeline_cleanup},
+
+  {"utc_ml_check_nnfw_availability_p", utc_ml_check_nnfw_availability_p, utc_nnstreamer_pipeline_startup, utc_nnstreamer_pipeline_cleanup},
+  {"utc_ml_check_nnfw_availability_n", utc_ml_check_nnfw_availability_n, utc_nnstreamer_pipeline_startup, utc_nnstreamer_pipeline_cleanup},
   {"utc_ml_pipeline_sink_register_p", utc_ml_pipeline_sink_register_p, utc_nnstreamer_pipeline_sink_startup, utc_nnstreamer_pipeline_sink_cleanup},
-  {"utc_ml_pipeline_sink_register_n", utc_ml_pipeline_sink_register_n, NULL, NULL},
+  {"utc_ml_pipeline_sink_register_n", utc_ml_pipeline_sink_register_n, utc_nnstreamer_pipeline_sink_startup, utc_nnstreamer_pipeline_sink_cleanup},
   {"utc_ml_pipeline_sink_unregister_p", utc_ml_pipeline_sink_unregister_p, utc_nnstreamer_pipeline_sink_startup, utc_nnstreamer_pipeline_sink_cleanup},
-  {"utc_ml_pipeline_sink_unregister_n", utc_ml_pipeline_sink_unregister_n, NULL, NULL},
-  {"utc_ml_pipeline_src_get_handle_p", utc_ml_pipeline_src_get_handle_p, utc_nnstreamer_pipeline_src_startup, utc_nnstreamer_pipeline_src_cleanup},
 
-  {"utc_ml_pipeline_src_get_handle_n", utc_ml_pipeline_src_get_handle_n, NULL, NULL},
+  {"utc_ml_pipeline_sink_unregister_n", utc_ml_pipeline_sink_unregister_n, utc_nnstreamer_pipeline_sink_startup, utc_nnstreamer_pipeline_sink_cleanup},
+  {"utc_ml_pipeline_src_get_handle_p", utc_ml_pipeline_src_get_handle_p, utc_nnstreamer_pipeline_src_startup, utc_nnstreamer_pipeline_src_cleanup},
+  {"utc_ml_pipeline_src_get_handle_n", utc_ml_pipeline_src_get_handle_n, utc_nnstreamer_pipeline_src_startup, utc_nnstreamer_pipeline_src_cleanup},
   {"utc_ml_pipeline_src_release_handle_p", utc_ml_pipeline_src_release_handle_p, utc_nnstreamer_pipeline_src_startup, utc_nnstreamer_pipeline_src_cleanup},
-  {"utc_ml_pipeline_src_release_handle_n", utc_ml_pipeline_src_release_handle_n, NULL, NULL},
+  {"utc_ml_pipeline_src_release_handle_n", utc_ml_pipeline_src_release_handle_n, utc_nnstreamer_pipeline_src_startup, utc_nnstreamer_pipeline_src_cleanup},
+
   {"utc_ml_pipeline_src_input_data_p", utc_ml_pipeline_src_input_data_p, utc_nnstreamer_pipeline_src_startup, utc_nnstreamer_pipeline_src_cleanup},
   {"utc_ml_pipeline_src_input_data_n", utc_ml_pipeline_src_input_data_n, utc_nnstreamer_pipeline_src_startup, utc_nnstreamer_pipeline_src_cleanup},
-
   {"utc_ml_pipeline_src_get_tensors_info_p", utc_ml_pipeline_src_get_tensors_info_p, utc_nnstreamer_pipeline_src_startup, utc_nnstreamer_pipeline_src_cleanup},
-  {"utc_ml_pipeline_src_get_tensors_info_n", utc_ml_pipeline_src_get_tensors_info_n, NULL, NULL},
+  {"utc_ml_pipeline_src_get_tensors_info_n", utc_ml_pipeline_src_get_tensors_info_n, utc_nnstreamer_pipeline_src_startup, utc_nnstreamer_pipeline_src_cleanup},
   {"utc_ml_pipeline_switch_get_handle_p", utc_ml_pipeline_switch_get_handle_p, utc_nnstreamer_pipeline_switch_startup, utc_nnstreamer_pipeline_switch_cleanup},
-  {"utc_ml_pipeline_switch_get_handle_n", utc_ml_pipeline_switch_get_handle_n, NULL, NULL},
-  {"utc_ml_pipeline_switch_release_handle_p", utc_ml_pipeline_switch_release_handle_p, utc_nnstreamer_pipeline_switch_startup, utc_nnstreamer_pipeline_switch_cleanup},
 
-  {"utc_ml_pipeline_switch_release_handle_n", utc_ml_pipeline_switch_release_handle_n, NULL, NULL},
+  {"utc_ml_pipeline_switch_get_handle_n", utc_ml_pipeline_switch_get_handle_n, utc_nnstreamer_pipeline_switch_startup, utc_nnstreamer_pipeline_switch_cleanup},
+  {"utc_ml_pipeline_switch_release_handle_p", utc_ml_pipeline_switch_release_handle_p, utc_nnstreamer_pipeline_switch_startup, utc_nnstreamer_pipeline_switch_cleanup},
+  {"utc_ml_pipeline_switch_release_handle_n", utc_ml_pipeline_switch_release_handle_n, utc_nnstreamer_pipeline_switch_startup, utc_nnstreamer_pipeline_switch_cleanup},
   {"utc_ml_pipeline_switch_select_p", utc_ml_pipeline_switch_select_p, utc_nnstreamer_pipeline_switch_startup, utc_nnstreamer_pipeline_switch_cleanup},
-  {"utc_ml_pipeline_switch_select_n", utc_ml_pipeline_switch_select_n, NULL, NULL},
-  {"utc_ml_pipeline_switch_get_pad_list_p", utc_ml_pipeline_switch_get_pad_list_p, utc_nnstreamer_pipeline_switch_startup, utc_nnstreamer_pipeline_switch_cleanup},
-  {"utc_ml_pipeline_switch_get_pad_list_n", utc_ml_pipeline_switch_get_pad_list_n, NULL, NULL},
+  {"utc_ml_pipeline_switch_select_n", utc_ml_pipeline_switch_select_n, utc_nnstreamer_pipeline_switch_startup, utc_nnstreamer_pipeline_switch_cleanup},
 
+  {"utc_ml_pipeline_switch_get_pad_list_p", utc_ml_pipeline_switch_get_pad_list_p, utc_nnstreamer_pipeline_switch_startup, utc_nnstreamer_pipeline_switch_cleanup},
+  {"utc_ml_pipeline_switch_get_pad_list_n", utc_ml_pipeline_switch_get_pad_list_n, utc_nnstreamer_pipeline_switch_startup, utc_nnstreamer_pipeline_switch_cleanup},
   {"utc_ml_pipeline_valve_get_handle_p", utc_ml_pipeline_valve_get_handle_p, utc_nnstreamer_pipeline_valve_startup, utc_nnstreamer_pipeline_valve_cleanup},
-  {"utc_ml_pipeline_valve_get_handle_n", utc_ml_pipeline_valve_get_handle_n, NULL, NULL},
+  {"utc_ml_pipeline_valve_get_handle_n", utc_ml_pipeline_valve_get_handle_n, utc_nnstreamer_pipeline_valve_startup, utc_nnstreamer_pipeline_valve_cleanup},
   {"utc_ml_pipeline_valve_release_handle_p", utc_ml_pipeline_valve_release_handle_p, utc_nnstreamer_pipeline_valve_startup, utc_nnstreamer_pipeline_valve_cleanup},
-  {"utc_ml_pipeline_valve_release_handle_n", utc_ml_pipeline_valve_release_handle_n, NULL, NULL},
+
+  {"utc_ml_pipeline_valve_release_handle_n", utc_ml_pipeline_valve_release_handle_n, utc_nnstreamer_pipeline_valve_startup, utc_nnstreamer_pipeline_valve_cleanup},
   {"utc_ml_pipeline_valve_set_open_p", utc_ml_pipeline_valve_set_open_p, utc_nnstreamer_pipeline_valve_startup, utc_nnstreamer_pipeline_valve_cleanup},
+  {"utc_ml_pipeline_valve_set_open_n", utc_ml_pipeline_valve_set_open_n, utc_nnstreamer_pipeline_valve_startup, utc_nnstreamer_pipeline_valve_cleanup},
+  {"utc_ml_tensors_info_create_p", utc_ml_tensors_info_create_p, utc_nnstreamer_pipeline_tensor_info_startup, utc_nnstreamer_pipeline_tensor_info_cleanup},
+  {"utc_ml_tensors_info_create_n", utc_ml_tensors_info_create_n, utc_nnstreamer_pipeline_tensor_info_startup, utc_nnstreamer_pipeline_tensor_info_cleanup},
 
-  {"utc_ml_pipeline_valve_set_open_n", utc_ml_pipeline_valve_set_open_n, NULL, NULL},
-  {"utc_ml_tensors_info_create_p", utc_ml_tensors_info_create_p, NULL, NULL},
-  {"utc_ml_tensors_info_create_n", utc_ml_tensors_info_create_n, NULL, NULL},
-  {"utc_ml_tensors_info_destroy_p", utc_ml_tensors_info_destroy_p, NULL, NULL},
-  {"utc_ml_tensors_info_destroy_n", utc_ml_tensors_info_destroy_n, NULL, NULL},
+  {"utc_ml_tensors_info_destroy_p", utc_ml_tensors_info_destroy_p, utc_nnstreamer_pipeline_tensor_info_startup, utc_nnstreamer_pipeline_tensor_info_cleanup},
+  {"utc_ml_tensors_info_destroy_n", utc_ml_tensors_info_destroy_n, utc_nnstreamer_pipeline_tensor_info_startup, utc_nnstreamer_pipeline_tensor_info_cleanup},
+  {"utc_ml_tensors_info_validate_p", utc_ml_tensors_info_validate_p, utc_nnstreamer_pipeline_tensor_info_startup, utc_nnstreamer_pipeline_tensor_info_cleanup},
+  {"utc_ml_tensors_info_validate_n", utc_ml_tensors_info_validate_n, utc_nnstreamer_pipeline_tensor_info_startup, utc_nnstreamer_pipeline_tensor_info_cleanup},
+  {"utc_ml_tensors_info_clone_p", utc_ml_tensors_info_clone_p, utc_nnstreamer_pipeline_tensor_info_startup, utc_nnstreamer_pipeline_tensor_info_cleanup},
 
-  {"utc_ml_tensors_info_validate_p", utc_ml_tensors_info_validate_p, NULL, NULL},
-  {"utc_ml_tensors_info_validate_n", utc_ml_tensors_info_validate_n, NULL, NULL},
-  {"utc_ml_tensors_info_clone_p", utc_ml_tensors_info_clone_p, NULL, NULL},
-  {"utc_ml_tensors_info_clone_n", utc_ml_tensors_info_clone_n, NULL, NULL},
+  {"utc_ml_tensors_info_clone_n", utc_ml_tensors_info_clone_n, utc_nnstreamer_pipeline_tensor_info_startup, utc_nnstreamer_pipeline_tensor_info_cleanup},
   {"utc_ml_tensors_info_set_count_p", utc_ml_tensors_info_set_count_p, utc_nnstreamer_pipeline_tensor_info_startup, utc_nnstreamer_pipeline_tensor_info_cleanup},
-
-  {"utc_ml_tensors_info_set_count_n", utc_ml_tensors_info_set_count_n, NULL, NULL},
+  {"utc_ml_tensors_info_set_count_n", utc_ml_tensors_info_set_count_n, utc_nnstreamer_pipeline_tensor_info_startup, utc_nnstreamer_pipeline_tensor_info_cleanup},
   {"utc_ml_tensors_info_get_count_p", utc_ml_tensors_info_get_count_p, utc_nnstreamer_pipeline_tensor_info_startup, utc_nnstreamer_pipeline_tensor_info_cleanup},
-  {"utc_ml_tensors_info_get_count_n", utc_ml_tensors_info_get_count_n, NULL, NULL},
-  {"utc_ml_tensors_info_set_tensor_name_p", utc_ml_tensors_info_set_tensor_name_p, utc_nnstreamer_pipeline_tensor_info_startup, utc_nnstreamer_pipeline_tensor_info_cleanup},
-  {"utc_ml_tensors_info_set_tensor_name_n", utc_ml_tensors_info_set_tensor_name_n, NULL, NULL},
+  {"utc_ml_tensors_info_get_count_n", utc_ml_tensors_info_get_count_n, utc_nnstreamer_pipeline_tensor_info_startup, utc_nnstreamer_pipeline_tensor_info_cleanup},
 
+  {"utc_ml_tensors_info_set_tensor_name_p", utc_ml_tensors_info_set_tensor_name_p, utc_nnstreamer_pipeline_tensor_info_startup, utc_nnstreamer_pipeline_tensor_info_cleanup},
+  {"utc_ml_tensors_info_set_tensor_name_n", utc_ml_tensors_info_set_tensor_name_n, utc_nnstreamer_pipeline_tensor_info_startup, utc_nnstreamer_pipeline_tensor_info_cleanup},
   {"utc_ml_tensors_info_get_tensor_name_p", utc_ml_tensors_info_get_tensor_name_p, utc_nnstreamer_pipeline_tensor_info_startup, utc_nnstreamer_pipeline_tensor_info_cleanup},
-  {"utc_ml_tensors_info_get_tensor_name_n", utc_ml_tensors_info_get_tensor_name_n, NULL, NULL},
+  {"utc_ml_tensors_info_get_tensor_name_n", utc_ml_tensors_info_get_tensor_name_n, utc_nnstreamer_pipeline_tensor_info_startup, utc_nnstreamer_pipeline_tensor_info_cleanup},
   {"utc_ml_tensors_info_set_tensor_type_p", utc_ml_tensors_info_set_tensor_type_p, utc_nnstreamer_pipeline_tensor_info_startup, utc_nnstreamer_pipeline_tensor_info_cleanup},
-  {"utc_ml_tensors_info_set_tensor_type_n", utc_ml_tensors_info_set_tensor_type_n, NULL, NULL},
-  {"utc_ml_tensors_info_get_tensor_type_p", utc_ml_tensors_info_get_tensor_type_p, utc_nnstreamer_pipeline_tensor_info_startup, utc_nnstreamer_pipeline_tensor_info_cleanup},
 
-  {"utc_ml_tensors_info_get_tensor_type_n", utc_ml_tensors_info_get_tensor_type_n, NULL, NULL},
+  {"utc_ml_tensors_info_set_tensor_type_n", utc_ml_tensors_info_set_tensor_type_n, utc_nnstreamer_pipeline_tensor_info_startup, utc_nnstreamer_pipeline_tensor_info_cleanup},
+  {"utc_ml_tensors_info_get_tensor_type_p", utc_ml_tensors_info_get_tensor_type_p, utc_nnstreamer_pipeline_tensor_info_startup, utc_nnstreamer_pipeline_tensor_info_cleanup},
+  {"utc_ml_tensors_info_get_tensor_type_n", utc_ml_tensors_info_get_tensor_type_n, utc_nnstreamer_pipeline_tensor_info_startup, utc_nnstreamer_pipeline_tensor_info_cleanup},
   {"utc_ml_tensors_info_set_tensor_dimension_p", utc_ml_tensors_info_set_tensor_dimension_p, utc_nnstreamer_pipeline_tensor_info_startup, utc_nnstreamer_pipeline_tensor_info_cleanup},
-  {"utc_ml_tensors_info_set_tensor_dimension_n", utc_ml_tensors_info_set_tensor_dimension_n, NULL, NULL},
-  {"utc_ml_tensors_info_get_tensor_dimension_p", utc_ml_tensors_info_get_tensor_dimension_p, utc_nnstreamer_pipeline_tensor_info_startup, utc_nnstreamer_pipeline_tensor_info_cleanup},
-  {"utc_ml_tensors_info_get_tensor_dimension_n", utc_ml_tensors_info_get_tensor_dimension_n, NULL, NULL},
+  {"utc_ml_tensors_info_set_tensor_dimension_n", utc_ml_tensors_info_set_tensor_dimension_n, utc_nnstreamer_pipeline_tensor_info_startup, utc_nnstreamer_pipeline_tensor_info_cleanup},
 
+  {"utc_ml_tensors_info_get_tensor_dimension_p", utc_ml_tensors_info_get_tensor_dimension_p, utc_nnstreamer_pipeline_tensor_info_startup, utc_nnstreamer_pipeline_tensor_info_cleanup},
+  {"utc_ml_tensors_info_get_tensor_dimension_n", utc_ml_tensors_info_get_tensor_dimension_n, utc_nnstreamer_pipeline_tensor_info_startup, utc_nnstreamer_pipeline_tensor_info_cleanup},
   {"utc_ml_tensors_info_get_tensor_size_p", utc_ml_tensors_info_get_tensor_size_p, utc_nnstreamer_pipeline_tensor_info_startup, utc_nnstreamer_pipeline_tensor_info_cleanup},
-  {"utc_ml_tensors_info_get_tensor_size_n", utc_ml_tensors_info_get_tensor_size_n, NULL, NULL},
+  {"utc_ml_tensors_info_get_tensor_size_n", utc_ml_tensors_info_get_tensor_size_n, utc_nnstreamer_pipeline_tensor_info_startup, utc_nnstreamer_pipeline_tensor_info_cleanup},
   {"utc_ml_tensors_data_create_p", utc_ml_tensors_data_create_p, utc_nnstreamer_pipeline_tensor_data_startup, utc_nnstreamer_pipeline_tensor_data_cleanup},
-  {"utc_ml_tensors_data_create_n", utc_ml_tensors_data_create_n, NULL, NULL},
-  {"utc_ml_tensors_data_destroy_p", utc_ml_tensors_data_destroy_p, utc_nnstreamer_pipeline_tensor_data_startup, NULL},
 
-  {"utc_ml_tensors_data_destroy_n", utc_ml_tensors_data_destroy_n, NULL, NULL},
+  {"utc_ml_tensors_data_create_n", utc_ml_tensors_data_create_n, utc_nnstreamer_pipeline_tensor_data_startup, utc_nnstreamer_pipeline_tensor_data_cleanup},
+  {"utc_ml_tensors_data_destroy_p", utc_ml_tensors_data_destroy_p, utc_nnstreamer_pipeline_tensor_data_startup, utc_nnstreamer_pipeline_tensor_data_cleanup},
+  {"utc_ml_tensors_data_destroy_n", utc_ml_tensors_data_destroy_n, utc_nnstreamer_pipeline_tensor_data_startup, utc_nnstreamer_pipeline_tensor_data_cleanup},
   {"utc_ml_tensors_data_get_tensor_data_p", utc_ml_tensors_data_get_tensor_data_p, utc_nnstreamer_pipeline_tensor_data_startup, utc_nnstreamer_pipeline_tensor_data_cleanup},
-  {"utc_ml_tensors_data_get_tensor_data_n", utc_ml_tensors_data_get_tensor_data_n, NULL, NULL},
-  {"utc_ml_tensors_data_set_tensor_data_p", utc_ml_tensors_data_set_tensor_data_p, utc_nnstreamer_pipeline_tensor_data_startup, utc_nnstreamer_pipeline_tensor_data_cleanup},
-  {"utc_ml_tensors_data_set_tensor_data_n", utc_ml_tensors_data_set_tensor_data_n, NULL, NULL},
+  {"utc_ml_tensors_data_get_tensor_data_n", utc_ml_tensors_data_get_tensor_data_n, utc_nnstreamer_pipeline_tensor_data_startup, utc_nnstreamer_pipeline_tensor_data_cleanup},
 
-  {"utc_ml_check_nnfw_availability_p", utc_ml_check_nnfw_availability_p, NULL, NULL},
-  {"utc_ml_check_nnfw_availability_n", utc_ml_check_nnfw_availability_n, NULL, NULL},
+  {"utc_ml_tensors_data_set_tensor_data_p", utc_ml_tensors_data_set_tensor_data_p, utc_nnstreamer_pipeline_tensor_data_startup, utc_nnstreamer_pipeline_tensor_data_cleanup},
+  {"utc_ml_tensors_data_set_tensor_data_n", utc_ml_tensors_data_set_tensor_data_n, utc_nnstreamer_pipeline_tensor_data_startup, utc_nnstreamer_pipeline_tensor_data_cleanup},
   {"utc_ml_single_open_p", utc_ml_single_open_p, utc_nnstreamer_single_startup, utc_nnstreamer_single_cleanup},
   {"utc_ml_single_open_n", utc_ml_single_open_n, utc_nnstreamer_single_startup, utc_nnstreamer_single_cleanup},
   {"utc_ml_single_close_p", utc_ml_single_close_p, utc_nnstreamer_single_startup, utc_nnstreamer_single_cleanup},
@@ -267,35 +269,35 @@ testcase tc_array[] = {
   {"utc_ml_single_get_output_info_n", utc_ml_single_get_output_info_n, utc_nnstreamer_single_startup, utc_nnstreamer_single_cleanup},
   {"utc_ml_single_set_timeout_p", utc_ml_single_set_timeout_p, utc_nnstreamer_single_startup, utc_nnstreamer_single_cleanup},
   {"utc_ml_single_set_timeout_n", utc_ml_single_set_timeout_n, utc_nnstreamer_single_startup, utc_nnstreamer_single_cleanup},
-  {"utc_nnstreamer_scenario_construct_destruct_empty_pipeline_p", utc_nnstreamer_scenario_construct_destruct_empty_pipeline_p, NULL, NULL},
+  {"utc_nnstreamer_scenario_construct_destruct_empty_pipeline_p", utc_nnstreamer_scenario_construct_destruct_empty_pipeline_p, utc_nnstreamer_scenario_startup, utc_nnstreamer_scenario_cleanup},
 
-  {"utc_nnstreamer_scenario_construct_destruct_pipeline_p1", utc_nnstreamer_scenario_construct_destruct_pipeline_p1, NULL, NULL},
-  {"utc_nnstreamer_scenario_construct_destruct_pipeline_p2", utc_nnstreamer_scenario_construct_destruct_pipeline_p2, NULL, NULL},
-  {"utc_nnstreamer_scenario_construct_pipeline_error_case_n1", utc_nnstreamer_scenario_construct_pipeline_error_case_n1, NULL, NULL},
-  {"utc_nnstreamer_scenario_construct_pipeline_error_case_n2", utc_nnstreamer_scenario_construct_pipeline_error_case_n2, NULL, NULL},
-  {"utc_nnstreamer_scenario_pipeline_state_test_p1", utc_nnstreamer_scenario_pipeline_state_test_p1, NULL, NULL},
+  {"utc_nnstreamer_scenario_construct_destruct_pipeline_p1", utc_nnstreamer_scenario_construct_destruct_pipeline_p1, utc_nnstreamer_scenario_startup, utc_nnstreamer_scenario_cleanup},
+  {"utc_nnstreamer_scenario_construct_destruct_pipeline_p2", utc_nnstreamer_scenario_construct_destruct_pipeline_p2, utc_nnstreamer_scenario_startup, utc_nnstreamer_scenario_cleanup},
+  {"utc_nnstreamer_scenario_construct_pipeline_error_case_n1", utc_nnstreamer_scenario_construct_pipeline_error_case_n1, utc_nnstreamer_scenario_startup, utc_nnstreamer_scenario_cleanup},
+  {"utc_nnstreamer_scenario_construct_pipeline_error_case_n2", utc_nnstreamer_scenario_construct_pipeline_error_case_n2, utc_nnstreamer_scenario_startup, utc_nnstreamer_scenario_cleanup},
+  {"utc_nnstreamer_scenario_pipeline_state_test_p1", utc_nnstreamer_scenario_pipeline_state_test_p1, utc_nnstreamer_scenario_startup, utc_nnstreamer_scenario_cleanup},
 
-  {"utc_nnstreamer_scenario_pipeline_state_test_p2", utc_nnstreamer_scenario_pipeline_state_test_p2, NULL, NULL},
-  {"utc_nnstreamer_scenario_pipeline_state_test_p3", utc_nnstreamer_scenario_pipeline_state_test_p3, NULL, NULL},
-  {"utc_nnstreamer_scenario_valve_error_cases_n", utc_nnstreamer_scenario_valve_error_cases_n, NULL, NULL},
-  {"utc_nnstreamer_scenario_sink_p1", utc_nnstreamer_scenario_sink_p1, NULL, NULL},
-  {"utc_nnstreamer_scenario_sink_p2", utc_nnstreamer_scenario_sink_p2, NULL, NULL},
+  {"utc_nnstreamer_scenario_pipeline_state_test_p2", utc_nnstreamer_scenario_pipeline_state_test_p2, utc_nnstreamer_scenario_startup, utc_nnstreamer_scenario_cleanup},
+  {"utc_nnstreamer_scenario_pipeline_state_test_p3", utc_nnstreamer_scenario_pipeline_state_test_p3, utc_nnstreamer_scenario_startup, utc_nnstreamer_scenario_cleanup},
+  {"utc_nnstreamer_scenario_valve_error_cases_n", utc_nnstreamer_scenario_valve_error_cases_n, utc_nnstreamer_scenario_startup, utc_nnstreamer_scenario_cleanup},
+  {"utc_nnstreamer_scenario_sink_p1", utc_nnstreamer_scenario_sink_p1, utc_nnstreamer_scenario_startup, utc_nnstreamer_scenario_cleanup},
+  {"utc_nnstreamer_scenario_sink_p2", utc_nnstreamer_scenario_sink_p2, utc_nnstreamer_scenario_startup, utc_nnstreamer_scenario_cleanup},
 
-  {"utc_nnstreamer_scenario_sink_error_cases_n", utc_nnstreamer_scenario_sink_error_cases_n, NULL, NULL},
+  {"utc_nnstreamer_scenario_sink_error_cases_n", utc_nnstreamer_scenario_sink_error_cases_n, utc_nnstreamer_scenario_startup, utc_nnstreamer_scenario_cleanup},
   {"utc_nnstreamer_scenario_src_p", utc_nnstreamer_scenario_src_p, utc_nnstreamer_scenario_startup, utc_nnstreamer_scenario_cleanup},
-  {"utc_nnstreamer_scenario_src_error_case_n1", utc_nnstreamer_scenario_src_error_case_n1, NULL, NULL},
-  {"utc_nnstreamer_scenario_src_error_case_n2", utc_nnstreamer_scenario_src_error_case_n2, NULL, NULL},
-  {"utc_nnstreamer_scenario_src_error_case_n3", utc_nnstreamer_scenario_src_error_case_n3, NULL, NULL},
-
-  {"utc_nnstreamer_scenario_switch_pipeline_p1", utc_nnstreamer_scenario_switch_pipeline_p1, NULL, NULL},
-  {"utc_nnstreamer_scenario_switch_pipeline_p2", utc_nnstreamer_scenario_switch_pipeline_p2, NULL, NULL},
-  {"utc_nnstreamer_scenario_switch_pipeline_error_cases_n", utc_nnstreamer_scenario_switch_pipeline_error_cases_n, NULL, NULL},
-  {"utc_nnstreamer_scenario_check_nnfw_availability_p", utc_nnstreamer_scenario_check_nnfw_availability_p, NULL, NULL},
-  {"utc_nnstreamer_scenario_check_tensor_info_utilities_p", utc_nnstreamer_scenario_check_tensor_info_utilities_p, NULL, NULL},
-
-  {"utc_nnstreamer_scenario_filter_tensorflow_lite_p1", utc_nnstreamer_scenario_filter_tensorflow_lite_p1, NULL, NULL},
-  {"utc_nnstreamer_scenario_filter_tensorflow_lite_p2", utc_nnstreamer_scenario_filter_tensorflow_lite_p2, NULL, NULL},
-  {"utc_nnstreamer_scenario_filter_tensorflow_lite_n", utc_nnstreamer_scenario_filter_tensorflow_lite_n, NULL, NULL},
+  {"utc_nnstreamer_scenario_src_error_case_n1", utc_nnstreamer_scenario_src_error_case_n1, utc_nnstreamer_scenario_startup, utc_nnstreamer_scenario_cleanup},
+  {"utc_nnstreamer_scenario_src_error_case_n2", utc_nnstreamer_scenario_src_error_case_n2, utc_nnstreamer_scenario_startup, utc_nnstreamer_scenario_cleanup},
+  {"utc_nnstreamer_scenario_src_error_case_n3", utc_nnstreamer_scenario_src_error_case_n3, utc_nnstreamer_scenario_startup, utc_nnstreamer_scenario_cleanup},
+
+  {"utc_nnstreamer_scenario_switch_pipeline_p1", utc_nnstreamer_scenario_switch_pipeline_p1, utc_nnstreamer_scenario_startup, utc_nnstreamer_scenario_cleanup},
+  {"utc_nnstreamer_scenario_switch_pipeline_p2", utc_nnstreamer_scenario_switch_pipeline_p2, utc_nnstreamer_scenario_startup, utc_nnstreamer_scenario_cleanup},
+  {"utc_nnstreamer_scenario_switch_pipeline_error_cases_n", utc_nnstreamer_scenario_switch_pipeline_error_cases_n, utc_nnstreamer_scenario_startup, utc_nnstreamer_scenario_cleanup},
+  {"utc_nnstreamer_scenario_check_nnfw_availability_p", utc_nnstreamer_scenario_check_nnfw_availability_p, utc_nnstreamer_scenario_startup, utc_nnstreamer_scenario_cleanup},
+  {"utc_nnstreamer_scenario_check_tensor_info_utilities_p", utc_nnstreamer_scenario_check_tensor_info_utilities_p, utc_nnstreamer_scenario_startup, utc_nnstreamer_scenario_cleanup},
+
+  {"utc_nnstreamer_scenario_filter_tensorflow_lite_p1", utc_nnstreamer_scenario_filter_tensorflow_lite_p1, utc_nnstreamer_scenario_startup, utc_nnstreamer_scenario_cleanup},
+  {"utc_nnstreamer_scenario_filter_tensorflow_lite_p2", utc_nnstreamer_scenario_filter_tensorflow_lite_p2, utc_nnstreamer_scenario_startup, utc_nnstreamer_scenario_cleanup},
+  {"utc_nnstreamer_scenario_filter_tensorflow_lite_n", utc_nnstreamer_scenario_filter_tensorflow_lite_n, utc_nnstreamer_scenario_startup, utc_nnstreamer_scenario_cleanup},
   {NULL, NULL}
 };
 
index 4fa0762bfe3c6dc63f62977b363b1caf264f9a63..3aa65b4c72c34eed7b32e8407c493cc49df34bc9 100755 (executable)
@@ -21,6 +21,8 @@
 
 extern void utc_nnstreamer_single_startup (void);
 extern void utc_nnstreamer_single_cleanup (void);
+extern void utc_nnstreamer_pipeline_startup (void);
+extern void utc_nnstreamer_pipeline_cleanup (void);
 extern void utc_nnstreamer_pipeline_sink_startup (void);
 extern void utc_nnstreamer_pipeline_sink_cleanup (void);
 extern void utc_nnstreamer_pipeline_src_startup (void);
@@ -48,80 +50,80 @@ extern int utc_ml_pipeline_start_n (void);
 extern int utc_ml_pipeline_stop_p (void);
 extern int utc_ml_pipeline_stop_n (void);
 
+extern int utc_ml_check_nnfw_availability_p (void);
+extern int utc_ml_check_nnfw_availability_n (void);
 extern int utc_ml_pipeline_sink_register_p (void);
 extern int utc_ml_pipeline_sink_register_n (void);
 extern int utc_ml_pipeline_sink_unregister_p (void);
+
 extern int utc_ml_pipeline_sink_unregister_n (void);
 extern int utc_ml_pipeline_src_get_handle_p (void);
-
 extern int utc_ml_pipeline_src_get_handle_n (void);
 extern int utc_ml_pipeline_src_release_handle_p (void);
 extern int utc_ml_pipeline_src_release_handle_n (void);
+
 extern int utc_ml_pipeline_src_input_data_p (void);
 extern int utc_ml_pipeline_src_input_data_n (void);
-
 extern int utc_ml_pipeline_src_get_tensors_info_p (void);
 extern int utc_ml_pipeline_src_get_tensors_info_n (void);
 extern int utc_ml_pipeline_switch_get_handle_p (void);
+
 extern int utc_ml_pipeline_switch_get_handle_n (void);
 extern int utc_ml_pipeline_switch_release_handle_p (void);
-
 extern int utc_ml_pipeline_switch_release_handle_n (void);
 extern int utc_ml_pipeline_switch_select_p (void);
 extern int utc_ml_pipeline_switch_select_n (void);
+
 extern int utc_ml_pipeline_switch_get_pad_list_p (void);
 extern int utc_ml_pipeline_switch_get_pad_list_n (void);
-
 extern int utc_ml_pipeline_valve_get_handle_p (void);
 extern int utc_ml_pipeline_valve_get_handle_n (void);
 extern int utc_ml_pipeline_valve_release_handle_p (void);
+
 extern int utc_ml_pipeline_valve_release_handle_n (void);
 extern int utc_ml_pipeline_valve_set_open_p (void);
-
 extern int utc_ml_pipeline_valve_set_open_n (void);
 extern int utc_ml_tensors_info_create_p (void);
 extern int utc_ml_tensors_info_create_n (void);
+
 extern int utc_ml_tensors_info_destroy_p (void);
 extern int utc_ml_tensors_info_destroy_n (void);
-
 extern int utc_ml_tensors_info_validate_p (void);
 extern int utc_ml_tensors_info_validate_n (void);
 extern int utc_ml_tensors_info_clone_p (void);
+
 extern int utc_ml_tensors_info_clone_n (void);
 extern int utc_ml_tensors_info_set_count_p (void);
-
 extern int utc_ml_tensors_info_set_count_n (void);
 extern int utc_ml_tensors_info_get_count_p (void);
 extern int utc_ml_tensors_info_get_count_n (void);
+
 extern int utc_ml_tensors_info_set_tensor_name_p (void);
 extern int utc_ml_tensors_info_set_tensor_name_n (void);
-
 extern int utc_ml_tensors_info_get_tensor_name_p (void);
 extern int utc_ml_tensors_info_get_tensor_name_n (void);
 extern int utc_ml_tensors_info_set_tensor_type_p (void);
+
 extern int utc_ml_tensors_info_set_tensor_type_n (void);
 extern int utc_ml_tensors_info_get_tensor_type_p (void);
-
 extern int utc_ml_tensors_info_get_tensor_type_n (void);
 extern int utc_ml_tensors_info_set_tensor_dimension_p (void);
 extern int utc_ml_tensors_info_set_tensor_dimension_n (void);
+
 extern int utc_ml_tensors_info_get_tensor_dimension_p (void);
 extern int utc_ml_tensors_info_get_tensor_dimension_n (void);
-
 extern int utc_ml_tensors_info_get_tensor_size_p (void);
 extern int utc_ml_tensors_info_get_tensor_size_n (void);
 extern int utc_ml_tensors_data_create_p (void);
+
 extern int utc_ml_tensors_data_create_n (void);
 extern int utc_ml_tensors_data_destroy_p (void);
-
 extern int utc_ml_tensors_data_destroy_n (void);
 extern int utc_ml_tensors_data_get_tensor_data_p (void);
 extern int utc_ml_tensors_data_get_tensor_data_n (void);
+
 extern int utc_ml_tensors_data_set_tensor_data_p (void);
 extern int utc_ml_tensors_data_set_tensor_data_n (void);
-
-extern int utc_ml_check_nnfw_availability_p (void);
-extern int utc_ml_check_nnfw_availability_n (void);
 extern int utc_ml_single_open_p (void);
 extern int utc_ml_single_open_n (void);
 extern int utc_ml_single_close_p (void);
@@ -167,92 +169,92 @@ extern int utc_nnstreamer_scenario_filter_tensorflow_lite_p2 (void);
 extern int utc_nnstreamer_scenario_filter_tensorflow_lite_n (void);
 
 testcase tc_array[] = {
-  {"utc_ml_pipeline_construct_p", utc_ml_pipeline_construct_p, NULL, NULL},
-  {"utc_ml_pipeline_construct_n", utc_ml_pipeline_construct_n, NULL, NULL},
-  {"utc_ml_pipeline_destroy_p", utc_ml_pipeline_destroy_p, NULL, NULL},
-  {"utc_ml_pipeline_destroy_n", utc_ml_pipeline_destroy_n, NULL, NULL},
-  {"utc_ml_pipeline_get_state_p", utc_ml_pipeline_get_state_p, NULL, NULL},
-
-  {"utc_ml_pipeline_get_state_n", utc_ml_pipeline_get_state_n, NULL, NULL},
-  {"utc_ml_pipeline_start_p", utc_ml_pipeline_start_p, NULL, NULL},
-  {"utc_ml_pipeline_start_n", utc_ml_pipeline_start_n, NULL, NULL},
-  {"utc_ml_pipeline_stop_p", utc_ml_pipeline_stop_p, NULL, NULL},
-  {"utc_ml_pipeline_stop_n", utc_ml_pipeline_stop_n, NULL, NULL},
-
+  {"utc_ml_pipeline_construct_p", utc_ml_pipeline_construct_p, utc_nnstreamer_pipeline_startup, utc_nnstreamer_pipeline_cleanup},
+  {"utc_ml_pipeline_construct_n", utc_ml_pipeline_construct_n, utc_nnstreamer_pipeline_startup, utc_nnstreamer_pipeline_cleanup},
+  {"utc_ml_pipeline_destroy_p", utc_ml_pipeline_destroy_p, utc_nnstreamer_pipeline_startup, utc_nnstreamer_pipeline_cleanup},
+  {"utc_ml_pipeline_destroy_n", utc_ml_pipeline_destroy_n, utc_nnstreamer_pipeline_startup, utc_nnstreamer_pipeline_cleanup},
+  {"utc_ml_pipeline_get_state_p", utc_ml_pipeline_get_state_p, utc_nnstreamer_pipeline_startup, utc_nnstreamer_pipeline_cleanup},
+
+  {"utc_ml_pipeline_get_state_n", utc_ml_pipeline_get_state_n, utc_nnstreamer_pipeline_startup, utc_nnstreamer_pipeline_cleanup},
+  {"utc_ml_pipeline_start_p", utc_ml_pipeline_start_p, utc_nnstreamer_pipeline_startup, utc_nnstreamer_pipeline_cleanup},
+  {"utc_ml_pipeline_start_n", utc_ml_pipeline_start_n, utc_nnstreamer_pipeline_startup, utc_nnstreamer_pipeline_cleanup},
+  {"utc_ml_pipeline_stop_p", utc_ml_pipeline_stop_p, utc_nnstreamer_pipeline_startup, utc_nnstreamer_pipeline_cleanup},
+  {"utc_ml_pipeline_stop_n", utc_ml_pipeline_stop_n, utc_nnstreamer_pipeline_startup, utc_nnstreamer_pipeline_cleanup},
+
+  {"utc_ml_check_nnfw_availability_p", utc_ml_check_nnfw_availability_p, utc_nnstreamer_pipeline_startup, utc_nnstreamer_pipeline_cleanup},
+  {"utc_ml_check_nnfw_availability_n", utc_ml_check_nnfw_availability_n, utc_nnstreamer_pipeline_startup, utc_nnstreamer_pipeline_cleanup},
   {"utc_ml_pipeline_sink_register_p", utc_ml_pipeline_sink_register_p, utc_nnstreamer_pipeline_sink_startup, utc_nnstreamer_pipeline_sink_cleanup},
-  {"utc_ml_pipeline_sink_register_n", utc_ml_pipeline_sink_register_n, NULL, NULL},
+  {"utc_ml_pipeline_sink_register_n", utc_ml_pipeline_sink_register_n, utc_nnstreamer_pipeline_sink_startup, utc_nnstreamer_pipeline_sink_cleanup},
   {"utc_ml_pipeline_sink_unregister_p", utc_ml_pipeline_sink_unregister_p, utc_nnstreamer_pipeline_sink_startup, utc_nnstreamer_pipeline_sink_cleanup},
-  {"utc_ml_pipeline_sink_unregister_n", utc_ml_pipeline_sink_unregister_n, NULL, NULL},
-  {"utc_ml_pipeline_src_get_handle_p", utc_ml_pipeline_src_get_handle_p, utc_nnstreamer_pipeline_src_startup, utc_nnstreamer_pipeline_src_cleanup},
 
-  {"utc_ml_pipeline_src_get_handle_n", utc_ml_pipeline_src_get_handle_n, NULL, NULL},
+  {"utc_ml_pipeline_sink_unregister_n", utc_ml_pipeline_sink_unregister_n, utc_nnstreamer_pipeline_sink_startup, utc_nnstreamer_pipeline_sink_cleanup},
+  {"utc_ml_pipeline_src_get_handle_p", utc_ml_pipeline_src_get_handle_p, utc_nnstreamer_pipeline_src_startup, utc_nnstreamer_pipeline_src_cleanup},
+  {"utc_ml_pipeline_src_get_handle_n", utc_ml_pipeline_src_get_handle_n, utc_nnstreamer_pipeline_src_startup, utc_nnstreamer_pipeline_src_cleanup},
   {"utc_ml_pipeline_src_release_handle_p", utc_ml_pipeline_src_release_handle_p, utc_nnstreamer_pipeline_src_startup, utc_nnstreamer_pipeline_src_cleanup},
-  {"utc_ml_pipeline_src_release_handle_n", utc_ml_pipeline_src_release_handle_n, NULL, NULL},
+  {"utc_ml_pipeline_src_release_handle_n", utc_ml_pipeline_src_release_handle_n, utc_nnstreamer_pipeline_src_startup, utc_nnstreamer_pipeline_src_cleanup},
+
   {"utc_ml_pipeline_src_input_data_p", utc_ml_pipeline_src_input_data_p, utc_nnstreamer_pipeline_src_startup, utc_nnstreamer_pipeline_src_cleanup},
   {"utc_ml_pipeline_src_input_data_n", utc_ml_pipeline_src_input_data_n, utc_nnstreamer_pipeline_src_startup, utc_nnstreamer_pipeline_src_cleanup},
-
   {"utc_ml_pipeline_src_get_tensors_info_p", utc_ml_pipeline_src_get_tensors_info_p, utc_nnstreamer_pipeline_src_startup, utc_nnstreamer_pipeline_src_cleanup},
-  {"utc_ml_pipeline_src_get_tensors_info_n", utc_ml_pipeline_src_get_tensors_info_n, NULL, NULL},
+  {"utc_ml_pipeline_src_get_tensors_info_n", utc_ml_pipeline_src_get_tensors_info_n, utc_nnstreamer_pipeline_src_startup, utc_nnstreamer_pipeline_src_cleanup},
   {"utc_ml_pipeline_switch_get_handle_p", utc_ml_pipeline_switch_get_handle_p, utc_nnstreamer_pipeline_switch_startup, utc_nnstreamer_pipeline_switch_cleanup},
-  {"utc_ml_pipeline_switch_get_handle_n", utc_ml_pipeline_switch_get_handle_n, NULL, NULL},
-  {"utc_ml_pipeline_switch_release_handle_p", utc_ml_pipeline_switch_release_handle_p, utc_nnstreamer_pipeline_switch_startup, utc_nnstreamer_pipeline_switch_cleanup},
 
-  {"utc_ml_pipeline_switch_release_handle_n", utc_ml_pipeline_switch_release_handle_n, NULL, NULL},
+  {"utc_ml_pipeline_switch_get_handle_n", utc_ml_pipeline_switch_get_handle_n, utc_nnstreamer_pipeline_switch_startup, utc_nnstreamer_pipeline_switch_cleanup},
+  {"utc_ml_pipeline_switch_release_handle_p", utc_ml_pipeline_switch_release_handle_p, utc_nnstreamer_pipeline_switch_startup, utc_nnstreamer_pipeline_switch_cleanup},
+  {"utc_ml_pipeline_switch_release_handle_n", utc_ml_pipeline_switch_release_handle_n, utc_nnstreamer_pipeline_switch_startup, utc_nnstreamer_pipeline_switch_cleanup},
   {"utc_ml_pipeline_switch_select_p", utc_ml_pipeline_switch_select_p, utc_nnstreamer_pipeline_switch_startup, utc_nnstreamer_pipeline_switch_cleanup},
-  {"utc_ml_pipeline_switch_select_n", utc_ml_pipeline_switch_select_n, NULL, NULL},
-  {"utc_ml_pipeline_switch_get_pad_list_p", utc_ml_pipeline_switch_get_pad_list_p, utc_nnstreamer_pipeline_switch_startup, utc_nnstreamer_pipeline_switch_cleanup},
-  {"utc_ml_pipeline_switch_get_pad_list_n", utc_ml_pipeline_switch_get_pad_list_n, NULL, NULL},
+  {"utc_ml_pipeline_switch_select_n", utc_ml_pipeline_switch_select_n, utc_nnstreamer_pipeline_switch_startup, utc_nnstreamer_pipeline_switch_cleanup},
 
+  {"utc_ml_pipeline_switch_get_pad_list_p", utc_ml_pipeline_switch_get_pad_list_p, utc_nnstreamer_pipeline_switch_startup, utc_nnstreamer_pipeline_switch_cleanup},
+  {"utc_ml_pipeline_switch_get_pad_list_n", utc_ml_pipeline_switch_get_pad_list_n, utc_nnstreamer_pipeline_switch_startup, utc_nnstreamer_pipeline_switch_cleanup},
   {"utc_ml_pipeline_valve_get_handle_p", utc_ml_pipeline_valve_get_handle_p, utc_nnstreamer_pipeline_valve_startup, utc_nnstreamer_pipeline_valve_cleanup},
-  {"utc_ml_pipeline_valve_get_handle_n", utc_ml_pipeline_valve_get_handle_n, NULL, NULL},
+  {"utc_ml_pipeline_valve_get_handle_n", utc_ml_pipeline_valve_get_handle_n, utc_nnstreamer_pipeline_valve_startup, utc_nnstreamer_pipeline_valve_cleanup},
   {"utc_ml_pipeline_valve_release_handle_p", utc_ml_pipeline_valve_release_handle_p, utc_nnstreamer_pipeline_valve_startup, utc_nnstreamer_pipeline_valve_cleanup},
-  {"utc_ml_pipeline_valve_release_handle_n", utc_ml_pipeline_valve_release_handle_n, NULL, NULL},
+
+  {"utc_ml_pipeline_valve_release_handle_n", utc_ml_pipeline_valve_release_handle_n, utc_nnstreamer_pipeline_valve_startup, utc_nnstreamer_pipeline_valve_cleanup},
   {"utc_ml_pipeline_valve_set_open_p", utc_ml_pipeline_valve_set_open_p, utc_nnstreamer_pipeline_valve_startup, utc_nnstreamer_pipeline_valve_cleanup},
+  {"utc_ml_pipeline_valve_set_open_n", utc_ml_pipeline_valve_set_open_n, utc_nnstreamer_pipeline_valve_startup, utc_nnstreamer_pipeline_valve_cleanup},
+  {"utc_ml_tensors_info_create_p", utc_ml_tensors_info_create_p, utc_nnstreamer_pipeline_tensor_info_startup, utc_nnstreamer_pipeline_tensor_info_cleanup},
+  {"utc_ml_tensors_info_create_n", utc_ml_tensors_info_create_n, utc_nnstreamer_pipeline_tensor_info_startup, utc_nnstreamer_pipeline_tensor_info_cleanup},
 
-  {"utc_ml_pipeline_valve_set_open_n", utc_ml_pipeline_valve_set_open_n, NULL, NULL},
-  {"utc_ml_tensors_info_create_p", utc_ml_tensors_info_create_p, NULL, NULL},
-  {"utc_ml_tensors_info_create_n", utc_ml_tensors_info_create_n, NULL, NULL},
-  {"utc_ml_tensors_info_destroy_p", utc_ml_tensors_info_destroy_p, NULL, NULL},
-  {"utc_ml_tensors_info_destroy_n", utc_ml_tensors_info_destroy_n, NULL, NULL},
+  {"utc_ml_tensors_info_destroy_p", utc_ml_tensors_info_destroy_p, utc_nnstreamer_pipeline_tensor_info_startup, utc_nnstreamer_pipeline_tensor_info_cleanup},
+  {"utc_ml_tensors_info_destroy_n", utc_ml_tensors_info_destroy_n, utc_nnstreamer_pipeline_tensor_info_startup, utc_nnstreamer_pipeline_tensor_info_cleanup},
+  {"utc_ml_tensors_info_validate_p", utc_ml_tensors_info_validate_p, utc_nnstreamer_pipeline_tensor_info_startup, utc_nnstreamer_pipeline_tensor_info_cleanup},
+  {"utc_ml_tensors_info_validate_n", utc_ml_tensors_info_validate_n, utc_nnstreamer_pipeline_tensor_info_startup, utc_nnstreamer_pipeline_tensor_info_cleanup},
+  {"utc_ml_tensors_info_clone_p", utc_ml_tensors_info_clone_p, utc_nnstreamer_pipeline_tensor_info_startup, utc_nnstreamer_pipeline_tensor_info_cleanup},
 
-  {"utc_ml_tensors_info_validate_p", utc_ml_tensors_info_validate_p, NULL, NULL},
-  {"utc_ml_tensors_info_validate_n", utc_ml_tensors_info_validate_n, NULL, NULL},
-  {"utc_ml_tensors_info_clone_p", utc_ml_tensors_info_clone_p, NULL, NULL},
-  {"utc_ml_tensors_info_clone_n", utc_ml_tensors_info_clone_n, NULL, NULL},
+  {"utc_ml_tensors_info_clone_n", utc_ml_tensors_info_clone_n, utc_nnstreamer_pipeline_tensor_info_startup, utc_nnstreamer_pipeline_tensor_info_cleanup},
   {"utc_ml_tensors_info_set_count_p", utc_ml_tensors_info_set_count_p, utc_nnstreamer_pipeline_tensor_info_startup, utc_nnstreamer_pipeline_tensor_info_cleanup},
-
-  {"utc_ml_tensors_info_set_count_n", utc_ml_tensors_info_set_count_n, NULL, NULL},
+  {"utc_ml_tensors_info_set_count_n", utc_ml_tensors_info_set_count_n, utc_nnstreamer_pipeline_tensor_info_startup, utc_nnstreamer_pipeline_tensor_info_cleanup},
   {"utc_ml_tensors_info_get_count_p", utc_ml_tensors_info_get_count_p, utc_nnstreamer_pipeline_tensor_info_startup, utc_nnstreamer_pipeline_tensor_info_cleanup},
-  {"utc_ml_tensors_info_get_count_n", utc_ml_tensors_info_get_count_n, NULL, NULL},
-  {"utc_ml_tensors_info_set_tensor_name_p", utc_ml_tensors_info_set_tensor_name_p, utc_nnstreamer_pipeline_tensor_info_startup, utc_nnstreamer_pipeline_tensor_info_cleanup},
-  {"utc_ml_tensors_info_set_tensor_name_n", utc_ml_tensors_info_set_tensor_name_n, NULL, NULL},
+  {"utc_ml_tensors_info_get_count_n", utc_ml_tensors_info_get_count_n, utc_nnstreamer_pipeline_tensor_info_startup, utc_nnstreamer_pipeline_tensor_info_cleanup},
 
+  {"utc_ml_tensors_info_set_tensor_name_p", utc_ml_tensors_info_set_tensor_name_p, utc_nnstreamer_pipeline_tensor_info_startup, utc_nnstreamer_pipeline_tensor_info_cleanup},
+  {"utc_ml_tensors_info_set_tensor_name_n", utc_ml_tensors_info_set_tensor_name_n, utc_nnstreamer_pipeline_tensor_info_startup, utc_nnstreamer_pipeline_tensor_info_cleanup},
   {"utc_ml_tensors_info_get_tensor_name_p", utc_ml_tensors_info_get_tensor_name_p, utc_nnstreamer_pipeline_tensor_info_startup, utc_nnstreamer_pipeline_tensor_info_cleanup},
-  {"utc_ml_tensors_info_get_tensor_name_n", utc_ml_tensors_info_get_tensor_name_n, NULL, NULL},
+  {"utc_ml_tensors_info_get_tensor_name_n", utc_ml_tensors_info_get_tensor_name_n, utc_nnstreamer_pipeline_tensor_info_startup, utc_nnstreamer_pipeline_tensor_info_cleanup},
   {"utc_ml_tensors_info_set_tensor_type_p", utc_ml_tensors_info_set_tensor_type_p, utc_nnstreamer_pipeline_tensor_info_startup, utc_nnstreamer_pipeline_tensor_info_cleanup},
-  {"utc_ml_tensors_info_set_tensor_type_n", utc_ml_tensors_info_set_tensor_type_n, NULL, NULL},
-  {"utc_ml_tensors_info_get_tensor_type_p", utc_ml_tensors_info_get_tensor_type_p, utc_nnstreamer_pipeline_tensor_info_startup, utc_nnstreamer_pipeline_tensor_info_cleanup},
 
-  {"utc_ml_tensors_info_get_tensor_type_n", utc_ml_tensors_info_get_tensor_type_n, NULL, NULL},
+  {"utc_ml_tensors_info_set_tensor_type_n", utc_ml_tensors_info_set_tensor_type_n, utc_nnstreamer_pipeline_tensor_info_startup, utc_nnstreamer_pipeline_tensor_info_cleanup},
+  {"utc_ml_tensors_info_get_tensor_type_p", utc_ml_tensors_info_get_tensor_type_p, utc_nnstreamer_pipeline_tensor_info_startup, utc_nnstreamer_pipeline_tensor_info_cleanup},
+  {"utc_ml_tensors_info_get_tensor_type_n", utc_ml_tensors_info_get_tensor_type_n, utc_nnstreamer_pipeline_tensor_info_startup, utc_nnstreamer_pipeline_tensor_info_cleanup},
   {"utc_ml_tensors_info_set_tensor_dimension_p", utc_ml_tensors_info_set_tensor_dimension_p, utc_nnstreamer_pipeline_tensor_info_startup, utc_nnstreamer_pipeline_tensor_info_cleanup},
-  {"utc_ml_tensors_info_set_tensor_dimension_n", utc_ml_tensors_info_set_tensor_dimension_n, NULL, NULL},
-  {"utc_ml_tensors_info_get_tensor_dimension_p", utc_ml_tensors_info_get_tensor_dimension_p, utc_nnstreamer_pipeline_tensor_info_startup, utc_nnstreamer_pipeline_tensor_info_cleanup},
-  {"utc_ml_tensors_info_get_tensor_dimension_n", utc_ml_tensors_info_get_tensor_dimension_n, NULL, NULL},
+  {"utc_ml_tensors_info_set_tensor_dimension_n", utc_ml_tensors_info_set_tensor_dimension_n, utc_nnstreamer_pipeline_tensor_info_startup, utc_nnstreamer_pipeline_tensor_info_cleanup},
 
+  {"utc_ml_tensors_info_get_tensor_dimension_p", utc_ml_tensors_info_get_tensor_dimension_p, utc_nnstreamer_pipeline_tensor_info_startup, utc_nnstreamer_pipeline_tensor_info_cleanup},
+  {"utc_ml_tensors_info_get_tensor_dimension_n", utc_ml_tensors_info_get_tensor_dimension_n, utc_nnstreamer_pipeline_tensor_info_startup, utc_nnstreamer_pipeline_tensor_info_cleanup},
   {"utc_ml_tensors_info_get_tensor_size_p", utc_ml_tensors_info_get_tensor_size_p, utc_nnstreamer_pipeline_tensor_info_startup, utc_nnstreamer_pipeline_tensor_info_cleanup},
-  {"utc_ml_tensors_info_get_tensor_size_n", utc_ml_tensors_info_get_tensor_size_n, NULL, NULL},
+  {"utc_ml_tensors_info_get_tensor_size_n", utc_ml_tensors_info_get_tensor_size_n, utc_nnstreamer_pipeline_tensor_info_startup, utc_nnstreamer_pipeline_tensor_info_cleanup},
   {"utc_ml_tensors_data_create_p", utc_ml_tensors_data_create_p, utc_nnstreamer_pipeline_tensor_data_startup, utc_nnstreamer_pipeline_tensor_data_cleanup},
-  {"utc_ml_tensors_data_create_n", utc_ml_tensors_data_create_n, NULL, NULL},
-  {"utc_ml_tensors_data_destroy_p", utc_ml_tensors_data_destroy_p, utc_nnstreamer_pipeline_tensor_data_startup, NULL},
 
-  {"utc_ml_tensors_data_destroy_n", utc_ml_tensors_data_destroy_n, NULL, NULL},
+  {"utc_ml_tensors_data_create_n", utc_ml_tensors_data_create_n, utc_nnstreamer_pipeline_tensor_data_startup, utc_nnstreamer_pipeline_tensor_data_cleanup},
+  {"utc_ml_tensors_data_destroy_p", utc_ml_tensors_data_destroy_p, utc_nnstreamer_pipeline_tensor_data_startup, utc_nnstreamer_pipeline_tensor_data_cleanup},
+  {"utc_ml_tensors_data_destroy_n", utc_ml_tensors_data_destroy_n, utc_nnstreamer_pipeline_tensor_data_startup, utc_nnstreamer_pipeline_tensor_data_cleanup},
   {"utc_ml_tensors_data_get_tensor_data_p", utc_ml_tensors_data_get_tensor_data_p, utc_nnstreamer_pipeline_tensor_data_startup, utc_nnstreamer_pipeline_tensor_data_cleanup},
-  {"utc_ml_tensors_data_get_tensor_data_n", utc_ml_tensors_data_get_tensor_data_n, NULL, NULL},
-  {"utc_ml_tensors_data_set_tensor_data_p", utc_ml_tensors_data_set_tensor_data_p, utc_nnstreamer_pipeline_tensor_data_startup, utc_nnstreamer_pipeline_tensor_data_cleanup},
-  {"utc_ml_tensors_data_set_tensor_data_n", utc_ml_tensors_data_set_tensor_data_n, NULL, NULL},
+  {"utc_ml_tensors_data_get_tensor_data_n", utc_ml_tensors_data_get_tensor_data_n, utc_nnstreamer_pipeline_tensor_data_startup, utc_nnstreamer_pipeline_tensor_data_cleanup},
 
-  {"utc_ml_check_nnfw_availability_p", utc_ml_check_nnfw_availability_p, NULL, NULL},
-  {"utc_ml_check_nnfw_availability_n", utc_ml_check_nnfw_availability_n, NULL, NULL},
+  {"utc_ml_tensors_data_set_tensor_data_p", utc_ml_tensors_data_set_tensor_data_p, utc_nnstreamer_pipeline_tensor_data_startup, utc_nnstreamer_pipeline_tensor_data_cleanup},
+  {"utc_ml_tensors_data_set_tensor_data_n", utc_ml_tensors_data_set_tensor_data_n, utc_nnstreamer_pipeline_tensor_data_startup, utc_nnstreamer_pipeline_tensor_data_cleanup},
   {"utc_ml_single_open_p", utc_ml_single_open_p, utc_nnstreamer_single_startup, utc_nnstreamer_single_cleanup},
   {"utc_ml_single_open_n", utc_ml_single_open_n, utc_nnstreamer_single_startup, utc_nnstreamer_single_cleanup},
   {"utc_ml_single_close_p", utc_ml_single_close_p, utc_nnstreamer_single_startup, utc_nnstreamer_single_cleanup},
@@ -267,35 +269,35 @@ testcase tc_array[] = {
   {"utc_ml_single_get_output_info_n", utc_ml_single_get_output_info_n, utc_nnstreamer_single_startup, utc_nnstreamer_single_cleanup},
   {"utc_ml_single_set_timeout_p", utc_ml_single_set_timeout_p, utc_nnstreamer_single_startup, utc_nnstreamer_single_cleanup},
   {"utc_ml_single_set_timeout_n", utc_ml_single_set_timeout_n, utc_nnstreamer_single_startup, utc_nnstreamer_single_cleanup},
-  {"utc_nnstreamer_scenario_construct_destruct_empty_pipeline_p", utc_nnstreamer_scenario_construct_destruct_empty_pipeline_p, NULL, NULL},
+  {"utc_nnstreamer_scenario_construct_destruct_empty_pipeline_p", utc_nnstreamer_scenario_construct_destruct_empty_pipeline_p, utc_nnstreamer_scenario_startup, utc_nnstreamer_scenario_cleanup},
 
-  {"utc_nnstreamer_scenario_construct_destruct_pipeline_p1", utc_nnstreamer_scenario_construct_destruct_pipeline_p1, NULL, NULL},
-  {"utc_nnstreamer_scenario_construct_destruct_pipeline_p2", utc_nnstreamer_scenario_construct_destruct_pipeline_p2, NULL, NULL},
-  {"utc_nnstreamer_scenario_construct_pipeline_error_case_n1", utc_nnstreamer_scenario_construct_pipeline_error_case_n1, NULL, NULL},
-  {"utc_nnstreamer_scenario_construct_pipeline_error_case_n2", utc_nnstreamer_scenario_construct_pipeline_error_case_n2, NULL, NULL},
-  {"utc_nnstreamer_scenario_pipeline_state_test_p1", utc_nnstreamer_scenario_pipeline_state_test_p1, NULL, NULL},
+  {"utc_nnstreamer_scenario_construct_destruct_pipeline_p1", utc_nnstreamer_scenario_construct_destruct_pipeline_p1, utc_nnstreamer_scenario_startup, utc_nnstreamer_scenario_cleanup},
+  {"utc_nnstreamer_scenario_construct_destruct_pipeline_p2", utc_nnstreamer_scenario_construct_destruct_pipeline_p2, utc_nnstreamer_scenario_startup, utc_nnstreamer_scenario_cleanup},
+  {"utc_nnstreamer_scenario_construct_pipeline_error_case_n1", utc_nnstreamer_scenario_construct_pipeline_error_case_n1, utc_nnstreamer_scenario_startup, utc_nnstreamer_scenario_cleanup},
+  {"utc_nnstreamer_scenario_construct_pipeline_error_case_n2", utc_nnstreamer_scenario_construct_pipeline_error_case_n2, utc_nnstreamer_scenario_startup, utc_nnstreamer_scenario_cleanup},
+  {"utc_nnstreamer_scenario_pipeline_state_test_p1", utc_nnstreamer_scenario_pipeline_state_test_p1, utc_nnstreamer_scenario_startup, utc_nnstreamer_scenario_cleanup},
 
-  {"utc_nnstreamer_scenario_pipeline_state_test_p2", utc_nnstreamer_scenario_pipeline_state_test_p2, NULL, NULL},
-  {"utc_nnstreamer_scenario_pipeline_state_test_p3", utc_nnstreamer_scenario_pipeline_state_test_p3, NULL, NULL},
-  {"utc_nnstreamer_scenario_valve_error_cases_n", utc_nnstreamer_scenario_valve_error_cases_n, NULL, NULL},
-  {"utc_nnstreamer_scenario_sink_p1", utc_nnstreamer_scenario_sink_p1, NULL, NULL},
-  {"utc_nnstreamer_scenario_sink_p2", utc_nnstreamer_scenario_sink_p2, NULL, NULL},
+  {"utc_nnstreamer_scenario_pipeline_state_test_p2", utc_nnstreamer_scenario_pipeline_state_test_p2, utc_nnstreamer_scenario_startup, utc_nnstreamer_scenario_cleanup},
+  {"utc_nnstreamer_scenario_pipeline_state_test_p3", utc_nnstreamer_scenario_pipeline_state_test_p3, utc_nnstreamer_scenario_startup, utc_nnstreamer_scenario_cleanup},
+  {"utc_nnstreamer_scenario_valve_error_cases_n", utc_nnstreamer_scenario_valve_error_cases_n, utc_nnstreamer_scenario_startup, utc_nnstreamer_scenario_cleanup},
+  {"utc_nnstreamer_scenario_sink_p1", utc_nnstreamer_scenario_sink_p1, utc_nnstreamer_scenario_startup, utc_nnstreamer_scenario_cleanup},
+  {"utc_nnstreamer_scenario_sink_p2", utc_nnstreamer_scenario_sink_p2, utc_nnstreamer_scenario_startup, utc_nnstreamer_scenario_cleanup},
 
-  {"utc_nnstreamer_scenario_sink_error_cases_n", utc_nnstreamer_scenario_sink_error_cases_n, NULL, NULL},
+  {"utc_nnstreamer_scenario_sink_error_cases_n", utc_nnstreamer_scenario_sink_error_cases_n, utc_nnstreamer_scenario_startup, utc_nnstreamer_scenario_cleanup},
   {"utc_nnstreamer_scenario_src_p", utc_nnstreamer_scenario_src_p, utc_nnstreamer_scenario_startup, utc_nnstreamer_scenario_cleanup},
-  {"utc_nnstreamer_scenario_src_error_case_n1", utc_nnstreamer_scenario_src_error_case_n1, NULL, NULL},
-  {"utc_nnstreamer_scenario_src_error_case_n2", utc_nnstreamer_scenario_src_error_case_n2, NULL, NULL},
-  {"utc_nnstreamer_scenario_src_error_case_n3", utc_nnstreamer_scenario_src_error_case_n3, NULL, NULL},
-
-  {"utc_nnstreamer_scenario_switch_pipeline_p1", utc_nnstreamer_scenario_switch_pipeline_p1, NULL, NULL},
-  {"utc_nnstreamer_scenario_switch_pipeline_p2", utc_nnstreamer_scenario_switch_pipeline_p2, NULL, NULL},
-  {"utc_nnstreamer_scenario_switch_pipeline_error_cases_n", utc_nnstreamer_scenario_switch_pipeline_error_cases_n, NULL, NULL},
-  {"utc_nnstreamer_scenario_check_nnfw_availability_p", utc_nnstreamer_scenario_check_nnfw_availability_p, NULL, NULL},
-  {"utc_nnstreamer_scenario_check_tensor_info_utilities_p", utc_nnstreamer_scenario_check_tensor_info_utilities_p, NULL, NULL},
-
-  {"utc_nnstreamer_scenario_filter_tensorflow_lite_p1", utc_nnstreamer_scenario_filter_tensorflow_lite_p1, NULL, NULL},
-  {"utc_nnstreamer_scenario_filter_tensorflow_lite_p2", utc_nnstreamer_scenario_filter_tensorflow_lite_p2, NULL, NULL},
-  {"utc_nnstreamer_scenario_filter_tensorflow_lite_n", utc_nnstreamer_scenario_filter_tensorflow_lite_n, NULL, NULL},
+  {"utc_nnstreamer_scenario_src_error_case_n1", utc_nnstreamer_scenario_src_error_case_n1, utc_nnstreamer_scenario_startup, utc_nnstreamer_scenario_cleanup},
+  {"utc_nnstreamer_scenario_src_error_case_n2", utc_nnstreamer_scenario_src_error_case_n2, utc_nnstreamer_scenario_startup, utc_nnstreamer_scenario_cleanup},
+  {"utc_nnstreamer_scenario_src_error_case_n3", utc_nnstreamer_scenario_src_error_case_n3, utc_nnstreamer_scenario_startup, utc_nnstreamer_scenario_cleanup},
+
+  {"utc_nnstreamer_scenario_switch_pipeline_p1", utc_nnstreamer_scenario_switch_pipeline_p1, utc_nnstreamer_scenario_startup, utc_nnstreamer_scenario_cleanup},
+  {"utc_nnstreamer_scenario_switch_pipeline_p2", utc_nnstreamer_scenario_switch_pipeline_p2, utc_nnstreamer_scenario_startup, utc_nnstreamer_scenario_cleanup},
+  {"utc_nnstreamer_scenario_switch_pipeline_error_cases_n", utc_nnstreamer_scenario_switch_pipeline_error_cases_n, utc_nnstreamer_scenario_startup, utc_nnstreamer_scenario_cleanup},
+  {"utc_nnstreamer_scenario_check_nnfw_availability_p", utc_nnstreamer_scenario_check_nnfw_availability_p, utc_nnstreamer_scenario_startup, utc_nnstreamer_scenario_cleanup},
+  {"utc_nnstreamer_scenario_check_tensor_info_utilities_p", utc_nnstreamer_scenario_check_tensor_info_utilities_p, utc_nnstreamer_scenario_startup, utc_nnstreamer_scenario_cleanup},
+
+  {"utc_nnstreamer_scenario_filter_tensorflow_lite_p1", utc_nnstreamer_scenario_filter_tensorflow_lite_p1, utc_nnstreamer_scenario_startup, utc_nnstreamer_scenario_cleanup},
+  {"utc_nnstreamer_scenario_filter_tensorflow_lite_p2", utc_nnstreamer_scenario_filter_tensorflow_lite_p2, utc_nnstreamer_scenario_startup, utc_nnstreamer_scenario_cleanup},
+  {"utc_nnstreamer_scenario_filter_tensorflow_lite_n", utc_nnstreamer_scenario_filter_tensorflow_lite_n, utc_nnstreamer_scenario_startup, utc_nnstreamer_scenario_cleanup},
   {NULL, NULL}
 };
 
diff --git a/src/utc/nnstreamer/utc-nnstreamer-common.h b/src/utc/nnstreamer/utc-nnstreamer-common.h
new file mode 100644 (file)
index 0000000..c50f340
--- /dev/null
@@ -0,0 +1,143 @@
+#include <nnstreamer.h>
+#include <nnstreamer-single.h>
+#include <stdint.h>
+#include <glib.h>
+#include <glib/gstdio.h> /* GStatBuf */
+
+#include "tct_common.h"
+
+#define API_NAMESPACE   "nnstreamer"
+#define FEATURE_ML    "http://tizen.org/feature/machine_learning"
+#define FEATURE_ML_INFERENCE    "http://tizen.org/feature/machine_learning.inference"
+
+#define IS_SUPPORT_FEATURE \
+do { \
+  if (!feature_ml || !feature_ml_inf) { \
+    FPRINTF("[%s][%d][%s] Machine Learning feature is not supported!\\n", __FILE__, __LINE__, __FUNCTION__); \
+    return 0; \
+  } \
+} while (0)
+
+static bool feature_ml;
+static bool feature_ml_inf;
+
+#define wait_for_start(handle, state, status) \
+do {\
+  int counter = 0;\
+  while ((state == ML_PIPELINE_STATE_PAUSED || \
+          state == ML_PIPELINE_STATE_READY) && counter < 20) {\
+    g_usleep (50000);\
+    counter ++;\
+    status = ml_pipeline_get_state (handle, &state);\
+    assert_eq (status, ML_ERROR_NONE);\
+  }\
+} while (0)\
+
+
+/**
+ * @brief Struct to check the pipeline state changes.
+ */
+typedef struct
+{
+  gboolean paused;
+  gboolean playing;
+} TestPipeState;
+
+/**
+ * @function           test_pipe_state_callback
+ * @description Pipeline state changed callback
+ */
+static void
+test_pipe_state_callback (ml_pipeline_state_e state, void *user_data)
+{
+  TestPipeState *pipe_state;
+
+  pipe_state = (TestPipeState *) user_data;
+
+  switch (state) {
+    case ML_PIPELINE_STATE_PAUSED:
+      pipe_state->paused = TRUE;
+      break;
+    case ML_PIPELINE_STATE_PLAYING:
+      pipe_state->playing = TRUE;
+      break;
+    default:
+      break;
+  }
+}
+
+/**
+ * @function           test_sink_callback_count
+ * @description A tensor-sink callback for sink handle in a pipeline
+ */
+static void
+test_sink_callback_count (const ml_tensors_data_h data,
+    const ml_tensors_info_h info, void *user_data)
+{
+  guint *count = (guint *) user_data;
+
+  *count = *count + 1;
+}
+
+/**
+ * @function           test_sink_callback_dm01
+ * @description A tensor-sink callback for sink handle in a pipeline
+ */
+static void
+test_sink_callback_dm01 (const ml_tensors_data_h data,
+    const ml_tensors_info_h info, void *user_data)
+{
+  gchar *filepath = (gchar *) user_data;
+  unsigned int i, num = 0;
+  void *data_ptr;
+  size_t data_size;
+  int status;
+  FILE *fp = g_fopen (filepath, "a");
+
+  if (fp == NULL)
+    return;
+
+  ml_tensors_info_get_count (info, &num);
+
+  for (i = 0; i < num; i++) {
+    status = ml_tensors_data_get_tensor_data (data, i, &data_ptr, &data_size);
+    if (status == ML_ERROR_NONE)
+      fwrite (data_ptr, data_size, 1, fp);
+  }
+
+  fclose (fp);
+}
+
+/**
+ * @function           file_cmp
+ * @description compare the two files.
+ */
+static int
+file_cmp (const gchar * f1, const gchar * f2)
+{
+  gboolean r;
+  gchar *content1, *content2;
+  gsize len1, len2;
+  int cmp = 0;
+
+  r = g_file_get_contents (f1, &content1, &len1, NULL);
+  if (r != TRUE)
+    return -1;
+
+  r = g_file_get_contents (f2, &content2, &len2, NULL);
+  if (r != TRUE) {
+    g_free (content1);
+    return -2;
+  }
+
+  if (len1 == len2) {
+    cmp = memcmp (content1, content2, len1);
+  } else {
+    cmp = 1;
+  }
+
+  g_free (content1);
+  g_free (content2);
+
+  return cmp;
+}
index fb8036cf946b6c687c5d54be2526bb801e402528..f2d1ad956519fdcf1a0f91d8926dd8e86e1a1b52 100644 (file)
 // See the License for the specific language governing permissions and
 // limitations under the License.
 //
-
-#include <nnstreamer.h>
-#include <nnstreamer-single.h>
-#include <stdint.h>
-#include <glib.h>
-#include <glib/gstdio.h> /* GStatBuf */
-
-#include "tct_common.h"
-
-#define API_NAMESPACE "nnstreamer"
-
-/**
- * @brief Struct to check the pipeline state changes.
- */
-typedef struct
-{
-  gboolean paused;
-  gboolean playing;
-} TestPipeState;
+#include "utc-nnstreamer-common.h"
 
 static int status;
 static gchar * pipeline;
@@ -40,42 +22,6 @@ static ml_pipeline_h handle;
 static ml_pipeline_sink_h sinkhandle;
 static TestPipeState * pipe_state;
 
-/**
- * @function           test_pipe_state_callback
- * @description Pipeline state changed callback
- */
-static void
-test_pipe_state_callback (ml_pipeline_state_e state, void *user_data)
-{
-  TestPipeState *pipe_state;
-
-  pipe_state = (TestPipeState *) user_data;
-
-  switch (state) {
-    case ML_PIPELINE_STATE_PAUSED:
-      pipe_state->paused = TRUE;
-      break;
-    case ML_PIPELINE_STATE_PLAYING:
-      pipe_state->playing = TRUE;
-      break;
-    default:
-      break;
-  }
-}
-
-/**
- * @function           test_sink_callback_count
- * @description A tensor-sink callback for sink handle in a pipeline
- */
-static void
-test_sink_callback_count (const ml_tensors_data_h data,
-    const ml_tensors_info_h info, void *user_data)
-{
-  guint *count = (guint *) user_data;
-
-  *count = *count + 1;
-}
-
 /**
  * @function           utc_nnstreamer_pipeline_sink_startup
  * @since_tizen                5.5
@@ -83,6 +29,17 @@ test_sink_callback_count (const ml_tensors_data_h data,
  */
 void utc_nnstreamer_pipeline_sink_startup(void)
 {
+       int ret = system_info_get_platform_bool(FEATURE_ML, &feature_ml);
+  if (ret != ML_ERROR_NONE || !feature_ml) {
+    FPRINTF("[%s][%d][%s] feature machine_learning is not supported!\\n", __FILE__, __LINE__, __FUNCTION__);
+    return;
+  }
+       ret = system_info_get_platform_bool(FEATURE_ML_INFERENCE, &feature_ml_inf);
+  if (ret != ML_ERROR_NONE || !feature_ml_inf) {
+    FPRINTF("[%s][%d][%s] feature machine_learning.inference is not supported!\\n", __FILE__, __LINE__, __FUNCTION__);
+    return;
+  }
+
   /* pipeline with appsink */
   pipeline = g_strdup ("videotestsrc num-buffers=3 ! videoconvert ! tensor_converter ! appsink name=sinkx");
 
@@ -114,6 +71,8 @@ void utc_nnstreamer_pipeline_sink_cleanup(void)
  */
 int utc_ml_pipeline_sink_register_p (void)
 {
+  IS_SUPPORT_FEATURE;
+
   status = ml_pipeline_sink_register (handle, "sinkx", test_sink_callback_count, count_sink, &sinkhandle);
   assert_eq (status, ML_ERROR_NONE);
 
@@ -130,6 +89,8 @@ int utc_ml_pipeline_sink_register_p (void)
  */
 int utc_ml_pipeline_sink_register_n (void)
 {
+  IS_SUPPORT_FEATURE;
+
   status = ml_pipeline_sink_register (NULL, "sinkx", test_sink_callback_count, NULL, NULL);
   assert_eq (status, ML_ERROR_INVALID_PARAMETER);
 
@@ -143,6 +104,8 @@ int utc_ml_pipeline_sink_register_n (void)
  */
 int utc_ml_pipeline_sink_unregister_p (void)
 {
+  IS_SUPPORT_FEATURE;
+
   status = ml_pipeline_sink_register (handle, "sinkx", test_sink_callback_count, count_sink, &sinkhandle);
   assert_eq (status, ML_ERROR_NONE);
 
@@ -159,6 +122,8 @@ int utc_ml_pipeline_sink_unregister_p (void)
  */
 int utc_ml_pipeline_sink_unregister_n (void)
 {
+  IS_SUPPORT_FEATURE;
+
   status = ml_pipeline_sink_unregister (NULL);
   assert_eq (status, ML_ERROR_INVALID_PARAMETER);
 
index 745c68adacb890bbecaa33fff15bc99b7c1d016f..84830eedf61beec52446535c5053d0da0b8cb69c 100644 (file)
 // limitations under the License.
 //
 
-#include <nnstreamer.h>
-#include <nnstreamer-single.h>
-#include <stdint.h>
-#include <glib.h>
-#include <glib/gstdio.h> /* GStatBuf */
-
-#include "tct_common.h"
-
-#define API_NAMESPACE "nnstreamer"
+#include "utc-nnstreamer-common.h"
 
 static int status;
 
@@ -41,6 +33,17 @@ static gchar * pipeline;
  */
 void utc_nnstreamer_pipeline_src_startup(void)
 {
+       int ret = system_info_get_platform_bool(FEATURE_ML, &feature_ml);
+  if (ret != ML_ERROR_NONE || !feature_ml) {
+    FPRINTF("[%s][%d][%s] feature machine_learning is not supported!\\n", __FILE__, __LINE__, __FUNCTION__);
+    return;
+  }
+       ret = system_info_get_platform_bool(FEATURE_ML_INFERENCE, &feature_ml_inf);
+  if (ret != ML_ERROR_NONE || !feature_ml_inf) {
+    FPRINTF("[%s][%d][%s] feature machine_learning.inference is not supported!\\n", __FILE__, __LINE__, __FUNCTION__);
+    return;
+  }
+
   pipeline = g_strdup ("appsrc name=srcx ! other/tensor,dimension=(string)4:1:1:1,type=(string)uint8,framerate=(fraction)0/1 ! tensor_sink");
 
   status = ml_pipeline_construct (pipeline, NULL, NULL, &handle);
@@ -67,6 +70,7 @@ void utc_nnstreamer_pipeline_src_cleanup(void)
  */
 int utc_ml_pipeline_src_get_handle_p (void)
 {
+  IS_SUPPORT_FEATURE;
   status = ml_pipeline_src_get_handle (handle, "srcx", &srchandle);
   assert_eq (status, ML_ERROR_NONE);
 
@@ -80,6 +84,7 @@ int utc_ml_pipeline_src_get_handle_p (void)
  */
 int utc_ml_pipeline_src_get_handle_n (void)
 {
+  IS_SUPPORT_FEATURE;
   status = ml_pipeline_src_get_handle (NULL, "dummy", &srchandle);
   assert_eq (status, ML_ERROR_INVALID_PARAMETER);
 
@@ -93,6 +98,7 @@ int utc_ml_pipeline_src_get_handle_n (void)
  */
 int utc_ml_pipeline_src_release_handle_p (void)
 {
+  IS_SUPPORT_FEATURE;
   status = ml_pipeline_src_get_handle (handle, "srcx", &srchandle);
   assert_eq (status, ML_ERROR_NONE);
 
@@ -109,6 +115,7 @@ int utc_ml_pipeline_src_release_handle_p (void)
  */
 int utc_ml_pipeline_src_release_handle_n (void)
 {
+  IS_SUPPORT_FEATURE;
   status = ml_pipeline_src_release_handle (NULL);
   assert_eq (status, ML_ERROR_INVALID_PARAMETER);
 
@@ -124,6 +131,7 @@ int utc_ml_pipeline_src_input_data_p (void)
 {
   int i, ret = 0;
   uint8_t *uintarray1[10];
+  IS_SUPPORT_FEATURE;
 
   status = ml_pipeline_src_get_handle (handle, "srcx", &srchandle);
   assert_eq (status, ML_ERROR_NONE);
@@ -177,6 +185,7 @@ error_return:
  */
 int utc_ml_pipeline_src_input_data_n (void)
 {
+  IS_SUPPORT_FEATURE;
   status = ml_pipeline_src_get_handle (handle, "srcx", &srchandle);
   assert_eq (status, ML_ERROR_NONE);
 
@@ -199,6 +208,7 @@ int utc_ml_pipeline_src_input_data_n (void)
  */
 int utc_ml_pipeline_src_get_tensors_info_p (void)
 {
+  IS_SUPPORT_FEATURE;
   status = ml_pipeline_src_get_handle (handle, "srcx", &srchandle);
   assert_eq (status, ML_ERROR_NONE);
 
@@ -218,6 +228,7 @@ int utc_ml_pipeline_src_get_tensors_info_p (void)
  */
 int utc_ml_pipeline_src_get_tensors_info_n (void)
 {
+  IS_SUPPORT_FEATURE;
   status = ml_pipeline_src_get_tensors_info (NULL, &info);
   assert_eq (status, ML_ERROR_INVALID_PARAMETER);
 
index f51811b26928292caef3e3aa9411aec1d07ab5e6..afeaf7361404de8f699af04fc5f85a6d128ceb94 100644 (file)
 // limitations under the License.
 //
 
-#include <nnstreamer.h>
-#include <nnstreamer-single.h>
-#include <stdint.h>
-#include <glib.h>
-#include <glib/gstdio.h> /* GStatBuf */
-
-#include "tct_common.h"
-
-#define API_NAMESPACE "nnstreamer"
-
-/**
- * @brief Struct to check the pipeline state changes.
- */
-typedef struct
-{
-  gboolean paused;
-  gboolean playing;
-} TestPipeState;
+#include "utc-nnstreamer-common.h"
 
 static int status;
 static gchar * pipeline;
@@ -43,29 +26,6 @@ static ml_pipeline_h handle;
 static ml_pipeline_switch_h switchhandle;
 static ml_pipeline_switch_e type;
 
-/**
- * @function  test_pipe_state_callback
- * @description Pipeline state changed callback
- */
-static void
-test_pipe_state_callback (ml_pipeline_state_e state, void *user_data)
-{
-  TestPipeState *pipe_state;
-
-  pipe_state = (TestPipeState *) user_data;
-
-  switch (state) {
-    case ML_PIPELINE_STATE_PAUSED:
-      pipe_state->paused = TRUE;
-      break;
-    case ML_PIPELINE_STATE_PLAYING:
-      pipe_state->playing = TRUE;
-      break;
-    default:
-      break;
-  }
-}
-
 /**
  * @function           utc_nnstreamer_pipeline_switch_startup
  * @since_tizen                5.5
@@ -73,6 +33,17 @@ test_pipe_state_callback (ml_pipeline_state_e state, void *user_data)
  */
 void utc_nnstreamer_pipeline_switch_startup(void)
 {
+       int ret = system_info_get_platform_bool(FEATURE_ML, &feature_ml);
+  if (ret != ML_ERROR_NONE || !feature_ml) {
+    FPRINTF("[%s][%d][%s] feature machine_learning is not supported!\\n", __FILE__, __LINE__, __FUNCTION__);
+    return;
+  }
+       ret = system_info_get_platform_bool(FEATURE_ML_INFERENCE, &feature_ml_inf);
+  if (ret != ML_ERROR_NONE || !feature_ml_inf) {
+    FPRINTF("[%s][%d][%s] feature machine_learning.inference is not supported!\\n", __FILE__, __LINE__, __FUNCTION__);
+    return;
+  }
+
   node_list = NULL;
 
   pipeline = g_strdup ("input-selector name=ins ! tensor_converter ! tensor_sink name=sinkx "
@@ -107,6 +78,7 @@ void utc_nnstreamer_pipeline_switch_cleanup(void)
  */
 int utc_ml_pipeline_switch_get_handle_p (void)
 {
+  IS_SUPPORT_FEATURE;
   status = ml_pipeline_switch_get_handle (handle, "ins", &type, &switchhandle);
   assert_eq (status, ML_ERROR_NONE);
   assert_eq (type, ML_PIPELINE_SWITCH_INPUT_SELECTOR);
@@ -124,6 +96,7 @@ int utc_ml_pipeline_switch_get_handle_p (void)
  */
 int utc_ml_pipeline_switch_get_handle_n (void)
 {
+  IS_SUPPORT_FEATURE;
   status = ml_pipeline_switch_get_handle (NULL, "ins", &type, &switchhandle);
   assert_eq (status, ML_ERROR_INVALID_PARAMETER);
 
@@ -137,6 +110,7 @@ int utc_ml_pipeline_switch_get_handle_n (void)
  */
 int utc_ml_pipeline_switch_release_handle_p (void)
 {
+  IS_SUPPORT_FEATURE;
   status = ml_pipeline_switch_get_handle (handle, "ins", &type, &switchhandle);
   assert_eq (status, ML_ERROR_NONE);
   assert_eq (type, ML_PIPELINE_SWITCH_INPUT_SELECTOR);
@@ -154,6 +128,7 @@ int utc_ml_pipeline_switch_release_handle_p (void)
  */
 int utc_ml_pipeline_switch_release_handle_n (void)
 {
+  IS_SUPPORT_FEATURE;
   status = ml_pipeline_switch_release_handle (NULL);
   assert_eq (status, ML_ERROR_INVALID_PARAMETER);
 
@@ -167,6 +142,7 @@ int utc_ml_pipeline_switch_release_handle_n (void)
  */
 int utc_ml_pipeline_switch_select_p (void)
 {
+  IS_SUPPORT_FEATURE;
   status = ml_pipeline_switch_get_handle (handle, "ins", &type, &switchhandle);
   assert_eq (status, ML_ERROR_NONE);
   assert_eq (type, ML_PIPELINE_SWITCH_INPUT_SELECTOR);
@@ -187,6 +163,7 @@ int utc_ml_pipeline_switch_select_p (void)
  */
 int utc_ml_pipeline_switch_select_n (void)
 {
+  IS_SUPPORT_FEATURE;
   status = ml_pipeline_switch_select (NULL, "sink_1");
   assert_eq (status, ML_ERROR_INVALID_PARAMETER);
 
@@ -200,6 +177,7 @@ int utc_ml_pipeline_switch_select_n (void)
  */
 int utc_ml_pipeline_switch_get_pad_list_p (void)
 {
+  IS_SUPPORT_FEATURE;
   status = ml_pipeline_switch_get_handle (handle, "ins", &type, &switchhandle);
   assert_eq (status, ML_ERROR_NONE);
   assert_eq (type, ML_PIPELINE_SWITCH_INPUT_SELECTOR);
@@ -220,6 +198,7 @@ int utc_ml_pipeline_switch_get_pad_list_p (void)
  */
 int utc_ml_pipeline_switch_get_pad_list_n (void)
 {
+  IS_SUPPORT_FEATURE;
   status = ml_pipeline_switch_get_pad_list (NULL, NULL);
   assert_eq (status, ML_ERROR_INVALID_PARAMETER);
 
index 4748af98680c115b671df6df60c956d52b07266a..57d02709a1860bb81f4c8db2d69c3aea690c1dc0 100644 (file)
 // limitations under the License.
 //
 
-#include <nnstreamer.h>
-#include <nnstreamer-single.h>
-#include <stdint.h>
-#include <glib.h>
-#include <glib/gstdio.h> /* GStatBuf */
-
-#include "tct_common.h"
-
-#define API_NAMESPACE "nnstreamer"
+#include "utc-nnstreamer-common.h"
 
 static int status;
 static gchar * pipeline;
@@ -38,12 +30,18 @@ static ml_tensors_info_h info;
  */
 void utc_nnstreamer_pipeline_tensor_data_startup(void)
 {
-  pipeline = "appsrc name=srcx ! other/tensor,dimension=(string)4:1:1:1,type=(string)uint8,framerate=(fraction)0/1 ! tensor_sink";
-
-  status = ml_pipeline_construct (pipeline, NULL, NULL, &handle);
-  status = ml_pipeline_start (handle);
-  status = ml_pipeline_src_get_handle (handle, "srcx", &srchandle);
-  status = ml_pipeline_src_get_tensors_info (srchandle, &info);
+       int ret = system_info_get_platform_bool(FEATURE_ML, &feature_ml);
+  if (ret != ML_ERROR_NONE || !feature_ml) {
+    FPRINTF("[%s][%d][%s] feature machine_learning is not supported!\\n", __FILE__, __LINE__, __FUNCTION__);
+    return;
+  }
+       ret = system_info_get_platform_bool(FEATURE_ML_INFERENCE, &feature_ml_inf);
+  if (ret != ML_ERROR_NONE || !feature_ml_inf) {
+    FPRINTF("[%s][%d][%s] feature machine_learning.inference is not supported!\\n", __FILE__, __LINE__, __FUNCTION__);
+    return;
+  }
+
+  pipeline = g_strdup ("appsrc name=srcx ! other/tensor,dimension=(string)4:1:1:1,type=(string)uint8,framerate=(fraction)0/1 ! tensor_sink");
 }
 
 /**
@@ -53,10 +51,7 @@ void utc_nnstreamer_pipeline_tensor_data_startup(void)
  */
 void utc_nnstreamer_pipeline_tensor_data_cleanup(void)
 {
-  status = ml_pipeline_src_release_handle (srchandle);
-  status = ml_pipeline_stop (handle);
-  status = ml_pipeline_destroy (handle);
-  status = ml_tensors_data_destroy (data);
+  g_free (pipeline);
 }
 
 /**
@@ -66,9 +61,21 @@ void utc_nnstreamer_pipeline_tensor_data_cleanup(void)
  */
 int utc_ml_tensors_data_create_p (void)
 {
+  IS_SUPPORT_FEATURE;
+
+  status = ml_pipeline_construct (pipeline, NULL, NULL, &handle);
+  status = ml_pipeline_start (handle);
+  status = ml_pipeline_src_get_handle (handle, "srcx", &srchandle);
+  status = ml_pipeline_src_get_tensors_info (srchandle, &info);
+
   status = ml_tensors_data_create (info, &data);
   assert_eq (status, ML_ERROR_NONE);
 
+  status = ml_pipeline_src_release_handle (srchandle);
+  status = ml_pipeline_stop (handle);
+  status = ml_pipeline_destroy (handle);
+  status = ml_tensors_data_destroy (data);
+
   return 0;
 }
 
@@ -79,6 +86,7 @@ int utc_ml_tensors_data_create_p (void)
  */
 int utc_ml_tensors_data_create_n (void)
 {
+  IS_SUPPORT_FEATURE;
   status = ml_tensors_data_create (NULL, NULL);
   assert_eq (status, ML_ERROR_INVALID_PARAMETER);
 
@@ -92,20 +100,20 @@ int utc_ml_tensors_data_create_n (void)
  */
 int utc_ml_tensors_data_destroy_p (void)
 {
-  status = ml_tensors_data_create (info, &data);
-  assert_eq (status, ML_ERROR_NONE);
+  IS_SUPPORT_FEATURE;
 
+  status = ml_pipeline_construct (pipeline, NULL, NULL, &handle);
+  status = ml_pipeline_start (handle);
+  status = ml_pipeline_src_get_handle (handle, "srcx", &srchandle);
+  status = ml_pipeline_src_get_tensors_info (srchandle, &info);
+  status = ml_tensors_data_create (info, &data);
   status = ml_pipeline_src_release_handle (srchandle);
-  assert_eq (status, ML_ERROR_NONE);
-
   status = ml_pipeline_stop (handle);
-  assert_eq (status, ML_ERROR_NONE);
 
   status = ml_pipeline_destroy (handle);
   assert_eq (status, ML_ERROR_NONE);
 
   status = ml_tensors_data_destroy (data);
-  assert_eq (status, ML_ERROR_NONE);
 
   return 0;
 }
@@ -117,6 +125,7 @@ int utc_ml_tensors_data_destroy_p (void)
  */
 int utc_ml_tensors_data_destroy_n (void)
 {
+  IS_SUPPORT_FEATURE;
   status = ml_pipeline_destroy (NULL);
   assert_eq (status, ML_ERROR_INVALID_PARAMETER);
 
@@ -130,9 +139,21 @@ int utc_ml_tensors_data_destroy_n (void)
  */
 int utc_ml_tensors_data_set_tensor_data_p (void)
 {
+  IS_SUPPORT_FEATURE;
+
+  status = ml_pipeline_construct (pipeline, NULL, NULL, &handle);
+  status = ml_pipeline_start (handle);
+  status = ml_pipeline_src_get_handle (handle, "srcx", &srchandle);
+  status = ml_pipeline_src_get_tensors_info (srchandle, &info);
+
   status = ml_tensors_data_create (info, &data);
   assert_eq (status, ML_ERROR_NONE);
 
+  status = ml_pipeline_src_release_handle (srchandle);
+  status = ml_pipeline_stop (handle);
+  status = ml_pipeline_destroy (handle);
+  status = ml_tensors_data_destroy (data);
+
   return 0;
 }
 
@@ -143,6 +164,7 @@ int utc_ml_tensors_data_set_tensor_data_p (void)
  */
 int utc_ml_tensors_data_set_tensor_data_n (void)
 {
+  IS_SUPPORT_FEATURE;
   status = ml_tensors_data_set_tensor_data (NULL, 0, NULL, 0);
   assert_eq (status, ML_ERROR_INVALID_PARAMETER);
 
@@ -156,9 +178,24 @@ int utc_ml_tensors_data_set_tensor_data_n (void)
  */
 int utc_ml_tensors_data_get_tensor_data_p (void)
 {
+  IS_SUPPORT_FEATURE;
+  void *data_ptr;
+  size_t data_size;
+
+  status = ml_pipeline_construct (pipeline, NULL, NULL, &handle);
+  status = ml_pipeline_start (handle);
+  status = ml_pipeline_src_get_handle (handle, "srcx", &srchandle);
+  status = ml_pipeline_src_get_tensors_info (srchandle, &info);
   status = ml_tensors_data_create (info, &data);
+
+  status = ml_tensors_data_get_tensor_data (data, 0, &data_ptr, &data_size);
   assert_eq (status, ML_ERROR_NONE);
 
+  status = ml_pipeline_src_release_handle (srchandle);
+  status = ml_pipeline_stop (handle);
+  status = ml_pipeline_destroy (handle);
+  status = ml_tensors_data_destroy (data);
+
   return 0;
 }
 
@@ -169,6 +206,7 @@ int utc_ml_tensors_data_get_tensor_data_p (void)
  */
 int utc_ml_tensors_data_get_tensor_data_n (void)
 {
+  IS_SUPPORT_FEATURE;
   status = ml_tensors_data_get_tensor_data (NULL, 0, NULL, NULL);
   assert_eq (status, ML_ERROR_INVALID_PARAMETER);
 
index 1b90cab0217009759a1a4a2f5316b88a62dd485a..f37ff0b0a937aa5599e27074309a844ab7bb7540 100644 (file)
 // limitations under the License.
 //
 
-#include <nnstreamer.h>
-#include <nnstreamer-single.h>
-#include <stdint.h>
-#include <glib.h>
-#include <glib/gstdio.h> /* GStatBuf */
-
-#include "tct_common.h"
-
-#define API_NAMESPACE "nnstreamer"
+#include "utc-nnstreamer-common.h"
 
 static int status;
 static ml_tensors_info_h info;
@@ -34,7 +26,16 @@ static ml_tensors_info_h info;
  */
 void utc_nnstreamer_pipeline_tensor_info_startup(void)
 {
-  status = ml_tensors_info_create (&info);
+       int ret = system_info_get_platform_bool(FEATURE_ML, &feature_ml);
+  if (ret != ML_ERROR_NONE || !feature_ml) {
+    FPRINTF("[%s][%d][%s] feature machine_learning is not supported!\\n", __FILE__, __LINE__, __FUNCTION__);
+    return;
+  }
+       ret = system_info_get_platform_bool(FEATURE_ML_INFERENCE, &feature_ml_inf);
+  if (ret != ML_ERROR_NONE || !feature_ml_inf) {
+    FPRINTF("[%s][%d][%s] feature machine_learning.inference is not supported!\\n", __FILE__, __LINE__, __FUNCTION__);
+    return;
+  }
 }
 
 /**
@@ -44,7 +45,6 @@ void utc_nnstreamer_pipeline_tensor_info_startup(void)
  */
 void utc_nnstreamer_pipeline_tensor_info_cleanup(void)
 {
-  status = ml_tensors_info_destroy (info);
 }
 
 /**
@@ -54,6 +54,7 @@ void utc_nnstreamer_pipeline_tensor_info_cleanup(void)
  */
 int utc_ml_tensors_info_create_p (void)
 {
+  IS_SUPPORT_FEATURE;
   status = ml_tensors_info_create (&info);
   assert_eq (status, ML_ERROR_NONE);
 
@@ -67,6 +68,7 @@ int utc_ml_tensors_info_create_p (void)
  */
 int utc_ml_tensors_info_create_n (void)
 {
+  IS_SUPPORT_FEATURE;
   status = ml_tensors_info_create (NULL);
   assert_eq (status, ML_ERROR_INVALID_PARAMETER);
 
@@ -80,6 +82,7 @@ int utc_ml_tensors_info_create_n (void)
  */
 int utc_ml_tensors_info_destroy_p (void)
 {
+  IS_SUPPORT_FEATURE;
   status = ml_tensors_info_create (&info);
   assert_eq (status, ML_ERROR_NONE);
 
@@ -96,6 +99,7 @@ int utc_ml_tensors_info_destroy_p (void)
  */
 int utc_ml_tensors_info_destroy_n (void)
 {
+  IS_SUPPORT_FEATURE;
   status = ml_tensors_info_destroy (NULL);
   assert_eq (status, ML_ERROR_INVALID_PARAMETER);
 
@@ -109,6 +113,7 @@ int utc_ml_tensors_info_destroy_n (void)
  */
 int utc_ml_tensors_info_validate_p (void)
 {
+  IS_SUPPORT_FEATURE;
   ml_tensors_info_h t_info;
   ml_tensor_dimension t_dim;
   bool valid = false;
@@ -147,6 +152,7 @@ int utc_ml_tensors_info_validate_p (void)
  */
 int utc_ml_tensors_info_validate_n (void)
 {
+  IS_SUPPORT_FEATURE;
   status = ml_tensors_info_validate (NULL, NULL);
   assert_eq (status, ML_ERROR_INVALID_PARAMETER);
 
@@ -160,6 +166,7 @@ int utc_ml_tensors_info_validate_n (void)
  */
 int utc_ml_tensors_info_clone_p (void)
 {
+  IS_SUPPORT_FEATURE;
   ml_tensors_info_h in_info, out_info;
 
   status = ml_tensors_info_create (&in_info);
@@ -185,6 +192,7 @@ int utc_ml_tensors_info_clone_p (void)
  */
 int utc_ml_tensors_info_clone_n (void)
 {
+  IS_SUPPORT_FEATURE;
   status = ml_tensors_info_clone (NULL, NULL);
   assert_eq (status, ML_ERROR_INVALID_PARAMETER);
 
@@ -198,9 +206,16 @@ int utc_ml_tensors_info_clone_n (void)
  */
 int utc_ml_tensors_info_set_count_p (void)
 {
+  IS_SUPPORT_FEATURE;
+  status = ml_tensors_info_create (&info);
+  assert_eq (status, ML_ERROR_NONE);
+
   status = ml_tensors_info_set_count (info, 2);
   assert_eq (status, ML_ERROR_NONE);
 
+  status = ml_tensors_info_destroy (info);
+  assert_eq (status, ML_ERROR_NONE);
+
   return 0;
 }
 
@@ -211,9 +226,16 @@ int utc_ml_tensors_info_set_count_p (void)
  */
 int utc_ml_tensors_info_set_count_n (void)
 {
+  IS_SUPPORT_FEATURE;
+  status = ml_tensors_info_create (&info);
+  assert_eq (status, ML_ERROR_NONE);
+
   status = ml_tensors_info_set_count (NULL, 2);
   assert_eq (status, ML_ERROR_INVALID_PARAMETER);
 
+  status = ml_tensors_info_destroy (info);
+  assert_eq (status, ML_ERROR_NONE);
+
   return 0;
 }
 
@@ -226,6 +248,10 @@ int utc_ml_tensors_info_get_count_p (void)
 {
   unsigned int num = 0;
 
+  IS_SUPPORT_FEATURE;
+  status = ml_tensors_info_create (&info);
+  assert_eq (status, ML_ERROR_NONE);
+
   status = ml_tensors_info_set_count (info, 2);
   assert_eq (status, ML_ERROR_NONE);
 
@@ -233,6 +259,9 @@ int utc_ml_tensors_info_get_count_p (void)
   assert_eq (status, ML_ERROR_NONE);
   assert_eq (num, 2);
 
+  status = ml_tensors_info_destroy (info);
+  assert_eq (status, ML_ERROR_NONE);
+
   return 0;
 }
 
@@ -243,9 +272,16 @@ int utc_ml_tensors_info_get_count_p (void)
  */
 int utc_ml_tensors_info_get_count_n (void)
 {
+  IS_SUPPORT_FEATURE;
+  status = ml_tensors_info_create (&info);
+  assert_eq (status, ML_ERROR_NONE);
+
   status = ml_tensors_info_get_count (NULL, NULL);
   assert_eq (status, ML_ERROR_INVALID_PARAMETER);
 
+  status = ml_tensors_info_destroy (info);
+  assert_eq (status, ML_ERROR_NONE);
+
   return 0;
 }
 
@@ -256,12 +292,19 @@ int utc_ml_tensors_info_get_count_n (void)
  */
 int utc_ml_tensors_info_set_tensor_name_p (void)
 {
+  IS_SUPPORT_FEATURE;
+  status = ml_tensors_info_create (&info);
+  assert_eq (status, ML_ERROR_NONE);
+
   status = ml_tensors_info_set_count (info, 1);
   assert_eq (status, ML_ERROR_NONE);
 
   status = ml_tensors_info_set_tensor_name (info, 0, "tensor-name-test");
   assert_eq (status, ML_ERROR_NONE);
 
+  status = ml_tensors_info_destroy (info);
+  assert_eq (status, ML_ERROR_NONE);
+
   return 0;
 }
 
@@ -272,9 +315,16 @@ int utc_ml_tensors_info_set_tensor_name_p (void)
  */
 int utc_ml_tensors_info_set_tensor_name_n (void)
 {
+  IS_SUPPORT_FEATURE;
+  status = ml_tensors_info_create (&info);
+  assert_eq (status, ML_ERROR_NONE);
+
   status = ml_tensors_info_set_tensor_name (NULL, 1, "tensor-name-test");
   assert_eq (status, ML_ERROR_INVALID_PARAMETER);
 
+  status = ml_tensors_info_destroy (info);
+  assert_eq (status, ML_ERROR_NONE);
+
   return 0;
 }
 
@@ -287,6 +337,10 @@ int utc_ml_tensors_info_get_tensor_name_p (void)
 {
   gchar * out_name = NULL;
 
+  IS_SUPPORT_FEATURE;
+  status = ml_tensors_info_create (&info);
+  assert_eq (status, ML_ERROR_NONE);
+
   status = ml_tensors_info_set_count (info, 1);
   assert_eq (status, ML_ERROR_NONE);
 
@@ -296,6 +350,9 @@ int utc_ml_tensors_info_get_tensor_name_p (void)
   status = ml_tensors_info_get_tensor_name (info, 0, &out_name);
   assert_eq (status, ML_ERROR_NONE);
 
+  status = ml_tensors_info_destroy (info);
+  assert_eq (status, ML_ERROR_NONE);
+
   return 0;
 }
 
@@ -306,9 +363,16 @@ int utc_ml_tensors_info_get_tensor_name_p (void)
  */
 int utc_ml_tensors_info_get_tensor_name_n (void)
 {
+  IS_SUPPORT_FEATURE;
+  status = ml_tensors_info_create (&info);
+  assert_eq (status, ML_ERROR_NONE);
+
   status = ml_tensors_info_get_tensor_name (NULL, 0, NULL);
   assert_eq (status, ML_ERROR_INVALID_PARAMETER);
 
+  status = ml_tensors_info_destroy (info);
+  assert_eq (status, ML_ERROR_NONE);
+
   return 0;
 }
 
@@ -319,12 +383,19 @@ int utc_ml_tensors_info_get_tensor_name_n (void)
  */
 int utc_ml_tensors_info_set_tensor_type_p (void)
 {
+  IS_SUPPORT_FEATURE;
+  status = ml_tensors_info_create (&info);
+  assert_eq (status, ML_ERROR_NONE);
+
   status = ml_tensors_info_set_count (info, 1);
   assert_eq (status, ML_ERROR_NONE);
 
   status = ml_tensors_info_set_tensor_type (info, 0, ML_TENSOR_TYPE_UINT8);
   assert_eq (status, ML_ERROR_NONE);
 
+  status = ml_tensors_info_destroy (info);
+  assert_eq (status, ML_ERROR_NONE);
+
   return 0;
 }
 
@@ -335,9 +406,16 @@ int utc_ml_tensors_info_set_tensor_type_p (void)
  */
 int utc_ml_tensors_info_set_tensor_type_n (void)
 {
+  IS_SUPPORT_FEATURE;
+  status = ml_tensors_info_create (&info);
+  assert_eq (status, ML_ERROR_NONE);
+
   status = ml_tensors_info_set_tensor_type (NULL, 0, ML_TENSOR_TYPE_UINT8);
   assert_eq (status, ML_ERROR_INVALID_PARAMETER);
 
+  status = ml_tensors_info_destroy (info);
+  assert_eq (status, ML_ERROR_NONE);
+
   return 0;
 }
 
@@ -350,6 +428,10 @@ int utc_ml_tensors_info_get_tensor_type_p (void)
 {
   ml_tensor_type_e out_type;
 
+  IS_SUPPORT_FEATURE;
+  status = ml_tensors_info_create (&info);
+  assert_eq (status, ML_ERROR_NONE);
+
   status = ml_tensors_info_set_count (info, 1);
   assert_eq (status, ML_ERROR_NONE);
 
@@ -360,6 +442,9 @@ int utc_ml_tensors_info_get_tensor_type_p (void)
   assert_eq (status, ML_ERROR_NONE);
   assert_eq (out_type, ML_TENSOR_TYPE_UINT8);
 
+  status = ml_tensors_info_destroy (info);
+  assert_eq (status, ML_ERROR_NONE);
+
   return 0;
 }
 
@@ -370,9 +455,16 @@ int utc_ml_tensors_info_get_tensor_type_p (void)
  */
 int utc_ml_tensors_info_get_tensor_type_n (void)
 {
+  IS_SUPPORT_FEATURE;
+  status = ml_tensors_info_create (&info);
+  assert_eq (status, ML_ERROR_NONE);
+
   status = ml_tensors_info_get_tensor_type (NULL, 0, NULL);
   assert_eq (status, ML_ERROR_INVALID_PARAMETER);
 
+  status = ml_tensors_info_destroy (info);
+  assert_eq (status, ML_ERROR_NONE);
+
   return 0;
 }
 
@@ -383,6 +475,7 @@ int utc_ml_tensors_info_get_tensor_type_n (void)
  */
 int utc_ml_tensors_info_set_tensor_dimension_p (void)
 {
+  IS_SUPPORT_FEATURE;
   ml_tensor_dimension in_dim;
 
   in_dim[0] = 3;
@@ -390,12 +483,18 @@ int utc_ml_tensors_info_set_tensor_dimension_p (void)
   in_dim[2] = 300;
   in_dim[3] = 1;
 
+  status = ml_tensors_info_create (&info);
+  assert_eq (status, ML_ERROR_NONE);
+
   status = ml_tensors_info_set_count (info, 1);
   assert_eq (status, ML_ERROR_NONE);
 
   status = ml_tensors_info_set_tensor_dimension (info, 0, in_dim);
   assert_eq (status, ML_ERROR_NONE);
 
+  status = ml_tensors_info_destroy (info);
+  assert_eq (status, ML_ERROR_NONE);
+
   return 0;
 }
 
@@ -406,9 +505,16 @@ int utc_ml_tensors_info_set_tensor_dimension_p (void)
  */
 int utc_ml_tensors_info_set_tensor_dimension_n (void)
 {
+  IS_SUPPORT_FEATURE;
+  status = ml_tensors_info_create (&info);
+  assert_eq (status, ML_ERROR_NONE);
+
   status = ml_tensors_info_set_tensor_dimension (NULL, 1, NULL);
   assert_eq (status, ML_ERROR_INVALID_PARAMETER);
 
+  status = ml_tensors_info_destroy (info);
+  assert_eq (status, ML_ERROR_NONE);
+
   return 0;
 }
 
@@ -419,6 +525,7 @@ int utc_ml_tensors_info_set_tensor_dimension_n (void)
  */
 int utc_ml_tensors_info_get_tensor_dimension_p (void)
 {
+  IS_SUPPORT_FEATURE;
   ml_tensor_dimension in_dim, out_dim;
 
   in_dim[0] = 3;
@@ -426,6 +533,9 @@ int utc_ml_tensors_info_get_tensor_dimension_p (void)
   in_dim[2] = 300;
   in_dim[3] = 1;
 
+  status = ml_tensors_info_create (&info);
+  assert_eq (status, ML_ERROR_NONE);
+
   status = ml_tensors_info_set_count (info, 1);
   assert_eq (status, ML_ERROR_NONE);
 
@@ -439,6 +549,9 @@ int utc_ml_tensors_info_get_tensor_dimension_p (void)
   assert_eq (out_dim[2], 300U);
   assert_eq (out_dim[3], 1U);
 
+  status = ml_tensors_info_destroy (info);
+  assert_eq (status, ML_ERROR_NONE);
+
   return 0;
 }
 
@@ -449,9 +562,16 @@ int utc_ml_tensors_info_get_tensor_dimension_p (void)
  */
 int utc_ml_tensors_info_get_tensor_dimension_n (void)
 {
+  IS_SUPPORT_FEATURE;
+  status = ml_tensors_info_create (&info);
+  assert_eq (status, ML_ERROR_NONE);
+
   status = ml_tensors_info_get_tensor_dimension (NULL, 1, NULL);
   assert_eq (status, ML_ERROR_INVALID_PARAMETER);
 
+  status = ml_tensors_info_destroy (info);
+  assert_eq (status, ML_ERROR_NONE);
+
   return 0;
 }
 
@@ -462,6 +582,7 @@ int utc_ml_tensors_info_get_tensor_dimension_n (void)
  */
 int utc_ml_tensors_info_get_tensor_size_p (void)
 {
+  IS_SUPPORT_FEATURE;
   ml_tensor_dimension in_dim;
   size_t data_size;
 
@@ -470,6 +591,9 @@ int utc_ml_tensors_info_get_tensor_size_p (void)
   in_dim[2] = 300;
   in_dim[3] = 1;
 
+  status = ml_tensors_info_create (&info);
+  assert_eq (status, ML_ERROR_NONE);
+
   status = ml_tensors_info_set_count (info, 1);
   assert_eq (status, ML_ERROR_NONE);
 
@@ -482,6 +606,9 @@ int utc_ml_tensors_info_get_tensor_size_p (void)
   status = ml_tensors_info_get_tensor_size (info, 0, &data_size);
   assert_eq (status, ML_ERROR_NONE);
 
+  status = ml_tensors_info_destroy (info);
+  assert_eq (status, ML_ERROR_NONE);
+
   return 0;
 }
 
@@ -492,8 +619,15 @@ int utc_ml_tensors_info_get_tensor_size_p (void)
  */
 int utc_ml_tensors_info_get_tensor_size_n (void)
 {
+  IS_SUPPORT_FEATURE;
+  status = ml_tensors_info_create (&info);
+  assert_eq (status, ML_ERROR_NONE);
+
   status = ml_tensors_info_get_tensor_size (NULL, 0, NULL);
   assert_eq (status, ML_ERROR_INVALID_PARAMETER);
 
+  status = ml_tensors_info_destroy (info);
+  assert_eq (status, ML_ERROR_NONE);
+
   return 0;
 }
index d27cd25d5f32102e03967863a2efe7e8fc0ee208..37cbfa7dbdd3ef9622fb2e4f1fb44cdb4dff85f7 100644 (file)
 // limitations under the License.
 //
 
-#include <nnstreamer.h>
-#include <nnstreamer-single.h>
-#include <stdint.h>
-#include <glib.h>
-#include <glib/gstdio.h> /* GStatBuf */
-
-#include "tct_common.h"
-
-#define API_NAMESPACE "nnstreamer"
+#include "utc-nnstreamer-common.h"
 
 static int status;
 static gchar * pipeline;
@@ -36,6 +28,17 @@ static ml_pipeline_valve_h valve1;
  */
 void utc_nnstreamer_pipeline_valve_startup(void)
 {
+       int ret = system_info_get_platform_bool(FEATURE_ML, &feature_ml);
+  if (ret != ML_ERROR_NONE || !feature_ml) {
+    FPRINTF("[%s][%d][%s] feature machine_learning is not supported!\\n", __FILE__, __LINE__, __FUNCTION__);
+    return;
+  }
+       ret = system_info_get_platform_bool(FEATURE_ML_INFERENCE, &feature_ml_inf);
+  if (ret != ML_ERROR_NONE || !feature_ml_inf) {
+    FPRINTF("[%s][%d][%s] feature machine_learning.inference is not supported!\\n", __FILE__, __LINE__, __FUNCTION__);
+    return;
+  }
+
   pipeline = g_strdup ("videotestsrc is-live=true ! videoconvert ! videoscale ! video/x-raw,format=RGBx,width=16,height=16,framerate=10/1 ! tensor_converter ! queue ! valve name=valve1");
   status = ml_pipeline_construct (pipeline, NULL, NULL, &handle);
 }
@@ -58,6 +61,7 @@ void utc_nnstreamer_pipeline_valve_cleanup(void)
  */
 int utc_ml_pipeline_valve_get_handle_p (void)
 {
+  IS_SUPPORT_FEATURE;
   status = ml_pipeline_valve_get_handle (handle, "valve1", &valve1);
   assert_eq (status, ML_ERROR_NONE);
 
@@ -71,6 +75,7 @@ int utc_ml_pipeline_valve_get_handle_p (void)
  */
 int utc_ml_pipeline_valve_get_handle_n (void)
 {
+  IS_SUPPORT_FEATURE;
   status = ml_pipeline_valve_get_handle (NULL, "valve1", &valve1);
   assert_eq (status, ML_ERROR_INVALID_PARAMETER);
 
@@ -84,6 +89,7 @@ int utc_ml_pipeline_valve_get_handle_n (void)
  */
 int utc_ml_pipeline_valve_release_handle_p (void)
 {
+  IS_SUPPORT_FEATURE;
   status = ml_pipeline_valve_get_handle (handle, "valve1", &valve1);
   assert_eq (status, ML_ERROR_NONE);
 
@@ -106,6 +112,7 @@ int utc_ml_pipeline_valve_release_handle_p (void)
  */
 int utc_ml_pipeline_valve_release_handle_n (void)
 {
+  IS_SUPPORT_FEATURE;
   status = ml_pipeline_valve_release_handle (NULL);
   assert_eq (status, ML_ERROR_INVALID_PARAMETER);
 
@@ -119,6 +126,7 @@ int utc_ml_pipeline_valve_release_handle_n (void)
  */
 int utc_ml_pipeline_valve_set_open_p (void)
 {
+  IS_SUPPORT_FEATURE;
   status = ml_pipeline_valve_get_handle (handle, "valve1", &valve1);
   assert_eq (status, ML_ERROR_NONE);
 
@@ -134,6 +142,7 @@ int utc_ml_pipeline_valve_set_open_p (void)
  */
 int utc_ml_pipeline_valve_set_open_n (void)
 {
+  IS_SUPPORT_FEATURE;
   status = ml_pipeline_valve_set_open (NULL, true);
   assert_eq (status, ML_ERROR_INVALID_PARAMETER);
 
index 6b2d772f06b8a8afd2845cedfa9bda1acde32959..d91d9430cf28fecbb4cb02fe27600fe30e6a9d5e 100644 (file)
 // limitations under the License.
 //
 
-#include <nnstreamer.h>
-#include <nnstreamer-single.h>
-#include <stdint.h>
-#include <glib.h>
-#include <glib/gstdio.h> /* GStatBuf */
-
-#include "tct_common.h"
-
-#define API_NAMESPACE "nnstreamer"
-
-#define wait_for_start(handle, state, status) \
-do {\
-  int counter = 0;\
-  while ((state == ML_PIPELINE_STATE_PAUSED || \
-          state == ML_PIPELINE_STATE_READY) && counter < 20) {\
-    g_usleep (50000);\
-    counter ++;\
-    status = ml_pipeline_get_state (handle, &state);\
-    assert_eq (status, ML_ERROR_NONE);\
-  }\
-} while (0)\
+#include "utc-nnstreamer-common.h"
 
 static int status;
 static gchar * pipeline;
 static ml_pipeline_h handle;
 static ml_pipeline_state_e state;
 
+/**
+ * @function           utc_nnstreamer_pipeline_startup
+ * @since_tizen                5.5
+ * @description                called before the specific test cases
+ */
+void utc_nnstreamer_pipeline_startup (void)
+{
+       int ret = system_info_get_platform_bool(FEATURE_ML, &feature_ml);
+  if (ret != ML_ERROR_NONE || !feature_ml) {
+    FPRINTF("[%s][%d][%s] feature machine_learning is not supported!\\n", __FILE__, __LINE__, __FUNCTION__);
+    return;
+  }
+       ret = system_info_get_platform_bool(FEATURE_ML_INFERENCE, &feature_ml_inf);
+  if (ret != ML_ERROR_NONE || !feature_ml_inf) {
+    FPRINTF("[%s][%d][%s] feature machine_learning.inference is not supported!\\n", __FILE__, __LINE__, __FUNCTION__);
+    return;
+  }
+}
+
+/**
+ * @function           utc_nnstreamer_pipeline_cleanup
+ * @since_tizen                5.5
+ * @description                called before the specific test cases
+ */
+void utc_nnstreamer_pipeline_cleanup (void)
+{
+}
+
 /**
  * @testcase           utc_ml_pipeline_construct_p
  * @since_tizen                5.5
@@ -48,6 +56,7 @@ static ml_pipeline_state_e state;
  */
 int utc_ml_pipeline_construct_p (void)
 {
+  IS_SUPPORT_FEATURE;
   pipeline = "videotestsrc num_buffers=2 ! fakesink";
   status = ml_pipeline_construct (pipeline, NULL, NULL, &handle);
   assert_eq (status, ML_ERROR_NONE);
@@ -65,6 +74,7 @@ int utc_ml_pipeline_construct_p (void)
  */
 int utc_ml_pipeline_construct_n (void)
 {
+  IS_SUPPORT_FEATURE;
   pipeline = "nonexistsrc ! fakesink";
   status = ml_pipeline_construct (pipeline, NULL, NULL, &handle);
   assert_eq (status, ML_ERROR_STREAMS_PIPE);
@@ -79,6 +89,7 @@ int utc_ml_pipeline_construct_n (void)
  */
 int utc_ml_pipeline_destroy_p (void)
 {
+  IS_SUPPORT_FEATURE;
   pipeline = "videotestsrc num_buffers=2 ! videoconvert ! videoscale ! video/x-raw,format=RGBx,width=224,height=224 ! tensor_converter ! fakesink";
   status = ml_pipeline_construct (pipeline, NULL, NULL, &handle);
   assert_eq (status, ML_ERROR_NONE);
@@ -96,6 +107,7 @@ int utc_ml_pipeline_destroy_p (void)
  */
 int utc_ml_pipeline_destroy_n (void)
 {
+  IS_SUPPORT_FEATURE;
   status = ml_pipeline_destroy (NULL);
   assert_eq (status, ML_ERROR_INVALID_PARAMETER);
 
@@ -109,6 +121,7 @@ int utc_ml_pipeline_destroy_n (void)
  */
 int utc_ml_pipeline_get_state_p (void)
 {
+  IS_SUPPORT_FEATURE;
   pipeline = "videotestsrc is-live=true ! videoconvert ! videoscale ! video/x-raw,format=RGBx,width=224,height=224,framerate=60/1 ! tensor_converter ! valve name=valvex ! valve name=valvey ! input-selector name=is01 ! tensor_sink name=sinkx";
   status = ml_pipeline_construct (pipeline, NULL, NULL, &handle);
   assert_eq (status, ML_ERROR_NONE);
@@ -134,6 +147,7 @@ int utc_ml_pipeline_get_state_p (void)
  */
 int utc_ml_pipeline_get_state_n (void)
 {
+  IS_SUPPORT_FEATURE;
   pipeline = "videotestsrc is-live=true ! videoconvert ! videoscale ! video/x-raw,format=RGBx,width=224,height=224,framerate=60/1 ! tensor_converter ! valve name=valvex ! valve name=valvey ! input-selector name=is01 ! tensor_sink name=sinkx";
   status = ml_pipeline_construct (pipeline, NULL, NULL, &handle);
   assert_eq (status, ML_ERROR_NONE);
@@ -154,6 +168,7 @@ int utc_ml_pipeline_get_state_n (void)
  */
 int utc_ml_pipeline_start_p (void)
 {
+  IS_SUPPORT_FEATURE;
   pipeline = "videotestsrc is-live=true ! videoconvert ! videoscale ! video/x-raw,format=RGBx,width=224,height=224,framerate=60/1 ! tensor_converter ! valve name=valvex ! valve name=valvey ! input-selector name=is01 ! tensor_sink name=sinkx";
   status = ml_pipeline_construct (pipeline, NULL, NULL, &handle);
   assert_eq (status, ML_ERROR_NONE);
@@ -180,6 +195,7 @@ int utc_ml_pipeline_start_p (void)
  */
 int utc_ml_pipeline_start_n (void)
 {
+  IS_SUPPORT_FEATURE;
   status = ml_pipeline_start (NULL);
   assert_eq (status, ML_ERROR_INVALID_PARAMETER);
 
@@ -193,6 +209,7 @@ int utc_ml_pipeline_start_n (void)
  */
 int utc_ml_pipeline_stop_p (void)
 {
+  IS_SUPPORT_FEATURE;
   pipeline = "videotestsrc is-live=true ! videoconvert ! videoscale ! video/x-raw,format=RGBx,width=224,height=224,framerate=60/1 ! tensor_converter ! valve name=valvex ! valve name=valvey ! input-selector name=is01 ! tensor_sink name=sinkx";
   status = ml_pipeline_construct (pipeline, NULL, NULL, &handle);
   assert_eq (status, ML_ERROR_NONE);
@@ -231,6 +248,7 @@ int utc_ml_pipeline_stop_p (void)
  */
 int utc_ml_pipeline_stop_n (void)
 {
+  IS_SUPPORT_FEATURE;
   status = ml_pipeline_stop (NULL);
   assert_eq (status, ML_ERROR_INVALID_PARAMETER);
 
@@ -245,6 +263,7 @@ int utc_ml_pipeline_stop_n (void)
 int utc_ml_check_nnfw_availability_p (void)
 {
   bool result;
+  IS_SUPPORT_FEATURE;
   int status = ml_check_nnfw_availability (ML_NNFW_TYPE_NNFW, ML_NNFW_HW_ANY, &result);
   assert_eq (status, ML_ERROR_NONE);
   assert_eq (result, false);
@@ -267,6 +286,7 @@ int utc_ml_check_nnfw_availability_p (void)
  */
 int utc_ml_check_nnfw_availability_n (void)
 {
+  IS_SUPPORT_FEATURE;
   status = ml_check_nnfw_availability (ML_NNFW_TYPE_NNFW, ML_NNFW_HW_NPU, NULL);
   assert_eq (status, ML_ERROR_INVALID_PARAMETER);
 
index 18574b75770c8e254eff2f32367dab4e9dda3620..093dc5477abb68186ce7cad30c33cb234630bfef 100644 (file)
 // limitations under the License.
 //
 
-#include <nnstreamer.h>
-#include <nnstreamer-single.h>
-#include <stdint.h>
-#include <glib.h>
-#include <glib/gstdio.h> /* GStatBuf */
-
-#include "tct_common.h"
-
-#define API_NAMESPACE "nnstreamer"
-
-/**
- * @brief Struct to check the pipeline state changes.
- */
-typedef struct
-{
-  gboolean paused;
-  gboolean playing;
-} TestPipeState;
-
-#define wait_for_start(handle, state, status) \
-do {\
-  int counter = 0;\
-  while ((state == ML_PIPELINE_STATE_PAUSED || \
-          state == ML_PIPELINE_STATE_READY) && counter < 20) {\
-    g_usleep (50000);\
-    counter ++;\
-    status = ml_pipeline_get_state (handle, &state);\
-    assert_eq (status, ML_ERROR_NONE);\
-  }\
-} while (0)\
-
-/**
- * @brief A tensor-sink callback for sink handle in a pipeline
- */
-static void
-test_sink_callback_dm01 (const ml_tensors_data_h data,
-    const ml_tensors_info_h info, void *user_data)
-{
-  gchar *filepath = (gchar *) user_data;
-  unsigned int i, num = 0;
-  void *data_ptr;
-  size_t data_size;
-  int status;
-  FILE *fp = g_fopen (filepath, "a");
-
-  if (fp == NULL)
-    return;
-
-  ml_tensors_info_get_count (info, &num);
-
-  for (i = 0; i < num; i++) {
-    status = ml_tensors_data_get_tensor_data (data, i, &data_ptr, &data_size);
-    if (status == ML_ERROR_NONE)
-      fwrite (data_ptr, data_size, 1, fp);
-  }
-
-  fclose (fp);
-}
-
-/**
- * @brief A tensor-sink callback for sink handle in a pipeline
- */
-static void
-test_sink_callback_count (const ml_tensors_data_h data,
-    const ml_tensors_info_h info, void *user_data)
-{
-  guint *count = (guint *) user_data;
-
-  *count = *count + 1;
-}
-
-/**
- * @brief Pipeline state changed callback
- */
-static void
-test_pipe_state_callback (ml_pipeline_state_e state, void *user_data)
-{
-  TestPipeState *pipe_state;
-
-  pipe_state = (TestPipeState *) user_data;
-
-  switch (state) {
-    case ML_PIPELINE_STATE_PAUSED:
-      pipe_state->paused = TRUE;
-      break;
-    case ML_PIPELINE_STATE_PLAYING:
-      pipe_state->playing = TRUE;
-      break;
-    default:
-      break;
-  }
-}
-
-/**
- * @brief compare the two files.
- */
-static int
-file_cmp (const gchar * f1, const gchar * f2)
-{
-  gboolean r;
-  gchar *content1, *content2;
-  gsize len1, len2;
-  int cmp = 0;
-
-  r = g_file_get_contents (f1, &content1, &len1, NULL);
-  if (r != TRUE)
-    return -1;
-
-  r = g_file_get_contents (f2, &content2, &len2, NULL);
-  if (r != TRUE) {
-    g_free (content1);
-    return -2;
-  }
-
-  if (len1 == len2) {
-    cmp = memcmp (content1, content2, len1);
-  } else {
-    cmp = 1;
-  }
-
-  g_free (content1);
-  g_free (content2);
-
-  return cmp;
-}
-
-static gchar * pipeline;
-static uint8_t * content;
-static uint8_t * uintarray1[10];
-static uint8_t * uintarray2[10];
+#include "utc-nnstreamer-common.h"
 
 /**
  * @function           utc_nnstreamer_scenario_startup
@@ -152,21 +23,15 @@ static uint8_t * uintarray2[10];
  */
 void utc_nnstreamer_scenario_startup(void)
 {
-  int i;
-  for (i = 0; i < 10; i++) {
-    uintarray1[i] = (uint8_t *) g_malloc (4);
-    uintarray1[i][0] = i + 4;
-    uintarray1[i][1] = i + 1;
-    uintarray1[i][2] = i + 3;
-    uintarray1[i][3] = i + 2;
-
-    uintarray2[i] = (uint8_t *) g_malloc (4);
-    uintarray2[i][0] = i + 3;
-    uintarray2[i][1] = i + 2;
-    uintarray2[i][2] = i + 1;
-    uintarray2[i][3] = i + 4;
-    /* These will be free'ed by gstreamer (ML_PIPELINE_BUF_POLICY_AUTO_FREE) */
-    /** @todo Check whether gstreamer really deallocates this */
+  int ret = system_info_get_platform_bool(FEATURE_ML, &feature_ml);
+  if (ret != ML_ERROR_NONE || !feature_ml) {
+    FPRINTF("[%s][%d][%s] feature machine_learning is not supported!\\n", __FILE__, __LINE__, __FUNCTION__);
+    return;
+  }
+       ret = system_info_get_platform_bool(FEATURE_ML_INFERENCE, &feature_ml_inf);
+  if (ret != ML_ERROR_NONE || !feature_ml_inf) {
+    FPRINTF("[%s][%d][%s] feature machine_learning.inference is not supported!\\n", __FILE__, __LINE__, __FUNCTION__);
+    return;
   }
 }
 
@@ -177,13 +42,6 @@ void utc_nnstreamer_scenario_startup(void)
  */
 void utc_nnstreamer_scenario_cleanup(void)
 {
-  int i;
-  for (i = 0; i < 10; i++) {
-    g_free (uintarray1[i]);
-    g_free (uintarray2[i]);
-  }
-  g_free (pipeline);
-  g_free (content);
 }
 
 /**
@@ -193,7 +51,8 @@ void utc_nnstreamer_scenario_cleanup(void)
  */
 int utc_nnstreamer_scenario_construct_destruct_empty_pipeline_p (void)
 {
-  const char *pipeline = "videotestsrc num_buffers=2 ! fakesink";
+  IS_SUPPORT_FEATURE;
+  gchar * pipeline = g_strdup ("videotestsrc num_buffers=2 ! fakesink");
   ml_pipeline_h handle;
   int status = ml_pipeline_construct (pipeline, NULL, NULL, &handle);
   assert_eq(status, ML_ERROR_NONE);
@@ -201,6 +60,8 @@ int utc_nnstreamer_scenario_construct_destruct_empty_pipeline_p (void)
   status = ml_pipeline_destroy (handle);
   assert_eq(status, ML_ERROR_NONE);
 
+  g_free (pipeline);
+
   return 0;
 }
 
@@ -211,7 +72,8 @@ int utc_nnstreamer_scenario_construct_destruct_empty_pipeline_p (void)
  */
 int utc_nnstreamer_scenario_construct_destruct_pipeline_p1 (void)
 {
-  const char *pipeline = "videotestsrc num_buffers=2 ! videoconvert ! videoscale ! video/x-raw,format=RGBx,width=224,height=224 ! tensor_converter ! fakesink";
+  IS_SUPPORT_FEATURE;
+  gchar * pipeline = g_strdup("videotestsrc num_buffers=2 ! videoconvert ! videoscale ! video/x-raw,format=RGBx,width=224,height=224 ! tensor_converter ! fakesink");
   ml_pipeline_h handle;
   int status = ml_pipeline_construct (pipeline, NULL, NULL, &handle);
   assert_eq (status, ML_ERROR_NONE);
@@ -219,6 +81,8 @@ int utc_nnstreamer_scenario_construct_destruct_pipeline_p1 (void)
   status = ml_pipeline_destroy (handle);
   assert_eq (status, ML_ERROR_NONE);
 
+  g_free (pipeline);
+
   return 0;
 }
 
@@ -229,7 +93,8 @@ int utc_nnstreamer_scenario_construct_destruct_pipeline_p1 (void)
  */
 int utc_nnstreamer_scenario_construct_destruct_pipeline_p2 (void)
 {
-  const char *pipeline = "videotestsrc num_buffers=2 ! videoconvert ! videoscale ! video/x-raw,format=RGBx,width=224,height=224 ! tensor_converter ! valve name=valvex ! tensor_sink name=sinkx";
+  IS_SUPPORT_FEATURE;
+  gchar * pipeline = g_strdup("videotestsrc num_buffers=2 ! videoconvert ! videoscale ! video/x-raw,format=RGBx,width=224,height=224 ! tensor_converter ! valve name=valvex ! tensor_sink name=sinkx");
   ml_pipeline_h handle;
   int status = ml_pipeline_construct (pipeline, NULL, NULL, &handle);
   assert_eq (status, ML_ERROR_NONE);
@@ -237,6 +102,8 @@ int utc_nnstreamer_scenario_construct_destruct_pipeline_p2 (void)
   status = ml_pipeline_destroy (handle);
   assert_eq (status, ML_ERROR_NONE);
 
+  g_free (pipeline);
+
   return 0;
 }
 
@@ -247,11 +114,14 @@ int utc_nnstreamer_scenario_construct_destruct_pipeline_p2 (void)
  */
 int utc_nnstreamer_scenario_construct_pipeline_error_case_n1 (void)
 {
-  const char *pipeline = "nonexistsrc ! fakesink";
+  IS_SUPPORT_FEATURE;
+  gchar * pipeline = g_strdup("nonexistsrc ! fakesink");
   ml_pipeline_h handle;
   int status = ml_pipeline_construct (pipeline, NULL, NULL, &handle);
   assert_eq (status, ML_ERROR_STREAMS_PIPE);
 
+  g_free (pipeline);
+
   return 0;
 }
 
@@ -262,11 +132,14 @@ int utc_nnstreamer_scenario_construct_pipeline_error_case_n1 (void)
  */
 int utc_nnstreamer_scenario_construct_pipeline_error_case_n2 (void)
 {
-  const char *pipeline = "videotestsrc num_buffers=2 ! audioconvert ! fakesink";
+  IS_SUPPORT_FEATURE;
+  gchar * pipeline = g_strdup("videotestsrc num_buffers=2 ! audioconvert ! fakesink");
   ml_pipeline_h handle;
   int status = ml_pipeline_construct (pipeline, NULL, NULL, &handle);
   assert_eq (status, ML_ERROR_STREAMS_PIPE);
 
+  g_free (pipeline);
+
   return 0;
 }
 
@@ -277,7 +150,8 @@ int utc_nnstreamer_scenario_construct_pipeline_error_case_n2 (void)
  */
 int utc_nnstreamer_scenario_pipeline_state_test_p1 (void)
 {
-  const char *pipeline = "videotestsrc is-live=true ! videoconvert ! videoscale ! video/x-raw,format=RGBx,width=224,height=224,framerate=60/1 ! tensor_converter ! valve name=valvex ! valve name=valvey ! input-selector name=is01 ! tensor_sink name=sinkx";
+  IS_SUPPORT_FEATURE;
+  gchar * pipeline = g_strdup("videotestsrc is-live=true ! videoconvert ! videoscale ! video/x-raw,format=RGBx,width=224,height=224,framerate=60/1 ! tensor_converter ! valve name=valvex ! valve name=valvey ! input-selector name=is01 ! tensor_sink name=sinkx");
   ml_pipeline_h handle;
   ml_pipeline_state_e state;
   int status = ml_pipeline_construct (pipeline, NULL, NULL, &handle);
@@ -307,6 +181,8 @@ int utc_nnstreamer_scenario_pipeline_state_test_p1 (void)
   status = ml_pipeline_destroy (handle);
   assert_eq (status, ML_ERROR_NONE);
 
+  g_free (pipeline);
+
   return 0;
 }
 
@@ -317,7 +193,8 @@ int utc_nnstreamer_scenario_pipeline_state_test_p1 (void)
  */
 int utc_nnstreamer_scenario_pipeline_state_test_p2 (void)
 {
-  const char *pipeline = "videotestsrc is-live=true ! videoconvert ! videoscale ! video/x-raw,format=RGBx,width=224,height=224,framerate=60/1 ! tensor_converter ! valve name=valvex ! valve name=valvey ! input-selector name=is01 ! tensor_sink name=sinkx";
+  IS_SUPPORT_FEATURE;
+  gchar * pipeline = g_strdup("videotestsrc is-live=true ! videoconvert ! videoscale ! video/x-raw,format=RGBx,width=224,height=224,framerate=60/1 ! tensor_converter ! valve name=valvex ! valve name=valvey ! input-selector name=is01 ! tensor_sink name=sinkx");
   ml_pipeline_h handle;
   ml_pipeline_state_e state;
   int status = ml_pipeline_construct (pipeline, NULL, NULL, &handle);
@@ -361,6 +238,8 @@ int utc_nnstreamer_scenario_pipeline_state_test_p2 (void)
   status = ml_pipeline_destroy (handle);
   assert_eq (status, ML_ERROR_NONE);
 
+  g_free (pipeline);
+
   return 0;
 }
 
@@ -376,7 +255,7 @@ int utc_nnstreamer_scenario_pipeline_state_test_p3 (void)
   gchar *fullpath = g_build_path ("/", _tmpdir, _dirname, NULL);
   gchar *dir = g_mkdtemp ((gchar *) fullpath);
   gchar *file1 = g_build_path ("/", dir, "valve1", NULL);
-  gchar *pipeline =
+  gchar * pipeline =
       g_strdup_printf
       ("videotestsrc is-live=true ! videoconvert ! videoscale ! video/x-raw,format=RGBx,width=16,height=16,framerate=10/1 ! tensor_converter ! queue ! valve name=valve1 ! filesink location=\"%s\"",
       file1);
@@ -439,6 +318,7 @@ int utc_nnstreamer_scenario_pipeline_state_test_p3 (void)
 
   g_free (fullpath);
   g_free (file1);
+
   g_free (pipeline);
 
   return 0;
@@ -451,12 +331,12 @@ int utc_nnstreamer_scenario_pipeline_state_test_p3 (void)
  */
 int utc_nnstreamer_scenario_valve_error_cases_n (void)
 {
+  IS_SUPPORT_FEATURE;
   ml_pipeline_h handle;
   ml_pipeline_valve_h valve_h;
-  gchar *pipeline;
   int status;
 
-  pipeline = g_strdup ("videotestsrc num-buffers=3 ! videoconvert ! valve name=valvex ! tensor_converter ! tensor_sink name=sinkx");
+  gchar * pipeline = g_strdup ("videotestsrc num-buffers=3 ! videoconvert ! valve name=valvex ! tensor_converter ! tensor_sink name=sinkx");
 
   status = ml_pipeline_construct (pipeline, NULL, NULL, &handle);
   assert_eq (status, ML_ERROR_NONE);
@@ -496,6 +376,7 @@ int utc_nnstreamer_scenario_valve_error_cases_n (void)
  */
 int utc_nnstreamer_scenario_sink_p1 (void)
 {
+  IS_SUPPORT_FEATURE;
   const gchar *_tmpdir = g_get_tmp_dir ();
   const gchar *_dirname = "nns-tizen-XXXXXX";
   gchar *fullpath = g_build_path ("/", _tmpdir, _dirname, NULL);
@@ -505,7 +386,7 @@ int utc_nnstreamer_scenario_sink_p1 (void)
 
   gchar *file1 = g_build_path ("/", dir, "original", NULL);
   gchar *file2 = g_build_path ("/", dir, "sink", NULL);
-  gchar *pipeline =
+  gchar * pipeline =
       g_strdup_printf
       ("videotestsrc num-buffers=3 ! videoconvert ! video/x-raw,format=BGRx,width=64,height=48,famerate=60/1 ! tee name=t t. ! queue ! filesink location=\"%s\"  t. ! queue ! tensor_converter ! tensor_sink name=sinkx",
       file1);
@@ -544,11 +425,11 @@ int utc_nnstreamer_scenario_sink_p1 (void)
   status = ml_pipeline_destroy (handle);
   assert_eq (status, ML_ERROR_NONE);
 
-  g_free (pipeline);
-
   /* File Comparison to check the integrity */
   assert_eq (file_cmp (file1, file2), 0);
 
+  g_free (pipeline);
+
   return 0;
 }
 
@@ -559,16 +440,16 @@ int utc_nnstreamer_scenario_sink_p1 (void)
  */
 int utc_nnstreamer_scenario_sink_p2 (void)
 {
+  IS_SUPPORT_FEATURE;
   ml_pipeline_h handle;
   ml_pipeline_state_e state;
   ml_pipeline_sink_h sinkhandle;
-  gchar *pipeline;
   int status;
   guint *count_sink;
   TestPipeState *pipe_state;
 
   /* pipeline with appsink */
-  pipeline = g_strdup ("videotestsrc num-buffers=3 ! videoconvert ! tensor_converter ! appsink name=sinkx");
+  gchar * pipeline = g_strdup ("videotestsrc num-buffers=3 ! videoconvert ! tensor_converter ! appsink name=sinkx");
 
   count_sink = (guint *) g_malloc (sizeof (guint));
   *count_sink = 0;
@@ -621,13 +502,13 @@ int utc_nnstreamer_scenario_sink_p2 (void)
  */
 int utc_nnstreamer_scenario_sink_error_cases_n (void)
 {
+  IS_SUPPORT_FEATURE;
   ml_pipeline_h handle;
   ml_pipeline_sink_h sinkhandle;
-  gchar *pipeline;
   int status;
   guint *count_sink;
 
-  pipeline = g_strdup ("videotestsrc num-buffers=3 ! videoconvert ! valve name=valvex ! tensor_converter ! tensor_sink name=sinkx");
+  gchar * pipeline = g_strdup ("videotestsrc num-buffers=3 ! videoconvert ! valve name=valvex ! tensor_converter ! tensor_sink name=sinkx");
 
   count_sink = (guint *) g_malloc (sizeof (guint));
   *count_sink = 0;
@@ -691,6 +572,7 @@ int utc_nnstreamer_scenario_sink_error_cases_n (void)
  */
 int utc_nnstreamer_scenario_src_p (void)
 {
+  IS_SUPPORT_FEATURE;
   const gchar *_tmpdir = g_get_tmp_dir ();
   const gchar *_dirname = "nns-tizen-XXXXXX";
   gchar *fullpath = g_build_path ("/", _tmpdir, _dirname, NULL);
@@ -703,13 +585,16 @@ int utc_nnstreamer_scenario_src_p (void)
   ml_tensors_info_h info;
   ml_tensors_data_h data1, data2;
   unsigned int count = 0;
+  uint8_t uintarray1[10][4];
+  uint8_t uintarray2[10][4];
+  uint8_t * content;
   ml_tensor_type_e type = ML_TENSOR_TYPE_UNKNOWN;
   ml_tensor_dimension dim = { 0, };
 
   int i;
   gsize len;
 
-  pipeline =
+  gchar * pipeline =
       g_strdup_printf ("appsrc name=srcx ! other/tensor,dimension=(string)4:1:1:1,type=(string)uint8,framerate=(fraction)0/1 ! filesink location=\"%s\"",
       file1);
 
@@ -748,6 +633,19 @@ int utc_nnstreamer_scenario_src_p (void)
 
   ml_tensors_info_destroy (info);
 
+  for (i = 0; i < 10; i++) {
+    uintarray1[i][0] = i + 4;
+    uintarray1[i][1] = i + 1;
+    uintarray1[i][2] = i + 3;
+    uintarray1[i][3] = i + 2;
+
+    uintarray2[i][0] = i + 3;
+    uintarray2[i][1] = i + 2;
+    uintarray2[i][2] = i + 1;
+    uintarray2[i][3] = i + 4;
+    /* These will be free'ed by gstreamer (ML_PIPELINE_BUF_POLICY_AUTO_FREE) */
+    /** @todo Check whether gstreamer really deallocates this */
+  }
   status = ml_tensors_data_set_tensor_data (data1, 0, uintarray1[0], 4);
   assert_eq (status, ML_ERROR_NONE);
 
@@ -823,6 +721,8 @@ int utc_nnstreamer_scenario_src_p (void)
 
   status = ml_tensors_info_destroy (info);
   status = ml_tensors_data_destroy (data1);
+  g_free (pipeline);
+  g_free (content);
 
   return 0;
 }
@@ -835,6 +735,7 @@ int utc_nnstreamer_scenario_src_p (void)
 int utc_nnstreamer_scenario_src_error_case_n1 (void)
 {
   int status;
+  IS_SUPPORT_FEATURE;
   ml_pipeline_src_h srchandle;
 
   status = ml_pipeline_src_get_handle (NULL, "dummy", &srchandle);
@@ -850,7 +751,8 @@ int utc_nnstreamer_scenario_src_error_case_n1 (void)
  */
 int utc_nnstreamer_scenario_src_error_case_n2 (void)
 {
-  const char *pipeline = "appsrc name=mysource ! other/tensor,dimension=(string)4:1:1:1,type=(string)uint8,framerate=(fraction)0/1 ! valve name=valvex ! tensor_sink";
+  IS_SUPPORT_FEATURE;
+  gchar * pipeline = g_strdup("appsrc name=mysource ! other/tensor,dimension=(string)4:1:1:1,type=(string)uint8,framerate=(fraction)0/1 ! valve name=valvex ! tensor_sink");
   ml_pipeline_h handle;
   ml_pipeline_src_h srchandle;
 
@@ -880,6 +782,8 @@ int utc_nnstreamer_scenario_src_error_case_n2 (void)
   status = ml_pipeline_destroy (handle);
   assert_eq (status, ML_ERROR_NONE);
 
+  g_free (pipeline);
+
   return 0;
 }
 
@@ -890,7 +794,8 @@ int utc_nnstreamer_scenario_src_error_case_n2 (void)
  */
 int utc_nnstreamer_scenario_src_error_case_n3 (void)
 {
-  const char *pipeline = "appsrc name=srcx ! other/tensor,dimension=(string)4:1:1:1,type=(string)uint8,framerate=(fraction)0/1 ! tensor_sink";
+  IS_SUPPORT_FEATURE;
+  gchar * pipeline = g_strdup("appsrc name=srcx ! other/tensor,dimension=(string)4:1:1:1,type=(string)uint8,framerate=(fraction)0/1 ! tensor_sink");
   ml_pipeline_h handle;
   ml_pipeline_src_h srchandle;
   ml_tensors_data_h data;
@@ -927,6 +832,8 @@ int utc_nnstreamer_scenario_src_error_case_n3 (void)
   status = ml_tensors_data_destroy (data);
   assert_eq (status, ML_ERROR_NONE);
 
+  g_free (pipeline);
+
   return 0;
 }
 
@@ -937,18 +844,18 @@ int utc_nnstreamer_scenario_src_error_case_n3 (void)
  */
 int utc_nnstreamer_scenario_switch_pipeline_p1 (void)
 {
+  IS_SUPPORT_FEATURE;
   ml_pipeline_h handle;
   ml_pipeline_switch_h switchhandle;
   ml_pipeline_sink_h sinkhandle;
   ml_pipeline_switch_e type;
   ml_pipeline_state_e state;
-  gchar *pipeline;
   int status;
   guint *count_sink;
   TestPipeState *pipe_state;
   gchar **node_list = NULL;
 
-  pipeline = g_strdup ("input-selector name=ins ! tensor_converter ! tensor_sink name=sinkx "
+  gchar * pipeline = g_strdup ("input-selector name=ins ! tensor_converter ! tensor_sink name=sinkx "
       "videotestsrc is-live=true ! videoconvert ! ins.sink_0 "
       "videotestsrc num-buffers=3 is-live=true ! videoconvert ! ins.sink_1");
 
@@ -1014,9 +921,9 @@ int utc_nnstreamer_scenario_switch_pipeline_p1 (void)
   assert (pipe_state->paused);
   assert (pipe_state->playing);
 
-  g_free (pipeline);
   g_free (count_sink);
   g_free (pipe_state);
+  g_free (pipeline);
 
   return 0;
 }
@@ -1028,11 +935,11 @@ int utc_nnstreamer_scenario_switch_pipeline_p1 (void)
  */
 int utc_nnstreamer_scenario_switch_pipeline_p2 (void)
 {
+  IS_SUPPORT_FEATURE;
   ml_pipeline_h handle;
   ml_pipeline_switch_h switchhandle;
   ml_pipeline_sink_h sinkhandle0, sinkhandle1;
   ml_pipeline_switch_e type;
-  gchar *pipeline;
   int status;
   guint *count_sink0, *count_sink1;
   gchar **node_list = NULL;
@@ -1042,7 +949,7 @@ int utc_nnstreamer_scenario_switch_pipeline_p2 (void)
    * For running the test, set async=false in the sink element when using an output selector.
    * The pipeline state can be changed to paused after all sink element receive buffer.
    */
-  pipeline = g_strdup ("videotestsrc is-live=true ! videoconvert ! tensor_converter ! output-selector name=outs "
+  gchar * pipeline = g_strdup ("videotestsrc is-live=true ! videoconvert ! tensor_converter ! output-selector name=outs "
       "outs.src_0 ! tensor_sink name=sink0 async=false "
       "outs.src_1 ! tensor_sink name=sink1 async=false");
 
@@ -1108,9 +1015,9 @@ int utc_nnstreamer_scenario_switch_pipeline_p2 (void)
   assert_eq (*count_sink0, 0U);
   assert (*count_sink1 > 0U);
 
-  g_free (pipeline);
   g_free (count_sink0);
   g_free (count_sink1);
+  g_free (pipeline);
 
   return 0;
 }
@@ -1122,13 +1029,13 @@ int utc_nnstreamer_scenario_switch_pipeline_p2 (void)
  */
 int utc_nnstreamer_scenario_switch_pipeline_error_cases_n (void)
 {
+  IS_SUPPORT_FEATURE;
   ml_pipeline_h handle;
   ml_pipeline_switch_h switchhandle;
   ml_pipeline_switch_e type;
-  gchar *pipeline;
   int status;
 
-  pipeline = g_strdup ("input-selector name=ins ! tensor_converter ! tensor_sink name=sinkx "
+  gchar * pipeline = g_strdup ("input-selector name=ins ! tensor_converter ! tensor_sink name=sinkx "
       "videotestsrc is-live=true ! videoconvert ! ins.sink_0 "
       "videotestsrc num-buffers=3 ! videoconvert ! ins.sink_1");
 
@@ -1190,7 +1097,10 @@ int utc_nnstreamer_scenario_switch_pipeline_error_cases_n (void)
 int utc_nnstreamer_scenario_check_nnfw_availability_p (void)
 {
   bool result;
-  int status = ml_check_nnfw_availability (ML_NNFW_TYPE_NNFW, ML_NNFW_HW_ANY, &result);
+  int status;
+  IS_SUPPORT_FEATURE;
+
+  status = ml_check_nnfw_availability (ML_NNFW_TYPE_NNFW, ML_NNFW_HW_ANY, &result);
   assert_eq (status, ML_ERROR_NONE);
   assert_eq (result, false);
 
@@ -1212,12 +1122,13 @@ int utc_nnstreamer_scenario_check_nnfw_availability_p (void)
  */
 int utc_nnstreamer_scenario_check_tensor_info_utilities_p (void)
 {
-  ml_tensors_info_h info;
-  ml_tensor_dimension in_dim, out_dim;
-  ml_tensor_type_e out_type;
   gchar *out_name;
   size_t data_size;
   int status;
+  IS_SUPPORT_FEATURE;
+  ml_tensors_info_h info;
+  ml_tensor_dimension in_dim, out_dim;
+  ml_tensor_type_e out_type;
 
   status = ml_tensors_info_create (&info);
   assert_eq (status, ML_ERROR_NONE);
@@ -1317,6 +1228,7 @@ int utc_nnstreamer_scenario_check_tensor_info_utilities_p (void)
  */
 int utc_nnstreamer_scenario_filter_tensorflow_lite_p1 (void)
 {
+  IS_SUPPORT_FEATURE;
   ml_single_h single;
   ml_tensors_info_h in_info, out_info;
   ml_tensors_info_h in_res, out_res;
@@ -1447,6 +1359,7 @@ int utc_nnstreamer_scenario_filter_tensorflow_lite_p1 (void)
  */
 int utc_nnstreamer_scenario_filter_tensorflow_lite_p2 (void)
 {
+  IS_SUPPORT_FEATURE;
   ml_single_h single;
   ml_tensors_info_h in_info, out_info;
   ml_tensors_data_h input, output;
@@ -1525,6 +1438,7 @@ int utc_nnstreamer_scenario_filter_tensorflow_lite_p2 (void)
  */
 int utc_nnstreamer_scenario_filter_tensorflow_lite_n (void)
 {
+  IS_SUPPORT_FEATURE;
   ml_single_h single;
   ml_tensors_info_h in_info, out_info;
   ml_tensor_dimension in_dim, out_dim;
index 45c6f196b01814d4d308b4601141a5d047620774..8e7585f111ab276a917b59a70d15dfcf7d87897a 100644 (file)
 // limitations under the License.
 //
 
-#include <nnstreamer.h>
-#include <nnstreamer-single.h>
-#include <stdint.h>
-#include <glib.h>
-#include <glib/gstdio.h> /* GStatBuf */
-
-#include "tct_common.h"
-
-#define API_NAMESPACE "nnstreamer"
+#include "utc-nnstreamer-common.h"
 
 static ml_single_h single;
 static gchar *test_model;
@@ -38,6 +30,17 @@ const gchar *model_file = "mobilenet_v1_1.0_224_quant.tflite";
  */
 void utc_nnstreamer_single_startup(void)
 {
+       int ret = system_info_get_platform_bool(FEATURE_ML, &feature_ml);
+  if (ret != ML_ERROR_NONE || !feature_ml) {
+    FPRINTF("[%s][%d][%s] feature machine_learning is not supported!\\n", __FILE__, __LINE__, __FUNCTION__);
+    return;
+  }
+       ret = system_info_get_platform_bool(FEATURE_ML_INFERENCE, &feature_ml_inf);
+  if (ret != ML_ERROR_NONE || !feature_ml_inf) {
+    FPRINTF("[%s][%d][%s] feature machine_learning.inference is not supported!\\n", __FILE__, __LINE__, __FUNCTION__);
+    return;
+  }
+
   test_model = NULL;
 
   FPRINTF("[%s][%d][%s] [STARTUP]\\n", __FILE__, __LINE__, __FUNCTION__);
@@ -75,6 +78,7 @@ void utc_nnstreamer_single_cleanup(void)
  */
 int utc_ml_single_open_p (void)
 {
+  IS_SUPPORT_FEATURE;
   assert (g_file_test (test_model, G_FILE_TEST_EXISTS));
 
   status = ml_single_open (&single, test_model, NULL, NULL,
@@ -94,6 +98,7 @@ int utc_ml_single_open_p (void)
  */
 int utc_ml_single_open_n (void)
 {
+  IS_SUPPORT_FEATURE;
   status = ml_single_open (&single, "wrong_file_name", NULL, NULL,
      ML_NNFW_TYPE_TENSORFLOW_LITE, ML_NNFW_TYPE_ANY);
   assert_eq (status, ML_ERROR_INVALID_PARAMETER);
@@ -108,6 +113,7 @@ int utc_ml_single_open_n (void)
  */
 int utc_ml_single_close_p (void)
 {
+  IS_SUPPORT_FEATURE;
   assert (g_file_test (test_model, G_FILE_TEST_EXISTS));
 
   status = ml_single_open (&single, test_model, NULL, NULL,
@@ -127,6 +133,7 @@ int utc_ml_single_close_p (void)
  */
 int utc_ml_single_close_n (void)
 {
+  IS_SUPPORT_FEATURE;
   assert (g_file_test (test_model, G_FILE_TEST_EXISTS));
 
   status = ml_single_open (&single, test_model, NULL, NULL,
@@ -146,6 +153,7 @@ int utc_ml_single_close_n (void)
  */
 int utc_ml_single_invoke_p (void)
 {
+  IS_SUPPORT_FEATURE;
   ml_tensors_info_h in_info, out_info;
   ml_tensors_data_h input, output;
   ml_tensor_dimension in_dim, out_dim;
@@ -205,6 +213,7 @@ int utc_ml_single_invoke_p (void)
  */
 int utc_ml_single_invoke_n (void)
 {
+  IS_SUPPORT_FEATURE;
   ml_tensors_data_h input, output;
 
   assert (g_file_test (test_model, G_FILE_TEST_EXISTS));
@@ -230,6 +239,7 @@ int utc_ml_single_invoke_n (void)
  */
 int utc_ml_single_get_input_info_p (void)
 {
+  IS_SUPPORT_FEATURE;
   ml_tensors_info_h ts_info;
 
   assert (g_file_test (test_model, G_FILE_TEST_EXISTS));
@@ -257,6 +267,7 @@ int utc_ml_single_get_input_info_p (void)
  */
 int utc_ml_single_get_input_info_n (void)
 {
+  IS_SUPPORT_FEATURE;
   assert (g_file_test (test_model, G_FILE_TEST_EXISTS));
 
   status = ml_single_open (&single, test_model, NULL, NULL,
@@ -280,6 +291,7 @@ int utc_ml_single_get_input_info_n (void)
  */
 int utc_ml_single_get_output_info_p (void)
 {
+  IS_SUPPORT_FEATURE;
   ml_tensors_info_h ts_info;
 
   assert (g_file_test (test_model, G_FILE_TEST_EXISTS));
@@ -307,6 +319,7 @@ int utc_ml_single_get_output_info_p (void)
  */
 int utc_ml_single_get_output_info_n (void)
 {
+  IS_SUPPORT_FEATURE;
   assert (g_file_test (test_model, G_FILE_TEST_EXISTS));
 
   status = ml_single_open (&single, test_model, NULL, NULL,
@@ -330,6 +343,7 @@ int utc_ml_single_get_output_info_n (void)
  */
 int utc_ml_single_set_timeout_p (void)
 {
+  IS_SUPPORT_FEATURE;
   assert (g_file_test (test_model, G_FILE_TEST_EXISTS));
 
   status = ml_single_open (&single, test_model, NULL, NULL,
@@ -352,6 +366,7 @@ int utc_ml_single_set_timeout_p (void)
  */
 int utc_ml_single_set_timeout_n (void)
 {
+  IS_SUPPORT_FEATURE;
   status = ml_single_set_timeout (NULL, 5);
   assert_eq (status, ML_ERROR_INVALID_PARAMETER);