[Convert] Add test case with videosrctest
authorMyungJoo Ham <myungjoo.ham@samsung.com>
Thu, 17 May 2018 09:11:40 +0000 (18:11 +0900)
committer함명주/동작제어Lab(SR)/Principal Engineer/삼성전자 <myungjoo.ham@samsung.com>
Fri, 18 May 2018 01:14:28 +0000 (10:14 +0900)
TODO: Add png based test, which fails with the current code (we need to fix it!)

Signed-off-by: MyungJoo Ham <myungjoo.ham@samsung.com>
convert2tensor/test/.gitignore [new file with mode: 0644]
convert2tensor/test/generateGoldenTestResult.py [new file with mode: 0755]
convert2tensor/test/runTest.sh [new file with mode: 0755]
convert2tensor/test/testcase01.sh [new file with mode: 0755]

diff --git a/convert2tensor/test/.gitignore b/convert2tensor/test/.gitignore
new file mode 100644 (file)
index 0000000..07d04a6
--- /dev/null
@@ -0,0 +1,2 @@
+*.log
+*.golden
diff --git a/convert2tensor/test/generateGoldenTestResult.py b/convert2tensor/test/generateGoldenTestResult.py
new file mode 100755 (executable)
index 0000000..a3debd4
--- /dev/null
@@ -0,0 +1,195 @@
+#!/usr/bin/env python
+# Copyright (C) 2018 Samsung Electronics
+# License: Apache-2.0
+#
+# @file generateGoldenTestResult.py
+# @brief Generate golden test results for test cases
+# @author MyungJoo Ham <myungjoo.ham@samsung.com>
+
+from __future__ import print_function
+
+from struct import *
+
+# Returns: (string, string_size, expected_size)
+# If string_size < expected_size, you do not need to check the results offset >= string_size.
+# string: binary string (b'\xff\x00....')
+def genCase01_RGB():
+    string = ""
+    string_size = 0
+    expected_size = 280 * 40 * 3
+    for i in range (0, 26):
+        # White
+        string_size = string_size + 40
+        for j in range (0, 40):
+            string += pack('BBB', 255, 255, 255)
+        # Yellow
+        string_size = string_size + 40
+        for j in range (0, 40):
+            string += pack('BBB', 255, 255, 0)
+        # Light Blue
+        string_size = string_size + 40
+        for j in range (0, 40):
+            string += pack('BBB', 0, 255, 255)
+        # Green
+        string_size = string_size + 40
+        for j in range (0, 40):
+            string += pack('BBB', 0, 255, 0)
+        # Purple
+        string_size = string_size + 40
+        for j in range (0, 40):
+            string += pack('BBB', 255, 0, 255)
+        # Red
+        string_size = string_size + 40
+        for j in range (0, 40):
+            string += pack('BBB', 255, 0, 0)
+        # Blue
+        string_size = string_size + 40
+        for j in range (0, 40):
+            string += pack('BBB', 0, 0, 255)
+    for i in range (26, 30):
+        # Blue
+        string_size = string_size + 40
+        for j in range (0, 40):
+            string += pack('BBB', 0, 0, 255)
+        # Black
+        string_size = string_size + 40
+        for j in range (0, 40):
+            string += pack('BBB', 0, 0, 0)
+        # Purple
+        string_size = string_size + 40
+        for j in range (0, 40):
+            string += pack('BBB', 255, 0, 255)
+        # Black
+        string_size = string_size + 40
+        for j in range (0, 40):
+            string += pack('BBB', 0, 0, 0)
+        # Light Blue
+        string_size = string_size + 40
+        for j in range (0, 40):
+            string += pack('BBB', 0, 255, 255)
+        # Black
+        string_size = string_size + 40
+        for j in range (0, 40):
+            string += pack('BBB', 0, 0, 0)
+        # White
+        string_size = string_size + 40
+        for j in range (0, 40):
+            string += pack('BBB', 255, 255, 255)
+    for i in range (0, 46):
+        # Dark Blue
+        string_size = string_size + 46
+        string += pack('BBB', 0, 0, 128)
+    for i in range (46, 93):
+        # White
+        string_size = string_size + 47
+        string += pack('BBB', 255, 255, 255)
+    for i in range (93, 140):
+        # Gray Blue
+        string_size = string_size + 47
+        string += pack('BBB', 0, 128, 255)
+    for i in range (140, 186):
+        # Black
+        string_size = string_size + 46
+        string += pack('BBB', 0, 0, 0)
+    for i in range (186, 210):
+        # Dark Gray
+        string_size = string_size + 24
+        string += pack('BBB', 19, 19, 19)
+    # We do not check the reset pixels: they are randomly generated.
+    string_size = string_size * 3
+    return (string, string_size, expected_size)
+
+def genCase01_BGRx():
+    string = ""
+    string_size = 0
+    expected_size = 280 * 40 * 4
+    for i in range (0, 26):
+        # White
+        string_size = string_size + 40
+        for j in range (0, 40):
+            string += pack('BBBB', 255, 255, 255, 255)
+        # Yellow
+        string_size = string_size + 40
+        for j in range (0, 40):
+            string += pack('BBBB', 0, 255, 255, 255)
+        # Light Blue
+        string_size = string_size + 40
+        for j in range (0, 40):
+            string += pack('BBBB', 255, 255, 0, 255)
+        # Green
+        string_size = string_size + 40
+        for j in range (0, 40):
+            string += pack('BBBB', 0, 255, 0, 255)
+        # Purple
+        string_size = string_size + 40
+        for j in range (0, 40):
+            string += pack('BBBB', 255, 0, 255, 255)
+        # Red
+        string_size = string_size + 40
+        for j in range (0, 40):
+            string += pack('BBBB', 0, 0, 255, 255)
+        # Blue
+        string_size = string_size + 40
+        for j in range (0, 40):
+            string += pack('BBBB', 255, 0, 0, 255)
+    for i in range (26, 30):
+        # Blue
+        string_size = string_size + 40
+        for j in range (0, 40):
+            string += pack('BBBB', 255, 0, 0, 255)
+        # Black
+        string_size = string_size + 40
+        for j in range (0, 40):
+            string += pack('BBBB', 0, 0, 0, 255)
+        # Purple
+        string_size = string_size + 40
+        for j in range (0, 40):
+            string += pack('BBBB', 255, 0, 255, 255)
+        # Black
+        string_size = string_size + 40
+        for j in range (0, 40):
+            string += pack('BBBB', 0, 0, 0, 255)
+        # Light Blue
+        string_size = string_size + 40
+        for j in range (0, 40):
+            string += pack('BBBB', 255, 255, 0, 255)
+        # Black
+        string_size = string_size + 40
+        for j in range (0, 40):
+            string += pack('BBBB', 0, 0, 0, 255)
+        # White
+        string_size = string_size + 40
+        for j in range (0, 40):
+            string += pack('BBBB', 255, 255, 255, 255)
+    for i in range (0, 46):
+        # Dark Blue
+        string_size = string_size + 46
+        string += pack('BBBB', 128, 0, 0, 255)
+    for i in range (46, 93):
+        # White
+        string_size = string_size + 47
+        string += pack('BBBB', 255, 255, 255, 255)
+    for i in range (93, 140):
+        # Gray Blue
+        string_size = string_size + 47
+        string += pack('BBBB', 255, 128, 0, 255)
+    for i in range (140, 186):
+        # Black
+        string_size = string_size + 46
+        string += pack('BBBB', 0, 0, 0, 255)
+    for i in range (186, 210):
+        # Dark Gray
+        string_size = string_size + 24
+        string += pack('BBBB', 19, 19, 19, 255)
+    # We do not check the reset pixels: they are randomly generated.
+    string_size = string_size * 4
+    return (string, string_size, expected_size)
+
+
+def write(filename, string):
+    newfile = open(filename, 'wb')
+    newfile.write(string)
+
+write('testcase01.rgb.golden', genCase01_RGB()[0])
+write('testcase01.bgrx.golden', genCase01_BGRx()[0])
+
diff --git a/convert2tensor/test/runTest.sh b/convert2tensor/test/runTest.sh
new file mode 100755 (executable)
index 0000000..f6b0502
--- /dev/null
@@ -0,0 +1,23 @@
+#!/usr/bin/env bash
+
+failed=0
+
+python generateGoldenTestResult.py
+./testcase01.sh $1 || (echo Testcase 01: FAILED; failed=1)
+
+
+echo ""
+echo ""
+echo "=================================================="
+echo "            Test for tensor_converter"
+echo "=================================================="
+if [ "$failed" -eq "0" ]
+then
+  echo SUCCESS
+  echo ""
+  exit 0
+else
+  echo FAILED
+  echo ""
+  exit -1
+fi
diff --git a/convert2tensor/test/testcase01.sh b/convert2tensor/test/testcase01.sh
new file mode 100755 (executable)
index 0000000..2446c2f
--- /dev/null
@@ -0,0 +1,26 @@
+#!/usr/bin/env bash
+if [ $# -eq 0 ]
+then
+  PATH_TO_PLUGIN="$PWD/../build"
+else
+  PATH_TO_PLUGIN="$1"
+fi
+
+failed=0
+
+# Generate one frame only (num-buffers=1)
+
+gst-launch-1.0 --gst-plugin-path=${PATH_TO_PLUGIN} videotestsrc num-buffers=1 ! video/x-raw,format=RGB,width=280,height=40,framerate=0/1 ! tee name=t ! queue ! videoconvert ! video/x-raw, format=BGRx ! convert2tensor ! filesink location="test.bgrx.log" sync=true t. ! queue ! filesink location="test.rgb.log" sync=true || failed=1
+
+# Check the results (test.rgb.log, test.bgrx.log)
+cmp -n `stat --printf="%s" testcase01.bgrx.golden` test.bgrx.log testcase01.bgrx.golden || failed=1
+cmp -n `stat --printf="%s" testcase01.rgb.golden` test.rgb.log testcase01.rgb.golden  ||  failed=1
+
+if [ "$failed" -eq "0" ]
+then
+  echo Testcase 01: SUCCESS
+  exit 0
+else
+  echo Testcase 01: FAILED
+  exit -1
+fi