Fix issue with 404 logs on wait for delete.

In some cases the wait on volume deletes will receive a 404
error which results in a log output. However for these tests
this is the expected behavior so the log output isn't needed.

This adds a flag to suppress log output on 404 errors, which
is then used on all wait functions.

Fixes: bug 1084283
Change-Id: Id455a22317ecbdf318e9ad2ea0a76ad9f08ca899
diff --git a/tempest/common/rest_client.py b/tempest/common/rest_client.py
index 52ed6bc..8311365 100644
--- a/tempest/common/rest_client.py
+++ b/tempest/common/rest_client.py
@@ -162,8 +162,8 @@
     def post(self, url, body, headers):
         return self.request('POST', url, headers, body)
 
-    def get(self, url, headers=None):
-        return self.request('GET', url, headers)
+    def get(self, url, headers=None, wait=None):
+        return self.request('GET', url, headers, wait=wait)
 
     def delete(self, url, headers=None):
         return self.request('DELETE', url, headers)
@@ -186,7 +186,8 @@
     def _parse_resp(self, body):
         return json.loads(body)
 
-    def request(self, method, url, headers=None, body=None, depth=0):
+    def request(self, method, url,
+                headers=None, body=None, depth=0, wait=None):
         """A simple HTTP request interface."""
 
         if (self.token is None) or (self.base_url is None):
@@ -205,7 +206,8 @@
             raise exceptions.Unauthorized()
 
         if resp.status == 404:
-            self._log(req_url, body, resp, resp_body)
+            if not wait:
+                self._log(req_url, body, resp, resp_body)
             raise exceptions.NotFound(resp_body)
 
         if resp.status == 400:
diff --git a/tempest/services/compute/json/volumes_extensions_client.py b/tempest/services/compute/json/volumes_extensions_client.py
index 5ac1124..240bcfe 100644
--- a/tempest/services/compute/json/volumes_extensions_client.py
+++ b/tempest/services/compute/json/volumes_extensions_client.py
@@ -59,10 +59,10 @@
         body = json.loads(body)
         return resp, body['volumes']
 
-    def get_volume(self, volume_id):
+    def get_volume(self, volume_id, wait=None):
         """Returns the details of a single volume"""
         url = "os-volumes/%s" % str(volume_id)
-        resp, body = self.get(url)
+        resp, body = self.get(url, wait=wait)
         body = json.loads(body)
         return resp, body['volume']
 
@@ -111,7 +111,7 @@
 
     def is_resource_deleted(self, id):
         try:
-            self.get_volume(id)
+            self.get_volume(id, wait=True)
         except exceptions.NotFound:
             return True
         return False
diff --git a/tempest/services/compute/xml/volumes_extensions_client.py b/tempest/services/compute/xml/volumes_extensions_client.py
index 6869360..0fbc070 100644
--- a/tempest/services/compute/xml/volumes_extensions_client.py
+++ b/tempest/services/compute/xml/volumes_extensions_client.py
@@ -79,10 +79,10 @@
             volumes += [self._parse_volume(vol) for vol in list(body)]
         return resp, volumes
 
-    def get_volume(self, volume_id):
+    def get_volume(self, volume_id, wait=None):
         """Returns the details of a single volume"""
         url = "os-volumes/%s" % str(volume_id)
-        resp, body = self.get(url, self.headers)
+        resp, body = self.get(url, self.headers, wait=wait)
         body = etree.fromstring(body)
         return resp, self._parse_volume(body)
 
@@ -139,7 +139,7 @@
 
     def is_resource_deleted(self, id):
         try:
-            self.get_volume(id)
+            self.get_volume(id, wait=True)
         except exceptions.NotFound:
             return True
         return False
diff --git a/tempest/services/volume/json/volumes_client.py b/tempest/services/volume/json/volumes_client.py
index 6f04e5e..28dae4e 100644
--- a/tempest/services/volume/json/volumes_client.py
+++ b/tempest/services/volume/json/volumes_client.py
@@ -62,10 +62,10 @@
         body = json.loads(body)
         return resp, body['volumes']
 
-    def get_volume(self, volume_id):
+    def get_volume(self, volume_id, wait=None):
         """Returns the details of a single volume"""
         url = "volumes/%s" % str(volume_id)
-        resp, body = self.get(url)
+        resp, body = self.get(url, wait=wait)
         body = json.loads(body)
         return resp, body['volume']
 
@@ -133,7 +133,7 @@
 
     def is_resource_deleted(self, id):
         try:
-            self.get_volume(id)
+            self.get_volume(id, wait=True)
         except exceptions.NotFound:
             return True
         return False
diff --git a/tempest/services/volume/xml/volumes_client.py b/tempest/services/volume/xml/volumes_client.py
index ef5f3e9..9d2f159 100644
--- a/tempest/services/volume/xml/volumes_client.py
+++ b/tempest/services/volume/xml/volumes_client.py
@@ -82,10 +82,10 @@
             volumes += [self._parse_volume(vol) for vol in list(body)]
         return resp, volumes
 
-    def get_volume(self, volume_id):
+    def get_volume(self, volume_id, wait=None):
         """Returns the details of a single volume"""
         url = "volumes/%s" % str(volume_id)
-        resp, body = self.get(url, self.headers)
+        resp, body = self.get(url, self.headers, wait=wait)
         body = etree.fromstring(body)
         return resp, self._parse_volume(body)
 
@@ -140,7 +140,7 @@
 
     def is_resource_deleted(self, id):
         try:
-            self.get_volume(id)
+            self.get_volume(id, wait=True)
         except exceptions.NotFound:
             return True
         return False