Esempio n. 1
0
def test_store_rmspluginpath(mocker):
    mocker.patch("os.environ", {"RMS_PLUGINS_LIBRARY": "foo/bar/com"})
    runner = rr.RunRMS()
    assert "foo/bar/com" in runner.oldpluginspath
    assert runner.pluginspath is None

    mocker.patch("os.environ", {"PYTHONbarfPATH": "foo/bar/com"})
    runner = rr.RunRMS()
    assert runner.oldpythonpath == ""
    assert runner.pythonpath is None
Esempio n. 2
0
def test_store_rmspluginpath(mocker):
    """Test that the RMS_PLUGINS_LIBRARY env variable will be stored by the script"""
    mocker.patch("os.environ", {"RMS_PLUGINS_LIBRARY": "foo/bar/com"})
    runner = rr.RunRMS()
    assert "foo/bar/com" in runner.oldpluginspath
    assert runner.pluginspath is None

    mocker.patch("os.environ", {"PYTHONbarfPATH": "foo/bar/com"})
    runner = rr.RunRMS()
    assert runner.oldpythonpath == ""
    assert runner.pythonpath is None
Esempio n. 3
0
def test_store_pythonpath(mocker):
    mocker.patch("os.environ", {"PYTHONPATH": "foo/bar/com"})
    runner = rr.RunRMS()
    assert "foo/bar/com" in runner.oldpythonpath
    assert runner.pythonpath is None

    mocker.patch("os.environ", {"PYTHONPATH": ""})
    runner = rr.RunRMS()
    assert runner.oldpythonpath == ""
    assert runner.pythonpath is None

    mocker.patch("os.environ", {"PYTHONdummyPATH": "foo/bar/com"})
    runner = rr.RunRMS()
    assert runner.oldpythonpath == ""
    assert runner.pythonpath is None
Esempio n. 4
0
def test_runrms_disable_komodo_exec(tmpdir, monkeypatch):
    """Testing integration with Komodo."""
    with tmpdir.as_cwd():
        with open("rms_fake", "w") as fhandle:
            fhandle.write("""\
#!/usr/bin/env python3
import os
import sys

errors = []

BACKUPS_check=set([
    "PATH",
    "KOMODO_RELEASE",
    "MANPATH",
    "LD_LIBRARY_PATH",
    "PYTHONPATH"
])
BACKUPS = set(os.environ["BACKUPS"].split(":"))

if BACKUPS != BACKUPS_check:
    errors.append(f"BACKUP error: {BACKUPS} not equal to {BACKUPS_check}")

for backup in BACKUPS:
    if f"{backup}_BACKUP" not in os.environ:
        errors.append(f"The backup for {backup} is not set")

PATH = os.environ["PATH"]
PATH_PREFIX = os.environ["PATH_PREFIX"]
if PATH.split(":")[0] != PATH_PREFIX:
    errors.append(f"PATH_PREFIX ({PATH_PREFIX}), was not prepended to PATH ({PATH})")
if PATH_PREFIX != "/project/res/roxapi/bin":
    errors.append(f"The path for run_external is not corrent {PATH_PREFIX}")

if "KOMODO_RELEASE" in os.environ:
    errors.append(f"komodo release set: {os.environ['KOMODO_RELEASE']}")

if errors:
    for e in errors:
        print(e)
    sys.exit(1)
sys.exit(0)
""")

        st = os.stat("rms_fake")
        os.chmod("rms_fake", st.st_mode | stat.S_IEXEC)
        monkeypatch.setenv("KOMODO_RELEASE", f"{os.getcwd()}/bleeding")
        monkeypatch.setenv("_PRE_KOMODO_MANPATH", "some/man/path")
        monkeypatch.setenv("_PRE_KOMODO_LD_LIBRARY_PATH", "some/ld/path")

        runner = rr.RunRMS()
        runner.do_parse_args(["-v", "10.1.3"])
        runner.parse_setup()
        runner.version_requested = "10.1.3"
        runner.exe = "./rms_fake"
        runner.pythonpath = ""
        runner.pluginspath = "rms/plugins/path"

        return_code = runner.launch_rms(empty=True)
        assert return_code == 0
Esempio n. 5
0
def test_requested_rms_version(tmpdir, mocker):
    tmpdir.chdir()
    setupfile = "setup.yml"
    mocker.patch("subscript.runrms.runrms.SETUP", setupfile)
    runner = rr.RunRMS()
    runner.do_parse_args(["runrms", "--debug"])

    with pytest.raises(KeyError, match="rms"):
        Path(setupfile).write_text(yaml.dump({}))
        runner.parse_setup()
        runner.requested_rms_version()

    with pytest.raises(RuntimeError, match="Executable is not found"):
        Path(setupfile).write_text(yaml.dump({"rms": {"18.0.0": {"default": True}}}))
        runner.parse_setup()
        runner.requested_rms_version()

    with pytest.raises(KeyError, match="rms_nonstandard"):
        Path(setupfile).write_text(yaml.dump({"rms": {"18.0.0": {"default": True}}}))
        runner.parse_setup()
        runner.version_fromproject = "17.0.0"
        runner.requested_rms_version()

    Path(setupfile).write_text(
        yaml.dump(
            {"rms": {"18.0.0": {"default": True, "exe": "somefile", "pythonpath": ""}}}
        )
    )
    runner.parse_setup()
    runner.version_fromproject = "18.0.0"
    runner.requested_rms_version()
    assert runner.version_requested == "18.0.0"
Esempio n. 6
0
def test_detect_os(os_id, expected, tmpdir, mocker):
    tmpdir.chdir()
    release_file = Path("redhat-release")
    release_file.write_text(os_id)
    mocker.patch("subscript.runrms.runrms.RHEL_ID", release_file)
    runner = rr.RunRMS()
    assert runner.osver == expected
Esempio n. 7
0
def test_store_pythonpath(mocker):
    """Test that the PYTHONPATH env variable will be stored by the script"""
    mocker.patch("os.environ", {"PYTHONPATH": "foo/bar/com"})
    runner = rr.RunRMS()
    assert "foo/bar/com" in runner.oldpythonpath
    assert runner.pythonpath is None

    mocker.patch("os.environ", {"PYTHONPATH": ""})
    runner = rr.RunRMS()
    assert runner.oldpythonpath == ""
    assert runner.pythonpath is None

    mocker.patch("os.environ", {"PYTHONdummyPATH": "foo/bar/com"})
    runner = rr.RunRMS()
    assert runner.oldpythonpath == ""
    assert runner.pythonpath is None
Esempio n. 8
0
def test_detect_os_default(tmp_path, mocker):
    """Test the default OS if we don't find a redhat release file"""
    os.chdir(tmp_path)
    release_file = Path("not-existing-file")
    mocker.patch("subscript.runrms.runrms.RHEL_ID", release_file)
    runner = rr.RunRMS()
    assert runner.osver == "x86_64_RH_7"
Esempio n. 9
0
def test_detect_os(os_id, expected, tmp_path, mocker):
    """Test parsing of Redhat release text file"""
    os.chdir(tmp_path)
    release_file = Path("redhat-release")
    release_file.write_text(os_id, encoding="utf8")
    mocker.patch("subscript.runrms.runrms.RHEL_ID", release_file)
    runner = rr.RunRMS()
    assert runner.osver == expected
Esempio n. 10
0
def test_scan_rms(tmpdir):
    """Scan master files in RMS."""
    runner = rr.RunRMS()

    runner.runloggerfile = tmpdir.mkdir("runner2").join("runrms_usage.log")
    runner.project = TESTRMS1

    runner.scan_rms()

    assert runner.version_fromproject == "10.1.3"
Esempio n. 11
0
def test_scan_mocked_rms(tmp_path):
    """Test RMS project scanning on mocked projects"""
    os.chdir(tmp_path)
    runner = rr.RunRMS()
    runner.project = "notexisting"
    runner.scan_rms()

    mocked_rms = "mockedproject.rms18.0.0"
    os.mkdir(mocked_rms)
    runner.project = mocked_rms
    with pytest.raises(SystemExit):
        # Empty dir is an invalid RMS project:
        runner.scan_rms()

    # Mock a .master:
    dot_master = Path(mocked_rms) / ".master"
    dot_master.write_text("", encoding="utf8")
    runner.scan_rms()  # No errors from this
    assert runner.version_fromproject is None

    # Add version to the .master:
    dot_master.write_text("release : 18.0.0", encoding="utf8")
    runner.scan_rms()
    assert runner.version_fromproject == "18.0.0"

    # Add version in wrong place to the .master:
    dot_master.write_text("End GEOMATIC\nrelease : 18.0.0", encoding="utf8")
    runner = rr.RunRMS()
    runner.project = mocked_rms
    runner.scan_rms()
    assert runner.version_fromproject is None

    # Test mkeys:
    dot_master.write_text(
        "fileversion : foo\nuser : foobert\nvariant : bogus bogus bogus",
        encoding="utf8",
    )
    runner = rr.RunRMS()
    runner.project = mocked_rms
    runner.scan_rms()
    assert runner.fileversion == "foo"
    assert runner.user == "foobert"
    assert runner.variant == "unknown"  # Too many strings provided in .master
Esempio n. 12
0
def test_do_parse_args(tmpdir):
    """Test runrms parsing args."""
    runner = rr.RunRMS()

    runner.runloggerfile = tmpdir.mkdir("runner1").join("runrms_usage.log")
    assert runner.args is None

    args = ["--dryrun", "--setup", TESTSETUP]
    runner.do_parse_args(args)

    print(runner.args)

    assert "dryrun=True" in str(runner.args)
Esempio n. 13
0
def test_runlogger(tmpdir):
    tmpdir.chdir()

    runner = rr.RunRMS()
    runner.runloggerfile = "not-existing"
    # Nothing happens, skipped because it does not exist
    runner.runlogger()

    # Make an empty file and prove that it will be logged to:
    Path("foo-log").write_text("")
    assert not Path("foo-log").read_text()
    runner.runloggerfile = "foo-log"
    runner.runlogger()
    assert Path("foo-log").read_text()
Esempio n. 14
0
def test_parse_setup(tmpdir, mocker):
    tmpdir.chdir()
    setupfile = "foo.yml"
    mocker.patch("subscript.runrms.runrms.SETUP", setupfile)
    runner = rr.RunRMS()
    runner.do_parse_args(["runrms", "--debug"])
    with pytest.raises(FileNotFoundError):
        runner.parse_setup()

    # Write dummy file:
    Path(setupfile).write_text(yaml.dump({}))
    # No errors from this, even if the setup is empty:
    runner.parse_setup()
    assert runner.setup == {}
    assert runner.setupfile == setupfile
Esempio n. 15
0
def test_runlogger(tmp_path):
    """Test that we can log to files"""
    os.chdir(tmp_path)

    runner = rr.RunRMS()
    runner.runloggerfile = "not-existing"
    # Nothing happens, skipped because it does not exist
    runner.runlogger()

    # Make an empty file and prove that it will be logged to:
    Path("foo-log").write_text("", encoding="utf8")
    assert not Path("foo-log").read_text(encoding="utf8")
    runner.runloggerfile = "foo-log"
    runner.runlogger()
    assert Path("foo-log").read_text(encoding="utf8")
Esempio n. 16
0
def test_detect_os_default(tmpdir, mocker):
    tmpdir.chdir()
    release_file = Path("not-existing-file")
    mocker.patch("subscript.runrms.runrms.RHEL_ID", release_file)
    runner = rr.RunRMS()
    assert runner.osver == "x86_64_RH_7"