コード例 #1
0
class TestDriverRegistration(BaseTestCase):

    # patches to be applied for each test in this test suite
    patches = []

    def setUp(self):
        super(TestDriverRegistration, self).setUp()
        self.conf = cfg.ConfigOpts()
        self.cfg_fixture = OsloConfigFixture(self.conf)
        self._load_config_data()
        self.useFixture(self.cfg_fixture)

        def _fake_parse(self, args=[]):
            return cfg.ConfigOpts._parse_cli_opts(self, [])

        _fake_parse_method = types.MethodType(_fake_parse, self.conf)
        self.conf._parse_cli_opts = _fake_parse_method

        # Patches the agent socket
        self.m_agent_socket = MagicMock(autospec=True)

        self.patches.extend([
            # Deactivates the nanomsg socket
            patch(
                "watcher_metering.agent.agent.nanomsg.Socket",
                new=self.m_agent_socket,
            ),
            patch.object(DriverLoader, "_reload_config", MagicMock()),
        ])

        # Applies all of our patches before each test
        for _patch in self.patches:
            _patch.start()

    def tearDown(self):
        super(TestDriverRegistration, self).tearDown()
        # The drivers are stored at the class level so we need to clear
        # it after each test
        for _patch in self.patches:
            _patch.stop()

    scenarios = [
        # This is enough for most drivers but
        # we still needs to pre-configure the extra params by hand
        (driver_cls.get_name(), {"driver_cls": driver_cls})
        for driver_cls in DRIVERS
    ]

    def _load_config_data(self):
        pdu_drivers = [
            "metrics_driver.energy_active_energy",
            "metrics_driver.energy_active_power",
            "metrics_driver.energy_apparent_power",
            "metrics_driver.energy_frequency",
            "metrics_driver.energy_on_off",
            "metrics_driver.energy_power_factor",
            "metrics_driver.energy_rms_current",
            "metrics_driver.energy_rms_voltage",
        ]
        for pdu_driver in pdu_drivers:
            # pdu_servers=PDU_1:127.0.0.1,PDU_2:192.168.1.1
            self.cfg_fixture.load_raw_values(
                group=pdu_driver,
                pdu_servers="PDU_1:127.0.0.1,PDU_2:192.168.1.1",
            )
            # mapping = PDU_1:[serv1.hostname:1,serv2.hostname:2]
            # mapping = PDU_2:[serv3.hostname:1,serv4.hostname:2]
            [
                {"PDU_1": [{"serv1.hostname": 1}, {"serv2.hostname": 2}]},
                {"PDU_2": [{"serv3.hostname": 1}, {"serv4.hostname": 2}]}
            ]
            self.cfg_fixture.load_raw_values(
                group=pdu_driver,
                mapping="PDU_1:[serv1.hostname:1,serv2.hostname:2]",
            )
            self.cfg_fixture.load_raw_values(
                group=pdu_driver,
                mapping="PDU_2:[serv3.hostname:1,serv4.hostname:2]",
            )

        instance_drivers = [
            "metrics_driver.instance_cpu_used",
        ]

        for instance_driver in instance_drivers:
            self.cfg_fixture.load_raw_values(
                group=instance_driver,
                libvirt_type="qemu",
            )
            self.cfg_fixture.load_raw_values(
                group=instance_driver,
                connection_uri=None,
            )

    @patch("watcher_metering_drivers.instance_cpu.InstanceCpuWrapper",
           MagicMock())
    @patch("watcher_metering_drivers.pdu.PDURaritanWrapper", MagicMock())
    def test_register_metering_drivers(self):
        # Try to register/load each one of the driver using the Agent
        agent = Agent(
            conf=self.conf,
            driver_names=[self.driver_cls.get_name()],
            use_nanoconfig_service=False,
            publisher_endpoint="fake",
            nanoconfig_service_endpoint="",
            nanoconfig_update_endpoint="",
            nanoconfig_profile="nanoconfig://test_profile"
        )
        # Because it seems it does not clear from previous scenarios
        agent.drivers.clear()
        agent.register_drivers()

        self.assertEqual(
            sorted(agent.drivers.keys()),
            ["%s_%s" % (self.driver_cls.get_entry_name(),
                        self.driver_cls.get_default_probe_id())]
        )