def test_multi_vif_no_match(self):
        m_get_nwinfo = self.create_patch(
            'nova.compute.utils.get_nw_info_for_instance')
        m_get_nwinfo.return_value = self.multi_nw2

        result = detach_network_check.filter_factory(self.conf)(self.app)
        resp = result.__call__.request(self.good_url, method='DELETE')
        self.assertEqual(self.app, resp)
    def test_multi_vif_no_match(self):
        m_get_nwinfo = self.create_patch(
            'nova.compute.utils.get_nw_info_for_instance')
        m_get_nwinfo.return_value = self.multi_nw2

        result = detach_network_check.filter_factory(self.conf)(self.app)
        resp = result.__call__.request(self.good_url, method='DELETE')
        self.assertEqual(self.app, resp)
    def test_multi_vif_matching_network(self):
        m_get_nwinfo = self.create_patch(
            'nova.compute.utils.get_nw_info_for_instance')
        m_get_nwinfo.return_value = self.multi_nw1

        result = detach_network_check.filter_factory(self.conf)(self.app)
        resp = result.__call__.request(self.good_url, method='DELETE')
        self.assertNotEqual(self.app, resp)
        self.assertTrue(isinstance(resp, webob.exc.HTTPForbidden))
    def test_multi_vif_matching_network(self):
        m_get_nwinfo = self.create_patch(
            'nova.compute.utils.get_nw_info_for_instance')
        m_get_nwinfo.return_value = self.multi_nw1

        result = detach_network_check.filter_factory(self.conf)(self.app)
        resp = result.__call__.request(self.good_url, method='DELETE')
        self.assertNotEqual(self.app, resp)
        self.assertTrue(isinstance(resp, webob.exc.HTTPForbidden))
    def test_incorrect_url(self):
        m_get_nwinfo = self.create_patch(
            'nova.compute.utils.get_nw_info_for_instance')
        m_get_nwinfo.return_value = self.multi_nw2

        result = detach_network_check.filter_factory(self.conf)(self.app)
        resp = result.__call__.request(self.bad_url2, method='DELETE')
        self.assertEqual(1, self.m_get_context.call_count)
        self.assertEqual(0, self.m_get_instance.call_count)
        self.assertEqual(self.app, resp)
    def test_incorrect_url(self):
        m_get_nwinfo = self.create_patch(
            'nova.compute.utils.get_nw_info_for_instance')
        m_get_nwinfo.return_value = self.multi_nw2

        result = detach_network_check.filter_factory(self.conf)(self.app)
        resp = result.__call__.request(self.bad_url2, method='DELETE')
        self.assertEqual(1, self.m_get_context.call_count)
        self.assertEqual(0, self.m_get_instance.call_count)
        self.assertEqual(self.app, resp)
    def test_filtering_requests(self):
        m_get_nwinfo = self.create_patch(
            'nova.compute.utils.get_nw_info_for_instance')
        m_get_nwinfo.return_value = self.empty_nw

        result = detach_network_check.filter_factory(self.conf)(self.app)
        result.__call__.request('/something', method='DELETE')
        self.assertEqual(1, self.m_get_context.call_count)
        self.assertEqual(0, self.m_get_instance.call_count)
        result.__call__.request(self.good_url, method='DELETE')
        self.assertEqual(2, self.m_get_context.call_count)
        self.assertEqual(1, self.m_get_instance.call_count)
    def test_filtering_requests(self):
        m_get_nwinfo = self.create_patch(
            'nova.compute.utils.get_nw_info_for_instance')
        m_get_nwinfo.return_value = self.empty_nw

        result = detach_network_check.filter_factory(self.conf)(self.app)
        result.__call__.request('/something', method='DELETE')
        self.assertEqual(1, self.m_get_context.call_count)
        self.assertEqual(0, self.m_get_instance.call_count)
        result.__call__.request(self.good_url, method='DELETE')
        self.assertEqual(2, self.m_get_context.call_count)
        self.assertEqual(1, self.m_get_instance.call_count)
    def test_runtime_overrides(self):
        self.set_reconfigure()
        headers = {'X_WAFFLEHAUS_DETACHNETWORKCHECK_ENABLED': False}

        m_get_nwinfo = self.create_patch(
            'nova.compute.utils.get_nw_info_for_instance')
        m_get_nwinfo.return_value = self.empty_nw

        result = detach_network_check.filter_factory(self.conf)(self.app)
        result.__call__.request(self.good_url, method='POST')
        self.assertEqual(0, self.m_get_context.call_count)
        self.assertEqual(self.app, result.app)
        result.__call__.request(self.good_url, method='PUT')
        self.assertEqual(0, self.m_get_context.call_count)
        self.assertEqual(self.app, result.app)
        result.__call__.request(self.good_url, method='GET')
        self.assertEqual(0, self.m_get_context.call_count)
        self.assertEqual(self.app, result.app)
        result.__call__.request(self.good_url, method='DELETE')
        self.assertEqual(1, self.m_get_context.call_count)

        # This waffle needs to be recreated due to the way that it stores the
        # values that we are testing.
        result = detach_network_check.filter_factory(self.conf)(self.app)
        result.__call__.request(self.good_url, method='POST', headers=headers)
        self.assertEqual(1, self.m_get_context.call_count)
        self.assertEqual(self.app, result.app)
        result.__call__.request(self.good_url, method='PUT', headers=headers)
        self.assertEqual(1, self.m_get_context.call_count)
        self.assertEqual(self.app, result.app)
        result.__call__.request(self.good_url, method='GET', headers=headers)
        self.assertEqual(1, self.m_get_context.call_count)
        self.assertEqual(self.app, result.app)
        result.__call__.request(self.good_url,
                                method='DELETE',
                                headers=headers)
        self.assertEqual(1, self.m_get_context.call_count)
    def test_runtime_overrides(self):
        self.set_reconfigure()
        headers = {'X_WAFFLEHAUS_DETACHNETWORKCHECK_ENABLED': False}

        m_get_nwinfo = self.create_patch(
            'nova.compute.utils.get_nw_info_for_instance')
        m_get_nwinfo.return_value = self.empty_nw

        result = detach_network_check.filter_factory(self.conf)(self.app)
        result.__call__.request(self.good_url, method='POST')
        self.assertEqual(0, self.m_get_context.call_count)
        self.assertEqual(self.app, result.app)
        result.__call__.request(self.good_url, method='PUT')
        self.assertEqual(0, self.m_get_context.call_count)
        self.assertEqual(self.app, result.app)
        result.__call__.request(self.good_url, method='GET')
        self.assertEqual(0, self.m_get_context.call_count)
        self.assertEqual(self.app, result.app)
        result.__call__.request(self.good_url, method='DELETE')
        self.assertEqual(1, self.m_get_context.call_count)

        # This waffle needs to be recreated due to the way that it stores the
        # values that we are testing.
        result = detach_network_check.filter_factory(self.conf)(self.app)
        result.__call__.request(self.good_url, method='POST', headers=headers)
        self.assertEqual(1, self.m_get_context.call_count)
        self.assertEqual(self.app, result.app)
        result.__call__.request(self.good_url, method='PUT', headers=headers)
        self.assertEqual(1, self.m_get_context.call_count)
        self.assertEqual(self.app, result.app)
        result.__call__.request(self.good_url, method='GET', headers=headers)
        self.assertEqual(1, self.m_get_context.call_count)
        self.assertEqual(self.app, result.app)
        result.__call__.request(self.good_url, method='DELETE',
                                headers=headers)
        self.assertEqual(1, self.m_get_context.call_count)
    def test_run_on_deletes(self):
        m_get_nwinfo = self.create_patch(
            'nova.compute.utils.get_nw_info_for_instance')
        m_get_nwinfo.return_value = self.empty_nw

        result = detach_network_check.filter_factory(self.conf)(self.app)
        result.__call__.request(self.good_url, method='POST')
        self.assertEqual(0, self.m_get_context.call_count)
        self.assertEqual(self.app, result.app)
        result.__call__.request(self.good_url, method='PUT')
        self.assertEqual(0, self.m_get_context.call_count)
        self.assertEqual(self.app, result.app)
        result.__call__.request(self.good_url, method='GET')
        self.assertEqual(0, self.m_get_context.call_count)
        self.assertEqual(self.app, result.app)
        result.__call__.request(self.good_url, method='DELETE')
        self.assertEqual(1, self.m_get_context.call_count)
    def test_run_on_deletes(self):
        m_get_nwinfo = self.create_patch(
            'nova.compute.utils.get_nw_info_for_instance')
        m_get_nwinfo.return_value = self.empty_nw

        result = detach_network_check.filter_factory(self.conf)(self.app)
        result.__call__.request(self.good_url, method='POST')
        self.assertEqual(0, self.m_get_context.call_count)
        self.assertEqual(self.app, result.app)
        result.__call__.request(self.good_url, method='PUT')
        self.assertEqual(0, self.m_get_context.call_count)
        self.assertEqual(self.app, result.app)
        result.__call__.request(self.good_url, method='GET')
        self.assertEqual(0, self.m_get_context.call_count)
        self.assertEqual(self.app, result.app)
        result.__call__.request(self.good_url, method='DELETE')
        self.assertEqual(1, self.m_get_context.call_count)
 def test_create_filter(self):
     result = detach_network_check.filter_factory(self.conf)(self.app)
     self.assertIsNotNone(result)
     self.assertIsNotNone(result.required_networks)
     self.assertTrue(self.reqnet_id in result.required_networks)
 def test_create_filter(self):
     result = detach_network_check.filter_factory(self.conf)(self.app)
     self.assertIsNotNone(result)
     self.assertIsNotNone(result.required_networks)
     self.assertTrue(self.reqnet_id in result.required_networks)