File: controller.py

package info (click to toggle)
libcgroup 3.1.0-2
  • links: PTS, VCS
  • area: main
  • in suites: trixie
  • size: 6,764 kB
  • sloc: ansic: 14,997; cpp: 9,957; python: 8,340; sh: 5,194; yacc: 470; makefile: 400; lex: 38
file content (69 lines) | stat: -rw-r--r-- 2,276 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
# SPDX-License-Identifier: LGPL-2.1-only
#
# Cgroup class for the libcgroup functional tests
#
# Copyright (c) 2020 Oracle and/or its affiliates.
# Author: Tom Hromatka <tom.hromatka@oracle.com>
#

from log import Log


class Controller(object):
    # The controller class closely mirrors libcgroup's struct cgroup_controller
    def __init__(self, name):
        self.name = name
        # self.settings maps to
        # struct control_value *values[CG_NV_MAX];
        self.settings = dict()

    def __str__(self):
        out_str = 'Controller {}\n'.format(self.name)

        for setting_key in self.settings:
            out_str += '    {} = {}\n'.format(setting_key,
                                              self.settings[setting_key])

        return out_str

    def __eq__(self, other):
        if not isinstance(other, Controller):
            return False

        if not self.name == other.name:
            return False

        if not self.settings == other.settings:
            self_keys = set(self.settings.keys())
            other_keys = set(other.settings.keys())

            added = other_keys - self_keys
            if added is not None:
                for key in added:
                    Log.log_critical(
                                        'Other contains {} = {}'
                                        ''.format(key, other.settings[key])
                                    )

            removed = self_keys - other_keys
            if removed is not None:
                for key in removed:
                    Log.log_critical(
                                        'Self contains {} = {}'
                                        ''.format(key, self.settings[key])
                                    )

            common = self_keys.intersection(other_keys)
            for key in common:
                if self.settings[key] != other.settings[key]:
                    Log.log_critical(
                                        'self{} = {} while other{} = {}'
                                        ''.format(key, self.settings[key],
                                                  key, other.settings[key])
                                    )

            return False

        return True

# vim: set et ts=4 sw=4: