Пример #1
0
def test(config):
    result = consts.TEST_PASSED
    cause = None

    Cgroup.create(config, None, CGNAME)

    # verify the cgroup exists by reading cgroup.procs
    Cgroup.get(
                config, controller=None, cgname=CGNAME,
                setting='cgroup.procs', print_headers=True,
                values_only=False
              )

    return result, cause
Пример #2
0
def test(config):
    result = consts.TEST_PASSED
    cause = None

    version = CgroupVersion.get_version(CONTROLLER)

    if version == CgroupVersion.CGROUP_V1:
        setting = SETTING_V1
        expected_out = EXPECTED_OUT_V1
    elif version == CgroupVersion.CGROUP_V2:
        setting = SETTING_V2
        expected_out = EXPECTED_OUT_V2

    out = Cgroup.get(config,
                     controller=None,
                     cgname=[CGNAME1, CGNAME2],
                     setting=setting)

    for line_num, line in enumerate(out.splitlines()):
        if line.strip() != expected_out.splitlines()[line_num].strip():
            result = consts.TEST_FAILED
            cause = ('Expected line:\n\t{}\nbut received line:\n\t{}'
                     ''.format(expected_out.splitlines()[line_num].strip(),
                               line.strip()))
            return result, cause

    return result, cause
def test(config):
    result = consts.TEST_PASSED
    cause = None

    out = Cgroup.get(config,
                     controller=None,
                     cgname=CGNAME,
                     setting=SETTING,
                     print_headers=True,
                     values_only=False)

    # arbitrary check to ensure we read several lines
    if len(out.splitlines()) < 10:
        result = consts.TEST_FAILED
        cause = ('Expected multiple lines, but only received {}'
                 ''.format(len(out.splitlines())))
        return result, cause

    # arbitrary check for a setting that's in both cgroup v1 and cgroup v2
    # memory.stat
    if '\tunevictable' not in out:
        result = consts.TEST_FAILED
        cause = 'Unexpected output\n{}'.format(out)
        return result, cause

    return result, cause
Пример #4
0
def test(config):
    result = consts.TEST_PASSED
    cause = None

    out = Cgroup.get(config, cgname=CGNAME, all_controllers=True)

    # arbitrary check to ensure we read several lines
    if len(out.splitlines()) < 20:
        result = consts.TEST_FAILED
        cause = ('Expected multiple lines, but only received {}'
                 ''.format(len(out.splitlines())))
        return result, cause

    # arbitrary check for a setting that's in both cgroup v1 and cgroup v2
    # memory.stat
    if '\tpgmajfault' not in out:
        result = consts.TEST_FAILED
        cause = 'Unexpected output\n{}'.format(out)
        return result, cause

    # make sure that a cpuset value was in the output:
    if 'cpuset.cpus' not in out:
        result = consts.TEST_FAILED
        cause = 'Failed to find cpuset settings in output\n{}'.format(out)
        return result, cause

    return result, cause
def test(config):
    result = consts.TEST_PASSED
    cause = None

    try:
        # check if the memsw.failcnt file exists.  if so, add it to the
        # expected snapshot
        Cgroup.get(config, setting='memory.memsw.failcnt', cgname=CGNAME)
        expected_str = CGSNAPSHOT + CGSNAPSHOT_SWAP
    except RunError:
        # memsw files don't exist.  exclude them from the snapshot
        expected_str = CGSNAPSHOT + CGSNAPSHOT_NOSWAP

    expected = Cgroup.snapshot_to_dict(expected_str)
    actual = Cgroup.snapshot(config, controller=CONTROLLER)

    if expected[CGNAME] != actual[CGNAME]:
        result = consts.TEST_FAILED
        cause = 'Expected cgsnapshot result did not equal actual cgsnapshot'

    return result, cause
Пример #6
0
def test(config):
    result = consts.TEST_PASSED
    cause = None

    out = Cgroup.get(config,
                     controller='{}:{}'.format(CONTROLLER, CGNAME),
                     print_headers=False)

    version = CgroupVersion.get_version(CONTROLLER)

    if version == CgroupVersion.CGROUP_V1:
        expected_out = EXPECTED_OUT_V1

        if len(out.splitlines()) != len(expected_out.splitlines()):
            expected_out = EXPECTED_OUT_V1_CFS_BANDWIDTH
    elif version == CgroupVersion.CGROUP_V2:
        expected_out = EXPECTED_OUT_V2

        if len(out.splitlines()) != len(expected_out.splitlines()):
            expected_out = EXPECTED_OUT_V2_PSI

            if len(out.splitlines()) != len(expected_out.splitlines()):
                expected_out = EXPECTED_OUT_V2_PSI_CFS_BANDWIDTH

    if len(out.splitlines()) != len(expected_out.splitlines()):
        result = consts.TEST_FAILED
        cause = ('Expected line count: {}, but received line count: {}'
                 ''.format(len(expected_out.splitlines()),
                           len(out.splitlines())))
        return result, cause

    if len(out.splitlines()) != len(expected_out.splitlines()):
        result = consts.TEST_FAILED
        cause = ('Expected {} lines but received {} lines'
                 ''.format(len(expected_out.splitlines()),
                           len(out.splitlines())))
        return result, cause

    for line_num, line in enumerate(out.splitlines()):
        if line.strip() != expected_out.splitlines()[line_num].strip():
            result = consts.TEST_FAILED
            cause = ('Expected line:\n\t{}\nbut received line:\n\t{}'
                     ''.format(expected_out.splitlines()[line_num].strip(),
                               line.strip()))
            return result, cause

    return result, cause
Пример #7
0
def test(config):
    result = consts.TEST_PASSED
    cause = None

    config.process.create_process_in_cgroup(config, '', CGNAME)
    output = Cgroup.get(config,
                        controller=None,
                        cgname=CGNAME,
                        setting='cgroup.procs',
                        print_headers=False,
                        values_only=False)

    if not len(output):
        result = consts.TEST_FAILED
        cause = 'No process created in the cgroup'

    return result, cause
Пример #8
0
def test(config):
    result = consts.TEST_PASSED
    cause = None

    out = Cgroup.get(config, controller=None, cgname=CGNAME)

    if out.splitlines()[0] != '{}:'.format(CGNAME):
        result = consts.TEST_FAILED
        cause = ('cgget expected the cgroup name {} in the first line.\n'
                 'Instead it received {}'
                 ''.format(CGNAME,
                           out.splitlines()[0]))

    if len(out.splitlines()) < 5:
        result = consts.TEST_FAILED
        cause = ('Too few lines output by cgget.  Received {} lines'
                 ''.format(len(out.splitlines())))

    return result, cause
Пример #9
0
def test(config):
    result = consts.TEST_PASSED
    cause = None

    try:
        # cgget -g cpu
        Cgroup.get(config, controller=CONTROLLER)
    except RunError as re:
        if 'Wrong input parameters,' not in re.stderr:
            result = consts.TEST_FAILED
            cause = "#1 Expected 'Wrong input parameters' to be in stderr"
            return result, cause

        if re.ret != 255:
            result = consts.TEST_FAILED
            cause = ('#1 Expected return code of 255 but received {}'
                     ''.format(re.ret))
            return result, cause
    else:
        result = consts.TEST_FAILED
        cause = 'Test case #1 erroneously passed'
        return result, cause

    try:
        # cgget -g cpu:016cgget 016cgget
        Cgroup.get(config,
                   controller='{}:{}'.format(CONTROLLER, CGNAME),
                   cgname=CGNAME)
    except RunError as re:
        if 'Wrong input parameters,' not in re.stderr:
            result = consts.TEST_FAILED
            cause = "#2 Expected 'Wrong input parameters' to be in stderr"
            return result, cause

        if re.ret != 255:
            result = consts.TEST_FAILED
            cause = ('#2 Expected return code of 255 but received {}'
                     ''.format(re.ret))
            return result, cause
    else:
        result = consts.TEST_FAILED
        cause = 'Test case #2 erroneously passed'
        return result, cause

    try:
        # cgget -r invalidsetting 016cgget
        Cgroup.get(config,
                   setting='invalidsetting',
                   cgname=CGNAME,
                   print_headers=False,
                   values_only=True)
    except RunError as re:
        if 'cgget: error parsing parameter name' not in re.stderr:
            result = consts.TEST_FAILED
            cause = ("#3 Expected 'cgget: error parsing parameter name' to "
                     "be in stderr")
            return result, cause

        # legacy cgget returns 0 but populates stderr for this case.
        # This feels wrong, so the updated cgget returns ECGINVAL
        if re.ret != 91 and re.ret != 0:
            result = consts.TEST_FAILED
            cause = ('#3 Expected return code of 0 or 91 but received {}'
                     ''.format(re.ret))
            return result, cause
    else:
        result = consts.TEST_FAILED
        cause = 'Test case #3 erroneously passed'
        return result, cause

    try:
        # cgget -r invalid.setting 016cgget
        Cgroup.get(config,
                   setting='invalid.setting',
                   cgname=CGNAME,
                   print_headers=False,
                   values_only=True)
    except RunError as re:
        if 'cgget: cannot find controller' not in re.stderr:
            result = consts.TEST_FAILED
            cause = ("#4 Expected 'cgget: cannot find controller' to be in "
                     "stderr")
            return result, cause

        # legacy cgget returns 0 but populates stderr for this case.
        # This feels wrong, so the updated cgget returns ECGOTHER
        if re.ret != 96 and re.ret != 0:
            result = consts.TEST_FAILED
            cause = ('#4 Expected return code of 0 or 96 but received {}'
                     ''.format(re.ret))
            return result, cause
    else:
        result = consts.TEST_FAILED
        cause = 'Test case #4 erroneously passed'
        return result, cause

    try:
        # cgget -r cpu.invalid 016cgget
        Cgroup.get(config,
                   setting='{}.invalid'.format(CONTROLLER),
                   cgname=CGNAME,
                   print_headers=False,
                   values_only=True)
    except RunError as re:
        if 'variable file read failed' not in re.stderr:
            result = consts.TEST_FAILED
            cause = "#5 Expected 'variable file read failed' to be in stderr"
            return result, cause

        # legacy cgget returns 0 but populates stderr for this case.
        # This feels wrong, so the updated cgget returns ECGOTHER
        if re.ret != 96 and re.ret != 0:
            result = consts.TEST_FAILED
            cause = ('#5 Expected return code of 0 or 96 but received {}'
                     ''.format(re.ret))
            return result, cause
    else:
        result = consts.TEST_FAILED
        cause = 'Test case #5 erroneously passed'
        return result, cause

    try:
        # cgget with no parameters
        Cgroup.get(config,
                   controller=None,
                   cgname=None,
                   setting=None,
                   print_headers=True,
                   values_only=False,
                   all_controllers=False,
                   cghelp=False)
    except RunError as re:
        if 'Wrong input parameters,' not in re.stderr:
            result = consts.TEST_FAILED
            cause = "#6 Expected 'Wrong input parameters' to be in stderr"
            return result, cause

        if re.ret != 1:
            result = consts.TEST_FAILED
            cause = ('#6 Expected return code of 1 but received {}'
                     ''.format(re.ret))
            return result, cause
    else:
        result = consts.TEST_FAILED
        cause = 'Test case #6 erroneously passed'
        return result, cause

    # cgget -h
    ret = Cgroup.get(config, cghelp=True)
    if 'Print parameter(s)' not in ret:
        result = consts.TEST_FAILED
        cause = '#7 Failed to print help text'
        return result, cause

    return result, cause