Skip to content
This repository was archived by the owner on Jun 8, 2026. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 4 additions & 2 deletions samples/samples/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,8 @@
import pytest
from test_utils import retry

INSTANCE_CREATION_TIMEOUT = 240 # seconds

retry_429 = retry.RetryErrors(exceptions.ResourceExhausted, delay=15)


Expand Down Expand Up @@ -110,7 +112,7 @@ def sample_instance(
},
)
op = retry_429(sample_instance.create)()
op.result(120) # block until completion
op.result(INSTANCE_CREATION_TIMEOUT) # block until completion

# Eventual consistency check
retry_found = retry.RetryResult(bool)
Expand Down Expand Up @@ -145,7 +147,7 @@ def multi_region_instance(
},
)
op = retry_429(multi_region_instance.create)()
op.result(120) # block until completion
op.result(INSTANCE_CREATION_TIMEOUT) # block until completion

# Eventual consistency check
retry_found = retry.RetryResult(bool)
Expand Down
7 changes: 5 additions & 2 deletions tests/system/_helpers.py
Original file line number Diff line number Diff line change
Expand Up @@ -33,8 +33,11 @@
SKIP_BACKUP_TESTS_ENVVAR = "SKIP_BACKUP_TESTS"
SKIP_BACKUP_TESTS = os.getenv(SKIP_BACKUP_TESTS_ENVVAR) is not None

SPANNER_OPERATION_TIMEOUT_IN_SECONDS = int(
os.getenv("SPANNER_OPERATION_TIMEOUT_IN_SECONDS", 60)
INSTANCE_OPERATION_TIMEOUT_IN_SECONDS = int(
os.getenv("SPANNER_INSTANCE_OPERATION_TIMEOUT_IN_SECONDS", 240)
)
DATABASE_OPERATION_TIMEOUT_IN_SECONDS = int(
os.getenv("SPANNER_DATABASE_OPERATION_TIMEOUT_IN_SECONDS", 60)
)

USE_EMULATOR_ENVVAR = "SPANNER_EMULATOR_HOST"
Expand Down
17 changes: 11 additions & 6 deletions tests/system/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -58,8 +58,13 @@ def spanner_client():


@pytest.fixture(scope="session")
def operation_timeout():
return _helpers.SPANNER_OPERATION_TIMEOUT_IN_SECONDS
def instance_operation_timeout():
return _helpers.INSTANCE_OPERATION_TIMEOUT_IN_SECONDS


@pytest.fixture(scope="session")
def database_operation_timeout():
return _helpers.DATABASE_OPERATION_TIMEOUT_IN_SECONDS


@pytest.fixture(scope="session")
Expand Down Expand Up @@ -101,7 +106,7 @@ def existing_instances(spanner_client):
@pytest.fixture(scope="session")
def shared_instance(
spanner_client,
operation_timeout,
instance_operation_timeout,
shared_instance_id,
instance_config,
existing_instances, # evalutate before creating one
Expand All @@ -116,7 +121,7 @@ def shared_instance(
shared_instance_id, instance_config.name, labels=labels
)
created_op = _helpers.retry_429_503(instance.create)()
created_op.result(operation_timeout) # block until completion
created_op.result(instance_operation_timeout) # block until completion

else: # reuse existing instance
instance = spanner_client.instance(shared_instance_id)
Expand All @@ -129,14 +134,14 @@ def shared_instance(


@pytest.fixture(scope="session")
def shared_database(shared_instance, operation_timeout):
def shared_database(shared_instance, database_operation_timeout):
database_name = _helpers.unique_id("test_database")
pool = spanner_v1.BurstyPool(labels={"testcase": "database_api"})
database = shared_instance.database(
database_name, ddl_statements=_helpers.DDL_STATEMENTS, pool=pool
)
operation = database.create()
operation.result(operation_timeout) # raises on failure / timeout.
operation.result(database_operation_timeout) # raises on failure / timeout.

yield database

Expand Down
13 changes: 6 additions & 7 deletions tests/system/test_backup_api.py
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@


@pytest.fixture(scope="session")
def same_config_instance(spanner_client, shared_instance, operation_timeout):
def same_config_instance(spanner_client, shared_instance, instance_operation_timeout):
current_config = shared_instance.configuration_name
same_config_instance_id = _helpers.unique_id("same-config")
create_time = str(int(time.time()))
Expand All @@ -42,7 +42,7 @@ def same_config_instance(spanner_client, shared_instance, operation_timeout):
same_config_instance_id, current_config, labels=labels
)
op = same_config_instance.create()
op.result(operation_timeout)
op.result(instance_operation_timeout)

yield same_config_instance

Expand All @@ -60,7 +60,7 @@ def diff_config(shared_instance, instance_configs):

@pytest.fixture(scope="session")
def diff_config_instance(
spanner_client, shared_instance, operation_timeout, diff_config,
spanner_client, shared_instance, instance_operation_timeout, diff_config,
):
if diff_config is None:
return None
Expand All @@ -72,7 +72,7 @@ def diff_config_instance(
diff_config_instance_id, diff_config, labels=labels
)
op = diff_config_instance.create()
op.result(operation_timeout)
op.result(instance_operation_timeout)

yield diff_config_instance

Expand All @@ -85,14 +85,14 @@ def database_version_time():


@pytest.fixture(scope="session")
def second_database(shared_instance, operation_timeout):
def second_database(shared_instance, database_operation_timeout):
database_name = _helpers.unique_id("test_database2")
pool = spanner_v1.BurstyPool(labels={"testcase": "database_api"})
database = shared_instance.database(
database_name, ddl_statements=_helpers.DDL_STATEMENTS, pool=pool
)
operation = database.create()
operation.result(operation_timeout) # raises on failure / timeout.
operation.result(database_operation_timeout) # raises on failure / timeout.

yield database

Expand Down Expand Up @@ -319,7 +319,6 @@ def test_multi_create_cancel_update_error_restore_errors(
diff_config_instance,
backups_to_delete,
databases_to_delete,
operation_timeout,
):
backup_id_1 = _helpers.unique_id("backup_id1", separator="_")
backup_id_2 = _helpers.unique_id("backup_id2", separator="_")
Expand Down
4 changes: 2 additions & 2 deletions tests/system/test_database_api.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@


@pytest.fixture(scope="module")
def multiregion_instance(spanner_client, operation_timeout):
def multiregion_instance(spanner_client, instance_operation_timeout):
multi_region_instance_id = _helpers.unique_id("multi-region")
multi_region_config = "nam3"
config_name = "{}/instanceConfigs/{}".format(
Expand All @@ -41,7 +41,7 @@ def multiregion_instance(spanner_client, operation_timeout):
labels=labels,
)
operation = _helpers.retry_429_503(multiregion_instance.create)()
operation.result(operation_timeout)
operation.result(instance_operation_timeout)

yield multiregion_instance

Expand Down
4 changes: 2 additions & 2 deletions tests/system/test_dbapi.py
Original file line number Diff line number Diff line change
Expand Up @@ -35,14 +35,14 @@


@pytest.fixture(scope="session")
def raw_database(shared_instance, operation_timeout):
def raw_database(shared_instance, database_operation_timeout):
databse_id = _helpers.unique_id("dbapi-txn")
pool = spanner_v1.BurstyPool(labels={"testcase": "database_api"})
database = shared_instance.database(
databse_id, ddl_statements=DDL_STATEMENTS, pool=pool,
)
op = database.create()
op.result(operation_timeout) # raises on failure / timeout.
op.result(database_operation_timeout) # raises on failure / timeout.

yield database

Expand Down
12 changes: 6 additions & 6 deletions tests/system/test_instance_api.py
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ def test_create_instance(
spanner_client,
instance_config,
instances_to_delete,
operation_timeout,
instance_operation_timeout,
):
alt_instance_id = _helpers.unique_id("new")
instance = spanner_client.instance(alt_instance_id, instance_config.name)
Expand All @@ -70,7 +70,7 @@ def test_create_instance(
instances_to_delete.append(instance)

# We want to make sure the operation completes.
operation.result(operation_timeout) # raises on failure / timeout.
operation.result(instance_operation_timeout) # raises on failure / timeout.

# Create a new instance instance and make sure it is the same.
instance_alt = spanner_client.instance(alt_instance_id, instance_config.name)
Expand All @@ -86,7 +86,7 @@ def test_create_instance_with_processing_units(
spanner_client,
instance_config,
instances_to_delete,
operation_timeout,
instance_operation_timeout,
):
alt_instance_id = _helpers.unique_id("wpn")
processing_units = 5000
Expand All @@ -100,7 +100,7 @@ def test_create_instance_with_processing_units(
instances_to_delete.append(instance)

# We want to make sure the operation completes.
operation.result(operation_timeout) # raises on failure / timeout.
operation.result(instance_operation_timeout) # raises on failure / timeout.

# Create a new instance instance and make sure it is the same.
instance_alt = spanner_client.instance(alt_instance_id, instance_config.name)
Expand All @@ -116,15 +116,15 @@ def test_update_instance(
spanner_client,
shared_instance,
shared_instance_id,
operation_timeout,
instance_operation_timeout,
):
old_display_name = shared_instance.display_name
new_display_name = "Foo Bar Baz"
shared_instance.display_name = new_display_name
operation = shared_instance.update()

# We want to make sure the operation completes.
operation.result(operation_timeout) # raises on failure / timeout.
operation.result(instance_operation_timeout) # raises on failure / timeout.

# Create a new instance instance and reload it.
instance_alt = spanner_client.instance(shared_instance_id, None)
Expand Down
8 changes: 4 additions & 4 deletions tests/system/test_session_api.py
Original file line number Diff line number Diff line change
Expand Up @@ -146,14 +146,14 @@


@pytest.fixture(scope="session")
def sessions_database(shared_instance, operation_timeout):
def sessions_database(shared_instance, database_operation_timeout):
database_name = _helpers.unique_id("test_sessions", separator="_")
pool = spanner_v1.BurstyPool(labels={"testcase": "session_api"})
sessions_database = shared_instance.database(
database_name, ddl_statements=_helpers.DDL_STATEMENTS, pool=pool,
)
operation = sessions_database.create()
operation.result(operation_timeout) # raises on failure / timeout.
operation.result(database_operation_timeout) # raises on failure / timeout.

_helpers.retry_has_all_dll(sessions_database.reload)()
# Some tests expect there to be a session present in the pool.
Expand Down Expand Up @@ -1176,7 +1176,7 @@ def test_multiuse_snapshot_read_isolation_exact_staleness(sessions_database):
sd._check_row_data(after, all_data_rows)


def test_read_w_index(shared_instance, operation_timeout, databases_to_delete):
def test_read_w_index(shared_instance, database_operation_timeout, databases_to_delete):
# Indexed reads cannot return non-indexed columns
sd = _sample_data
row_count = 2000
Expand All @@ -1192,7 +1192,7 @@ def test_read_w_index(shared_instance, operation_timeout, databases_to_delete):
)
operation = temp_db.create()
databases_to_delete.append(temp_db)
operation.result(operation_timeout) # raises on failure / timeout.
operation.result(database_operation_timeout) # raises on failure / timeout.

committed = _set_up_table(temp_db, row_count)

Expand Down