Fix behave driver and its related unit tests
[functest-xtesting.git] / xtesting / core / testcase.py
index c3b8f61..c4dec22 100644 (file)
@@ -19,6 +19,7 @@ import re
 import sys
 
 import boto3
+from boto3.s3.transfer import TransferConfig
 import botocore
 import prettytable
 import requests
@@ -56,7 +57,7 @@ class TestCase():
 
     dir_results = "/var/lib/xtesting/results"
     _job_name_rule = "(dai|week)ly-(.+?)-[0-9]*"
-    _headers = {'Content-Type': 'application/json'}
+    headers = {'Content-Type': 'application/json'}
     __logger = logging.getLogger(__name__)
 
     def __init__(self, **kwargs):
@@ -233,16 +234,17 @@ class TestCase():
                 data["version"] = "unknown"
             req = requests.post(
                 url, data=json.dumps(data, sort_keys=True),
-                headers=self._headers)
+                headers=self.headers)
             req.raise_for_status()
             if urllib.parse.urlparse(url).scheme != "file":
-                res_url = req.json()["href"]
-                if env.get('TEST_DB_EXT_URL'):
-                    res_url = res_url.replace(
-                        env.get('TEST_DB_URL'), env.get('TEST_DB_EXT_URL'))
+                # href must be postprocessed as OPNFV testapi is misconfigured
+                # (localhost is returned)
+                uid = re.sub(r'^.*/api/v1/results/*', '', req.json()["href"])
+                netloc = env.get('TEST_DB_EXT_URL') if env.get(
+                    'TEST_DB_EXT_URL') else env.get('TEST_DB_URL')
                 self.__logger.info(
                     "The results were successfully pushed to DB: \n\n%s\n",
-                    res_url)
+                    os.path.join(netloc, uid))
         except AssertionError:
             self.__logger.exception(
                 "Please run test before publishing the results")
@@ -282,6 +284,9 @@ class TestCase():
             b3resource = boto3.resource(
                 's3', endpoint_url=os.environ["S3_ENDPOINT_URL"])
             dst_s3_url = os.environ["S3_DST_URL"]
+            multipart_threshold = 5 * 1024 ** 5 if "google" in os.environ[
+                "S3_ENDPOINT_URL"] else 8 * 1024 * 1024
+            config = TransferConfig(multipart_threshold=multipart_threshold)
             bucket_name = urllib.parse.urlparse(dst_s3_url).netloc
             try:
                 b3resource.meta.client.head_bucket(Bucket=bucket_name)
@@ -308,8 +313,7 @@ class TestCase():
                         "Publishing %s %s", abs_file, mime_type)
                     # pylint: disable=no-member
                     b3resource.Bucket(bucket_name).upload_file(
-                        abs_file,
-                        os.path.join(path, log_file),
+                        abs_file, os.path.join(path, log_file), Config=config,
                         ExtraArgs={'ContentType': mime_type[
                             0] or 'application/octet-stream'})
                     link = os.path.join(dst_http_url, log_file)
@@ -327,6 +331,7 @@ class TestCase():
                         os.path.join(path, os.path.relpath(
                             os.path.join(root, pub_file),
                             start=self.dir_results)),
+                        Config=config,
                         ExtraArgs={'ContentType': mime_type[
                             0] or 'application/octet-stream'})
                     link = os.path.join(dst_http_url, os.path.relpath(