示例#1
0
 def setUp(self):
     config = Config('test',
                     'rhevm',
                     server='localhost',
                     username='******',
                     password='******',
                     owner='owner',
                     env='env')
     self.rhevm = RhevM(self.logger, config)
示例#2
0
 def setUp(self):
     config = Config('test', 'rhevm', server='localhost', username='******',
                     password='******', owner='owner', env='env')
     self.rhevm = RhevM(self.logger, config)
示例#3
0
class TestRhevM(TestBase):
    def setUp(self):
        config = Config('test', 'rhevm', server='localhost', username='******',
                        password='******', owner='owner', env='env')
        self.rhevm = RhevM(self.logger, config)

    def run_once(self, queue=None):
        ''' Run RHEV-M in oneshot mode '''
        self.rhevm._oneshot = True
        self.rhevm._queue = queue or Queue()
        self.rhevm._terminate_event = Event()
        self.rhevm._oneshot = True
        self.rhevm._interval = 0
        self.rhevm._run()

    @patch('requests.get')
    def test_connect(self, get):
        get.return_value.text = '<xml></xml>'
        get.return_value.status_code = 200
        self.run_once()

        self.assertEqual(get.call_count, 3)
        get.assert_has_calls([
            call('https://*****:*****@patch('requests.get')
    def test_connection_refused(self, get):
        get.return_value.post.side_effect = requests.ConnectionError
        self.assertRaises(VirtError, self.run_once)

    @patch('requests.get')
    def test_invalid_login(self, get):
        get.return_value.status_code = 401
        self.assertRaises(VirtError, self.run_once)

    @patch('requests.get')
    def test_404(self, get):
        get.return_value.text = ''
        get.return_value.status_code = 404
        self.assertRaises(VirtError, self.run_once)

    @patch('requests.get')
    def test_500(self, get):
        get.return_value.text = ''
        get.return_value.status_code = 500
        self.assertRaises(VirtError, self.run_once)

    @patch('requests.get')
    def test_getHostGuestMapping(self, get):
        expected_hostname = 'hostname.domainname'
        expected_hypervisorId = uuids['host']
        expected_guestId = uuids['vm']
        expected_guest_state = Guest.STATE_SHUTOFF

        get.side_effect = [
            MagicMock(text=CLUSTERS_XML),
            MagicMock(text=HOSTS_XML),
            MagicMock(text=VMS_XML),
        ]

        expected_result = Hypervisor(
            hypervisorId=expected_hypervisorId,
            name=expected_hostname,
            guestIds=[
                Guest(
                    expected_guestId,
                    self.rhevm,
                    expected_guest_state,
                )
            ],
            facts={
                Hypervisor.CPU_SOCKET_FACT: '1',
                Hypervisor.HYPERVISOR_TYPE_FACT: 'qemu',
                Hypervisor.HYPERVISOR_VERSION_FACT: '1.2.3',
            }
        )
        result = self.rhevm.getHostGuestMapping()['hypervisors'][0]
        self.assertEqual(expected_result.toDict(), result.toDict())

    def test_proxy(self):
        proxy = Proxy()
        self.addCleanup(proxy.terminate)
        proxy.start()
        oldenv = os.environ.copy()
        self.addCleanup(lambda: setattr(os, 'environ', oldenv))
        os.environ['https_proxy'] = proxy.address

        self.assertRaises(VirtError, self.run_once)
        self.assertIsNotNone(proxy.last_path, "Proxy was not called")
        self.assertEqual(proxy.last_path, 'localhost:8443')

    @patch('requests.get')
    def test_new_status(self, get):
        expected_hostname = 'hostname.domainname'
        expected_hypervisorId = uuids['host']
        expected_guestId = uuids['vm']
        expected_guest_state = Guest.STATE_RUNNING

        get.side_effect = [
            MagicMock(text=CLUSTERS_XML),
            MagicMock(text=HOSTS_XML),
            MagicMock(text=VMS_XML_STATUS),
        ]

        expected_result = Hypervisor(
            hypervisorId=expected_hypervisorId,
            name=expected_hostname,
            guestIds=[
                Guest(
                    expected_guestId,
                    self.rhevm,
                    expected_guest_state,
                )
            ],
            facts={
                Hypervisor.CPU_SOCKET_FACT: '1',
                Hypervisor.HYPERVISOR_TYPE_FACT: 'qemu',
                Hypervisor.HYPERVISOR_VERSION_FACT: '1.2.3',
            }
        )
        result = self.rhevm.getHostGuestMapping()['hypervisors'][0]
        self.assertEqual(expected_result.toDict(), result.toDict())
示例#4
0
class TestRhevM(TestBase):
    def setUp(self):
        config = Config('test',
                        'rhevm',
                        server='localhost',
                        username='******',
                        password='******',
                        owner='owner',
                        env='env')
        self.rhevm = RhevM(self.logger, config)

    def run_once(self, queue=None):
        ''' Run RHEV-M in oneshot mode '''
        self.rhevm._oneshot = True
        self.rhevm._queue = queue or Queue()
        self.rhevm._terminate_event = Event()
        self.rhevm._oneshot = True
        self.rhevm._interval = 0
        self.rhevm._run()

    @patch('requests.get')
    def test_connect(self, get):
        get.return_value.text = '<xml></xml>'
        get.return_value.status_code = 200
        self.run_once()

        self.assertEqual(get.call_count, 3)
        get.assert_has_calls([
            call('https://*****:*****@patch('requests.get')
    def test_connection_refused(self, get):
        get.return_value.post.side_effect = requests.ConnectionError
        self.assertRaises(VirtError, self.run_once)

    @patch('requests.get')
    def test_invalid_login(self, get):
        get.return_value.status_code = 401
        self.assertRaises(VirtError, self.run_once)

    @patch('requests.get')
    def test_404(self, get):
        get.return_value.text = ''
        get.return_value.status_code = 404
        self.assertRaises(VirtError, self.run_once)

    @patch('requests.get')
    def test_500(self, get):
        get.return_value.text = ''
        get.return_value.status_code = 500
        self.assertRaises(VirtError, self.run_once)

    @patch('requests.get')
    def test_getHostGuestMapping(self, get):
        expected_hostname = 'hostname.domainname'
        expected_hypervisorId = uuids['host']
        expected_guestId = uuids['vm']
        expected_guest_state = Guest.STATE_SHUTOFF

        get.side_effect = [
            MagicMock(text=CLUSTERS_XML),
            MagicMock(text=HOSTS_XML),
            MagicMock(text=VMS_XML),
        ]

        expected_result = Hypervisor(hypervisorId=expected_hypervisorId,
                                     name=expected_hostname,
                                     guestIds=[
                                         Guest(
                                             expected_guestId,
                                             self.rhevm,
                                             expected_guest_state,
                                         )
                                     ],
                                     facts={
                                         Hypervisor.CPU_SOCKET_FACT:
                                         '1',
                                         Hypervisor.HYPERVISOR_TYPE_FACT:
                                         'qemu',
                                         Hypervisor.HYPERVISOR_VERSION_FACT:
                                         '1.2.3',
                                     })
        result = self.rhevm.getHostGuestMapping()['hypervisors'][0]
        self.assertEqual(expected_result.toDict(), result.toDict())

    def test_proxy(self):
        proxy = Proxy()
        self.addCleanup(proxy.terminate)
        proxy.start()
        oldenv = os.environ.copy()
        self.addCleanup(lambda: setattr(os, 'environ', oldenv))
        os.environ['https_proxy'] = proxy.address

        self.assertRaises(VirtError, self.run_once)
        self.assertIsNotNone(proxy.last_path, "Proxy was not called")
        self.assertEqual(proxy.last_path, 'localhost:8443')

    @patch('requests.get')
    def test_new_status(self, get):
        expected_hostname = 'hostname.domainname'
        expected_hypervisorId = uuids['host']
        expected_guestId = uuids['vm']
        expected_guest_state = Guest.STATE_RUNNING

        get.side_effect = [
            MagicMock(text=CLUSTERS_XML),
            MagicMock(text=HOSTS_XML),
            MagicMock(text=VMS_XML_STATUS),
        ]

        expected_result = Hypervisor(hypervisorId=expected_hypervisorId,
                                     name=expected_hostname,
                                     guestIds=[
                                         Guest(
                                             expected_guestId,
                                             self.rhevm,
                                             expected_guest_state,
                                         )
                                     ],
                                     facts={
                                         Hypervisor.CPU_SOCKET_FACT:
                                         '1',
                                         Hypervisor.HYPERVISOR_TYPE_FACT:
                                         'qemu',
                                         Hypervisor.HYPERVISOR_VERSION_FACT:
                                         '1.2.3',
                                     })
        result = self.rhevm.getHostGuestMapping()['hypervisors'][0]
        self.assertEqual(expected_result.toDict(), result.toDict())