private async Task <bool> IoTHubDeviceCreated(bool isSuccess, EventGridEvent receivedEvent) { IotHubDeviceCreatedEventData eventData = null; try { if (receivedEvent.Data is JObject jObject) { eventData = jObject.ToObject <IotHubDeviceCreatedEventData>(); } else { throw new ArgumentException("Data is null or not a JObject", nameof(receivedEvent)); } } catch (Exception ex) { isSuccess = false; _logger.LogError(ex, $"Invalid data received from EventGrid."); } if (isSuccess) { _logger.LogInformation($"DeviceId: {eventData.DeviceId}."); isSuccess = await _deviceSynchronizerSingleton.DeviceSynchronizer.CreateDevice(receivedEvent.Data.ToString()); } if (isSuccess) { _logger.LogInformation($"Triggered IoT Hub device creation completed successfully."); } else { _logger.LogError($"Triggered IoT Hub device creation completed with errors."); } return(isSuccess); }
public void Parse_ValidDeviceCreatedEvent_ShouldSucceed() { // Arrange string rawEvent = EventSamples.IoTDeviceCreateEvent; const string id = "38a23a83-f9c2-493f-e6fb-4b57c7c43d28"; const string topic = "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"; const string subject = "devices/grid-test-01"; const string eventType = "Microsoft.Devices.DeviceCreated"; const string eventTime = "2018-03-16T05:47:28.1359543Z"; const string stamp = "03/16/2018 05:47:28"; const string dataVersion = "1"; const string metadataVersion = "1"; const string hubName = "savanh-eventgrid-iothub"; const string deviceId = "grid-test-01"; const string etag = "AAAAAAAAAAE="; const string status = "enabled"; const string connectionState = "Disconnected"; const int cloudToDeviceMessageCount = 0; const string authenticationType = "sas"; const string primaryThumbprint = "xyz"; const string secondaryThumbprint = "abc"; const int twinVersion = 2; const int twinPropertyVersion = 1; // Act var eventGridMessage = EventGridParser.ParseFromData <IotHubDeviceCreatedEventData>(rawEvent); // Assert Assert.NotNull(eventGridMessage); Assert.NotNull(eventGridMessage.Events); Assert.Single(eventGridMessage.Events); var eventGridEvent = eventGridMessage.Events.Single(); Assert.Equal(id, eventGridEvent.Id); Assert.Equal(topic, eventGridEvent.Topic); Assert.Equal(subject, eventGridEvent.Subject); Assert.Equal(eventType, eventGridEvent.EventType); Assert.Equal(DateTimeOffset.Parse(eventTime), eventGridEvent.EventTime); Assert.Equal(dataVersion, eventGridEvent.DataVersion); Assert.Equal(metadataVersion, eventGridEvent.MetadataVersion); var eventGridEventData = eventGridEvent.Data; Assert.NotNull(eventGridEventData); IotHubDeviceCreatedEventData eventPayload = eventGridEvent.GetPayload(); Assert.NotNull(eventPayload); Assert.Equal(hubName, eventPayload.HubName); Assert.Equal(deviceId, eventPayload.DeviceId); var twin = eventPayload.Twin; Assert.NotNull(twin); Assert.Equal(deviceId, twin.DeviceId); Assert.Equal(etag, twin.Etag); Assert.Equal(status, twin.Status); Assert.Equal(stamp, twin.StatusUpdateTime); Assert.Equal(connectionState, twin.ConnectionState); Assert.Equal(stamp, twin.LastActivityTime); Assert.Equal(cloudToDeviceMessageCount, twin.CloudToDeviceMessageCount); Assert.Equal(authenticationType, twin.AuthenticationType); Assert.NotNull(twin.X509Thumbprint); Assert.Equal(primaryThumbprint, twin.X509Thumbprint.PrimaryThumbprint); Assert.Equal(secondaryThumbprint, twin.X509Thumbprint.SecondaryThumbprint); Assert.Equal(twinVersion, twin.Version); Assert.NotNull(twin.Properties); Assert.NotNull(twin.Properties.Desired); Assert.NotNull(twin.Properties.Desired.Metadata); Assert.Equal(twinPropertyVersion, twin.Properties.Desired.Version); Assert.NotNull(twin.Properties.Desired.Metadata.LastUpdated); var rawDesiredLastUpdated = twin.Properties.Desired.Metadata.LastUpdated; Assert.NotNull(rawDesiredLastUpdated); Assert.Equal(stamp, rawDesiredLastUpdated); Assert.NotNull(twin.Properties.Reported); Assert.NotNull(twin.Properties.Reported.Metadata); Assert.Equal(twinPropertyVersion, twin.Properties.Reported.Version); Assert.NotNull(twin.Properties.Reported.Metadata.LastUpdated); var rawReportedLastUpdated = twin.Properties.Reported.Metadata.LastUpdated; Assert.NotNull(rawReportedLastUpdated); Assert.Equal(stamp, rawReportedLastUpdated); }