Revert "test: Remove complicated JSON->shell dict logic"

This reverts commit 60b4d237fb9f56ee86c14147af3db61209f99717.

Using a bash associative array provides a significant performance
improvement (~40s / 43% reduction). Re-add that functionality but use jq
to do the processing instead of python.

Change-Id: Ib49cf69676c3187ceb1e26ac1ca3686609484036
diff --git a/test/lib/lib_helper.sh b/test/lib/lib_helper.sh
index cccf432..5c834d4 100644
--- a/test/lib/lib_helper.sh
+++ b/test/lib/lib_helper.sh
@@ -34,13 +34,10 @@
     result "$name" "$(diff <(echo "$expected") <(echo "$actual"))"
 }
 
-result_root() { # group root expected_file actual
+result_root() { # group root
     local root=$(echo "$2" | sed -es'/Root //')
     local name="$1 - $root"
-    local expected_file=$3 actual=$4
-    local expected_root=$(json_val_by_key "$(cat "$expected_file")" "$root")
-    local actual_root=$(json_val_by_key "$actual" "$root")
-    result_out "$name" "$expected_root" "$actual_root"
+    result_out "$name" "${EXPECTED_ROOTS[$root]}" "${OUTPUT_ROOTS[$root]}"
 }
 
 # -------- Git Config
@@ -245,6 +242,23 @@
 strip_non_applicable() { ensure "$MYDIR"/strip_non_applicable.py ; } # < json > json
 strip_non_invalid() { ensure "$MYDIR"/strip_non_invalid.py ; } # < json > json
 
+define_jsonByRoot() { # task_plugin_ouptut > jsonByRoot_array_definition
+    local record root=''
+    local -A jsonByRoot
+    while IFS= read -r -d '' record ; do
+        if [ -z "$root" ] ; then
+            root=$record
+        else
+            jsonByRoot[$root]=$record
+            root=''
+        fi
+    done < <(jq -r --indent 3 --sort-keys \
+        '.plugins[0].roots[] | "\(.name)\u0000\(.)\u0000"')
+
+    local def=$(declare -p jsonByRoot)
+    echo "${def#*=}" # declare -A jsonByRoot='(...)' > '(...)'
+}
+
 get_plugins() { # < change_json > plugins_json
     jq --indent 3 --sort-keys '{plugins: .plugins}'
 }
@@ -314,9 +328,12 @@
 results_suite() { # name expected_file plugins_json
     local name=$1 expected_file=$2 actual=$3
 
+    local -A EXPECTED_ROOTS=$(define_jsonByRoot < "$expected_file")
+    local -A OUTPUT_ROOTS=$(echo "$actual" | define_jsonByRoot)
+
     local out root
     echo "$ROOTS" | while read root ; do
-        result_root "$name" "$root" "$expected_file" "$actual"
+        result_root "$name" "$root"
     done
     out=$(diff "$expected_file" <(echo "$actual") | head -15)
     [ -z "$out" ]