Skip to content

Commit 061d494

Browse files
tests: Fix some flakes (#3246)
1 parent 24df71b commit 061d494

File tree

5 files changed

+70
-15
lines changed

5 files changed

+70
-15
lines changed

pubsub/api/Pubsub.Samples.Tests/CreateTopicWithCloudStorageIngestionTest.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,9 +40,9 @@ public void CreateTopicWithCloudStorageIngestion()
4040
DateTimeOffset minimumObjectCreateTime = new DateTimeOffset(1970, 1, 1, 0, 0, 0, TimeSpan.Zero);
4141
Topic createdTopic = _createTopicWithCloudStorageIngestionSample.CreateTopicWithCloudStorageIngestion(_pubsubFixture.ProjectId, topicId, bucket, inputFormat, textDelimiter, matchGlob, minimumObjectCreateTime);
4242

43-
// Confirm that the created topic and topic retrieved by ID are equal
43+
// Confirm that the created topic and topic retrieved by ID have the same ingestion settings.
4444
Topic retrievedTopic = _pubsubFixture.GetTopic(topicId);
45-
Assert.Equal(createdTopic, retrievedTopic);
45+
Assert.Equal(createdTopic.IngestionDataSourceSettings, retrievedTopic.IngestionDataSourceSettings);
4646

4747
// Confirm that all Cloud Storage Ingestion params are equal to expected values
4848
Assert.Equal(bucket, createdTopic.IngestionDataSourceSettings.CloudStorage.Bucket);

spanner/api/Spanner.Samples.Tests/CreateInstanceWithoutDefaultBackupSchedulesTest.cs

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -33,13 +33,11 @@ public async Task TestCreateInstanceAsync()
3333
CreateInstanceWithoutDefaultBackupSchedulesAsyncSample createInstanceSample =
3434
new CreateInstanceWithoutDefaultBackupSchedulesAsyncSample();
3535

36-
var instanceId = SpannerFixture.GenerateId("default-schedule-test-");
36+
var instanceId = SpannerFixture.GenerateId(SpannerFixture.BackupInstancePrefix);
37+
_spannerFixture.MarkInstanceForDeletion(instanceId);
3738
Instance instance = await createInstanceSample.CreateInstanceWithoutDefaultBackupSchedulesAsync(
3839
_spannerFixture.ProjectId, instanceId);
3940

4041
Assert.Equal(Instance.Types.DefaultBackupScheduleType.None, instance.DefaultBackupScheduleType);
41-
42-
await _spannerFixture.InstanceAdminClient.DeleteInstanceAsync(
43-
InstanceName.FromProjectInstance(_spannerFixture.ProjectId, instanceId));
4442
}
4543
}

spanner/api/Spanner.Samples.Tests/SpannerFixture.cs

Lines changed: 63 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,11 @@ LastName STRING(1024)
4545
AlbumTitle STRING(MAX)
4646
) PRIMARY KEY (SingerId, AlbumId)";
4747

48+
public const string BackupInstancePrefix = "default-schedule-test-";
49+
public const string InstanceWithProcessingUnitsPrefix = "my-ins-pu-";
50+
public const string InstanceWithMultiRegionPrefix = "my-ins-mr-";
51+
public const string InstanceWithInstancePartitionPrefix = "my-ins-prt-";
52+
4853
public string ProjectId { get; } = Environment.GetEnvironmentVariable("GOOGLE_PROJECT_ID");
4954
// Allow environment variables to override the default instance and database names.
5055
public string InstanceId { get; } = Environment.GetEnvironmentVariable("TEST_SPANNER_INSTANCE") ?? "my-instance";
@@ -86,13 +91,15 @@ AlbumTitle STRING(MAX)
8691
Environment.GetEnvironmentVariable("spanner.test.key.name") ?? "spanner-test-key");
8792
public CryptoKeyName[] KmsKeyNames { get; private set; }
8893

89-
public string InstanceIdWithProcessingUnits { get; } = GenerateId("my-ins-pu-");
90-
public string InstanceIdWithMultiRegion { get; } = GenerateId("my-ins-mr-");
91-
public string InstanceIdWithInstancePartition { get; } = GenerateId("my-ins-prt-");
94+
public string InstanceIdWithProcessingUnits { get; } = GenerateId(InstanceWithProcessingUnitsPrefix);
95+
public string InstanceIdWithMultiRegion { get; } = GenerateId(InstanceWithMultiRegionPrefix);
96+
public string InstanceIdWithInstancePartition { get; } = GenerateId(InstanceWithInstancePartitionPrefix);
9297
public string InstanceConfigId { get; } = "nam6";
9398

9499
private IList<string> TempDbIds { get; } = new List<string>();
95100

101+
private IList<string> TempInstanceIds { get; } = new List<string>();
102+
96103
public DatabaseAdminClient DatabaseAdminClient { get; private set; }
97104
public InstanceAdminClient InstanceAdminClient { get; private set; }
98105
public SpannerConnection AdminSpannerConnection { get; private set; }
@@ -151,7 +158,9 @@ public async Task DisposeAsync()
151158
DeleteInstanceAsync(InstanceIdWithInstancePartition),
152159
DeleteBackupAsync(ToBeCancelledBackupId),
153160
DeleteBackupAsync(EncryptedBackupId),
154-
DeleteBackupAsync(MultiRegionEncryptedRestoreDatabaseId)
161+
DeleteBackupAsync(MultiRegionEncryptedRestoreDatabaseId),
162+
DeleteStaleInstancesAsync(),
163+
DeleteStaleDatabaseAsync(),
155164
};
156165
DeleteInstanceConfig(CreateCustomInstanceConfigId);
157166
DeleteInstanceConfig(UpdateCustomInstanceConfigId);
@@ -162,6 +171,11 @@ public async Task DisposeAsync()
162171
cleanupTasks.Add(DeleteDatabaseAsync(id));
163172
}
164173

174+
foreach (string id in TempInstanceIds)
175+
{
176+
cleanupTasks.Add(DeleteInstanceAsync(id));
177+
}
178+
165179
await Task.WhenAll(cleanupTasks);
166180
}
167181
finally
@@ -422,6 +436,49 @@ private async Task InitializeMultiRegionEncryptedBackupAsync()
422436
}
423437
}
424438

439+
/// <summary>
440+
/// Not all tests delete resources appropiately.
441+
/// We should fix that, but in the meantime, we can at least clean some stale resources.
442+
/// </summary>
443+
private async Task DeleteStaleInstancesAsync()
444+
{
445+
var now = DateTimeOffset.UtcNow;
446+
var oneDay = TimeSpan.FromDays(1);
447+
await foreach(var instance in InstanceAdminClient.ListInstancesAsync(ProjectName.FromProject(ProjectId)))
448+
{
449+
if ((instance.InstanceName.InstanceId.StartsWith(BackupInstancePrefix) ||
450+
instance.InstanceName.InstanceId.StartsWith(InstanceWithInstancePartitionPrefix) ||
451+
instance.InstanceName.InstanceId.StartsWith(InstanceWithMultiRegionPrefix) ||
452+
instance.InstanceName.InstanceId.StartsWith(InstanceWithProcessingUnitsPrefix)) &&
453+
now - instance.CreateTime.ToDateTimeOffset() > oneDay)
454+
{
455+
await DeleteInstanceAsync(instance.InstanceName.InstanceId);
456+
}
457+
}
458+
}
459+
460+
/// <summary>
461+
/// Not all tests delete resources appropiately.
462+
/// We should fix that, but in the meantime, we can at least clean some stale resources.
463+
/// </summary>
464+
private async Task DeleteStaleDatabaseAsync()
465+
{
466+
var now = DateTimeOffset.UtcNow;
467+
var oneDay = TimeSpan.FromDays(1);
468+
await foreach (var database in DatabaseAdminClient.ListDatabasesAsync(InstanceName.FromProjectInstance(ProjectId, InstanceId)))
469+
{
470+
if ((database.DatabaseName.DatabaseId.StartsWith("my-db-") ||
471+
database.DatabaseName.DatabaseId.StartsWith("my-enc-db-") ||
472+
database.DatabaseName.DatabaseId.StartsWith("my-mr-db-") ||
473+
database.DatabaseName.DatabaseId.StartsWith("my-restore-db-") ||
474+
database.DatabaseName.DatabaseId.StartsWith("temp-db-")) &&
475+
now - database.CreateTime.ToDateTimeOffset() > oneDay)
476+
{
477+
await DeleteDatabaseAsync(database.DatabaseName.DatabaseId);
478+
}
479+
}
480+
}
481+
425482
private async Task DeleteInstanceAsync(string instanceId)
426483
{
427484
try
@@ -698,4 +755,6 @@ public async Task CreateTableAsyncPostgres(string createTableStatement)
698755
using var cmd = PgSpannerConnection.CreateDdlCommand(createTableStatement);
699756
await cmd.ExecuteNonQueryAsync();
700757
}
758+
759+
internal void MarkInstanceForDeletion(string instanceId) => TempInstanceIds.Add(instanceId);
701760
}

spanner/api/Spanner.Samples.Tests/UpdateInstanceDefaultBackupScheduleTypeTest.cs

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,8 @@ public async Task TestUpdateInstanceAsync()
3333
CreateInstanceWithoutDefaultBackupSchedulesAsyncSample createInstanceSample =
3434
new CreateInstanceWithoutDefaultBackupSchedulesAsyncSample();
3535

36-
var instanceId = SpannerFixture.GenerateId("default-schedule-test-");
36+
var instanceId = SpannerFixture.GenerateId(SpannerFixture.BackupInstancePrefix);
37+
_spannerFixture.MarkInstanceForDeletion(instanceId);
3738
Instance instance = await createInstanceSample.CreateInstanceWithoutDefaultBackupSchedulesAsync(
3839
_spannerFixture.ProjectId, instanceId);
3940

@@ -45,8 +46,5 @@ public async Task TestUpdateInstanceAsync()
4546
_spannerFixture.ProjectId, instanceId);
4647

4748
Assert.Equal(Instance.Types.DefaultBackupScheduleType.Automatic, updatedInstance.DefaultBackupScheduleType);
48-
49-
await _spannerFixture.InstanceAdminClient.DeleteInstanceAsync(
50-
InstanceName.FromProjectInstance(_spannerFixture.ProjectId, instanceId));
5149
}
5250
}

spanner/api/Spanner.Samples.Tests/runTests.ps1

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
# the License.
1414
import-module -DisableNameChecking ..\..\..\BuildTools.psm1
1515

16-
Set-TestTimeout 7200
16+
Set-TestTimeout 14400
1717

1818
dotnet restore --force
1919
dotnet test --no-restore --test-adapter-path:. --logger:junit 2>&1 | %{ "$_" }

0 commit comments

Comments
 (0)