|  | #!/usr/bin/env python3 | 
|  |  | 
|  | import collections | 
|  |  | 
|  | import gen_cmd as gc | 
|  | import gen_print as gp | 
|  |  | 
|  | module_names = [ | 
|  | "Selenium2Library", | 
|  | "SeleniumLibrary", | 
|  | "SSHLibrary", | 
|  | "requests", | 
|  | "XvfbRobot", | 
|  | "robotremoteserver", | 
|  | "redfish", | 
|  | ] | 
|  |  | 
|  | import_versions = collections.OrderedDict() | 
|  |  | 
|  | for module_name in module_names: | 
|  | try: | 
|  | cmd_buf = "import " + module_name | 
|  | exec(cmd_buf) | 
|  | cmd_buf = ( | 
|  | "import_versions['" | 
|  | + module_name | 
|  | + "'] = " | 
|  | + module_name | 
|  | + ".__version__" | 
|  | ) | 
|  | exec(cmd_buf) | 
|  | except ImportError: | 
|  | import_versions[module_name] = "Not installed" | 
|  |  | 
|  |  | 
|  | def software_versions(): | 
|  | r""" | 
|  | Get the versions for several of the software packages used by | 
|  | openbmc-test-automation and return as a dictionary. | 
|  |  | 
|  | Example call: | 
|  | ${software_versions}=  Software Versions | 
|  | Rprint Vars  software_versions | 
|  |  | 
|  | Example output: | 
|  | software_versions: | 
|  | [python]:                                       Python 2.7.12 | 
|  | [robot]:                                        Robot Framework 3.1.2 (Python 3.6.8 on linux) | 
|  | [firefox]:                                      Mozilla Firefox 54.0 | 
|  | [google-chrome]:                                Not installed | 
|  | [Selenium2Library]:                             3.0.0 | 
|  | [SeleniumLibrary]:                              3.3.1 | 
|  | [SSHLibrary]:                                   3.3.0 | 
|  | [requests]:                                     2.22.0 | 
|  | [XvfbRobot]:                                    1.2.2 | 
|  | [robotremoteserver]:                            1.1 | 
|  | [redfish]:                                      2.1.1 | 
|  | [robotframework-angularjs]:                     0.0.10 | 
|  | [robotframework-scplibrary]:                    1.2.0 | 
|  | [robotframework-extendedselenium2library]:      0.9.1 | 
|  | [host OS]:                                      Ubuntu 16.04.6 LTS | 
|  | """ | 
|  |  | 
|  | quiet = 1 | 
|  | versions = collections.OrderedDict() | 
|  | for package in ["python", "python3", "robot", "firefox", "google-chrome"]: | 
|  | # Note: "robot --version" returns 0x00000000000000fb. | 
|  | # Note: If package does not exist, 0x7f is returned. | 
|  | rc, version = gc.shell_cmd( | 
|  | package + " --version", valid_rcs=[0, 0x7F, 0xFB] | 
|  | ) | 
|  | versions[package] = ( | 
|  | "Not installed" if rc == 0x7F else version.rstrip("\n") | 
|  | ) | 
|  |  | 
|  | versions.update(import_versions) | 
|  |  | 
|  | for package in [ | 
|  | "robotframework-angularjs", | 
|  | "robotframework-scplibrary", | 
|  | "robotframework-extendedselenium2library", | 
|  | ]: | 
|  | rc, version = gc.shell_cmd( | 
|  | "pip3 show " + package + " | grep Version | sed -re 's/.*: //g'" | 
|  | ) | 
|  | versions[package] = ( | 
|  | "Not installed" if not version else version.rstrip("\n") | 
|  | ) | 
|  |  | 
|  | rc, version = gc.shell_cmd("lsb_release -d -s") | 
|  | versions["host OS"] = "Failed" if not version else version.rstrip("\n") | 
|  | return versions |