Exemple #1
0
        public async Task SendAsync(string serviceName, string topicName, GateRequest gateRequest, CancellationToken cancellationToken)
        {
            var fallbackEndpoint   = new Uri(_sidecarOptions.FallbackUri);
            var httpRequestMessage = gateRequest.ToHttpRequestMessage(fallbackEndpoint);

            httpRequestMessage.Headers.Remove(HttpHeaderNames.XGateServiceName);
            httpRequestMessage.Headers.Add(HttpHeaderNames.XGateServiceName, serviceName);
            httpRequestMessage.Headers.Remove(HttpHeaderNames.XGateTopicName);
            httpRequestMessage.Headers.Add(HttpHeaderNames.XGateTopicName, topicName);
            var httpResponseMessage =
                await _httpClient.SendAsync(httpRequestMessage, cancellationToken);

            httpResponseMessage.EnsureSuccessStatusCode();
        }
Exemple #2
0
        public async Task GateRequest_To_HttpRequestMessage_Test()
        {
            var serviceUri = new Uri("http://service-host/");


            var gateRequest = new GateRequest
            {
                ServicePath = "service-path",
                Query       = "?a=b",
                Method      = "POST",
                Headers     = new List <KeyValuePair <string, string> >
                {
                    new KeyValuePair <string, string>("Host", "client-host"),
                    new KeyValuePair <string, string>("Accept", "application/json"),
                    new KeyValuePair <string, string>("Content-Type", "application/json"),
                    new KeyValuePair <string, string>("X-Test", "test1"),
                    new KeyValuePair <string, string>("X-Test", "test2"),
                    new KeyValuePair <string, string>("X-Test", "test3")
                },
                Content = Encoding.UTF8.GetBytes("Test")
            };

            var httpRequestMessage = gateRequest.ToHttpRequestMessage(serviceUri);

            Assert.AreEqual(new Uri(serviceUri, gateRequest.ServicePath + gateRequest.Query), httpRequestMessage.RequestUri);
            Assert.AreEqual(gateRequest.Method, httpRequestMessage.Method.ToString());
            Assert.IsTrue(gateRequest.Content.SequenceEqual(await httpRequestMessage.Content.ReadAsByteArrayAsync()));

            Assert.IsTrue(gateRequest.Headers.Where(h => h.Key != "Host").All(h =>
                                                                              httpRequestMessage.Headers.Any(rmh => rmh.Key == h.Key && rmh.Value.Contains(h.Value)) ||
                                                                              httpRequestMessage.Content.Headers.Any(rmh => rmh.Key == h.Key && rmh.Value.Contains(h.Value))),
                          "Must contains all gateRequest headers");

            Assert.IsTrue(!gateRequest.Headers.Any(h =>
                                                   httpRequestMessage.Headers.Any(rmh => rmh.Key == h.Key && rmh.Value.Contains(h.Value)) &&
                                                   httpRequestMessage.Content.Headers.Any(rmh => rmh.Key == h.Key && rmh.Value.Contains(h.Value))),
                          "Should not contains duplicate headers"
                          );

            Assert.IsTrue(httpRequestMessage.Headers.Any() && httpRequestMessage.Content.Headers.Any(),
                          "Request and request content must contain headers");

            Assert.AreEqual($"{serviceUri.Host}:{serviceUri.Port}", httpRequestMessage.Headers.Host);

            var httpRequestCount = httpRequestMessage.Headers.Count() + httpRequestMessage.Content.Headers.Count();
            var gateRequestCount = gateRequest.Headers.Select(h => h.Key).Distinct().Count();

            Assert.AreEqual(gateRequestCount, httpRequestCount,
                            "Add headers with same key in one header");
        }