Skip to content

Commit 374eda8

Browse files
Restore Linux emulator skip machinery; keep only vnext-latest image bump
Co-authored-by: AndriySvyryd <6539701+AndriySvyryd@users.noreply.github.com>
1 parent 4c05d38 commit 374eda8

35 files changed

Lines changed: 411 additions & 319 deletions

.agents/skills/cosmos-provider/SKILL.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,5 +18,5 @@ Non-relational provider with its own parallel query pipeline. Uses JSON for docu
1818

1919
## Azure Cosmos DB Emulator for Tests
2020

21-
- `TestEnvironment.InitializeAsync()` auto-starts a `Testcontainers.CosmosDb` container (image `mcr.microsoft.com/cosmosdb/linux/azure-cosmos-emulator:vnext-latest`) when `Test__Cosmos__DefaultConnection` is not set. Set the env var to use an existing emulator instead.
22-
- Restrict tests that only work against a real Azure Cosmos DB account (not the emulator) with `[ConditionalFact(typeof(CosmosTestEnvironment), nameof(CosmosTestEnvironment.IsNotEmulator))]`.
21+
- `TestEnvironment.InitializeAsync()` auto-starts a `Testcontainers.CosmosDb` container when `Test__Cosmos__DefaultConnection` is not set. Set the env var to use an existing emulator instead.
22+
- Skip tests requiring unsupported features on the Linux emulator with ` [ConditionalFact(typeof(CosmosTestEnvironment), nameof(CosmosTestEnvironment.IsNotLinuxEmulator))]`.

test/EFCore.Cosmos.FunctionalTests/AddHocFullTextSearchCosmosTest.cs

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -141,7 +141,8 @@ protected override void OnModelCreating(ModelBuilder modelBuilder)
141141
#region SettingDefaultFullTextSearchLanguage
142142

143143

144-
[Fact]
144+
// https://github.com/Azure/azure-cosmos-db-emulator-docker/issues/162 (Full-text search not supported)
145+
[ConditionalFact(typeof(CosmosTestEnvironment), nameof(CosmosTestEnvironment.IsNotLinuxEmulator))]
145146
public async Task Set_unsupported_full_text_search_default_language()
146147
{
147148
var exception = (await Assert.ThrowsAsync<CosmosException>(() => InitializeNonSharedTest<ContextSettingDefaultFullTextSearchLanguage>()));
@@ -224,7 +225,8 @@ protected override void OnModelCreating(ModelBuilder modelBuilder)
224225

225226
#region DefaultFullTextSearchLanguageNoMismatchWhenNotSpecified
226227

227-
[Fact]
228+
// https://github.com/Azure/azure-cosmos-db-emulator-docker/issues/162 (Full-text search not supported)
229+
[ConditionalFact(typeof(CosmosTestEnvironment), nameof(CosmosTestEnvironment.IsNotLinuxEmulator))]
228230
public async Task
229231
Explicitly_setting_default_full_text_language_doesnt_clash_with_not_setting_it_on_other_entity_for_the_same_container()
230232
{
@@ -299,7 +301,8 @@ protected override void OnModelCreating(ModelBuilder modelBuilder)
299301
#region DefaultFullTextSearchLanguageUsedWhenPropertyDoesntSpecifyOneExplicitly
300302

301303

302-
[Fact]
304+
// https://github.com/Azure/azure-cosmos-db-emulator-docker/issues/162 (Full-text search not supported)
305+
[ConditionalFact(typeof(CosmosTestEnvironment), nameof(CosmosTestEnvironment.IsNotLinuxEmulator))]
303306
public async Task Default_full_text_language_is_used_for_full_text_properties_if_they_dont_specify_language_themselves()
304307
{
305308
var exception = (await Assert.ThrowsAsync<CosmosException>(()
@@ -339,7 +342,8 @@ protected override void OnModelCreating(ModelBuilder modelBuilder)
339342
#region ExplicitFullTextLanguageOverridesTheDefault
340343

341344

342-
[Fact]
345+
// https://github.com/Azure/azure-cosmos-db-emulator-docker/issues/162 (Full-text search not supported)
346+
[ConditionalFact(typeof(CosmosTestEnvironment), nameof(CosmosTestEnvironment.IsNotLinuxEmulator))]
343347
public async Task Explicitly_setting_full_text_language_overrides_default()
344348
{
345349
var exception =

test/EFCore.Cosmos.FunctionalTests/ConfigPatternsCosmosTest.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,8 +89,9 @@ public async Task Should_throw_if_specified_region_is_wrong()
8989
exception.Message);
9090
}
9191

92-
[Fact]
92+
[ConditionalFact(typeof(CosmosTestEnvironment), nameof(CosmosTestEnvironment.IsNotLinuxEmulator))]
9393
[SkipOnPlatform(TestPlatforms.OSX, "Cosmos emulator on macOS does not support Direct connection mode.")]
94+
// Linux emulator: ConnectionMode.Direct may not be supported
9495
public async Task Should_not_throw_if_specified_connection_mode_is_right()
9596
{
9697
await using var testDatabase = await CosmosTestStore.CreateInitializedAsync(DatabaseName, o => o.ConnectionMode(ConnectionMode.Direct));

test/EFCore.Cosmos.FunctionalTests/CosmosSessionTokensTest.cs

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -578,6 +578,7 @@ protected Test2Context()
578578
}
579579
}
580580

581+
// https://github.com/Azure/azure-cosmos-db-emulator-docker/issues/291 (Session tokens not properly tracked)
581582
public class CosmosNonSharedSessionTokenTests(NonSharedFixture fixture) : NonSharedModelTestBase(fixture), IClassFixture<NonSharedFixture>
582583
{
583584
protected override ITestStoreFactory NonSharedTestStoreFactory
@@ -587,7 +588,8 @@ protected override ITestStoreFactory NonSharedTestStoreFactory
587588

588589
protected override TestStore CreateTestStore() => CosmosTestStore.Create(NonSharedStoreName, (cfg) => cfg.SessionTokenManagementMode(Cosmos.Infrastructure.SessionTokenManagementMode.SemiAutomatic));
589590

590-
[Fact]
591+
// https://github.com/Azure/azure-cosmos-db-emulator-docker/issues/322
592+
[ConditionalFact(typeof(CosmosTestEnvironment), nameof(CosmosTestEnvironment.IsNotLinuxEmulator))]
591593
public virtual async Task UseSessionTokens_uses_session_tokens()
592594
{
593595
var contextFactory = await InitializeNonSharedTest<CosmosSessionTokenContext>();
@@ -631,7 +633,8 @@ public virtual async Task ReadItem_does_not_exist_returns_null()
631633
Assert.Null(result);
632634
}
633635

634-
[Fact]
636+
// https://github.com/Azure/azure-cosmos-db-emulator-docker/issues/322
637+
[ConditionalFact(typeof(CosmosTestEnvironment), nameof(CosmosTestEnvironment.IsNotLinuxEmulator))]
635638
public virtual async Task Read_item_session_not_found_throws_CosmosException()
636639
{
637640
var contextFactory = await InitializeNonSharedTest<CosmosSessionTokenContext>();
@@ -718,7 +721,8 @@ public virtual async Task Pooled_context_clears_SessionTokenStorage()
718721
Assert.True(_sessionTokenStorage.ClearCalled);
719722
}
720723

721-
[Theory]
724+
// https://github.com/Azure/azure-cosmos-db-emulator-docker/issues/319
725+
[ConditionalTheory(typeof(CosmosTestEnvironment), nameof(CosmosTestEnvironment.IsNotLinuxEmulator))]
722726
[InlineData(AutoTransactionBehavior.Never)]
723727
[InlineData(AutoTransactionBehavior.Always)]
724728
public virtual async Task Optimistic_concurrency_precondition_failure_updates_session_token(AutoTransactionBehavior autoTransactionBehavior)

test/EFCore.Cosmos.FunctionalTests/CosmosTransactionalBatchTest.cs

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,8 @@ public class CosmosTransactionalBatchTest(CosmosTransactionalBatchTest.CosmosFix
1414

1515
protected CosmosFixture Fixture { get; } = fixture;
1616

17-
[Fact]
17+
// https://github.com/Azure/azure-cosmos-db-emulator-docker/issues/292 (Transactional batch limits not enforced)
18+
[ConditionalFact(typeof(CosmosTestEnvironment), nameof(CosmosTestEnvironment.IsNotLinuxEmulator))]
1819
public virtual async Task SaveChanges_fails_for_duplicate_key_in_same_partition_prevents_other_inserts_in_same_partition_even_if_staged_before_add()
1920
{
2021
using (var arrangeContext = Fixture.CreateContext())
@@ -106,7 +107,8 @@ public virtual async Task SaveChanges_transaction_behavior_never_fails_for_dupli
106107
Assert.Equal(4, customersCount);
107108
}
108109

109-
[Fact]
110+
// https://github.com/Azure/azure-cosmos-db-emulator-docker/issues/292 (Transactional batch limits not enforced)
111+
[ConditionalFact(typeof(CosmosTestEnvironment), nameof(CosmosTestEnvironment.IsNotLinuxEmulator))]
110112
public virtual async Task SaveChanges_transaction_behavior_always_fails_for_multiple_partitionkeys()
111113
{
112114
using var context = Fixture.CreateContext();
@@ -137,7 +139,8 @@ public virtual async Task SaveChanges_succeeds_for_101_entities_in_same_partitio
137139
Assert.Equal(101, customersCount);
138140
}
139141

140-
[Fact]
142+
// Linux emulator enforces different transactional batch limits.
143+
[ConditionalFact(typeof(CosmosTestEnvironment), nameof(CosmosTestEnvironment.IsNotLinuxEmulator))]
141144
public virtual async Task SaveChanges_transaction_behavior_always_fails_for_101_entities_in_same_partition()
142145
{
143146
using var context = Fixture.CreateContext();
@@ -168,7 +171,8 @@ public virtual async Task SaveChanges_transaction_behavior_always_succeeds_for_1
168171
Assert.Equal(100, customersCount);
169172
}
170173

171-
[Fact]
174+
// https://github.com/Azure/azure-cosmos-db-emulator-docker/issues/292 (Transactional batch limits not enforced)
175+
[ConditionalFact(typeof(CosmosTestEnvironment), nameof(CosmosTestEnvironment.IsNotLinuxEmulator))]
172176
public virtual async Task SaveChanges_transaction_behavior_always_fails_for_multiple_entities_with_triggers()
173177
{
174178
using var context = Fixture.CreateContext();
@@ -185,7 +189,8 @@ public virtual async Task SaveChanges_transaction_behavior_always_fails_for_mult
185189
Assert.Equal(0, customersCount);
186190
}
187191

188-
[Fact]
192+
// https://github.com/Azure/azure-cosmos-db-emulator-docker/issues/294
193+
[ConditionalFact(typeof(CosmosTestEnvironment), nameof(CosmosTestEnvironment.IsNotLinuxEmulator))]
189194
public virtual async Task SaveChanges_transaction_behavior_always_succeeds_for_single_entity_with_trigger()
190195
{
191196
using var context = Fixture.CreateContext();
@@ -228,7 +233,8 @@ public virtual async Task SaveChanges_transaction_behavior_always_succeeds_for_s
228233
Assert.Equal(1, customersCount);
229234
}
230235

231-
[Fact]
236+
// https://github.com/Azure/azure-cosmos-db-emulator-docker/issues/292 (Transactional batch limits not enforced)
237+
[ConditionalFact(typeof(CosmosTestEnvironment), nameof(CosmosTestEnvironment.IsNotLinuxEmulator))]
232238
public virtual async Task SaveChanges_transaction_behavior_always_fails_for_single_entity_with_trigger_and_entity_without_trigger()
233239
{
234240
using var context = Fixture.CreateContext();
@@ -320,7 +326,8 @@ public virtual async Task SaveChanges_transaction_behavior_always_payload_larger
320326
private const int MaxSerializedCustomerTransactionalBatchRequestSize = 2094389;
321327
private const int MaxKeySize = 1023;
322328

323-
[Theory, InlineData(true), InlineData(false)]
329+
// Linux emulator enforces different transactional batch size limits.
330+
[ConditionalTheory(typeof(CosmosTestEnvironment), nameof(CosmosTestEnvironment.IsNotLinuxEmulator)), InlineData(true), InlineData(false)]
324331
public virtual async Task SaveChanges_exactly_2_mib_does_not_split_and_one_byte_over_splits(bool oneByteOver)
325332
{
326333
using var context = Fixture.CreateContext();
@@ -358,7 +365,8 @@ public virtual async Task SaveChanges_exactly_2_mib_does_not_split_and_one_byte_
358365

359366
private const int MaxSpecialCharsInId = MaxKeySize / 3;
360367

361-
[Theory, InlineData(true), InlineData(false)]
368+
// https://github.com/Azure/azure-cosmos-db-emulator-docker/issues/323
369+
[ConditionalTheory(typeof(CosmosTestEnvironment), nameof(CosmosTestEnvironment.IsNotLinuxEmulator)), InlineData(true), InlineData(false)]
362370
public virtual async Task SaveChanges_update_id_contains_special_chars_which_makes_request_larger_than_2_mib_splits_into_2_batches(bool isIdSpecialChar)
363371
{
364372
using var context = Fixture.CreateContext();

test/EFCore.Cosmos.FunctionalTests/CosmosTriggersTest.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,8 @@ protected override ITestStoreFactory NonSharedTestStoreFactory
1616
=> CosmosTestStoreFactory.Instance;
1717

1818

19-
[Fact]
19+
// Linux emulator: server-side scripts are not supported
20+
[ConditionalFact(typeof(CosmosTestEnvironment), nameof(CosmosTestEnvironment.IsNotLinuxEmulator))]
2021
public async Task Triggers_are_executed_on_SaveChanges()
2122
{
2223
var contextFactory = await InitializeNonSharedTest<TriggersContext>(shouldLogCategory: _ => true);

test/EFCore.Cosmos.FunctionalTests/EmbeddedDocumentsTest.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -697,7 +697,8 @@ public virtual async Task Can_use_non_persisted_properties_owned()
697697
}
698698

699699

700-
[Fact]
700+
// https://github.com/Azure/azure-cosmos-db-emulator-docker/issues/288 (Complex-type equality comparisons return no results)
701+
[ConditionalFact(typeof(CosmosTestEnvironment), nameof(CosmosTestEnvironment.IsNotLinuxEmulator))]
701702
public virtual async Task Can_use_non_persisted_properties_complex()
702703
{
703704
var options = await Fixture.CreateOptions(

test/EFCore.Cosmos.FunctionalTests/EndToEndCosmosTest.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,8 @@ namespace Microsoft.EntityFrameworkCore;
1515
public class EndToEndCosmosTest(NonSharedFixture fixture) : NonSharedModelTestBase(fixture), IClassFixture<NonSharedFixture>
1616
{
1717

18-
[Theory]
18+
// https://github.com/Azure/azure-cosmos-db-emulator-docker/issues/292 (Transactional batch limits not enforced)
19+
[ConditionalTheory(typeof(CosmosTestEnvironment), nameof(CosmosTestEnvironment.IsNotLinuxEmulator))]
1920
[InlineData(false)]
2021
[InlineData(true)]
2122
public async Task Can_add_update_delete_end_to_end(bool transactionalBatch)

test/EFCore.Cosmos.FunctionalTests/Query/AdHocComplexTypeQueryCosmosTest.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,11 @@ public class AdHocComplexTypeQueryCosmosTest(NonSharedFixture fixture) : AdHocCo
1010
protected override ITestStoreFactory NonSharedTestStoreFactory
1111
=> CosmosTestStoreFactory.Instance;
1212

13+
// https://github.com/Azure/azure-cosmos-db-emulator-docker/issues/288 (Complex-type equality comparisons return no results)
1314
public override async Task Complex_type_equals_parameter_with_nested_types_with_property_of_same_name()
1415
{
16+
CosmosTestEnvironment.SkipOnLinuxEmulator();
17+
1518
await base.Complex_type_equals_parameter_with_nested_types_with_property_of_same_name();
1619

1720
AssertSql(

test/EFCore.Cosmos.FunctionalTests/Query/Associations/ComplexProperties/ComplexPropertiesCollectionCosmosTest.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,11 @@ FROM root c
2626
""");
2727
}
2828

29+
// https://github.com/Azure/azure-cosmos-db-emulator-docker/issues/287 (Aggregates over subqueries return null result set)
2930
public override async Task Where()
3031
{
32+
CosmosTestEnvironment.SkipOnLinuxEmulator();
33+
3134
await base.Where();
3235

3336
AssertSql(
@@ -194,8 +197,11 @@ public override Task GroupBy()
194197

195198
#endregion GroupBy
196199

200+
// https://github.com/Azure/azure-cosmos-db-emulator-docker/issues/287 (Aggregates over subqueries return null result set)
197201
public override async Task Select_within_Select_within_Select_with_aggregates()
198202
{
203+
CosmosTestEnvironment.SkipOnLinuxEmulator();
204+
199205
await base.Select_within_Select_within_Select_with_aggregates();
200206

201207
AssertSql(

0 commit comments

Comments
 (0)