Improve file scanning when publishing artifacts 33/68833/1
authorCédric Ollivier <cedric.ollivier@orange.com>
Sat, 9 Nov 2019 16:34:24 +0000 (17:34 +0100)
committerCédric Ollivier <cedric.ollivier@orange.com>
Sat, 9 Nov 2019 18:11:17 +0000 (19:11 +0100)
Else it copies files from other testcases if the full suite is
executed sequentially.

Change-Id: Ic61472e47b655c34823a6fcb3ed3615e8f84a4c1
Signed-off-by: Cédric Ollivier <cedric.ollivier@orange.com>
(cherry picked from commit a48c62165923be6a37aaff5d54918dbe9cb6ff58)

xtesting/core/testcase.py
xtesting/tests/unit/core/test_testcase.py

index 73a7371..54baaae 100644 (file)
@@ -67,6 +67,8 @@ class TestCase():
         self.start_time = 0
         self.stop_time = 0
         self.is_skipped = False
+        self.output_log_name = 'xtesting.log'
+        self.output_debug_log_name = 'xtesting.debug.log'
         self.res_dir = "{}/{}".format(self.dir_results, self.case_name)
 
     def __str__(self):
@@ -294,9 +296,19 @@ class TestCase():
                 typ, value, traceback = sys.exc_info()
                 six.reraise(typ, value, traceback)
             path = urllib.parse.urlparse(dst_s3_url).path.strip("/")
+            dst_http_url = os.environ["HTTP_DST_URL"]
             output_str = "\n"
             self.details["links"] = []
-            for root, _, files in os.walk(self.dir_results):
+            for log_file in [self.output_log_name, self.output_debug_log_name]:
+                if os.path.exists(os.path.join(self.dir_results, log_file)):
+                    # pylint: disable=no-member
+                    b3resource.Bucket(bucket_name).upload_file(
+                        os.path.join(self.dir_results, log_file),
+                        os.path.join(path, log_file))
+                    link = os.path.join(dst_http_url, log_file)
+                    output_str += "\n{}".format(link)
+                    self.details["links"].append(link)
+            for root, _, files in os.walk(self.res_dir):
                 for pub_file in files:
                     # pylint: disable=no-member
                     b3resource.Bucket(bucket_name).upload_file(
@@ -304,7 +316,6 @@ class TestCase():
                         os.path.join(path, os.path.relpath(
                             os.path.join(root, pub_file),
                             start=self.dir_results)))
-                    dst_http_url = os.environ["HTTP_DST_URL"]
                     link = os.path.join(dst_http_url, os.path.relpath(
                         os.path.join(root, pub_file),
                         start=self.dir_results))
index 7306214..6d18a96 100644 (file)
@@ -364,7 +364,7 @@ class TestCaseTesting(unittest.TestCase):
     def test_publish_artifacts1(self, *args):
         self.assertEqual(self.test.publish_artifacts(),
                          testcase.TestCase.EX_OK)
-        args[0].assert_called_once_with(self.test.dir_results)
+        args[0].assert_called_once_with(self.test.res_dir)
         args[1].assert_called_once_with(
             's3', endpoint_url=os.environ['S3_ENDPOINT_URL'])
 
@@ -377,10 +377,11 @@ class TestCaseTesting(unittest.TestCase):
             error_response, 'NoSuchBucket')
         self.assertEqual(self.test.publish_artifacts(),
                          testcase.TestCase.EX_OK)
-        args[0].assert_called_once_with(self.test.dir_results)
+        args[0].assert_called_once_with(self.test.res_dir)
         args[1].assert_called_once_with(
             's3', endpoint_url=os.environ['S3_ENDPOINT_URL'])
 
+    @mock.patch('os.path.exists', return_value=True)
     @mock.patch('boto3.resource')
     @mock.patch('os.walk',
                 return_value=[
@@ -388,11 +389,19 @@ class TestCaseTesting(unittest.TestCase):
     def test_publish_artifacts3(self, *args):
         self.assertEqual(self.test.publish_artifacts(),
                          testcase.TestCase.EX_OK)
-        args[0].assert_called_once_with(self.test.dir_results)
+        args[0].assert_called_once_with(self.test.res_dir)
         expected = [
             mock.call('s3', endpoint_url=os.environ['S3_ENDPOINT_URL']),
             mock.call().meta.client.head_bucket(Bucket='xtesting'),
             mock.call().Bucket('xtesting'),
+            mock.call().Bucket().upload_file(
+                '/var/lib/xtesting/results/xtesting.log',
+                'prefix/xtesting.log'),
+            mock.call().Bucket('xtesting'),
+            mock.call().Bucket().upload_file(
+                '/var/lib/xtesting/results/xtesting.debug.log',
+                'prefix/xtesting.debug.log'),
+            mock.call().Bucket('xtesting'),
             mock.call().Bucket().upload_file(
                 '/var/lib/xtesting/results/bar', 'prefix/bar')]
         self.assertEqual(args[1].mock_calls, expected)