Skip to content

Commit 3dadaac

Browse files
authored
Merge pull request #190 from AzureCosmosDB/copilot/fix-189
Fix InitClientEncryption configuration not being respected in CosmosDataSinkExtension
2 parents 3437bc9 + bdf894b commit 3dadaac

File tree

2 files changed

+66
-3
lines changed

2 files changed

+66
-3
lines changed

Extensions/Cosmos/Cosmos.DataTransfer.CosmosExtension.UnitTests/CosmosSinkSettingsTests.cs

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -155,4 +155,58 @@ public void GetValidationErrors_WhenPartitionKeysInvalid_ReturnsErrors()
155155

156156
Assert.AreEqual(1, validationErrors.Count(v => v.Contains(nameof(CosmosSinkSettings.PartitionKeyPaths))));
157157
}
158+
159+
[TestMethod]
160+
public void GetValidationErrors_WhenInitClientEncryptionWithoutRbac_ReturnsError()
161+
{
162+
var settings = new CosmosSinkSettings
163+
{
164+
ConnectionString = "AccountEndpoint=https://localhost:8081/;AccountKey=",
165+
Database = "db",
166+
Container = "container",
167+
UseRbacAuth = false,
168+
InitClientEncryption = true,
169+
};
170+
171+
var validationErrors = settings.GetValidationErrors();
172+
LogErrors(validationErrors);
173+
174+
Assert.AreEqual(1, validationErrors.Count(v => v.Contains(nameof(CosmosSinkSettings.InitClientEncryption))));
175+
}
176+
177+
[TestMethod]
178+
public void GetValidationErrors_WhenInitClientEncryptionWithRbac_Succeeds()
179+
{
180+
var settings = new CosmosSinkSettings
181+
{
182+
UseRbacAuth = true,
183+
AccountEndpoint = "https://localhost:8081/",
184+
Database = "db",
185+
Container = "container",
186+
InitClientEncryption = true,
187+
};
188+
189+
var validationErrors = settings.GetValidationErrors();
190+
LogErrors(validationErrors);
191+
192+
Assert.AreEqual(0, validationErrors.Count());
193+
}
194+
195+
[TestMethod]
196+
public void GetValidationErrors_WhenRbacWithoutInitClientEncryption_Succeeds()
197+
{
198+
var settings = new CosmosSinkSettings
199+
{
200+
UseRbacAuth = true,
201+
AccountEndpoint = "https://localhost:8081/",
202+
Database = "db",
203+
Container = "container",
204+
InitClientEncryption = false,
205+
};
206+
207+
var validationErrors = settings.GetValidationErrors();
208+
LogErrors(validationErrors);
209+
210+
Assert.AreEqual(0, validationErrors.Count());
211+
}
158212
}

Extensions/Cosmos/Cosmos.DataTransfer.CosmosExtension/CosmosDataSinkExtension.cs

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -141,9 +141,18 @@ public async Task WriteAsync(IAsyncEnumerable<IDataItem> dataItems, IConfigurati
141141

142142
var client = CosmosExtensionServices.CreateClient(settings, DisplayName, dataSource.DisplayName);
143143

144-
Container container = settings.UseRbacAuth
145-
? await client.GetContainer(settings.Database, settings.Container).InitializeEncryptionAsync(cancellationToken)
146-
: await CreateDatabaseAndContainerAsync(client, settings, logger, cancellationToken);
144+
Container container;
145+
if (settings.UseRbacAuth)
146+
{
147+
var cosmosContainer = client.GetContainer(settings.Database, settings.Container);
148+
container = settings.InitClientEncryption
149+
? await cosmosContainer.InitializeEncryptionAsync(cancellationToken)
150+
: cosmosContainer;
151+
}
152+
else
153+
{
154+
container = await CreateDatabaseAndContainerAsync(client, settings, logger, cancellationToken);
155+
}
147156

148157
await CosmosExtensionServices.VerifyContainerAccess(container, settings.Container, logger, cancellationToken);
149158

0 commit comments

Comments
 (0)