Skip to content
Merged
Prev Previous commit
Next Next commit
Adding test with client telemetry enabled
  • Loading branch information
ealsur committed Oct 27, 2022
commit 623ccea9fb6613bbc527f74efd8151ef4c8fbb0b
Original file line number Diff line number Diff line change
Expand Up @@ -5,25 +5,24 @@
namespace Microsoft.Azure.Cosmos.SDK.EmulatorTests
{
using System;
using System.Diagnostics;
using System.Linq;
using System.Threading;
using Microsoft.Azure.Cosmos.Linq;
using Microsoft.Azure.Cosmos.Services.Management.Tests;
using Microsoft.VisualStudio.TestTools.UnitTesting;

[TestClass]
public class SynchronizationContextTests
{
[TestMethod]
[DataTestMethod]
[DataRow(false, DisplayName = "Client Telemetry disabled")]
[DataRow(true, DisplayName = "Client Telemetry enabled")]
[Timeout(30000)]
public void VerifySynchronizationContextDoesNotLock()
public void VerifySynchronizationContextDoesNotLock(bool withClientTelemetry)
{
Type defaultTrace = Type.GetType("Microsoft.Azure.Cosmos.Core.Trace.DefaultTrace,Microsoft.Azure.Cosmos.Direct");
TraceSource traceSource = (TraceSource)defaultTrace.GetProperty("TraceSource").GetValue(null);
traceSource.Switch.Level = SourceLevels.All;
traceSource.Listeners.Clear();
traceSource.Listeners.Add(new ConsoleTraceListener());
if (withClientTelemetry)
{
Util.EnableClientTelemetryEnvironmentVariables();
}

string databaseId = Guid.NewGuid().ToString();
SynchronizationContext prevContext = SynchronizationContext.Current;
Expand All @@ -35,31 +34,27 @@ public void VerifySynchronizationContextDoesNotLock()
{
using (CosmosClient client = TestCommon.CreateCosmosClient())
{
Logger.LogLine("1");
Cosmos.Database database = client.CreateDatabaseAsync(databaseId).GetAwaiter().GetResult();
Logger.LogLine("a");
database = client.CreateDatabaseIfNotExistsAsync(databaseId).GetAwaiter().GetResult();
Logger.LogLine("b");
database.ReadStreamAsync().ConfigureAwait(false).GetAwaiter().GetResult();
Logger.LogLine("c");
database.ReadAsync().ConfigureAwait(false).GetAwaiter().GetResult();
Logger.LogLine("2");

QueryDefinition databaseQuery = new QueryDefinition("select * from T where T.id = @id").WithParameter("@id", databaseId);
FeedIterator<DatabaseProperties> databaseIterator = client.GetDatabaseQueryIterator<DatabaseProperties>(databaseQuery);
while (databaseIterator.HasMoreResults)
{
databaseIterator.ReadNextAsync().GetAwaiter().GetResult();
}
Logger.LogLine("3");

Container container = database.CreateContainerAsync(Guid.NewGuid().ToString(), "/pk").GetAwaiter().GetResult();
container = database.CreateContainerIfNotExistsAsync(container.Id, "/pk").GetAwaiter().GetResult();
Logger.LogLine("4");

ToDoActivity testItem = ToDoActivity.CreateRandomToDoActivity();
ItemResponse<ToDoActivity> response = container.CreateItemAsync<ToDoActivity>(item: testItem).ConfigureAwait(false).GetAwaiter().GetResult();
Assert.IsNotNull(response);
string diagnostics = response.Diagnostics.ToString();
Assert.IsTrue(diagnostics.Contains("Synchronization Context"));
Logger.LogLine("5");

using CancellationTokenSource cancellationTokenSource = new CancellationTokenSource();

try
Expand All @@ -76,7 +71,7 @@ public void VerifySynchronizationContextDoesNotLock()
string exception = oe.ToString();
Assert.IsTrue(exception.Contains("Synchronization Context"));
}
Logger.LogLine("6");

// Test read feed
container.GetItemLinqQueryable<ToDoActivity>(
allowSynchronousQueryExecution: true,
Expand All @@ -92,15 +87,15 @@ public void VerifySynchronizationContextDoesNotLock()
{
feedIterator.ReadNextAsync().GetAwaiter().GetResult();
}
Logger.LogLine("7");

FeedIterator<ToDoActivity> feedIteratorTyped = container.GetItemLinqQueryable<ToDoActivity>()
.ToFeedIterator<ToDoActivity>();

while (feedIteratorTyped.HasMoreResults)
{
feedIteratorTyped.ReadNextAsync().GetAwaiter().GetResult();
}
Logger.LogLine("8");

// Test query
container.GetItemLinqQueryable<ToDoActivity>(
allowSynchronousQueryExecution: true,
Expand All @@ -116,8 +111,6 @@ public void VerifySynchronizationContextDoesNotLock()
queryIterator.ReadNextAsync().GetAwaiter().GetResult();
}

Logger.LogLine("9");

FeedIterator<ToDoActivity> queryIteratorTyped = container.GetItemLinqQueryable<ToDoActivity>()
.Where(item => item.id != "").ToFeedIterator<ToDoActivity>();

Expand All @@ -126,30 +119,35 @@ public void VerifySynchronizationContextDoesNotLock()
queryIteratorTyped.ReadNextAsync().GetAwaiter().GetResult();
}

Logger.LogLine("10");

double costAsync = container.GetItemLinqQueryable<ToDoActivity>()
.Select(x => x.cost).SumAsync().GetAwaiter().GetResult();

double cost = container.GetItemLinqQueryable<ToDoActivity>(
allowSynchronousQueryExecution: true).Select(x => x.cost).Sum();
Logger.LogLine("11");

ItemResponse<ToDoActivity> deleteResponse = container.DeleteItemAsync<ToDoActivity>(partitionKey: new Cosmos.PartitionKey(testItem.pk), id: testItem.id).ConfigureAwait(false).GetAwaiter().GetResult();
Assert.IsNotNull(deleteResponse);
Logger.LogLine("12");
}
}, state: null);
}
finally
{
SynchronizationContext.SetSynchronizationContext(prevContext);

using (CosmosClient client = TestCommon.CreateCosmosClient())
{
client.GetDatabase(databaseId).DeleteAsync().GetAwaiter().GetResult();
}

if (withClientTelemetry)
{
Util.DisableClientTelemetryEnvironmentVariables();
}
}
}



public class TestSynchronizationContext : SynchronizationContext
{
private object locker = new object();
Expand Down