[UNITTEST] Fix dummy model metadata and callback check
authorDongju Chae <dongju.chae@samsung.com>
Tue, 5 Nov 2019 02:25:01 +0000 (11:25 +0900)
committer임근식/On-Device Lab(SR)/Principal Engineer/삼성전자 <geunsik.lim@samsung.com>
Fri, 8 Nov 2019 07:39:05 +0000 (16:39 +0900)
This commit fixes the metadata of dummy models and callback check routine.

Signed-off-by: Dongju Chae <dongju.chae@samsung.com>
src/test/unittests/ne_core_handler_test.cpp
src/test/unittests/ne_core_inf_test.cpp

index a44415e..9e0b144 100644 (file)
@@ -25,7 +25,6 @@ extern "C"
 }
 
 /** configuration to fill the model meta */
-#define OFFSET_SIZE 8
 #define MAGICCODE 0x10101101
 
 static const hostHandlerInfo *host_handle = NULL;
@@ -38,18 +37,19 @@ static int generate_model (hwmem *mem, int model_num)
   void *ptr;
   npubin_meta meta;
 
+  /** it's dummay metdata; so output result is not checked */
   meta.magiccode = MAGICCODE;
   meta.model_id = model_num;
   meta.model_version = model_num;
-  meta.size = OFFSET_SIZE;
-  meta.buffer_size = OFFSET_SIZE;
-  meta.input_offset = OFFSET_SIZE;
-  meta.output_offset = OFFSET_SIZE;
-  meta.input_size = OFFSET_SIZE;
-  meta.output_size = OFFSET_SIZE;
+  meta.size = NPUBIN_META_SIZE * 3;
+  meta.buffer_size = NPUBIN_META_SIZE;
+  meta.input_offset = 0;
+  meta.output_offset = 0;
+  meta.input_size = NPUBIN_META_SIZE;
+  meta.output_size = NPUBIN_META_SIZE;
   meta.type = SMODEL_OPS_NPU;
-  meta.program_size = OFFSET_SIZE;
-  meta.weight_size = OFFSET_SIZE;
+  meta.program_size = NPUBIN_META_SIZE;
+  meta.weight_size = NPUBIN_META_SIZE;
 
   EXPECT_EQ (hwmem_activate(mem), 0);
   EXPECT_EQ (hwmem_get_data(mem, &ptr), 0);
@@ -103,9 +103,9 @@ TEST (ne_core_handler_test, register_models)
 
   EXPECT_EQ (init_ne_handler(), 0);
 
-  ASSERT_EQ (GET_MEM()->alloc (NPUBIN_META_SIZE, &mem[0]), 0);
+  ASSERT_EQ (GET_MEM()->alloc (NPUBIN_META_SIZE * 3, &mem[0]), 0);
   ASSERT_EQ (generate_model (mem[0], 0), 0);
-  ASSERT_EQ (GET_MEM()->alloc (NPUBIN_META_SIZE, &mem[1]), 0);
+  ASSERT_EQ (GET_MEM()->alloc (NPUBIN_META_SIZE * 3, &mem[1]), 0);
   ASSERT_EQ (generate_model (mem[1], 1), 0);
 
   /** verify registraion and unregistration */
@@ -140,15 +140,13 @@ TEST (ne_core_handler_test, start_stop_operation)
   void *ptr[2];
   int err;
   buffer *buffer_ptr;
-  buffer_state state;
-  uint64_t buffer_size = 100;
 
   EXPECT_EQ (init_ne_handler(), 0);
 
-  ASSERT_EQ (GET_MEM()->alloc (NPUBIN_META_SIZE, &mem[0]), 0);
+  ASSERT_EQ (GET_MEM()->alloc (NPUBIN_META_SIZE * 3, &mem[0]), 0);
   ASSERT_EQ (generate_model (mem[0], 0), 0);
 
-  ASSERT_EQ (GET_MEM()->alloc (NPUBIN_META_SIZE, &mem[1]), 0);
+  ASSERT_EQ (GET_MEM()->alloc (NPUBIN_META_SIZE * 3, &mem[1]), 0);
   ASSERT_EQ (generate_model (mem[1], 1), 0);
 
   /** registerModel() activates its hwmem */
@@ -180,7 +178,7 @@ TEST (ne_core_handler_test, start_stop_operation)
   EXPECT_EQ (host_handle->setOpMode(NPUINPUT_HOST, true, id[1], version[1],
         test_cb, ptr[1]), 0);
 
-  GET_MEM()->resize_buffers(buffer_size);
+  GET_MEM()->resize_buffers(NPUBIN_META_SIZE * 2);
   buffer_ptr = host_handle->getCurrentInputBuffer(NPUASYNC_WAIT, &err);
   EXPECT_EQ (err, 0);
   EXPECT_EQ (host_handle->validateBuffer(buffer_ptr), 0);
@@ -189,14 +187,6 @@ TEST (ne_core_handler_test, start_stop_operation)
   EXPECT_EQ (host_handle->setOpMode(NPUINPUT_STOP, true, id[1], version[1],
         test_cb, ptr[1]), 0);
 
-  /** clear up the buffer */
-  buffer_ptr = GET_MEM()->get_next_buffer(NPUASYNC_WAIT, BUFFER_ROLE_OUTPUT, &err);
-  EXPECT_EQ (err, 0);
-  /** change to EMPTY */
-  EXPECT_EQ (GET_MEM()->return_buffer(buffer_ptr), 0);
-  state = buffer_get_state (buffer_ptr);
-  EXPECT_EQ (state, BUFFER_STATE_EMPTY);
-
   /** unregisterModel() deactivates its hwmem */
   EXPECT_EQ (host_handle->unregisterModel(id[0], version[0]), 0);
   EXPECT_EQ (host_handle->unregisterModel(id[1], version[1]), 0);
index c0b1db1..016201e 100644 (file)
@@ -25,7 +25,6 @@ extern "C"
 }
 
 /** configuration to fill the model meta */
-#define OFFSET_SIZE 8
 #define MAGICCODE 0x10101101
 #define STOP_SLEEP 1
 #define SLEEP_DURATION 2
@@ -34,6 +33,7 @@ extern "C"
 
 /** mutex for syncing and callback count verification */
 static pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
+static pthread_cond_t cond = PTHREAD_COND_INITIALIZER;
 static int callback_count;
 
 /**
@@ -52,15 +52,16 @@ static model * generate_model (hwmem *mem)
   EXPECT_NE (meta, nullptr);
   memset(meta, 0, sizeof (npubin_meta));
   meta->magiccode = MAGICCODE;
-  meta->buffer_size = OFFSET_SIZE;
-  meta->input_offset = OFFSET_SIZE;
-  meta->output_offset = OFFSET_SIZE;
-  meta->input_size = OFFSET_SIZE;
-  meta->output_size = OFFSET_SIZE;
+  meta->size = NPUBIN_META_SIZE * 3;
+  meta->buffer_size = NPUBIN_META_SIZE;
+  meta->input_offset = 0;
+  meta->output_offset = 0;
+  meta->input_size = NPUBIN_META_SIZE; 
+  meta->output_size = NPUBIN_META_SIZE;
   meta->type = SMODEL_OPS_NPU;
 
-  meta->program_size = OFFSET_SIZE;
-  meta->weight_size = OFFSET_SIZE;
+  meta->program_size = NPUBIN_META_SIZE;
+  meta->weight_size = NPUBIN_META_SIZE;
 
   model_ptr->meta = meta;
   model_ptr->memblock = mem;
@@ -93,6 +94,7 @@ void test_cb (buffer *buf, uint64_t offset, uint64_t size, void *data)
   EXPECT_EQ (model_ptr->meta->magiccode, MAGICCODE);
   pthread_mutex_lock (&mutex);
   callback_count += 1;
+  pthread_cond_broadcast (&cond);
   pthread_mutex_unlock (&mutex);
 
   buffer_ptr = GET_MEM()->get_next_buffer(NPUASYNC_WAIT, BUFFER_ROLE_OUTPUT, &err);
@@ -111,7 +113,7 @@ TEST (ne_core_inf_test, validation_without_data)
   model *model_ptr;
   hwmem *mem;
 
-  ASSERT_EQ (GET_MEM()->alloc (3 * 1000, &mem), 0);
+  ASSERT_EQ (GET_MEM()->alloc (NPUBIN_META_SIZE * 3, &mem), 0);
   model_ptr = generate_model (mem);
   ASSERT_NE (model_ptr, nullptr);
 
@@ -174,7 +176,7 @@ TEST (ne_core_inf_test, validation_with_data)
   int err;
   int size;
 
-  size = 3 * 1000;
+  size = NPUBIN_META_SIZE * 3;
 
   ASSERT_EQ (GET_MEM()->alloc (size, &mem), 0);
   model_ptr = generate_model (mem);
@@ -186,7 +188,7 @@ TEST (ne_core_inf_test, validation_with_data)
   /** correct start device */
   EXPECT_EQ (n4_start (SMODEL_OPS_NPU), 0);
   /** setup data */
-  GET_MEM()->resize_buffers(2);
+  GET_MEM()->resize_buffers(NPUBIN_META_SIZE * 5);
   buffer_ptr = GET_MEM()->get_next_buffer(NPUASYNC_WAIT, BUFFER_ROLE_INPUT, &err);
   EXPECT_EQ (err, 0);
   EXPECT_EQ (GET_MEM()->return_buffer(buffer_ptr), 0);
@@ -202,7 +204,7 @@ TEST (ne_core_inf_test, validation_with_data)
   /** correct start device */
   EXPECT_EQ (n4_start (SMODEL_OPS_NPU), 0);
   /** setup data */
-  GET_MEM()->resize_buffers(2);
+  GET_MEM()->resize_buffers(NPUBIN_META_SIZE * 4);
   buffer_ptr = GET_MEM()->get_next_buffer(NPUASYNC_WAIT, BUFFER_ROLE_INPUT, &err);
   EXPECT_EQ (err, 0);
   EXPECT_EQ (GET_MEM()->return_buffer(buffer_ptr), 0);
@@ -218,7 +220,7 @@ TEST (ne_core_inf_test, validation_with_data)
   /** correct start device */
   EXPECT_EQ (n4_start (SMODEL_OPS_NPU), 0);
   /** setup data */
-  GET_MEM()->resize_buffers(2);
+  GET_MEM()->resize_buffers(NPUBIN_META_SIZE * 3);
   buffer_ptr = GET_MEM()->get_next_buffer(NPUASYNC_WAIT, BUFFER_ROLE_INPUT, &err);
   EXPECT_EQ (GET_MEM()->return_buffer(buffer_ptr), 0);
   /** call n4_dataReady() here */
@@ -245,10 +247,7 @@ TEST (ne_core_inf_test, multiple_inputs)
   int err, size, idx;
   int num_callbacks;
 
-  size = 3 * 1000;
-  pthread_mutex_lock (&mutex);
-  callback_count = 0;
-  pthread_mutex_unlock (&mutex);
+  size = NPUBIN_META_SIZE * 3;
   num_callbacks = 10;
 
   ASSERT_EQ (GET_MEM()->alloc (size, &mem), 0);
@@ -260,7 +259,11 @@ TEST (ne_core_inf_test, multiple_inputs)
 
   /** correct start device */
   EXPECT_EQ (n4_start (SMODEL_OPS_NPU), 0);
-  GET_MEM()->resize_buffers(2);
+  GET_MEM()->resize_buffers(NPUBIN_META_SIZE * 2);
+
+  pthread_mutex_lock (&mutex);
+  callback_count = 0;
+  pthread_mutex_unlock (&mutex);
 
   for (idx = 0; idx < num_callbacks; idx ++) {
     /** setup data */
@@ -271,15 +274,15 @@ TEST (ne_core_inf_test, multiple_inputs)
     EXPECT_EQ (n4_dataReady(), 0);
   }
 
-  /** let all the callbacks be called */
-  sleep(SLEEP_DURATION);
-  /** correct stopping device */
-  EXPECT_EQ (n4_stop (SMODEL_OPS_NPU, STOP_WAIT), 0);
-  /** let stop be in effect and all the threads conclude */
-  sleep(STOP_SLEEP);
+  pthread_mutex_lock (&mutex);
+  while (callback_count != num_callbacks)
+    pthread_cond_wait (&cond, &mutex);
+  pthread_mutex_unlock (&mutex);
 
   EXPECT_EQ (callback_count, num_callbacks);
 
+  EXPECT_EQ (n4_stop (SMODEL_OPS_NPU, STOP_WAIT), 0);
+
   destroy_model(model_ptr);
   GET_MEM()->dealloc (mem);
 }