< Summary

Class:Azure.Storage.Blobs.Specialized.MemoryResponse
Assembly:Azure.Storage.Blobs.Batch
File(s):C:\Git\azure-sdk-for-net\sdk\storage\Azure.Storage.Blobs.Batch\src\MemoryResponse.cs
Covered lines:14
Uncovered lines:15
Coverable lines:29
Total lines:148
Line coverage:48.2% (14 of 29)
Covered branches:3
Total branches:8
Branch coverage:37.5% (3 of 8)

Metrics

MethodCyclomatic complexity Line coverage Branch coverage
.ctor()-100%100%
get_Status()-100%100%
get_ReasonPhrase()-100%100%
get_ContentStream()-100%100%
get_ClientRequestId()-0%0%
set_ClientRequestId(...)-0%100%
SetStatus(...)-100%100%
SetReasonPhrase(...)-100%100%
SetContent(...)-0%100%
SetContent(...)-0%100%
Dispose()-100%50%
SetHeader(...)-0%100%
SetHeader(...)-0%100%
AddHeader(...)-100%100%
ContainsHeader(...)-0%100%
EnumerateHeaders()-100%100%
TryGetHeader(...)-0%0%
TryGetHeaderValues(...)-0%100%
JoinHeaderValues(...)-100%100%

File(s)

C:\Git\azure-sdk-for-net\sdk\storage\Azure.Storage.Blobs.Batch\src\MemoryResponse.cs

#LineLine coverage
 1// Copyright (c) Microsoft Corporation. All rights reserved.
 2// Licensed under the MIT License.
 3
 4using System;
 5using System.Collections.Generic;
 6using System.IO;
 7using System.Linq;
 8using System.Text;
 9using Azure.Core;
 10
 11namespace Azure.Storage.Blobs.Specialized
 12{
 13    /// <summary>
 14    /// A Response that can be constructed in memory without being tied to a
 15    /// live request.
 16    /// </summary>
 17    internal class MemoryResponse : Response
 18    {
 19        /// <summary>
 20        /// The Response <see cref="Status"/>.
 21        /// </summary>
 22        private int _status = BatchConstants.NoStatusCode;
 23
 24        /// <summary>
 25        /// The Response <see cref="ReasonPhrase"/>.
 26        /// </summary>
 27        private string _reasonPhrase = null;
 28
 29        /// <summary>
 30        /// The <see cref="Response.Headers"/>.
 31        /// </summary>
 357632        private readonly IDictionary<string, List<string>> _headers =
 357633            new Dictionary<string, List<string>>(StringComparer.OrdinalIgnoreCase);
 34
 35        /// <inheritdoc />
 372836        public override int Status => _status;
 37
 38        /// <inheritdoc />
 10439        public override string ReasonPhrase => _reasonPhrase;
 40
 41        /// <inheritdoc />
 379242        public override Stream ContentStream { get; set; }
 43
 44        /// <inheritdoc />
 45        public override string ClientRequestId
 46        {
 047            get => TryGetHeader(BatchConstants.XmsClientRequestIdName, out string id) ? id : null;
 048            set => SetHeader(BatchConstants.XmsClientRequestIdName, value);
 49        }
 50
 51        /// <summary>
 52        /// Set the Response <see cref="Status"/>.
 53        /// </summary>
 54        /// <param name="status">The Response status.</param>
 127255        public void SetStatus(int status) => _status = status;
 56
 57        /// <summary>
 58        /// Set the Response <see cref="ReasonPhrase"/>.
 59        /// </summary>
 60        /// <param name="reasonPhrase">The Response ReasonPhrase.</param>
 127261        public void SetReasonPhrase(string reasonPhrase) => _reasonPhrase = reasonPhrase;
 62
 63        /// <summary>
 64        /// Set the Response <see cref="ContentStream"/>.
 65        /// </summary>
 66        /// <param name="content">The response content.</param>
 067        public void SetContent(byte[] content) => ContentStream = new MemoryStream(content);
 68
 69        /// <summary>
 70        /// Set the Response <see cref="ContentStream"/>.
 71        /// </summary>
 72        /// <param name="content">The response content.</param>
 073        public void SetContent(string content) => SetContent(Encoding.UTF8.GetBytes(content));
 74
 75        /// <summary>
 76        /// Dispose the Response.
 77        /// </summary>
 16478        public override void Dispose() => ContentStream?.Dispose();
 79
 80        /// <summary>
 81        /// Set the value of a response header (and overwrite any existing
 82        /// values).
 83        /// </summary>
 84        /// <param name="name">The name of the response header.</param>
 85        /// <param name="value">The response header value.</param>
 86        public void SetHeader(string name, string value) =>
 087            SetHeader(name, new List<string> { value });
 88
 89        /// <summary>
 90        /// Set the values of a response header (and overwrite any existing
 91        /// values).
 92        /// </summary>
 93        /// <param name="name">The name of the response header.</param>
 94        /// <param name="values">The response header values.</param>
 95        public void SetHeader(string name, IEnumerable<string> values) =>
 096            _headers[name] = values.ToList();
 97
 98        /// <summary>
 99        /// Add a response header value.
 100        /// </summary>
 101        /// <param name="name">The name of the response header.</param>
 102        /// <param name="value">The response header value.</param>
 103        public void AddHeader(string name, string value)
 104        {
 5192105            if (!_headers.TryGetValue(name, out List<string> values))
 106            {
 5192107                _headers[name] = values = new List<string>();
 108            }
 5192109            values.Add(value);
 5192110        }
 111
 112        /// <inheritdoc />
 113        protected override bool ContainsHeader(string name) =>
 0114            _headers.ContainsKey(name);
 115
 116        /// <inheritdoc />
 117        protected override IEnumerable<HttpHeader> EnumerateHeaders() =>
 368118            _headers.Select(header => new HttpHeader(header.Key, JoinHeaderValues(header.Value)));
 119
 120        /// <inheritdoc />
 121        protected override bool TryGetHeader(string name, out string value)
 122        {
 0123            if (_headers.TryGetValue(name, out List<string> headers))
 124            {
 0125                value = JoinHeaderValues(headers);
 0126                return true;
 127            }
 0128            value = null;
 0129            return false;
 130        }
 131
 132        /// <inheritdoc />
 133        protected override bool TryGetHeaderValues(string name, out IEnumerable<string> values)
 134        {
 0135            bool found = _headers.TryGetValue(name, out List<string> headers);
 0136            values = headers;
 0137            return found;
 138        }
 139
 140        /// <summary>
 141        /// Join multiple header values together with a comma.
 142        /// </summary>
 143        /// <param name="values">The header values.</param>
 144        /// <returns>A single joined value.</returns>
 145        private static string JoinHeaderValues(IEnumerable<string> values) =>
 316146            string.Join(",", values);
 147    }
 148}