Skip to content

Commit e38b7d0

Browse files
Add tests and docs for publishing CloudEvent to domain topics (Azure#25511)
* Add tests and docs for publishing CloudEvent to domain topics. * PR fb * Fix snippets
1 parent 136bf36 commit e38b7d0

File tree

10 files changed

+272
-0
lines changed

10 files changed

+272
-0
lines changed

sdk/eventgrid/Azure.Messaging.EventGrid/README.md

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -228,6 +228,27 @@ List<EventGridEvent> eventsList = new List<EventGridEvent>
228228
await client.SendEventsAsync(eventsList);
229229
```
230230

231+
For sending CloudEvents, the CloudEvent source is used as the domain topic:
232+
```C# Snippet:SendCloudEventsToDomain
233+
List<CloudEvent> eventsList = new List<CloudEvent>();
234+
235+
for (int i = 0; i < 10; i++)
236+
{
237+
CloudEvent cloudEvent = new CloudEvent(
238+
// the source is mapped to the domain topic
239+
$"Subject-{i}",
240+
"Microsoft.MockPublisher.TestEvent",
241+
"hello")
242+
{
243+
Id = $"event-{i}",
244+
Time = DateTimeOffset.Now
245+
};
246+
eventsList.Add(cloudEvent);
247+
}
248+
249+
await client.SendEventsAsync(eventsList);
250+
```
251+
231252
### Receiving and Deserializing Events
232253
There are several different Azure services that act as [event handlers](https://docs.microsoft.com/azure/event-grid/event-handlers).
233254

sdk/eventgrid/Azure.Messaging.EventGrid/tests/EventGridClientLiveTests.cs

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -209,6 +209,42 @@ public async Task CanPublishEventToDomain()
209209
await client.SendEventsAsync(eventsList);
210210
}
211211

212+
[RecordedTest]
213+
public async Task CanPublishCloudEventToDomain()
214+
{
215+
EventGridPublisherClientOptions options = InstrumentClientOptions(new EventGridPublisherClientOptions());
216+
EventGridPublisherClient client = InstrumentClient(
217+
new EventGridPublisherClient(
218+
new Uri(TestEnvironment.CloudEventDomainHost),
219+
new AzureKeyCredential(TestEnvironment.CloudEventDomainKey),
220+
options));
221+
222+
#region Snippet:SendCloudEventsToDomain
223+
List<CloudEvent> eventsList = new List<CloudEvent>();
224+
225+
for (int i = 0; i < 10; i++)
226+
{
227+
CloudEvent cloudEvent = new CloudEvent(
228+
// the source is mapped to the domain topic
229+
$"Subject-{i}",
230+
"Microsoft.MockPublisher.TestEvent",
231+
"hello")
232+
{
233+
#if SNIPPET
234+
Id = $"event-{i}",
235+
Time = DateTimeOffset.Now
236+
#else
237+
Id = Recording.Random.NewGuid().ToString(),
238+
Time = Recording.Now
239+
#endif
240+
};
241+
eventsList.Add(cloudEvent);
242+
}
243+
244+
await client.SendEventsAsync(eventsList);
245+
#endregion
246+
}
247+
212248
[RecordedTest]
213249
public async Task CanPublishEventToDomainAAD()
214250
{

sdk/eventgrid/Azure.Messaging.EventGrid/tests/Infrastructure/EventGridTestEnvironment.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,9 @@ public class EventGridTestEnvironment : TestEnvironment
1414
public const string DomainKeyEnvironmentVariableName = "EVENT_GRID_DOMAIN_KEY";
1515
public const string DomainEndpointEnvironmentVariableName = "EVENT_GRID_DOMAIN_ENDPOINT";
1616

17+
public const string CloudEventDomainKeyEnvironmentVariableName = "EVENT_GRID_CLOUD_EVENT_DOMAIN_KEY";
18+
public const string CloudEventDomainEndpointEnvironmentVariableName = "EVENT_GRID_CLOUD_EVENT_DOMAIN_ENDPOINT";
19+
1720
public const string CloudEventTopicKeyEnvironmentVariableName = "EVENT_GRID_CLOUD_EVENT_TOPIC_KEY";
1821
public const string CloudEventTopicEndpointEnvironmentVariableName = "EVENT_GRID_CLOUD_EVENT_TOPIC_ENDPOINT";
1922

@@ -26,6 +29,9 @@ public class EventGridTestEnvironment : TestEnvironment
2629
public string DomainHost => GetRecordedVariable(DomainEndpointEnvironmentVariableName);
2730
public string DomainKey => GetRecordedVariable(DomainKeyEnvironmentVariableName, options => options.IsSecret(SanitizedValue.Base64));
2831

32+
public string CloudEventDomainHost => GetRecordedVariable(CloudEventDomainEndpointEnvironmentVariableName);
33+
public string CloudEventDomainKey => GetRecordedVariable(CloudEventDomainKeyEnvironmentVariableName, options => options.IsSecret(SanitizedValue.Base64));
34+
2935
public string CloudEventTopicHost => GetRecordedVariable(CloudEventTopicEndpointEnvironmentVariableName);
3036
public string CloudEventTopicKey => GetRecordedVariable(CloudEventTopicKeyEnvironmentVariableName, options => options.IsSecret(SanitizedValue.Base64));
3137

sdk/eventgrid/Azure.Messaging.EventGrid/tests/SessionRecords/EventGridClientLiveTests/CanPublishCloudEventToDomain.json

Lines changed: 37 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

sdk/eventgrid/Azure.Messaging.EventGrid/tests/SessionRecords/EventGridClientLiveTests/CanPublishCloudEventToDomainAsync.json

Lines changed: 37 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

sdk/eventgrid/Microsoft.Azure.Messaging.EventGrid.CloudNativeCloudEvents/README.md

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ For detailed information about the Event Grid client library concepts: [Event Gr
4848

4949
## Examples
5050

51+
### Publish to an Event Grid topic
5152
```C# Snippet:CloudNativePublish
5253
EventGridPublisherClient client = new EventGridPublisherClient(
5354
new Uri(TestEnvironment.CloudEventTopicHost),
@@ -64,6 +65,23 @@ var cloudEvent =
6465
await client.SendCloudNativeCloudEventAsync(cloudEvent);
6566
```
6667

68+
### Publish to an Event Grid Domain
69+
When publishing to an Event Grid Domain with CloudEvents, the CloudEvent `source` is used as the domain topic. The Event Grid service doesn't support using an absolute URI for a domain topic, so you would need to do something like the following to integrate with the CloudNative CloudEvents:
70+
```C# Snippet:CloudNativePublishToDomain
71+
CloudEvent cloudEvent =
72+
new CloudEvent
73+
{
74+
Type = "record",
75+
// Event Grid does not allow absolute URIs as the domain topic
76+
Source = new Uri("test", UriKind.Relative),
77+
Id = "eventId",
78+
Time = DateTimeOffset.Now,
79+
Data = new TestPayload("name", 0)
80+
};
81+
82+
await client.SendCloudNativeCloudEventAsync(cloudEvent);
83+
```
84+
6785
## Troubleshooting
6886

6987
For troubleshooting information, see the [Event Grid Client Library documentation](https://github.com/Azure/azure-sdk-for-net/tree/main/sdk/eventgrid/Azure.Messaging.EventGrid#troubleshooting).

sdk/eventgrid/Microsoft.Azure.Messaging.EventGrid.CloudNativeCloudEvents/tests/CloudNativeLiveTests.cs

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,37 @@ public async Task CanPublishSingleCloudEvent()
7070
await client.SendCloudNativeCloudEventAsync(cloudEvent);
7171
}
7272

73+
[RecordedTest]
74+
public async Task CanPublishCloudEventToDomain()
75+
{
76+
EventGridPublisherClientOptions options = InstrumentClientOptions(new EventGridPublisherClientOptions());
77+
EventGridPublisherClient client = InstrumentClient(
78+
new EventGridPublisherClient(
79+
new Uri(TestEnvironment.CloudEventDomainHost),
80+
new AzureKeyCredential(TestEnvironment.CloudEventDomainKey),
81+
options));
82+
83+
#region Snippet:CloudNativePublishToDomain
84+
CloudEvent cloudEvent =
85+
new CloudEvent
86+
{
87+
Type = "record",
88+
// Event Grid does not allow absolute URIs as the domain topic
89+
Source = new Uri("test", UriKind.Relative),
90+
#if SNIPPET
91+
Id = "eventId",
92+
Time = DateTimeOffset.Now,
93+
#else
94+
Id = Recording.Random.NewGuid().ToString(),
95+
Time = Recording.Now,
96+
#endif
97+
Data = new TestPayload("name", 0)
98+
};
99+
100+
await client.SendCloudNativeCloudEventAsync(cloudEvent);
101+
#endregion
102+
}
103+
73104
private class TestPayload
74105
{
75106
public TestPayload(string name, int age)

sdk/eventgrid/Microsoft.Azure.Messaging.EventGrid.CloudNativeCloudEvents/tests/SessionRecords/CloudNativeLiveTests/CanPublishCloudEventToDomain.json

Lines changed: 34 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)