Revamped code for VPD parser

The commit removes all the pre-existing code from the branch
and pushes the revamped code.

Major modification includes:
- Movement from multi exe to single daemon model.
- Multithreaded approach to parse FRU VPD.
- Better error handling.
- Refactored code for performance optimization.

Note: This code supports all the existing functionalities as it is.

Change-Id: I1ddce1f0725ac59020b72709689a1013643bda8b
Signed-off-by: Sunny Srivastava <sunnsr25@in.ibm.com>
diff --git a/test/meson.build b/test/meson.build
index b400d6a..0def0f8 100644
--- a/test/meson.build
+++ b/test/meson.build
@@ -1,53 +1,70 @@
-if get_option('oe-sdk').allowed()
-  # Setup OE SYSROOT
-  OECORE_TARGET_SYSROOT = run_command('sh', '-c', 'echo $OECORE_TARGET_SYSROOT').stdout().strip()
-  if OECORE_TARGET_SYSROOT == ''
-      error('Unable to get $OECORE_TARGET_SYSROOT, check your environment.')
+gtest_dep = dependency('gtest', main: true, disabler: true, required: false)
+gmock_dep = dependency('gmock', disabler: true, required: false)
+libgpiodcxx = dependency(
+            'libgpiodcxx',
+            default_options: ['bindings=cxx'],
+        )
+if not gtest_dep.found() or not gmock_dep.found()
+    cmake = import('cmake')
+    gtest_opts = cmake.subproject_options()
+    gtest_opts.set_override_option('warning_level', '1')
+    gtest_opts.set_override_option('werror', 'false')
+    gtest_proj = cmake.subproject('googletest',
+                                  options: gtest_opts,
+                                  required: false)
+    if gtest_proj.found()
+        gtest_dep = declare_dependency(
+            dependencies: [
+                dependency('threads'),
+                gtest_proj.dependency('gtest'),
+                gtest_proj.dependency('gtest_main'),
+            ]
+        )
+        gmock_dep = gtest_proj.dependency('gmock')
+  else
+        assert(
+            not get_option('tests').allowed(),
+            'Googletest is required if tests are enabled'
+        )
   endif
-  message('OE_SYSROOT: ' + OECORE_TARGET_SYSROOT)
-  rpath = ':'.join([OECORE_TARGET_SYSROOT + '/lib', OECORE_TARGET_SYSROOT + '/usr/lib'])
-  ld_so = run_command('sh', '-c', 'find ' + OECORE_TARGET_SYSROOT + '/lib/ld-*.so | sort -r -n | head -n1').stdout().strip()
-  dynamic_linker = ['-Wl,-dynamic-linker,' + ld_so]
-else
-  dynamic_linker = []
 endif
-gmock = dependency('gmock', disabler: true, required: build_tests)
-gtest = dependency('gtest', main: true, disabler: true, required: build_tests)
-libgpiodcxx = dependency('libgpiodcxx', default_options: ['bindings=cxx'])
-dependecy_list = [gtest, gmock, sdbusplus, phosphor_logging, phosphor_dbus_interfaces, libgpiodcxx, nlohmann_json_dep]
 
-configuration_inc = include_directories('..', '../vpd-manager', 'vpd-manager-test', '../vpd-parser')
+parser_build_arguments = []
+if get_option('ipz_ecc_check').enabled()
+    parser_build_arguments += ['-DIPZ_ECC_CHECK']
+endif
 
-vpd_test = ['store/store.cpp',
-            'ipz_parser/parser.cpp',
-            'keyword_vpd_parser_test/kw_vpd_test.cpp',
-            'vpd-manager-test/reader_test.cpp',
-            'vpd-manager-test/editor_test.cpp'
+dependency_list = [gtest_dep, gmock_dep, sdbusplus, libgpiodcxx]
+
+configuration_inc = include_directories('..', '../vpd-manager/include', '../vpdecc')
+
+test_sources = [
+  '../vpd-manager/src/logger.cpp',
+  '../vpd-manager/src/ddimm_parser.cpp',
+  '../vpd-manager/src/parser.cpp',
+  '../vpd-manager/src/parser_factory.cpp',
+  '../vpd-manager/src/isdimm_parser.cpp',
+  '../vpd-manager/src/ipz_parser.cpp',
+  '../vpd-manager/src/keyword_vpd_parser.cpp',
+  '../vpd-manager/src/event_logger.cpp',
+  '../vpdecc/vpdecc.c'
 ]
 
-application_src =['../impl.cpp',
-                   '../vpd-parser/ipz_parser.cpp',
-                   '../ibm_vpd_utils.cpp',
-                   '../common_utility.cpp',
-                   '../vpd-manager/reader_impl.cpp',
-                   '../vpd-parser/keyword_vpd_parser.cpp',
-                   '../vpd-manager/editor_impl.cpp',
-                   '../vpd-parser/parser_factory.cpp',
-                   '../vpd-parser/memory_vpd_parser.cpp',
-                   '../vpd-parser/isdimm_vpd_parser.cpp'
-                  ]
+tests = [
+  'utest_utils.cpp',
+  'utest_keyword_parser.cpp',
+  'utest_ddimm_parser.cpp',
+  'utest_ipz_parser.cpp',
+  'utest_json_utility.cpp'
+]
 
-foreach t : vpd_test
-    test(t, executable(t.underscorify(),
-            [t, application_src],
-    build_rpath: get_option('oe-sdk').allowed() ? rpath : '',
-    link_args: dynamic_linker,
-    cpp_args: ['-DIPZ_PARSER', '-DManagerTest'],
-    c_args: ['-Wno-unused-parameter',
-      '-Wno-unused-variable'],
-    dependencies: dependecy_list,
-    include_directories: configuration_inc,
-    link_with : libvpdecc,
-    ),
-    workdir: meson.current_source_dir())
+foreach test_file : tests
+  test(test_file, executable(test_file.underscorify(),
+                     test_file,
+                     test_sources,
+                     include_directories: configuration_inc,
+                     dependencies: dependency_list,
+                     cpp_args: parser_build_arguments
+                     ),
+       workdir: meson.current_source_dir())
 endforeach