Add Networks client unit tests

Change-Id: I71589d2082d85ce8203f08a94d19fc58a10edc59
Partially Implements: blueprint tempest-lib-missing-test-coverage
diff --git a/tempest/tests/lib/services/network/test_networks_client.py b/tempest/tests/lib/services/network/test_networks_client.py
new file mode 100644
index 0000000..078f4b0
--- /dev/null
+++ b/tempest/tests/lib/services/network/test_networks_client.py
@@ -0,0 +1,242 @@
+# Copyright 2017 AT&T Corporation.
+# All rights reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+import copy
+
+from tempest.lib.services.network import networks_client
+from tempest.tests.lib import fake_auth_provider
+from tempest.tests.lib.services import base
+
+
+class TestNetworksClient(base.BaseServiceTest):
+
+    FAKE_NETWORKS = {
+        "networks": [
+            {
+                "admin_state_up": True,
+                "availability_zone_hints": [],
+                "availability_zones": [
+                    "nova"
+                ],
+                "created_at": "2016-03-08T20:19:41",
+                "id": "d32019d3-bc6e-4319-9c1d-6722fc136a22",
+                "mtu": 0,
+                "name": "net1",
+                "port_security_enabled": True,
+                "project_id": "4fd44f30292945e481c7b8a0c8908869",
+                "qos_policy_id": "6a8454ade84346f59e8d40665f878b2e",
+                "router:external": False,
+                "shared": False,
+                "status": "ACTIVE",
+                "subnets": [
+                        "54d6f61d-db07-451c-9ab3-b9609b6b6f0b"
+                ],
+                "tenant_id": "4fd44f30292945e481c7b8a0c8908869",
+                "updated_at": "2016-03-08T20:19:41",
+                "vlan_transparent": True,
+                "description": ""
+            },
+            {
+                "admin_state_up": True,
+                "availability_zone_hints": [],
+                "availability_zones": [
+                    "nova"
+                ],
+                "id": "db193ab3-96e3-4cb3-8fc5-05f4296d0324",
+                "mtu": 0,
+                "name": "net2",
+                "port_security_enabled": True,
+                "project_id": "26a7980765d0414dbc1fc1f88cdb7e6e",
+                "qos_policy_id": "bfdb6c39f71e4d44b1dfbda245c50819",
+                "router:external": False,
+                "shared": False,
+                "status": "ACTIVE",
+                "subnets": [
+                        "08eae331-0402-425a-923c-34f7cfe39c1b"
+                ],
+                "tenant_id": "26a7980765d0414dbc1fc1f88cdb7e6e",
+                "updated_at": "2016-03-08T20:19:41",
+                "vlan_transparent": False,
+                "description": ""
+            }
+        ]
+    }
+
+    FAKE_NETWORK_ID = "d32019d3-bc6e-4319-9c1d-6722fc136a22"
+
+    FAKE_NETWORK1 = {
+        "name": "net1",
+        "admin_state_up": True,
+        "qos_policy_id": "6a8454ade84346f59e8d40665f878b2e"
+    }
+
+    FAKE_NETWORK2 = {
+        "name": "net2",
+        "admin_state_up": True,
+        "qos_policy_id": "bfdb6c39f71e4d44b1dfbda245c50819"
+    }
+
+    FAKE_NETWORKS_REQ = {
+        "networks": [
+            FAKE_NETWORK1,
+            FAKE_NETWORK2
+        ]
+    }
+
+    FAKE_DHCP_AGENT_NETWORK_ID = "80515c45-651f-4f9a-b82b-2ca8a7301a8d"
+
+    FAKE_DHCP_AGENTS = {
+        "agents": [
+            {
+                "binary": "neutron-dhcp-agent",
+                "description": None,
+                "admin_state_up": True,
+                "heartbeat_timestamp": "2017-06-22 18:29:50",
+                "availability_zone": "nova",
+                "alive": True,
+                "topic": "dhcp_agent",
+                "host": "osboxes",
+                "agent_type": "DHCP agent",
+                "resource_versions": {},
+                "created_at": "2017-06-19 21:39:51",
+                "started_at": "2017-06-19 21:39:51",
+                "id": "b6cfb7a1-6ac4-4980-993c-9d295d37062e",
+                "configurations": {
+                    "subnets": 2,
+                    "dhcp_lease_duration": 86400,
+                    "dhcp_driver": "neutron.agent.linux.dhcp.Dnsmasq",
+                    "networks": 1,
+                    "log_agent_heartbeats": False,
+                    "ports": 3
+                }
+            }
+        ]
+    }
+
+    def setUp(self):
+        super(TestNetworksClient, self).setUp()
+        fake_auth = fake_auth_provider.FakeAuthProvider()
+        self.networks_client = networks_client.NetworksClient(
+            fake_auth, "network", "regionOne")
+
+    def _test_list_networks(self, bytes_body=False):
+        self.check_service_client_function(
+            self.networks_client.list_networks,
+            "tempest.lib.common.rest_client.RestClient.get",
+            self.FAKE_NETWORKS,
+            bytes_body,
+            200)
+
+    def _test_create_network(self, bytes_body=False):
+        self.check_service_client_function(
+            self.networks_client.create_network,
+            "tempest.lib.common.rest_client.RestClient.post",
+            {"network": self.FAKE_NETWORKS["networks"][0]},
+            bytes_body,
+            201,
+            **self.FAKE_NETWORK1)
+
+    def _test_create_bulk_networks(self, bytes_body=False):
+        self.check_service_client_function(
+            self.networks_client.create_bulk_networks,
+            "tempest.lib.common.rest_client.RestClient.post",
+            self.FAKE_NETWORKS,
+            bytes_body,
+            201,
+            networks=self.FAKE_NETWORKS_REQ)
+
+    def _test_show_network(self, bytes_body=False):
+        self.check_service_client_function(
+            self.networks_client.show_network,
+            "tempest.lib.common.rest_client.RestClient.get",
+            {"network": self.FAKE_NETWORKS["networks"][0]},
+            bytes_body,
+            200,
+            network_id=self.FAKE_NETWORK_ID)
+
+    def _test_update_network(self, bytes_body=False):
+        update_kwargs = {
+            "name": "sample_network_5_updated",
+            "qos_policy_id": "6a8454ade84346f59e8d40665f878b2e"
+        }
+
+        resp_body = {
+            "network": copy.deepcopy(
+                self.FAKE_NETWORKS["networks"][0]
+            )
+        }
+        resp_body["network"].update(update_kwargs)
+
+        self.check_service_client_function(
+            self.networks_client.update_network,
+            "tempest.lib.common.rest_client.RestClient.put",
+            resp_body,
+            bytes_body,
+            200,
+            network_id=self.FAKE_NETWORK_ID,
+            **update_kwargs)
+
+    def _test_list_dhcp_agents_on_hosting_network(self, bytes_body=False):
+        self.check_service_client_function(
+            self.networks_client.list_dhcp_agents_on_hosting_network,
+            "tempest.lib.common.rest_client.RestClient.get",
+            self.FAKE_DHCP_AGENTS,
+            bytes_body,
+            200,
+            network_id=self.FAKE_DHCP_AGENT_NETWORK_ID)
+
+    def test_delete_network(self):
+        self.check_service_client_function(
+            self.networks_client.delete_network,
+            "tempest.lib.common.rest_client.RestClient.delete",
+            {},
+            status=204,
+            network_id=self.FAKE_NETWORK_ID)
+
+    def test_list_networks_with_str_body(self):
+        self._test_list_networks()
+
+    def test_list_networks_with_bytes_body(self):
+        self._test_list_networks(bytes_body=True)
+
+    def test_create_network_with_str_body(self):
+        self._test_create_network()
+
+    def test_create_network_with_bytes_body(self):
+        self._test_create_network(bytes_body=True)
+
+    def test_create_bulk_network_with_str_body(self):
+        self._test_create_bulk_networks()
+
+    def test_create_bulk_network_with_bytes_body(self):
+        self._test_create_bulk_networks(bytes_body=True)
+
+    def test_show_network_with_str_body(self):
+        self._test_show_network()
+
+    def test_show_network_with_bytes_body(self):
+        self._test_show_network(bytes_body=True)
+
+    def test_update_network_with_str_body(self):
+        self._test_update_network()
+
+    def test_update_network_with_bytes_body(self):
+        self._test_update_network(bytes_body=True)
+
+    def test_list_dhcp_agents_on_hosting_network_with_str_body(self):
+        self._test_list_dhcp_agents_on_hosting_network()
+
+    def test_list_dhcp_agents_on_hosting_network_with_bytes_body(self):
+        self._test_list_dhcp_agents_on_hosting_network(bytes_body=True)