VOL-4805
This script is an inital attempt at capturing and documenting testing
resources for interactive and programatic retrieval. Command line
arguments and eventual filesystem based detection will hints for a
suite of tests to run to evaluate VOLTHA code changes.
make check: run python unit tests
usage:
% flog.py --help
% flog.py --usage
% flog.py --type regression
% flog.py --attr olt
Recreate patch: start over
o approval given by: daf & torsten
o a cycle of squashing roaches reported by lint checking resulted
in multiple conflicting patches in gerrit. Abandon the mess and
submit a clean patch.
o Only delta introduced is using the updated standard copyright notice.
o git merge to get branch and master back in sync.
Change-Id: I24292f2b72d134879939f43a84b31ab153d10fa9
diff --git a/scripts/flog/main/argparse.py b/scripts/flog/main/argparse.py
new file mode 100644
index 0000000..01cdc4b
--- /dev/null
+++ b/scripts/flog/main/argparse.py
@@ -0,0 +1,181 @@
+# -*- python -*-
+'''A module for parsing script command line arguments.
+
+..seealso: https://docs.python.org/3/library/argparse.html##
+'''
+
+# -----------------------------------------------------------------------
+# 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 [---##
+##-------------------##
+ARGV = None
+namespace = None
+
+##-------------------##
+##---] IMPORTS [---##
+##-------------------##
+import argparse
+
+from flog.main import utils as main_utils
+from flog.main import help as main_help
+
+## -----------------------------------------------------------------------
+## -----------------------------------------------------------------------
+def get_argv():
+ """Retrieve parsed command line switches.
+
+ ..pre: getopts() was called earlier.
+
+ :return: Parsed command line argument storage
+ :rtype : dict
+ """
+
+ global ARGV
+ global namespace
+
+ if ARGV is None:
+ # Normalize argspace/namespace into a getopt/dictionary
+ # Program wide syntax edits needed: args['foo'] => args.foo
+ arg_dict = {}
+ for arg in vars(namespace):
+ arg_dict[arg] = getattr(namespace, arg)
+ ARGV = arg_dict
+
+ return ARGV
+
+## -----------------------------------------------------------------------
+## -----------------------------------------------------------------------
+def getopts(argv, debug=None) -> None:
+ """Parse command line args, check options and pack into a hashmap
+
+ :param argv: values passed on the command line
+ :param debug: optional flag to enable debug mode
+
+ :return: Digested command line arguments
+ :rtype : dict
+
+ :raises ValueError
+
+ .. versionadded:: 1.0
+ """
+
+ global namespace
+
+ iam = main_utils.iam()
+
+ if debug is None:
+ debug = False
+
+ parser = argparse.ArgumentParser\
+ (
+ description = '''Report test dependencies based on selection criteria.'''
+ # epilog = 'extra-help-text'
+ )
+
+ ## -----------------------------------------------------------------------
+ ## [TEST: categories]
+ ## -----------------------------------------------------------------------
+ parser.add_argument('--attr',
+ action = 'append',
+ default = [],
+ choices=\
+ [
+ 'olt', # optical line termination
+ #
+ 'onu', # optical network unit
+ #
+ 'epon',
+ 'pon', # passive optical network
+ 'gpon', # gigabit-pon
+ 'xpon',
+ ],
+ help = 'Enable testing by attribute',
+ )
+
+ ## -----------------------------------------------------------------------
+ ## [TEST:types]
+ ## -----------------------------------------------------------------------
+ parser.add_argument('--type',
+ action = 'append',
+ default = [],
+ choices=\
+ [
+ 'burnin', # profile, stress testing
+ 'integration', # trigger inter-dependencies
+ 'oink', # kitchen sink testing
+ 'regression', # have we broken the renaissance ?
+ 'scale', #
+ 'system', #
+ 'smoke', # quick: 60s > [n]
+ 'standalone', # dependency-less tests
+ 'suite', #
+ 'unit', # module/api/narrow focus.
+ ],
+ help = 'Enable testing by category',
+ )
+
+ ## -----------------------------------------------------------------------
+ ## [FILTER]
+ ## -----------------------------------------------------------------------
+ parser.add_argument('--excl',
+ action = 'append',
+ default = [],
+ help = 'FILTER: Probe resources to exclude',
+ )
+ parser.add_argument('--incl',
+ action = 'append',
+ default = [],
+ help = 'FILTER: Probe resources to include',
+ )
+
+ ## -----------------------------------------------------------------------
+ ## [MODES]
+ ## -----------------------------------------------------------------------
+ parser.add_argument('--debug',
+ action = 'store_true',
+ default = False,
+ help = 'Enable debug mode',
+ )
+
+ parser.add_argument('--trace',
+ action = 'append',
+ default = [],
+ help = 'Enable python debugging to trace a named resource.',
+ )
+
+ parser.add_argument('--usage',
+ action = 'store_true',
+ default = False,
+ help = 'Show usage examples',
+ )
+
+ parser.add_argument('--version', action='version', version='%(prog)s 1.0')
+
+
+ namespace = parser.parse_args()
+
+ # --------------------------------------------------------------
+ # [TODO] update --usage to accept a value, display context help.
+ # --------------------------------------------------------------
+ if namespace.usage:
+ main_help.usage()
+
+ return
+
+# [EOF]
+