You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@beam.apache.org by da...@apache.org on 2025/10/16 18:34:31 UTC

(beam) branch master updated: Move setup/teardown to class level to avoid flakiness (#36546)

This is an automated email from the ASF dual-hosted git repository.

damccorm pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/beam.git


The following commit(s) were added to refs/heads/master by this push:
     new e87f8097e53 Move setup/teardown to class level to avoid flakiness (#36546)
e87f8097e53 is described below

commit e87f8097e53afcc3e2b57cef0c881e4755c78d76
Author: Danny McCormick <da...@google.com>
AuthorDate: Thu Oct 16 14:34:25 2025 -0400

    Move setup/teardown to class level to avoid flakiness (#36546)
    
    * Fix flaky tests caused by secret overlap
    
    * Move setup/teardown to class level to avoid flakiness
    
    * clean conflict
---
 sdks/python/apache_beam/transforms/core_it_test.py | 36 ++++++++++++----------
 sdks/python/apache_beam/transforms/util_test.py    | 36 ++++++++++++----------
 .../transforms/validate_runner_xlang_test.py       | 36 ++++++++++++----------
 3 files changed, 57 insertions(+), 51 deletions(-)

diff --git a/sdks/python/apache_beam/transforms/core_it_test.py b/sdks/python/apache_beam/transforms/core_it_test.py
index 4e084afe78a..18ae3f30f57 100644
--- a/sdks/python/apache_beam/transforms/core_it_test.py
+++ b/sdks/python/apache_beam/transforms/core_it_test.py
@@ -40,42 +40,44 @@ except ImportError:
 
 
 class GbekIT(unittest.TestCase):
-  def setUp(self):
+  @classmethod
+  def setUpClass(cls):
     if secretmanager is not None:
-      self.project_id = 'apache-beam-testing'
+      cls.project_id = 'apache-beam-testing'
       py_version = f'_py{sys.version_info.major}{sys.version_info.minor}'
       secret_postfix = datetime.now().strftime('%m%d_%H%M%S') + py_version
-      self.secret_id = 'gbekit_secret_tests_' + secret_postfix
-      self.client = secretmanager.SecretManagerServiceClient()
-      self.project_path = f'projects/{self.project_id}'
-      self.secret_path = f'{self.project_path}/secrets/{self.secret_id}'
+      cls.secret_id = 'gbekit_secret_tests_' + secret_postfix
+      cls.client = secretmanager.SecretManagerServiceClient()
+      cls.project_path = f'projects/{cls.project_id}'
+      cls.secret_path = f'{cls.project_path}/secrets/{cls.secret_id}'
       try:
-        self.client.get_secret(request={'name': self.secret_path})
+        cls.client.get_secret(request={'name': cls.secret_path})
       except Exception:
-        self.client.create_secret(
+        cls.client.create_secret(
             request={
-                'parent': self.project_path,
-                'secret_id': self.secret_id,
+                'parent': cls.project_path,
+                'secret_id': cls.secret_id,
                 'secret': {
                     'replication': {
                         'automatic': {}
                     }
                 }
             })
-        self.client.add_secret_version(
+        cls.client.add_secret_version(
             request={
-                'parent': self.secret_path,
+                'parent': cls.secret_path,
                 'payload': {
                     'data': Secret.generate_secret_bytes()
                 }
             })
-      version_name = f'{self.secret_path}/versions/latest'
-      self.gcp_secret = GcpSecret(version_name)
-      self.secret_option = f'type:GcpSecret;version_name:{version_name}'
+      version_name = f'{cls.secret_path}/versions/latest'
+      cls.gcp_secret = GcpSecret(version_name)
+      cls.secret_option = f'type:GcpSecret;version_name:{version_name}'
 
-  def tearDown(self):
+  @classmethod
+  def tearDownClass(cls):
     if secretmanager is not None:
-      self.client.delete_secret(request={'name': self.secret_path})
+      cls.client.delete_secret(request={'name': cls.secret_path})
 
   @pytest.mark.it_postcommit
   @unittest.skipIf(secretmanager is None, 'GCP dependencies are not installed')
diff --git a/sdks/python/apache_beam/transforms/util_test.py b/sdks/python/apache_beam/transforms/util_test.py
index 764c790064e..34e251fad1c 100644
--- a/sdks/python/apache_beam/transforms/util_test.py
+++ b/sdks/python/apache_beam/transforms/util_test.py
@@ -316,42 +316,44 @@ class SecretTest(unittest.TestCase):
 
 
 class GroupByEncryptedKeyTest(unittest.TestCase):
-  def setUp(self):
+  @classmethod
+  def setUpClass(cls):
     if secretmanager is not None:
-      self.project_id = 'apache-beam-testing'
+      cls.project_id = 'apache-beam-testing'
       py_version = f'_py{sys.version_info.major}{sys.version_info.minor}'
       secret_postfix = datetime.now().strftime('%m%d_%H%M%S') + py_version
-      self.secret_id = 'gbek_util_secret_tests_' + secret_postfix
-      self.client = secretmanager.SecretManagerServiceClient()
-      self.project_path = f'projects/{self.project_id}'
-      self.secret_path = f'{self.project_path}/secrets/{self.secret_id}'
+      cls.secret_id = 'gbek_util_secret_tests_' + secret_postfix
+      cls.client = secretmanager.SecretManagerServiceClient()
+      cls.project_path = f'projects/{cls.project_id}'
+      cls.secret_path = f'{cls.project_path}/secrets/{cls.secret_id}'
       try:
-        self.client.get_secret(request={'name': self.secret_path})
+        cls.client.get_secret(request={'name': cls.secret_path})
       except Exception:
-        self.client.create_secret(
+        cls.client.create_secret(
             request={
-                'parent': self.project_path,
-                'secret_id': self.secret_id,
+                'parent': cls.project_path,
+                'secret_id': cls.secret_id,
                 'secret': {
                     'replication': {
                         'automatic': {}
                     }
                 }
             })
-        self.client.add_secret_version(
+        cls.client.add_secret_version(
             request={
-                'parent': self.secret_path,
+                'parent': cls.secret_path,
                 'payload': {
                     'data': Secret.generate_secret_bytes()
                 }
             })
-      version_name = f'{self.secret_path}/versions/latest'
-      self.gcp_secret = GcpSecret(version_name)
-      self.secret_option = f'type:GcpSecret;version_name:{version_name}'
+      version_name = f'{cls.secret_path}/versions/latest'
+      cls.gcp_secret = GcpSecret(version_name)
+      cls.secret_option = f'type:GcpSecret;version_name:{version_name}'
 
-  def tearDown(self):
+  @classmethod
+  def tearDownClass(cls):
     if secretmanager is not None:
-      self.client.delete_secret(request={'name': self.secret_path})
+      cls.client.delete_secret(request={'name': cls.secret_path})
 
   def test_gbek_fake_secret_manager_roundtrips(self):
     fakeSecret = FakeSecret()
diff --git a/sdks/python/apache_beam/transforms/validate_runner_xlang_test.py b/sdks/python/apache_beam/transforms/validate_runner_xlang_test.py
index f9454797763..72371b38fdf 100644
--- a/sdks/python/apache_beam/transforms/validate_runner_xlang_test.py
+++ b/sdks/python/apache_beam/transforms/validate_runner_xlang_test.py
@@ -331,42 +331,44 @@ class ValidateRunnerXlangTest(unittest.TestCase):
     "EXPANSION_PORT environment var is not provided.")
 @unittest.skipIf(secretmanager is None, 'secretmanager not installed')
 class ValidateRunnerGBEKTest(unittest.TestCase):
-  def setUp(self):
+  @classmethod
+  def setUpClass(cls):
     if secretmanager is not None:
-      self.project_id = 'apache-beam-testing'
+      cls.project_id = 'apache-beam-testing'
       py_version = f'_py{sys.version_info.major}{sys.version_info.minor}'
       secret_postfix = datetime.now().strftime('%m%d_%H%M%S') + py_version
-      self.secret_id = 'gbek_validaterunner_secret_tests_' + secret_postfix
-      self.client = secretmanager.SecretManagerServiceClient()
-      self.project_path = f'projects/{self.project_id}'
-      self.secret_path = f'{self.project_path}/secrets/{self.secret_id}'
+      cls.secret_id = 'gbek_validaterunner_secret_tests_' + secret_postfix
+      cls.client = secretmanager.SecretManagerServiceClient()
+      cls.project_path = f'projects/{cls.project_id}'
+      cls.secret_path = f'{cls.project_path}/secrets/{cls.secret_id}'
       try:
-        self.client.get_secret(request={'name': self.secret_path})
+        cls.client.get_secret(request={'name': cls.secret_path})
       except Exception:
-        self.client.create_secret(
+        cls.client.create_secret(
             request={
-                'parent': self.project_path,
-                'secret_id': self.secret_id,
+                'parent': cls.project_path,
+                'secret_id': cls.secret_id,
                 'secret': {
                     'replication': {
                         'automatic': {}
                     }
                 }
             })
-        self.client.add_secret_version(
+        cls.client.add_secret_version(
             request={
-                'parent': self.secret_path,
+                'parent': cls.secret_path,
                 'payload': {
                     'data': Secret.generate_secret_bytes()
                 }
             })
-      version_name = f'{self.secret_path}/versions/latest'
-      self.gcp_secret = GcpSecret(version_name)
-      self.secret_option = f'type:GcpSecret;version_name:{version_name}'
+      version_name = f'{cls.secret_path}/versions/latest'
+      cls.gcp_secret = GcpSecret(version_name)
+      cls.secret_option = f'type:GcpSecret;version_name:{version_name}'
 
-  def tearDown(self):
+  @classmethod
+  def tearDownClass(cls):
     if secretmanager is not None:
-      self.client.delete_secret(request={'name': self.secret_path})
+      cls.client.delete_secret(request={'name': cls.secret_path})
 
   def create_pipeline(self):
     test_pipeline = TestPipeline()