< Summary - CoreWCF Coverage — PR #1766

Information
Class: CoreWCF.Channels.KafkaTransportSecurity
Assembly: CoreWCF.Kafka
File(s): /home/runner/work/CoreWCF/CoreWCF/src/CoreWCF.Kafka/src/CoreWCF/Channels/KafkaTransportSecurity.cs
Line coverage
85%
Covered lines: 36
Uncovered lines: 6
Coverable lines: 42
Total lines: 124
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/src/CoreWCF/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.Channels;
 8
 9public sealed class KafkaTransportSecurity
 10{
 11    private KafkaCredentialType _credentialType = KafkaCredentialType.None;
 12
 6013    public KafkaTransportSecurity()
 14    {
 15
 6016    }
 17
 18    public KafkaCredentialType CredentialType
 19    {
 020        get => _credentialType;
 21        set
 22        {
 823            if (!KafkaCredentialTypeHelper.IsDefined(value))
 24            {
 025                throw new ArgumentOutOfRangeException(nameof(value));
 26            }
 27
 828            if (!KafkaCredentialTypeHelper.IsSupported(value))
 29            {
 030                throw new ArgumentException(SR.InvalidCredentialType);
 31            }
 32
 833            _credentialType = value;
 834        }
 35    }
 36
 37    internal void ConfigureTransportSecurityWithClientAuthentication(KafkaTransportBindingElement bindingElement)
 38    {
 7839        if (_credentialType == KafkaCredentialType.None)
 40        {
 2641            bindingElement.SecurityProtocol ??= SecurityProtocol.Ssl;
 2642            bindingElement.SslCaPem ??= CaPem;
 43        }
 44
 7845        if (_credentialType == KafkaCredentialType.SslKeyPairCertificate)
 46        {
 2647            if (SslKeyPairCredential is null)
 48            {
 049                throw new NotSupportedException(SR.MissingSslKeyPairCredential);
 50            }
 51
 2652            bindingElement.SecurityProtocol ??= SecurityProtocol.Ssl;
 2653            bindingElement.SslCaPem ??= CaPem;
 2654            bindingElement.SslKeyPem ??= SslKeyPairCredential.SslKeyPem;
 2655            bindingElement.SslKeyPassword ??= SslKeyPairCredential.SslKeyPassword;
 2656            bindingElement.SslCertificatePem ??= SslKeyPairCredential.SslCertificatePem;
 57
 58        }
 59
 7860        if (_credentialType == KafkaCredentialType.SaslPlain)
 61        {
 2662            if (SaslUsernamePasswordCredential is null)
 63            {
 064                throw new NotSupportedException(SR.MissingSaslUsernamePasswordCredential);
 65            }
 66
 2667            bindingElement.SslCaPem ??= CaPem;
 2668            bindingElement.SaslMechanism ??= SaslMechanism.Plain;
 2669            bindingElement.SecurityProtocol ??= SecurityProtocol.SaslSsl;
 2670            bindingElement.SaslUsername ??= SaslUsernamePasswordCredential.SaslUsername;
 2671            bindingElement.SaslPassword ??= SaslUsernamePasswordCredential.SaslPassword;
 72        }
 73
 74        // TODO maps other transport security mechanism provided by Confluent.Kafka once requested. (Gssapi, Scram, OAut
 7875    }
 76
 77    internal void ConfigureClientAuthenticationOnly(KafkaTransportBindingElement bindingElement)
 78    {
 2679        if (_credentialType == KafkaCredentialType.SaslPlain)
 80        {
 2681            if (SaslUsernamePasswordCredential is null)
 82            {
 083                throw new NotSupportedException(SR.MissingSaslUsernamePasswordCredential);
 84            }
 85
 2686            bindingElement.SecurityProtocol ??= SecurityProtocol.SaslPlaintext;
 2687            bindingElement.SaslMechanism ??= SaslMechanism.Plain;
 2688            bindingElement.SaslUsername ??= SaslUsernamePasswordCredential.SaslUsername;
 2689            bindingElement.SaslPassword ??= SaslUsernamePasswordCredential.SaslPassword;
 90        }
 91
 92        // TODO maps other transport security mechanism provided by Confluent.Kafka once requested. (Gssapi, Scram, OAut
 2693    }
 94
 95    internal void ConfigureNoTransportSecurity(KafkaTransportBindingElement bindingElement)
 96    {
 77897        bindingElement.SecurityProtocol ??= SecurityProtocol.Plaintext;
 77898    }
 99
 12100    public string CaPem { get; set; }
 101
 64102    public SaslUsernamePasswordCredential SaslUsernamePasswordCredential { get; set; }
 103
 34104    public SslKeyPairCredential SslKeyPairCredential { get; set; }
 105}
 106
 107public class SaslUsernamePasswordCredential
 108{
 109    public SaslUsernamePasswordCredential(string saslUsername, string saslPassword)
 110    {
 111        SaslUsername = saslUsername;
 112        SaslPassword = saslPassword;
 113    }
 114
 115    public string SaslUsername { get; }
 116    public string SaslPassword { get; }
 117}
 118
 119public class SslKeyPairCredential
 120{
 121    public string SslCertificatePem { get; set; }
 122    public string SslKeyPem { get; set; }
 123    public string SslKeyPassword { get; set; }
 124}