示例#1
0
        public async Task DatadogHttpClient_WhenOnlyPartOfResponseIsAvailable_ParsesCorrectly(int bytesToRead)
        {
            var client         = DatadogHttpClient.CreateTraceAgentClient();
            var requestContent = new BufferContent(new ArraySegment <byte>(new byte[0]));
            var htmlResponse   = string.Join("\r\n", HtmlResponseLines());

            using var requestStream = new MemoryStream();
            var responseBytes = Encoding.UTF8.GetBytes(htmlResponse);

            using var responseStream = new RegulatedStream(responseBytes, bytesToRead);

            var request  = new HttpRequest("POST", "localhost", string.Empty, new HttpHeaders(), requestContent);
            var response = await client.SendAsync(request, requestStream, responseStream);

            Assert.Equal(200, response.StatusCode);
            Assert.Equal("OK", response.ResponseMessage);
            Assert.Equal("Test Server", response.Headers.GetValue(("Server")));
            Assert.Equal(2, response.ContentLength);
            Assert.Equal("application/json", response.ContentType);

            var buffer = new byte[2];
            await response.Content.CopyToAsync(buffer);

            var content = Encoding.UTF8.GetString(buffer);

            Assert.Equal("{}", content);
        }
        public void WriteLeadingHeaders()
        {
            // Note that WriteLeadingHeaders should NOT write this header in WriteLeadingHeaders
            var headers = new HttpHeaders {
                { "x-test", "my-value" }
            };
            var bytes   = Encoding.UTF8.GetBytes("{}"); // length = 2
            var content = new BufferContent(new ArraySegment <byte>(bytes));
            var request = new HttpRequest(
                verb: "PATCH",
                host: "my-host.com",
                path: "/some/path",
                headers,
                content);

            var helper = new TraceAgentHttpHeaderHelper();

            var tracerVersion = TracerConstants.AssemblyVersion;
            var lang          = FrameworkDescription.Instance.Name;
            var fxVersion     = FrameworkDescription.Instance.ProductVersion;

            var expected = "PATCH /some/path HTTP/1.1\r\nHost: my-host.com\r\nAccept-Encoding: identity\r\nContent-Length: 2\r\nDatadog-Meta-Lang: .NET\r\nDatadog-Meta-Tracer-Version: "
                           + tracerVersion + "\r\nx-datadog-tracing-enabled: false\r\nDatadog-Meta-Lang-Interpreter: "
                           + lang + "\r\nDatadog-Meta-Lang-Version: "
                           + fxVersion + "\r\nDatadog-Client-Computed-Top-Level: 1\r\n";

            var sb = new StringBuilder();

            using var textWriter = new StringWriter(sb);
            helper.WriteLeadingHeaders(request, textWriter);

            sb.ToString().Should().Be(expected);
        }
        public async Task <IApiResponse> PostAsync(ArraySegment <byte> traces)
        {
            using (var bidirectionalStream = _streamFactory.GetBidirectionalStream())
            {
                var content = new BufferContent(traces);
                var request = new HttpRequest("POST", _uri.Host, _uri.PathAndQuery, _headers, content);

                // send request, get response
                var response = await _client.SendAsync(request, bidirectionalStream, bidirectionalStream).ConfigureAwait(false);

                // Content-Length is required as we don't support chunked transfer
                var contentLength = response.Content.Length;
                if (!contentLength.HasValue)
                {
                    throw new Exception("Content-Length is required but was not provided");
                }

                // buffer the entire contents for now
                var buffer = new byte[contentLength.Value];
                var responseContentStream = new MemoryStream(buffer);
                await response.Content.CopyToAsync(buffer).ConfigureAwait(false);

                responseContentStream.Position = 0;

                return(new HttpStreamResponse(response.StatusCode, responseContentStream.Length, response.GetContentEncoding(), responseContentStream, response.Headers));
            }
        }
示例#4
0
        private void StartBufferContent(BufferContent result)
        {
            if (Parent == null)
            {
                // Always store buffer content at the root level

                EnsureBuffers().Add(result);
            }
            else
            {
                Parent.StartBufferContent(result);
            }
        }
示例#5
0
        internal HxlWriter StartBufferContent(string name)
        {
            if (name == "spaFragments")
            {
                var result = new BufferContent(name);
                var writer = new HxlWriter(result.Writer, new HxlWriterSettings {
                    TemplateContext = this
                });
                StartBufferContent(result);
                return(writer);
            }

            throw new NotImplementedException();
        }
        public void TestSetup()
        {
            usefulData = Guid.NewGuid().ToByteArray();

            totalBuffer = Guid.NewGuid()
                          .ToByteArray()
                          .Concat(usefulData)
                          .Concat(Guid.NewGuid().ToByteArray())
                          .ToArray();

            cancellation = new CancellationTokenSource();

            content = new BufferContent(new Content(totalBuffer, usefulData.Length, usefulData.Length), cancellation.Token);
        }
        public void Should_be_read_as_correct_portion_of_large_buffer()
        {
            usefulData = new byte[100 * 1000];

            new Random(Guid.NewGuid().GetHashCode()).NextBytes(usefulData);

            totalBuffer = Guid.NewGuid()
                          .ToByteArray()
                          .Concat(usefulData)
                          .Concat(Guid.NewGuid().ToByteArray())
                          .ToArray();

            content = new BufferContent(new Content(totalBuffer, 16, usefulData.Length), cancellation.Token);

            content.ReadAsByteArrayAsync().Result.Should().Equal(usefulData);
        }
示例#8
0
        public void GetPoints(out Point[] Points, int id)
        {
            double yFactor = (GraphRect.Height - 10) / (Maximum - Minimum);
            double xFactor = (GraphRect.Width * m_viewWidth) / Channels[0].Length;
            float  x;
            float  y;
            int    index;

            Points = null;

            try
            {
                RingBuffer <float> channel = Channels[id];

                if (channel.Length == 0)
                {
                    return;
                }

                Points = new Point[channel.Length];

                index = 0;

                BufferContent <float> iterator = channel.GetFirst();

                for (index = 0; index < channel.Length; index++)
                {
                    if (iterator == null)
                    {
                        Points[index] = (Points[index - 1]);
                    }
                    else
                    {
                        x = (float)((index * xFactor) + GraphRect.X);
                        y = (float)(GraphRect.Height - (((Math.Max(Convert.ToDouble(iterator.Content), Minimum) - Minimum) * yFactor)));

                        Points[index] = new Point(x, y);

                        iterator = iterator.Next;
                    }
                }
            }
            catch (Exception ex)
            {
                Debug.WriteLine(ex.ToString());
            }
        }