< Summary - CoreWCF Coverage — PR #1766

Information
Class: CoreWCF.ServiceModel.Channels.KafkaTransportSecurity
Assembly: CoreWCF.Kafka.Client
File(s): /home/runner/work/CoreWCF/CoreWCF/src/CoreWCF.Kafka.Client/src/CoreWCF/ServiceModel/Channels/KafkaTransportSecurity.cs
Line coverage
85%
Covered lines: 36
Uncovered lines: 6
Coverable lines: 42
Total lines: 125
Line coverage: 85.7%
Branch coverage
90%
Covered branches: 47
Total branches: 52
Branch coverage: 90.3%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Cyclomatic complexity NPath complexity Sequence coverage
.ctor()100%11100%
ConfigureTransportSecurityWithClientAuthentication(...)94.11%343490%
ConfigureClientAuthenticationOnly(...)91.66%121287.5%
ConfigureNoTransportSecurity(...)100%22100%

File(s)

/home/runner/work/CoreWCF/CoreWCF/src/CoreWCF.Kafka.Client/src/CoreWCF/ServiceModel/Channels/KafkaTransportSecurity.cs

#LineLine coverage
 1// Licensed to the .NET Foundation under one or more agreements.
 2// The .NET Foundation licenses this file to you under the MIT license.
 3
 4using System;
 5using Confluent.Kafka;
 6
 7namespace CoreWCF.ServiceModel.Channels;
 8
 9public sealed class KafkaTransportSecurity
 10{
 11    private KafkaCredentialType _credentialType = KafkaCredentialType.None;
 12
 4913    public KafkaTransportSecurity()
 14    {
 15
 4916    }
 17
 18    public KafkaCredentialType CredentialType
 19    {
 020        get => _credentialType;
 21        set
 22        {
 523            if (!KafkaCredentialTypeHelper.IsDefined(value))
 24            {
 025                throw new ArgumentOutOfRangeException(nameof(value));
 26            }
 27
 528            if (!KafkaCredentialTypeHelper.IsSupported(value))
 29            {
 030                throw new ArgumentException(SR.InvalidCredentialType);
 31            }
 32
 533            _credentialType = value;
 534        }
 35    }
 36
 37    internal void ConfigureTransportSecurityWithClientAuthentication(KafkaTransportBindingElement bindingElement)
 38    {
 39
 3040        if (_credentialType == KafkaCredentialType.None)
 41        {
 1042            bindingElement.SecurityProtocol ??= SecurityProtocol.Ssl;
 1043            bindingElement.SslCaPem ??= CaPem;
 44        }
 45
 3046        if (_credentialType == KafkaCredentialType.SslKeyPairCertificate)
 47        {
 1048            if (SslKeyPairCredential is null)
 49            {
 050                throw new NotSupportedException(SR.MissingSslKeyPairCredential);
 51            }
 52
 1053            bindingElement.SecurityProtocol ??= SecurityProtocol.Ssl;
 1054            bindingElement.SslCaPem ??= CaPem;
 1055            bindingElement.SslKeyPem ??= SslKeyPairCredential.SslKeyPem;
 1056            bindingElement.SslKeyPassword ??= SslKeyPairCredential.SslKeyPassword;
 1057            bindingElement.SslCertificatePem ??= SslKeyPairCredential.SslCertificatePem;
 58
 59        }
 60
 3061        if (_credentialType == KafkaCredentialType.SaslPlain)
 62        {
 1063            if (SaslUsernamePasswordCredential is null)
 64            {
 065                throw new NotSupportedException(SR.MissingSaslUsernamePasswordCredential);
 66            }
 67
 1068            bindingElement.SslCaPem ??= CaPem;
 1069            bindingElement.SaslMechanism ??= SaslMechanism.Plain;
 1070            bindingElement.SecurityProtocol ??= SecurityProtocol.SaslSsl;
 1071            bindingElement.SaslUsername ??= SaslUsernamePasswordCredential.SaslUsername;
 1072            bindingElement.SaslPassword ??= SaslUsernamePasswordCredential.SaslPassword;
 73        }
 74
 75        // TODO maps other security mechanism once requested. (Gssapi, Scram, OAuth..)
 3076    }
 77
 78    internal void ConfigureClientAuthenticationOnly(KafkaTransportBindingElement bindingElement)
 79    {
 1080        if (_credentialType == KafkaCredentialType.SaslPlain)
 81        {
 1082            if (SaslUsernamePasswordCredential is null)
 83            {
 084                throw new NotSupportedException(SR.MissingSaslUsernamePasswordCredential);
 85            }
 86
 1087            bindingElement.SecurityProtocol ??= SecurityProtocol.SaslPlaintext;
 1088            bindingElement.SaslMechanism ??= SaslMechanism.Plain;
 1089            bindingElement.SaslUsername ??= SaslUsernamePasswordCredential.SaslUsername;
 1090            bindingElement.SaslPassword ??= SaslUsernamePasswordCredential.SaslPassword;
 91        }
 92
 93        // TODO maps other security mechanism once requested. (Gssapi, Scram, OAuth..)
 1094    }
 95
 96    internal void ConfigureNoTransportSecurity(KafkaTransportBindingElement bindingElement)
 97    {
 29198        bindingElement.SecurityProtocol ??= SecurityProtocol.Plaintext;
 29199    }
 100
 6101    public string CaPem { get; set; }
 102
 26103    public SaslUsernamePasswordCredential SaslUsernamePasswordCredential { get; set; }
 104
 14105    public SslKeyPairCredential SslKeyPairCredential { get; set; }
 106}
 107
 108public class SaslUsernamePasswordCredential
 109{
 110    public SaslUsernamePasswordCredential(string saslUsername, string saslPassword)
 111    {
 112        SaslUsername = saslUsername;
 113        SaslPassword = saslPassword;
 114    }
 115
 116    public string SaslUsername { get; }
 117    public string SaslPassword { get; }
 118}
 119
 120public class SslKeyPairCredential
 121{
 122    public string SslCertificatePem { get; set; }
 123    public string SslKeyPem { get; set; }
 124    public string SslKeyPassword { get; set; }
 125}