Adds "add_dhcp_agent" to test_dhcp_agent_scheduler
This submission is to verify add-dhcp-agent-to-network functionality
and also added required support functions in both XML/JSON interfaces.
Change-Id: I6e9f8336db6d72b1123220f792091ca17b1b1647
diff --git a/tempest/api/network/admin/test_dhcp_agent_scheduler.py b/tempest/api/network/admin/test_dhcp_agent_scheduler.py
index 0e601d1..13ae1c0 100644
--- a/tempest/api/network/admin/test_dhcp_agent_scheduler.py
+++ b/tempest/api/network/admin/test_dhcp_agent_scheduler.py
@@ -59,17 +59,31 @@
return network_id in network_ids
@test.attr(type='smoke')
- def test_remove_network_from_dhcp_agent(self):
+ def test_add_remove_network_from_dhcp_agent(self):
# The agent is now bound to the network, we can free the port
self.client.delete_port(self.port['id'])
self.ports.remove(self.port)
- resp, body = self.admin_client.list_dhcp_agent_hosting_network(
- self.network['id'])
+ agent = dict()
+ agent['agent_type'] = None
+ resp, body = self.admin_client.list_agents()
agents = body['agents']
- self.assertIsNotNone(agents)
- # Get an agent.
- agent = agents[0]
- network_id = self.network['id']
+ for a in agents:
+ if a['agent_type'] == 'DHCP agent':
+ agent = a
+ break
+ self.assertEqual(agent['agent_type'], 'DHCP agent', 'Could not find '
+ 'DHCP agent in agent list though dhcp_agent_scheduler'
+ ' is enabled.')
+ network = self.create_network()
+ network_id = network['id']
+ if self._check_network_in_dhcp_agent(network_id, agent):
+ self._remove_network_from_dhcp_agent(network_id, agent)
+ self._add_dhcp_agent_to_network(network_id, agent)
+ else:
+ self._add_dhcp_agent_to_network(network_id, agent)
+ self._remove_network_from_dhcp_agent(network_id, agent)
+
+ def _remove_network_from_dhcp_agent(self, network_id, agent):
resp, body = self.admin_client.remove_network_from_dhcp_agent(
agent_id=agent['id'],
network_id=network_id)
@@ -77,6 +91,13 @@
self.assertFalse(self._check_network_in_dhcp_agent(
network_id, agent))
+ def _add_dhcp_agent_to_network(self, network_id, agent):
+ resp, body = self.admin_client.add_dhcp_agent_to_network(
+ agent['id'], network_id)
+ self.assertEqual(resp['status'], '201')
+ self.assertTrue(self._check_network_in_dhcp_agent(
+ network_id, agent))
+
class DHCPAgentSchedulersTestXML(DHCPAgentSchedulersTestJSON):
_interface = 'xml'
diff --git a/tempest/services/network/json/network_client.py b/tempest/services/network/json/network_client.py
index a804e8e..f31789c 100644
--- a/tempest/services/network/json/network_client.py
+++ b/tempest/services/network/json/network_client.py
@@ -339,3 +339,11 @@
resp, body = self.get(uri)
body = json.loads(body)
return resp, body
+
+ def add_dhcp_agent_to_network(self, agent_id, network_id):
+ post_body = {'network_id': network_id}
+ body = json.dumps(post_body)
+ uri = '%s/agents/%s/dhcp-networks' % (self.uri_prefix, agent_id)
+ resp, body = self.post(uri, body)
+ body = json.loads(body)
+ return resp, body
diff --git a/tempest/services/network/xml/network_client.py b/tempest/services/network/xml/network_client.py
index 2a5083c..4380ebd 100644
--- a/tempest/services/network/xml/network_client.py
+++ b/tempest/services/network/xml/network_client.py
@@ -277,6 +277,13 @@
body = _root_tag_fetcher_and_xml_to_json_parse(body)
return resp, body
+ def add_dhcp_agent_to_network(self, agent_id, network_id):
+ uri = '%s/agents/%s/dhcp-networks' % (self.uri_prefix, agent_id)
+ network = common.Element("network_id", network_id)
+ resp, body = self.post(uri, str(common.Document(network)))
+ body = _root_tag_fetcher_and_xml_to_json_parse(body)
+ return resp, body
+
def _root_tag_fetcher_and_xml_to_json_parse(xml_returned_body):
body = ET.fromstring(xml_returned_body)