aboutsummaryrefslogtreecommitdiffstats
path: root/tests/collect_tests/help_output_tests.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/collect_tests/help_output_tests.py')
-rw-r--r--tests/collect_tests/help_output_tests.py104
1 files changed, 104 insertions, 0 deletions
diff --git a/tests/collect_tests/help_output_tests.py b/tests/collect_tests/help_output_tests.py
new file mode 100644
index 00000000..258bb8d7
--- /dev/null
+++ b/tests/collect_tests/help_output_tests.py
@@ -0,0 +1,104 @@
+# This file is part of the sos project: https://github.com/sosreport/sos
+#
+# This copyrighted material is made available to anyone wishing to use,
+# modify, copy, or redistribute it subject to the terms and conditions of
+# version 2 of the GNU General Public License.
+#
+# See the LICENSE file in the source distribution for further information.
+
+import glob
+import os
+import re
+
+from avocado.utils import software_manager
+from sos_tests import StageOneOutputTest, SOS_REPO_ROOT, skipIf
+
+installer = software_manager
+sm = installer.SoftwareManager()
+
+PEXPECT_PRESENT = sm.check_installed('python3-pexpect')
+
+
+class CollectHelpOutputTest(StageOneOutputTest):
+ """Ensure that --help is behaving as expected, based on if the placeholder
+ component is being used or not
+
+ Note that this is tagged for both stageone and stagetwo due to the config
+ of the GCE images used - pexpect is not normally installed, but we will
+ install it as part of the CirrusCI setup for stagetwo. This allows us to
+ perform checks for both the real and placeholder components in CI, without
+ creating a output tests for stagetwo, which would be silly for tests run on
+ contributor workstations
+
+ :avocado: tags=stageone,stagetwo
+ """
+
+ sos_cmd = 'collect --help'
+
+ @skipIf(PEXPECT_PRESENT, "python3-pexpect is installed, placeholder will not be used")
+ def test_placeholder_warning_shown(self):
+ self.assertOutputContains("WARNING: `collect` is not available with this installation!")
+
+ @skipIf(PEXPECT_PRESENT is False, "python3-pexpect not installed locally")
+ def test_help_sections_present(self):
+ self.assertOutputNotContains("WARNING: `collect` is not available with this installation!")
+ self.assertOutputContains("Global Options:")
+ self.assertOutputContains("Report Passthru Options:")
+ self.assertOutputContains("Collector Options:")
+
+
+class CollectOptionsHelpTest(StageOneOutputTest):
+ """Ensure that available cluster profiles and their options are printed
+
+ Note that this is tagged for both stageone and stagetwo due to the config
+ of the GCE images used - pexpect is not normally installed, but we will
+ install it as part of the CirrusCI setup for stagetwo. This allows us to
+ perform checks for both the real and placeholder components in CI, without
+ creating a output tests for stagetwo, which would be silly for tests run on
+ contributor workstations
+
+ :avocado: tags=stageone,stagetwo
+ """
+
+ _exception_expected = not PEXPECT_PRESENT
+ sos_cmd = 'collect --list-options'
+
+ @skipIf(PEXPECT_PRESENT is False, "python3-pexpect not installed locally")
+ def test_cluster_profiles_shown(self):
+ _out = re.search("Use the short name with --cluster-type or cluster options \(-c\)(.*?)The following cluster options are available:",
+ self.cmd_output.stdout, re.S).group(1).splitlines()
+ _profs = {}
+ for ln in _out:
+ if not ln:
+ continue
+ ln = [c for c in ln.lstrip().split(' ') if c]
+ _profs[ln[0]] = ln[1]
+
+ clusters = []
+ # get a list of names of profile pyfiles
+ for pyfile in glob.glob(os.path.join(SOS_REPO_ROOT, 'sos/collector/clusters/*.py')):
+ pyf = os.path.basename(pyfile)
+ if pyf.startswith('__'):
+ continue
+ clusters.append(pyf.split('.py')[0])
+
+ assert len(_profs.keys()) > 0, "No profiles detected in output"
+
+ # make sure each pyfile is reported for supported cluster types
+ # this has the secondary effect of enforcing a stylistic requirement
+ # where at least one profile must match the pyfile name
+ for clus in clusters:
+ assert clus in _profs, "Cluster '%s' not displayed in --list-options" % clus
+
+ @skipIf(PEXPECT_PRESENT is False, "python3-pexpect not installed locally")
+ def test_cluster_options_shown(self):
+ _opts = re.search(" Cluster Option Name Type Default Description(.*?)Options take the form of cluster.name=value",
+ self.cmd_output.stdout, re.S).group(1).splitlines()
+
+ _opts = [o for o in _opts if o]
+
+ assert _opts, "No option output detected"
+
+ @skipIf(PEXPECT_PRESENT, "python3-pexpect is installed, placeholder will be unused")
+ def test_placeholder_component_used(self):
+ self.assertOutputContains("(unavailable) Collect an sos report from multiple nodes")