diff --git a/scripts/flog/meta/test/__init__.py b/scripts/flog/meta/test/__init__.py
new file mode 100644
index 0000000..4b4c0b2
--- /dev/null
+++ b/scripts/flog/meta/test/__init__.py
@@ -0,0 +1,37 @@
+# -*- python -*-
+"""Augment module searchpath and existence indicates directory is a module."""
+
+# -----------------------------------------------------------------------
+# Copyright 2022 Open Networking Foundation (ONF) and the ONF Contributors
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+# -----------------------------------------------------------------------
+
+##-------------------##
+##---]  IMPORTS  [---##
+##-------------------##
+import sys
+from pathlib import Path
+
+## ---------------------------------------
+## Artificial scope created for local vars
+## ---------------------------------------
+# pylint: disable=invalid-name
+# pylint: disable=using-constant-test
+if True:
+    root = '../../..'
+    mod_path = Path(root).resolve().as_posix()
+    if mod_path not in sys.path:
+        sys.path.insert(0, mod_path)
+
+# [EOF]
diff --git a/scripts/flog/meta/test/test_voltha.py b/scripts/flog/meta/test/test_voltha.py
new file mode 100644
index 0000000..d69f38f
--- /dev/null
+++ b/scripts/flog/meta/test/test_voltha.py
@@ -0,0 +1,71 @@
+#!/usr/bin/env python
+'''Unit test for meta/voltha.py'''
+
+# -----------------------------------------------------------------------
+# Copyright 2022 Open Networking Foundation (ONF) and the ONF Contributors
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+# -----------------------------------------------------------------------
+
+##-------------------##
+##---]  GLOBALS  [---##
+##-------------------##
+
+##-------------------##
+##---]  IMPORTS  [---##
+##-------------------##
+import unittest
+
+from flog.main         import utils           as main_utils
+from flog.meta         import voltha
+
+
+class TestStringMethods(unittest.TestCase):
+
+    ## -----------------------------------------------------------------------
+    ## -----------------------------------------------------------------------
+    def test_by_all(self):
+        '''Verify result of default test lookup.'''
+
+        exp = ['https://jenkins.opencord.org/view/VOLTHA-2.X-Tests/']
+        for arg in ['all', 'invalid']:
+            got = voltha.Utils().get([arg])
+            self.assertCountEqual(got, exp)
+            
+    ## -----------------------------------------------------------------------
+    ## -----------------------------------------------------------------------
+    def test_by_olt(self):
+        '''Verify result of test lookup by string arg 'olt'.''' 
+
+        exp = 'periodic-voltha-multi-uni-multiple-olts-test-bbsim'
+        for arg in ['olt']:
+            got = voltha.Utils().get([arg])
+            self.assertEqual(len(got), 1)
+            self.assertIn(exp, got[0])
+
+    ## -----------------------------------------------------------------------
+    ## -----------------------------------------------------------------------
+    def test_by_regression(self):
+        '''Verify result of test lookup by string arg 'regression.'''
+
+        for arg in ['regression']:
+            got = voltha.Utils().get([arg])
+            self.assertTrue(len(got) > 2)
+        
+##----------------##
+##---]  MAIN  [---##
+##----------------##
+if __name__ == "__main__":
+    main()
+
+# [EOF]
