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
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
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
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
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
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
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