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()