[Test] Refactoring setting test model
authorDongju Chae <dongju.chae@samsung.com>
Mon, 9 Aug 2021 09:24:47 +0000 (18:24 +0900)
committer채동주/On-Device Lab(SR)/Staff Engineer/삼성전자 <dongju.chae@samsung.com>
Tue, 10 Aug 2021 03:01:54 +0000 (12:01 +0900)
This patch performs code refactoring setting the test model
used in libnpuhost unittests.

Signed-off-by: Dongju Chae <dongju.chae@samsung.com>
tests/unittests/ne_libnpuhost_test.cc

index a8933c4..ffce1f7 100644 (file)
@@ -21,6 +21,8 @@
 #include <ne_test_utils.h>
 #include <ne_test_utils_gtest.h>
 
+#define BASIC_TEST_MODEL NE_DATADIR "/testdata/TRIV235_2TOPS/CONV_2D_000"
+
 /**
  * @brief test primitives supported in libnpuhost
  */
@@ -104,34 +106,38 @@ TEST (ne_libnpuhost_test, get_device_instance_n) {
   }
 }
 
+static bool
+create_test_model (const char *model_path, generic_buffer *model) {
+  off_t model_size = get_file_size (model_path);
+  if (model_size <= 0)
+    return false;
+
+  model->type = BUFFER_FILE;
+  model->size = model_size;
+  model->filepath = model_path;
+
+  return true;
+}
+
 /**
  * @brief test APIs to registerNPU model
  */
 TEST (ne_libnpuhost_test, register_model) {
   npudev_h dev;
-  ASSERT_EQ (getNPUdeviceByType (&dev, NPUCOND_TRIV2_CONN_SOCIP, 0), 0);
-
-  std::string model_path (NE_DATADIR);
-  model_path += "/testdata/TRIV235_2TOPS/CONV_2D_000/model.tvn";
+  uint32_t model_id;
+  generic_buffer model;
+  std::string model_dir (BASIC_TEST_MODEL);
+  std::string model_path = model_dir + "/model.tvn";
 
-  npubin_meta *meta = getNPUmodel_metadata (model_path.c_str (), false);
-  if (meta == nullptr) {
-    /* skip */
-    putNPUdevice (dev);
+  /* skip if the test model is not available */
+  if (!create_test_model (model_path.c_str (), &model))
     return;
-  }
-
-  generic_buffer model;
-  uint32_t model_id;
 
-  model.type = BUFFER_FILE;
-  model.size = meta->size;
-  model.filepath = model_path.c_str ();
+  ASSERT_EQ (getNPUdeviceByType (&dev, NPUCOND_TRIV2_CONN_SOCIP, 0), 0);
 
   EXPECT_EQ (registerNPUmodel (dev, &model, &model_id), 0);
   EXPECT_EQ (unregisterNPUmodel (dev, model_id), 0);
 
-  free (meta);
   putNPUdevice (dev);
 }
 
@@ -140,31 +146,22 @@ TEST (ne_libnpuhost_test, register_model) {
  */
 TEST (ne_libnpuhost_test, register_model_n) {
   npudev_h dev;
-  ASSERT_EQ (getNPUdeviceByType (&dev, NPUCOND_TRIV2_CONN_SOCIP, 0), 0);
-
-  std::string model_path (NE_DATADIR);
-  model_path += "/testdata/TRIV235_2TOPS/CONV_2D_000/model.tvn";
+  uint32_t model_id;
+  generic_buffer model;
+  std::string model_dir (BASIC_TEST_MODEL);
+  std::string model_path = model_dir + "/model.tvn";
 
-  npubin_meta *meta = getNPUmodel_metadata (model_path.c_str (), false);
-  if (meta == nullptr) {
-    /* skip */
-    putNPUdevice (dev);
+  /* skip if the test model is not available */
+  if (!create_test_model (model_path.c_str (), &model))
     return;
-  }
-
-  generic_buffer model;
-  uint32_t model_id = 0;
 
-  model.type = BUFFER_FILE;
-  model.size = meta->size;
-  model.filepath = model_path.c_str ();
+  ASSERT_EQ (getNPUdeviceByType (&dev, NPUCOND_TRIV2_CONN_SOCIP, 0), 0);
 
   EXPECT_NE (registerNPUmodel (nullptr, &model, &model_id), 0);
   EXPECT_NE (registerNPUmodel (dev, nullptr, &model_id), 0);
   EXPECT_NE (registerNPUmodel (dev, &model, nullptr), 0);
   EXPECT_NE (unregisterNPUmodel (dev, model_id), 0);
 
-  free (meta);
   putNPUdevice (dev);
 }
 
@@ -176,13 +173,11 @@ TEST (ne_libnpuhost_test, run_input_triv2_binfmt_v3) {
 
   ASSERT_EQ (tester.init (), 0);
 
-  std::string model_dir (NE_DATADIR);
-  model_dir += "/testdata/TRIV235_2TOPS/CONV_2D_000";
-
+  std::string model_dir (BASIC_TEST_MODEL);
   uint32_t model_id = 0;
 
+  /* skip if the test model is not available */
   if (tester.loadModel (model_dir, &model_id) != 0)
-    /* skip */
     return;
 
   EXPECT_GT (tester.run (model_id, true), 0);
@@ -211,13 +206,11 @@ TEST (ne_libnpuhost_test, run_input_triv2_binfmt_v3_n) {
   EXPECT_NE (tester.run (0, false), 0);
 
   /* invalid model id */
-  std::string model_dir (NE_DATADIR);
-  model_dir += "/testdata/TRIV235_2TOPS/CONV_2D_000";
-
+  std::string model_dir (BASIC_TEST_MODEL);
   uint32_t model_id = 0;
 
+  /* skip if the test model is not available */
   if (tester.loadModel (model_dir, &model_id) != 0)
-    /* skip */
     return;
 
   EXPECT_NE (tester.run (model_id + 1, true), 0);
@@ -732,24 +725,16 @@ test_callback (output_buffers *output, int req_id, void *data) {
 TEST (ne_libnpuhost_test, request_decoupled_apis) {
   npudev_h dev;
   uint32_t modelid;
-
-  std::string model_dir (NE_DATADIR);
-  model_dir += "/testdata/TRIV235_2TOPS/CONV_2D_000";
-
+  generic_buffer model;
+  std::string model_dir (BASIC_TEST_MODEL);
   std::string model_path = model_dir + "/model.tvn";
 
-  off_t model_size = get_file_size (model_path.c_str ());
-  if (model_size <= 0)
-    /* skip */
+  /* skip if the test model is not available */
+  if (!create_test_model (model_path.c_str (), &model))
     return;
 
-  generic_buffer modelfile;
-  modelfile.type = BUFFER_FILE;
-  modelfile.filepath = model_path.c_str ();
-  modelfile.size = model_size;
-
   ASSERT_EQ (getNPUdeviceByTypeAny (&dev, NPUCOND_TRIV2_CONN_SOCIP, 2), 0);
-  ASSERT_EQ (registerNPUmodel (dev, &modelfile, &modelid), 0);
+  ASSERT_EQ (registerNPUmodel (dev, &model, &modelid), 0);
 
   /* tensor input/output data */
   generic_buffers input, output = {0};
@@ -843,26 +828,17 @@ TEST (ne_libnpuhost_test, request_decoupled_apis) {
 TEST (ne_libnpuhost_test, request_get_model) {
   npudev_h dev;
   uint32_t modelid, modelid2;
-
-  std::string model_dir (NE_DATADIR);
-  model_dir += "/testdata/TRIV235_2TOPS/CONV_2D_000";
-
+  generic_buffer model;
+  std::string model_dir (BASIC_TEST_MODEL);
   std::string model_path = model_dir + "/model.tvn";
+  int req_id;
 
-  off_t model_size = get_file_size (model_path.c_str ());
-  if (model_size <= 0)
-    /* skip */
+  /* skip if the test model is not available */
+  if (!create_test_model (model_path.c_str (), &model))
     return;
 
-  generic_buffer modelfile;
-  modelfile.type = BUFFER_FILE;
-  modelfile.filepath = model_path.c_str ();
-  modelfile.size = model_size;
-
   ASSERT_EQ (getNPUdeviceByTypeAny (&dev, NPUCOND_TRIV2_CONN_SOCIP, 2), 0);
-  ASSERT_EQ (registerNPUmodel (dev, &modelfile, &modelid), 0);
-
-  int req_id;
+  ASSERT_EQ (registerNPUmodel (dev, &model, &modelid), 0);
   ASSERT_EQ (createNPU_request (dev, modelid, &req_id), 0);
 
   EXPECT_EQ (getNPU_requestModel (dev, req_id, &modelid2), 0);
@@ -870,6 +846,7 @@ TEST (ne_libnpuhost_test, request_get_model) {
 
   ASSERT_EQ (removeNPU_request (dev, req_id), 0);
   ASSERT_EQ (unregisterNPUmodel (dev, modelid), 0);
+
   putNPUdevice (dev);
 }
 
@@ -879,34 +856,29 @@ TEST (ne_libnpuhost_test, request_get_model) {
 TEST (ne_libnpuhost_test, request_get_model_n) {
   npudev_h dev;
   uint32_t modelid;
+  generic_buffer model;
+  std::string model_dir (BASIC_TEST_MODEL);
+  std::string model_path = model_dir + "/model.tvn";
   int req_id;
 
+  /* skip if the test model is not available */
+  if (!create_test_model (model_path.c_str (), &model))
+    return;
+
   ASSERT_EQ (getNPUdeviceByTypeAny (&dev, NPUCOND_TRIV2_CONN_SOCIP, 2), 0);
+
   /* invalid req_id */
   EXPECT_NE (getNPU_requestModel (dev, -1, &modelid), 0);
 
-  std::string model_dir (NE_DATADIR);
-  model_dir += "/testdata/TRIV235_2TOPS/CONV_2D_000";
-
-  std::string model_path = model_dir + "/model.tvn";
-
-  off_t model_size = get_file_size (model_path.c_str ());
-  if (model_size <= 0)
-    /* skip */
-    return;
-
-  generic_buffer modelfile;
-  modelfile.type = BUFFER_FILE;
-  modelfile.filepath = model_path.c_str ();
-  modelfile.size = model_size;
-
-  ASSERT_EQ (registerNPUmodel (dev, &modelfile, &modelid), 0);
+  ASSERT_EQ (registerNPUmodel (dev, &model, &modelid), 0);
   ASSERT_EQ (createNPU_request (dev, modelid, &req_id), 0);
+
   /* empty modelid */
   EXPECT_NE (getNPU_requestModel (dev, req_id, nullptr), 0);
 
   ASSERT_EQ (removeNPU_request (dev, req_id), 0);
   ASSERT_EQ (unregisterNPUmodel (dev, modelid), 0);
+
   putNPUdevice (dev);
 }