public async Task ProvisioningDeviceClient_RegisterAsyncInvalidServiceCertificateAmqpWs_Fails() { using var transport = new ProvisioningTransportHandlerAmqp(TransportFallbackType.WebSocketOnly); ProvisioningTransportException exception = await Assert.ThrowsExceptionAsync <ProvisioningTransportException>( () => TestInvalidServiceCertificate(transport)).ConfigureAwait(false); Assert.IsInstanceOfType(exception.InnerException.InnerException.InnerException, typeof(AuthenticationException)); }
public async Task ProvisioningDeviceClient_RegisterAsyncInvalidServiceCertificateHttp_Fails() { using var transport = new ProvisioningTransportHandlerHttp(); ProvisioningTransportException exception = await Assert.ThrowsExceptionAsync <ProvisioningTransportException>( () => TestInvalidServiceCertificate(transport)).ConfigureAwait(false); #if NET472 || NET451 Assert.IsInstanceOfType(exception.InnerException.InnerException.InnerException, typeof(AuthenticationException)); #else Assert.IsInstanceOfType(exception.InnerException.InnerException, typeof(AuthenticationException)); #endif }
private async Task ProcessRegistrationStatusAsync(IChannelHandlerContext context, PublishPacket packet) { string operationId = null; try // TODO : extract generic method for exception handling. { await PubAckAsync(context, packet.PacketId).ConfigureAwait(true); string jsonData = Encoding.UTF8.GetString( packet.Payload.GetIoBuffer().Array, packet.Payload.GetIoBuffer().Offset, packet.Payload.GetIoBuffer().Count); await VerifyPublishPacketTopicAsync(context, packet.TopicName, jsonData).ConfigureAwait(true); //"{\"operationId\":\"0.indcertdevice1.e50c0fa7-8b9b-4b3d-8374-02d71377886f\",\"status\":\"assigning\"}" var operation = JsonConvert.DeserializeObject <RegistrationOperationStatus>(jsonData); operationId = operation.OperationId; operation.RetryAfter = ProvisioningErrorDetailsMqtt.GetRetryAfterFromTopic(packet.TopicName, s_defaultOperationPoolingInterval); if (string.CompareOrdinal(operation.Status, RegistrationOperationStatus.OperationStatusAssigning) == 0 || string.CompareOrdinal(operation.Status, RegistrationOperationStatus.OperationStatusUnassigned) == 0) { await Task.Delay(operation.RetryAfter ?? RetryJitter.GenerateDelayWithJitterForRetry(s_defaultOperationPoolingInterval)).ConfigureAwait(true); ChangeState(State.WaitForStatus, State.WaitForPubAck); await PublishGetOperationAsync(context, operationId).ConfigureAwait(true); } else { ChangeState(State.WaitForStatus, State.Done); _taskCompletionSource.TrySetResult(operation); await this.DoneAsync(context).ConfigureAwait(true); } } catch (ProvisioningTransportException te) { await FailWithExceptionAsync(context, te).ConfigureAwait(true); } catch (Exception ex) { var wrapperEx = new ProvisioningTransportException( $"{ExceptionPrefix} Error while processing RegistrationStatus.", ex, false); await FailWithExceptionAsync(context, wrapperEx).ConfigureAwait(true); } }
public async Task ProvisioningDeviceClient_RegisterAsyncInvalidServiceCertificateMqttTcp_Fails() { using var transport = new ProvisioningTransportHandlerMqtt(TransportFallbackType.TcpOnly); ProvisioningTransportException exception = await Assert.ThrowsExceptionAsync <ProvisioningTransportException>( () => TestInvalidServiceCertificate(transport)).ConfigureAwait(false); if (exception.InnerException == null) { Assert.AreEqual("MQTT Protocol Exception: Channel closed.", exception.Message); } else { Assert.IsInstanceOfType(exception.InnerException, typeof(AuthenticationException)); } }
private void ChangeState(State expectedCurrentState, State newState) { if (Logging.IsEnabled) { Logging.Info(this, $"{nameof(ChangeState)}: {expectedCurrentState} -> {newState}"); } int currentState = Interlocked.CompareExchange(ref _state, (int)newState, (int)expectedCurrentState); if (currentState != (int)expectedCurrentState) { string newStateString = Enum.GetName(typeof(State), newState); string currentStateString = Enum.GetName(typeof(State), currentState); string expectedStateString = Enum.GetName(typeof(State), expectedCurrentState); var exception = new ProvisioningTransportException( $"{ExceptionPrefix} Unexpected state transition to {newStateString} from {currentStateString}. " + $"Expecting {expectedStateString}"); ForceState(State.Failed); _taskCompletionSource.TrySetException(exception); } }