Пример #1
0
    def test_make_wrapper_script0001(self, mock_platform):
        args = ["arg1", "arg2", "arg3"]
        heap_lim_k = 1024 * 1024 * 1024  # 1GiB
        stack_lim_k = 8192
        dash = find_executable("dash")
        assert dash is not None
        vmdef = PythonVMDef("python2.7")
        vmdef.set_platform(mock_platform)

        wrapper_filename, envlog_filename = vmdef.make_wrapper_script(
            args, heap_lim_k, stack_lim_k)
        expect = [
            '#!%s' % dash,
            'ENVLOG=`env`',
            'ulimit -d %s || exit $?' % heap_lim_k,
            'ulimit -s %s || exit $?' % stack_lim_k,
            'arg1 arg2 arg3',
            'echo "${ENVLOG}" > %s' % envlog_filename,
            'exit $?'
        ]

        with open(wrapper_filename) as fh:
            got = fh.read().splitlines()

        util.del_envlog_tempfile(envlog_filename, mock_platform)
        assert expect == got
Пример #2
0
    def test_run_exec_popen0002(self, monkeypatch):
        """Check that writing stderr to a file works. Used for instrumentation"""

        config = Config()
        platform = MockPlatform(None, config)
        vm_def = PythonVMDef('/dummy/bin/python')
        vm_def.set_platform(platform)

        args = [sys.executable, "-c",
                "import sys; sys.stdout.write('STDOUT'); sys.stderr.write('STDERR')"]

        with NamedTemporaryFile(delete=False, prefix="kruntest") as fh:
            filename = fh.name
            out, err, rv = vm_def._run_exec_popen(args, fh)

        assert err == ""  # not here due to redirection
        assert out == "STDOUT"  # behaviour should be unchanged
        assert rv == 0

        # stderr should be in this file
        with open(filename) as fh:
            assert fh.read() == "STDERR"

        fh.close()
        os.unlink(filename)
Пример #3
0
    def test_run_exec_popen0002(self, monkeypatch):
        """Check that writing stderr to a file works. Used for instrumentation"""

        config = Config()
        platform = MockPlatform(None, config)
        vm_def = PythonVMDef('/dummy/bin/python')
        vm_def.set_platform(platform)

        args = [
            sys.executable, "-c",
            "import sys; sys.stdout.write('STDOUT'); sys.stderr.write('STDERR')"
        ]

        with NamedTemporaryFile(delete=False, prefix="kruntest") as fh:
            filename = fh.name
            out, err, rv, timed_out = vm_def._run_exec_popen(args, fh)

        assert err == ""  # not here due to redirection
        assert out == "STDOUT"  # behaviour should be unchanged
        assert rv == 0
        assert timed_out == False

        # stderr should be in this file
        with open(filename) as fh:
            assert fh.read() == "STDERR"

        fh.close()
        os.unlink(filename)
Пример #4
0
 def test_wrapper_args0001(self, platform):
     vm_def = PythonVMDef('/dummy/bin/python')
     vm_def.set_platform(platform)
     wrapper_filename = "abcdefg.dash"
     got = vm_def._wrapper_args(wrapper_filename)
     expect = ['/usr/bin/sudo', '-u', 'root', '/usr/bin/nice', '-n', '-20',
               '/usr/bin/sudo', '-u', 'krun', '/bin/dash', wrapper_filename]
     assert got == expect
Пример #5
0
 def test_wrapper_args0001(self, platform):
     vm_def = PythonVMDef('/dummy/bin/python')
     vm_def.set_platform(platform)
     wrapper_filename = "abcdefg.dash"
     got = vm_def._wrapper_args(wrapper_filename)
     expect = [
         '/usr/bin/sudo', '-u', 'root', '/usr/bin/nice', '-n', '-20',
         '/usr/bin/sudo', '-u', 'krun', DASH, wrapper_filename
     ]
     assert got == expect
Пример #6
0
    def test_wrapper_args0002(self, platform):
        # Pinning isn't supported on OpenBSD, so it should make no difference
        platform.config.ENABLE_PINNING = False

        vm_def = PythonVMDef('/dummy/bin/python')
        vm_def.set_platform(platform)
        wrapper_filename = "/tmp/abcdefg.dash"
        got = vm_def._wrapper_args(wrapper_filename)
        expect = ['/usr/local/bin/sudo', '-u', 'root', '/usr/bin/nice', '-n', '-20',
                  '/usr/local/bin/sudo', '-u', 'krun', '/usr/local/bin/dash',
                  wrapper_filename]
        assert got == expect
Пример #7
0
    def test_wrapper_args0002(self, platform):
        platform.config.ENABLE_PINNING = False

        vm_def = PythonVMDef('/dummy/bin/python')
        vm_def.set_platform(platform)
        wrapper_filename = "abcdefg.dash"
        got = vm_def._wrapper_args(wrapper_filename)
        expect = [
            '/usr/bin/sudo', '-u', 'root', '/usr/bin/nice', '-n', '-20',
            '/usr/bin/sudo', '-u', 'krun', '/bin/dash', wrapper_filename
        ]
        assert got == expect
Пример #8
0
    def test_wrapper_args0002(self, platform):
        # Pinning isn't supported on OpenBSD, so it should make no difference
        platform.config.ENABLE_PINNING = False

        vm_def = PythonVMDef('/dummy/bin/python')
        vm_def.set_platform(platform)
        wrapper_filename = "/tmp/abcdefg.dash"
        got = vm_def._wrapper_args(wrapper_filename)
        expect = [
            '/usr/local/bin/sudo', '-u', 'root', '/usr/bin/nice', '-n', '-20',
            '/usr/local/bin/sudo', '-u', 'krun', '/usr/local/bin/dash',
            wrapper_filename
        ]
        assert got == expect
Пример #9
0
    def test_run_exec_popen0001(self, monkeypatch):
        """Check normal operation of _run_exec_popen()"""

        config = Config()
        platform = MockPlatform(None, config)
        vm_def = PythonVMDef('/dummy/bin/python')
        vm_def.set_platform(platform)

        args = [sys.executable, "-c",
                "import sys; sys.stdout.write('STDOUT'); sys.stderr.write('STDERR')"]
        out, err, rv = vm_def._run_exec_popen(args)

        assert err == "STDERR"
        assert out == "STDOUT"
        assert rv == 0
Пример #10
0
    def test_sync_disks0002(self, monkeypatch):
        """We throw away the results from sanity checks, so there's no need to
        sync disks (and wait)."""

        stdout = json.dumps({
            "wallclock_times": [123.4],
            "core_cycle_counts": [[1], [2], [3], [4]],
            "aperf_counts": [[5], [6], [7], [8]],
            "mperf_counts": [[9], [10], [11], [12]],
        })

        config = Config()
        platform = MockPlatform(None, config)
        ep = EntryPoint("test")
        vm_def = PythonVMDef('/dummy/bin/python')

        sync_called = [False]

        def fake_sync_disks():
            sync_called[0] = True

        monkeypatch.setattr(platform, "sync_disks", fake_sync_disks)

        def fake_run_exec_popen(args, stderr_file=None):
            return stdout, "", 0, False  # stdout, stderr, exit_code, timed_out

        monkeypatch.setattr(vm_def, "_run_exec_popen", fake_run_exec_popen)

        util.spawn_sanity_check(platform, ep, vm_def, "test")
        assert sync_called == [False]
Пример #11
0
    def test_run_exec_popen0001(self, monkeypatch):
        """Check normal operation of _run_exec_popen()"""

        config = Config()
        platform = MockPlatform(None, config)
        vm_def = PythonVMDef('/dummy/bin/python')
        vm_def.set_platform(platform)

        args = [
            sys.executable, "-c",
            "import sys; sys.stdout.write('STDOUT'); sys.stderr.write('STDERR')"
        ]
        out, err, rv = vm_def._run_exec_popen(args)

        assert err == "STDERR"
        assert out == "STDOUT"
        assert rv == 0
Пример #12
0
    def _sanity_check_user_change(self):
        from krun.vm_defs import PythonVMDef
        from krun import EntryPoint

        ep = EntryPoint("check_user_change.py")
        vd = PythonVMDef(sys.executable)  # run under the VM that runs *this*
        util.spawn_sanity_check(self, ep, vd, "UNIX user change",
                                force_dir=PLATFORM_SANITY_CHECK_DIR)
Пример #13
0
    def test_env_ctor0001(self):
        vm = PythonVMDef("python2.7", env={"MYENV": "xyz"})

        assert len(vm.common_env_changes) == 1

        ec = vm.common_env_changes[0]
        assert ec.var == "MYENV"
        assert ec.val == "xyz"
Пример #14
0
    def test_make_wrapper_script0001(self, mock_platform):
        args = ["arg1", "arg2", "arg3"]
        heap_lim_k = 1024 * 1024 * 1024  # 1GiB
        stack_lim_k = 8192
        dash = find_executable("dash")
        assert dash is not None
        vmdef = PythonVMDef("python2.7")
        vmdef.set_platform(mock_platform)

        wrapper_filename, envlog_filename = vmdef.make_wrapper_script(
            args, heap_lim_k, stack_lim_k)
        expect = [
            '#!%s' % dash, 'ENVLOG=`env`',
            'ulimit -d %s || exit $?' % heap_lim_k,
            'ulimit -s %s || exit $?' % stack_lim_k, 'arg1 arg2 arg3',
            'echo "${ENVLOG}" > %s' % envlog_filename, 'exit $?'
        ]

        with open(wrapper_filename) as fh:
            got = fh.read().splitlines()

        util.del_envlog_tempfile(envlog_filename, mock_platform)
        assert expect == got
Пример #15
0
    def test_sync_disks0002(self, monkeypatch):
        """We throw away the results from sanity checks, so there's no need to
        sync disks (and wait)."""

        platform = MockPlatform(None)
        ep = EntryPoint("test")
        vm_def = PythonVMDef('/dummy/bin//python')

        sync_called = [False]
        def fake_sync_disks():
            sync_called[0] = True
        monkeypatch.setattr(platform, "sync_disks", fake_sync_disks)

        def fake_run_exec_popen(args):
            return "[1]", "", 0  # stdout, stderr, exit_code
        monkeypatch.setattr(vm_def, "_run_exec_popen", fake_run_exec_popen)

        util.spawn_sanity_check(platform, ep, vm_def, "test")
        assert sync_called == [False]
Пример #16
0
    def test_sync_disks0001(self, monkeypatch):
        """Check disk sync method is called"""

        platform = MockPlatform(None)
        ep = EntryPoint("test")
        vm_def = PythonVMDef('/dummy/bin//python')
        vm_def.set_platform(platform)

        sync_called = [False]
        def fake_sync_disks():
            sync_called[0] = True
        monkeypatch.setattr(platform, "sync_disks", fake_sync_disks)

        def fake_run_exec_popen(args):
            return "[1]", "", 0  # stdout, stderr, exit_code
        monkeypatch.setattr(vm_def, "_run_exec_popen", fake_run_exec_popen)

        vm_def.run_exec(ep, "test", 1, 1, 1, 1)
        assert sync_called == [True]
Пример #17
0
    def test_sync_disks0001(self, monkeypatch):
        """Check disk sync method is called"""

        config = Config()
        platform = MockPlatform(None, config)
        ep = EntryPoint("test")
        vm_def = PythonVMDef('/dummy/bin/python')
        vm_def.set_platform(platform)

        sync_called = [False]

        def fake_sync_disks():
            sync_called[0] = True

        monkeypatch.setattr(platform, "sync_disks", fake_sync_disks)

        def fake_run_exec_popen(args, stderr_file=None):
            return "[1]", "", 0, False  # stdout, stderr, exit_code, timed_out

        monkeypatch.setattr(vm_def, "_run_exec_popen", fake_run_exec_popen)

        vm_def.run_exec(ep, 1, 1, 1, 1, "test:dummyvm:default", 0)
        assert sync_called == [True]