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/meta/README.md b/scripts/flog/meta/README.md
new file mode 100644
index 0000000..01916fd
--- /dev/null
+++ b/scripts/flog/meta/README.md
@@ -0,0 +1,29 @@
+# -----------------------------------------------------------------------
+## PATCH: olt app
+## ACTION: Build an ONOS image
+# -----------------------------------------------------------------------
+
+## -----------------------------------------------------------------------
+## Default tests
+## -----------------------------------------------------------------------
+ * https://jenkins.opencord.org/view/VOLTHA-2.X-Tests/job/periodic-voltha-multi-uni-multiple-olts-test-bbsim/
+
+## -----------------------------------------------------------------------
+## Periodic
+## Regression
+## -----------------------------------------------------------------------
+ * https://jenkins.opencord.org/view/VOLTHA-2.X-Tests/job/periodic-voltha-openonu-go-test-bbsim
+ * https://jenkins.opencord.org/view/VOLTHA-2.X-Tests/job/periodic-voltha-multiple-olts-test-bbsim
+ * https://jenkins.opencord.org/view/VOLTHA-2.X-Tests/job/periodic-voltha-multiple-olts-openonu-go-test-bbsim
+
+## -----------------------------------------------------------------------
+## All tests
+## -----------------------------------------------------------------------
+ * https://jenkins.opencord.org/view/VOLTHA-2.X-Tests/
+
+## -----------------------------------------------------------------------
+## [SEE ALSO]
+## -----------------------------------------------------------------------
+ * https://jira.opencord.org/browse/VOL-4805
+
+# [EOF]
diff --git a/scripts/flog/meta/__init__.py b/scripts/flog/meta/__init__.py
new file mode 100644
index 0000000..b8a587e
--- /dev/null
+++ b/scripts/flog/meta/__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/all b/scripts/flog/meta/all
new file mode 100644
index 0000000..05d50c4
--- /dev/null
+++ b/scripts/flog/meta/all
@@ -0,0 +1,7 @@
+## ---------------------------------------------------------------------------
+## Default test suites
+## ---------------------------------------------------------------------------
+
+https://jenkins.opencord.org/view/VOLTHA-2.X-Tests/
+
+# [EOF]
diff --git a/scripts/flog/meta/olt b/scripts/flog/meta/olt
new file mode 100644
index 0000000..b56b7ff
--- /dev/null
+++ b/scripts/flog/meta/olt
@@ -0,0 +1,7 @@
+## ---------------------------------------------------------------------------
+## ONOS/OLT Test Suites
+## ---------------------------------------------------------------------------
+
+https://jenkins.opencord.org/view/VOLTHA-2.X-Tests/job/periodic-voltha-multi-uni-multiple-olts-test-bbsim
+
+# [EOF]
diff --git a/scripts/flog/meta/regression b/scripts/flog/meta/regression
new file mode 100644
index 0000000..8cf00f8
--- /dev/null
+++ b/scripts/flog/meta/regression
@@ -0,0 +1,9 @@
+## -----------------------------------------------------------------------
+## Regresison tests
+## -----------------------------------------------------------------------
+
+https://jenkins.opencord.org/view/VOLTHA-2.X-Tests/job/periodic-voltha-openonu-go-test-bbsim
+https://jenkins.opencord.org/view/VOLTHA-2.X-Tests/job/periodic-voltha-multiple-olts-test-bbsim
+https://jenkins.opencord.org/view/VOLTHA-2.X-Tests/job/periodic-voltha-multiple-olts-openonu-go-test-bbsim
+
+# [EOF]
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]
diff --git a/scripts/flog/meta/voltha.py b/scripts/flog/meta/voltha.py
new file mode 100644
index 0000000..fd0410e
--- /dev/null
+++ b/scripts/flog/meta/voltha.py
@@ -0,0 +1,98 @@
+#!/usr/bin/env python
+'''Return voltha test suites based on criteria.'''
+
+# -----------------------------------------------------------------------#
+# 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 [---##
+##-------------------##
+from pathlib import Path
+from flog.main import utils as main_utils
+
+
+class Utils():
+ """ . """
+
+ ## -----------------------------------------------------------------------
+ ## -----------------------------------------------------------------------
+ def __init__(self, root=None):
+ """Module constructor
+
+ :param data: A data source (often a certificate) to extract hostnames from.
+ :type data: arbitrary
+
+ :raises: ValueError
+ """
+
+ return
+
+ ## -----------------------------------------------------------------------
+ ## -----------------------------------------------------------------------
+ def filecat(self, name:str) -> list:
+ '''Slurp contents of a config file in the meta/ directory.
+
+ :param name: Config file name to read.
+ :type name: str
+
+ :return: Config file contents with comments and whitespace removed.
+ :rtype: list
+ '''
+
+ mod_path = Path(__file__).resolve().parent.as_posix()
+ meta = Path(mod_path + '/' + name)
+
+ ans = []
+ with open(meta, mode='r', encoding='utf-8') as stream:
+ for line in stream:
+ fields = line.split('#')
+ val = fields[0].strip()
+ if len(val) > 2:
+ ans += [val]
+
+ return ans
+
+ ## -----------------------------------------------------------------------
+ ## -----------------------------------------------------------------------
+ def get(self, args:list) -> list:
+ '''Retrieve a list of tests from a named config file.
+
+ :param args: Config file names to load.
+ :type args: list[str]
+
+ :return: Value(s) loaded from config files.
+ :rtype: list
+
+ ..note: Default beahavior will return an exhaustive list of tests
+ ..note: rather than an empty list due to typos.
+ '''
+
+ meta = ['olt', 'regression']
+
+ ans = []
+ for arg in args:
+ if arg in meta:
+ ans += self.filecat(arg)
+ else:
+ ans += self.filecat('all')
+
+ return ans
+
+# [EOF]