Skip to content
Merged
Changes from 1 commit
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
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,9 @@
namespace Tester.AzureUtils.Streaming
{
[Collection(TestEnvironmentFixture.DefaultCollection)]
[TestCategory("AzureStorage"), TestCategory("Streaming")]
[TestSuite("BVT")]
[TestProvider("AzureStorage")]
[TestArea("Streaming")]
Comment thread
ReubenBond marked this conversation as resolved.
Resolved
public class AzureQueueJsonDataAdapterTests
{
private const string CompactOrleans3JsonMessage =
Expand Down Expand Up @@ -90,7 +92,7 @@
Assert.Equal(
["version", "stream", "events", "requestContext"],
envelope.Properties().Select(property => property.Name));
Assert.NotNull(envelope["events"]![0]!["$type"]);

Check failure on line 95 in test/Extensions/Orleans.Azure.Tests/Streaming/AzureQueueJsonDataAdapterTests.cs

View workflow job for this annotation

GitHub Actions / .NET Test Results

Tester.AzureUtils.Streaming.AzureQueueJsonDataAdapterTests.ToAndFromQueueMessage_SerializesAccordingToFormat

Assert.NotNull() Failure: Value is null at Tester.AzureUtils.Streaming.AzureQueueJsonDataAdapterTests.ToAndFromQueueMessage_SerializesAccordingToFormat() in /_/test/Extensions/Orleans.Azure.Tests/Streaming/AzureQueueJsonDataAdapterTests.cs:line 95 at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr)
Assert.NotNull(envelope["requestContext"]!["context"]!["$type"]);
Assert.DoesNotContain("AzureQueueBatchContainerV2", msg);
Assert.DoesNotContain("System.Collections.Generic.List", msg);
Expand Down Expand Up @@ -196,6 +198,41 @@
batchContainer.StreamId);
}

[Theory, TestCategory("BVT")]
[InlineData("\"1\"")]
[InlineData("2147483648")]
[InlineData("2")]
public void JsonAdapter_RejectsUnsupportedCompactEnvelopeVersion(string version)
{
var jsonAdapter = InitializeQueueJsonDataAdapter(new AzureQueueJsonDataAdapterOptions { EnableFallback = false });

var exception = Assert.Throws<InvalidDataException>(
() => jsonAdapter.FromQueueMessage($"{{\"version\":{version}}}", sequenceId: 0));

Assert.Equal($"Unsupported Azure Queue JSON envelope version: {version}.", exception.Message);
Comment thread
ReubenBond marked this conversation as resolved.
Resolved
}

[Theory, TestCategory("BVT")]
[MemberData(nameof(MalformedCompactEnvelopeCases))]
public void JsonAdapter_RejectsMalformedCompactEnvelope(string message, string expectedMessage)
{
var jsonAdapter = InitializeQueueJsonDataAdapter(new AzureQueueJsonDataAdapterOptions { EnableFallback = false });

var exception = Assert.Throws<InvalidDataException>(
() => jsonAdapter.FromQueueMessage(message, sequenceId: 0));

Assert.Equal(expectedMessage, exception.Message);
}

[Fact, TestCategory("BVT")]
public void JsonAdapter_RejectsInvalidJson()
{
var jsonAdapter = InitializeQueueJsonDataAdapter(new AzureQueueJsonDataAdapterOptions { EnableFallback = false });

Assert.ThrowsAny<System.Text.Json.JsonException>(
() => jsonAdapter.FromQueueMessage("{\"version\":1", sequenceId: 0));
}

[Fact, TestCategory("BVT")]
public void JsonAdapter_ProducesCompactVersion1Message()
{
Expand Down Expand Up @@ -261,7 +298,7 @@
var batchContainer = jsonAdapter.FromQueueMessage(message, sequenceId: 46);
var deserializedEvents = batchContainer.GetEvents<EventData>().Select(item => item.Item1).ToList();

Assert.Same(deserializedEvents[0], deserializedEvents[1]);

Check failure on line 301 in test/Extensions/Orleans.Azure.Tests/Streaming/AzureQueueJsonDataAdapterTests.cs

View workflow job for this annotation

GitHub Actions / .NET Test Results

Tester.AzureUtils.Streaming.AzureQueueJsonDataAdapterTests.JsonAdapter_RoundTripsSharedReferencesWithinCollections

System.ArgumentOutOfRangeException : Index was out of range. Must be non-negative and less than the size of the collection. (Parameter 'index') at System.Collections.Generic.List`1.get_Item(Int32 index) at Tester.AzureUtils.Streaming.AzureQueueJsonDataAdapterTests.JsonAdapter_RoundTripsSharedReferencesWithinCollections() in /_/test/Extensions/Orleans.Azure.Tests/Streaming/AzureQueueJsonDataAdapterTests.cs:line 301 at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr)
try
{
Assert.True(batchContainer.ImportRequestContext());
Expand Down Expand Up @@ -326,7 +363,7 @@
var batchContainer = binaryPreferredAdapter.FromQueueMessage(jsonMsg, token.SequenceNumber);
var deserializedEvent = batchContainer.GetEvents<EventData>().FirstOrDefault();

Assert.NotNull(deserializedEvent);

Check failure on line 366 in test/Extensions/Orleans.Azure.Tests/Streaming/AzureQueueJsonDataAdapterTests.cs

View workflow job for this annotation

GitHub Actions / .NET Test Results

Tester.AzureUtils.Streaming.AzureQueueJsonDataAdapterTests.BinaryPreferredAdapter_FallsBackToJsonWhenDeserializingJsonData

Assert.NotNull() Failure: Value is null at Tester.AzureUtils.Streaming.AzureQueueJsonDataAdapterTests.BinaryPreferredAdapter_FallsBackToJsonWhenDeserializingJsonData() in /_/test/Extensions/Orleans.Azure.Tests/Streaming/AzureQueueJsonDataAdapterTests.cs:line 366 at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor) at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr)
Assert.Equal(data, deserializedEvent.Item1);
Assert.Equal(streamId, batchContainer.StreamId);
}
Expand Down Expand Up @@ -376,6 +413,50 @@
Assert.True(IsValidJson(jsonMessage));
}

public static TheoryData<string, string> MalformedCompactEnvelopeCases => new()
{
{
"""{"version":1,"events":[],"requestContext":{}}""",
"The Azure Queue JSON envelope property 'stream' must be a Object."
},
{
"""{"version":1,"stream":[],"events":[],"requestContext":{}}""",
"The Azure Queue JSON envelope property 'stream' must be a Object."
},
{
"""{"version":1,"stream":{"key":"key"},"events":[],"requestContext":{}}""",
"The Azure Queue JSON envelope property 'namespace' must be a String or Null."
},
{
"""{"version":1,"stream":{"namespace":1,"key":"key"},"events":[],"requestContext":{}}""",
"The Azure Queue JSON envelope property 'namespace' must be a String or Null."
},
{
"""{"version":1,"stream":{"namespace":"namespace"},"events":[],"requestContext":{}}""",
"The Azure Queue JSON envelope property 'key' must be a String."
},
{
"""{"version":1,"stream":{"namespace":"namespace","key":null},"events":[],"requestContext":{}}""",
"The Azure Queue JSON envelope property 'key' must be a String."
},
{
"""{"version":1,"stream":{"namespace":"namespace","key":"key"},"requestContext":{}}""",
"The Azure Queue JSON envelope property 'events' must be a Array."
},
{
"""{"version":1,"stream":{"namespace":"namespace","key":"key"},"events":{},"requestContext":{}}""",
"The Azure Queue JSON envelope property 'events' must be a Array."
},
{
"""{"version":1,"stream":{"namespace":"namespace","key":"key"},"events":[]}""",
"The Azure Queue JSON envelope property 'requestContext' must be a Object."
},
{
"""{"version":1,"stream":{"namespace":"namespace","key":"key"},"events":[],"requestContext":[]}""",
"The Azure Queue JSON envelope property 'requestContext' must be a Object."
}
};

[GenerateSerializer]
public sealed class EventData : IEquatable<EventData>
{
Expand Down
Loading