def test_get_to_ports(self, mock_neutron, mock_nova):
        """This should look exactly like disabled_filter (we ignore GETs)."""
        test_filter = nova_interaction.filter_factory(self.conf)(self.app)
        resp = test_filter(
            webob.Request.blank("/v2/ports/random_port_id", method="GET"))

        self.assertFalse(mock_nova.called)
        self.assertFalse(mock_neutron.called)
        self.assertEqual(resp, self.app)
    def test_post_to_ports_fail_on_nova(self, mock_neutron, mock_nova):
        mock_conn = mock.MagicMock()
        mock_conn.admin_virtual_interfaces.return_value = (503, "ERROR!")
        mock_nova.return_value = mock_conn
        req = webob.Request.blank("/v2/ports", method="POST")
        test_filter = nova_interaction.filter_factory(self.conf)(self.fake_app)
        resp = test_filter(req)
        fake_resp = self.fake_response(req, fail="nova")

        self.assertFalse(mock_neutron.called)
        self.assertTrue(mock_nova.called)
        self.assertTrue(mock_conn.admin_virtual_interfaces.called)
        self.assertEqual(resp.json, fake_resp.json)
        self.assertEqual(resp.status_code, 500)
    def test_put_to_ports_fail_on_nova(self, mock_neutron, mock_nova):
        """This is identical to the POST nova failure above, except PUT."""
        mock_conn = mock.MagicMock()
        mock_conn.admin_virtual_interfaces.return_value = (503, "ERROR!")
        mock_nova.return_value = mock_conn
        req = webob.Request.blank("/v2/ports/random_port_id", method="PUT")
        test_filter = nova_interaction.filter_factory(self.conf)(self.fake_app)
        resp = test_filter(req)
        fake_resp = self.fake_response(req, fail="nova")

        self.assertFalse(mock_neutron.called)
        self.assertTrue(mock_nova.called)
        self.assertTrue(mock_conn.admin_virtual_interfaces.called)
        self.assertEqual(resp.json, fake_resp.json)
        self.assertEqual(resp.status_code, 500)
    def test_delete_to_ports_fail_on_neutron(self, mock_neutron, mock_nova):
        """Test DELETE to /ports failing on Neutron callback.

           Delete includes a call to Neutron, so two failure tests needed.
        """

        mock_neutron_conn = mock.MagicMock()
        mock_neutron_conn.ports.return_value = (503, "ERROR!")
        mock_neutron.return_value = mock_neutron_conn
        req = webob.Request.blank("/v2/ports/random_port_id", method="DELETE")
        test_filter = nova_interaction.filter_factory(self.conf)(self.fake_app)
        resp = test_filter(req)
        fake_resp = self.fake_response(req, fail="neutron")

        self.assertTrue(mock_neutron.called)
        self.assertTrue(mock_neutron_conn.ports.called)
        self.assertFalse(mock_nova.called)
        self.assertEqual(resp.json, fake_resp.json)
        self.assertEqual(resp.status_code, 500)
    def test_delete_to_ports(self, mock_neutron, mock_nova):
        mock_neutron_conn = mock.MagicMock()
        mock_neutron_conn.ports.return_value = self.neutron_response
        mock_neutron.return_value = mock_neutron_conn
        mock_nova_conn = mock.MagicMock()
        mock_nova_conn.admin_virtual_interfaces.return_value = (
            self.nova_response)
        mock_nova.return_value = mock_nova_conn
        req = webob.Request.blank("/v2/ports/random_port_id", method="DELETE")
        test_filter = nova_interaction.filter_factory(self.conf)(self.fake_app)
        resp = test_filter(req)
        fake_resp = self.fake_response(req)

        self.assertTrue(mock_neutron.called)
        self.assertTrue(mock_neutron_conn.ports.called)
        self.assertTrue(mock_nova.called)
        self.assertTrue(mock_nova_conn.admin_virtual_interfaces.called)
        self.assertEqual(resp.json, fake_resp.json)
        self.assertEqual(resp.status_code, fake_resp.status_code)
    def test_disabled_filter(self):
        conf = {"enabled": "false"}
        test_filter = nova_interaction.filter_factory(conf)(self.app)
        resp = test_filter(webob.Request.blank("/v2/ports", method="POST"))

        self.assertEqual(resp, self.app)
    def test_filter_creation(self):
        test_filter = nova_interaction.filter_factory(self.conf)(self.fake_app)

        self.assertIsNotNone(test_filter)
        self.assertIsInstance(test_filter, nova_interaction.NovaInteraction)
        self.assertTrue(callable(test_filter))