def setUp(self):
        super(TestRandomScheduler, self).setUp()

        self.vnc_patch = mock.patch('vnc_api.vnc_api.VncApi', autospec=True)
        self.vnc_mock = self.vnc_patch.start()

        self.analytics_patch = \
            mock.patch('cfgm_common.analytics_client.Client.request')
        self.analytics_mock = self.analytics_patch.start()

        self.scheduler = \
            scheduler.RandomScheduler(self.vnc_mock, mock.MagicMock())
    def setUp(self):
        super(TestRandomScheduler, self).setUp()

        self.vnc_mock = mock.MagicMock()

        self.analytics_patch = \
            mock.patch('cfgm_common.analytics_client.Client.request')
        self.analytics_mock = self.analytics_patch.start()

        self.scheduler = \
            scheduler.RandomScheduler(self.vnc_mock, mock.MagicMock(),
                mock.MagicMock(netns_availability_zone=False))
    def test_disabled_azs(self):
        class FakeAvailabilityZone(object):
            def __repr__(self):
                return "<AvailabilityZone: %s>" % self.zoneName

            def __init__(self, info):
                self._info = info
                self._add_details(info)

            def _add_details(self, info):
                for (k, v) in six.iteritems(info):
                    try:
                        setattr(self, k, v)
                        self._info[k] = v
                    except AttributeError:
                        pass

        def get_fake_azs():
            az1_info = {
                "zoneState": {
                    "available": True
                },
                "hosts": {
                    "compute1": {
                        "nova-compute": {
                            "available": True,
                            "active": True
                        }
                    },
                    "compute2": {
                        "nova-compute": {
                            "available": False,
                            "active": True
                        }
                    },
                    "compute3": {
                        "nova-compute": {
                            "available": True,
                            "active": True
                        }
                    }
                },
                "zoneName": "fake_az1"
            }

            az2_info = {
                "zoneState": {
                    "available": False
                },
                "hosts": {
                    "compute4": {
                        "nova-compute": {
                            "available": True,
                            "active": True
                        }
                    }
                },
                "zoneName": "fake_az2"
            }

            az3_info = {
                "zoneState": {
                    "available": True
                },
                "hosts": {
                    "compute5": {
                        "nova-compute": {
                            "available": True,
                            "active": True
                        }
                    }
                },
                "zoneName": "fake_az3"
            }

            return [
                FakeAvailabilityZone(az1_info),
                FakeAvailabilityZone(az2_info),
                FakeAvailabilityZone(az3_info)
            ]

        self.mock_nc = mock.MagicMock()
        self.mock_nc.oper = mock.Mock(return_value=get_fake_azs())

        self.scheduler2 = \
            scheduler.RandomScheduler(vnc_lib=self.vnc_mock, nova_client=self.mock_nc,
                disc=mock.MagicMock(), logger=mock.MagicMock(),
                args=mock.MagicMock(netns_availability_zone="fake_az1",
                                    analytics_server_list='127.0.0.2:8081'))

        az_vr_list = self.scheduler2._get_az_vrouter_list()
        self.assertEqual(sorted(az_vr_list), ['compute1', 'compute3'])