Example #1
0
        public void GetInstances_ShouldBeAbleToHandleEndpointsSingleAddressAndMultiplePorts()
        {
            var mockHttpMessageHandler = new MockHttpMessageHandler();

            mockHttpMessageHandler.Expect(HttpMethod.Get, "/api/v1/namespaces/test/endpoints")
            .WithQueryString("fieldSelector=metadata.name%3Dendpoint")
            .Respond(
                HttpStatusCode.OK,
                new StringContent("{\"apiVersion\":\"v1\",\"items\":[{\"apiVersion\":\"v1\",\"kind\":\"Endpoints\",\"metadata\":{\"name\":\"endpoint\",\"namespace\":\"test\"},\"subsets\":[{\"addresses\":[{\"ip\":\"ip1\", \"targetRef\": {\"uid\":\"uid1\"}}],\"ports\":[{\"name\":\"http\",\"port\":80,\"protocol\":\"TCP\"},{\"name\":\"mgmt\",\"port\":9000,\"protocol\":\"TCP\"}]}]}],\"kind\":\"List\",\"metadata\":{\"resourceVersion\":\"\",\"selfLink\":\"\"}}"));

            mockHttpMessageHandler.When(HttpMethod.Get, "/api/v1/namespaces/test/services")
            .WithQueryString("fieldSelector=metadata.name%3Dendpoint")
            .Respond(
                HttpStatusCode.OK,
                new StringContent(
                    "{\"apiVersion\":\"v1\",\"items\":[{\"apiVersion\":\"v1\",\"kind\":\"Service\",\"metadata\":{\"labels\":{\"l\":\"v\"},\"name\":\"endpoint\",\"namespace\":\"test\",\"uid\":\"uids1\"}}],\"kind\":\"List\",\"metadata\":{\"resourceVersion\":\"\",\"selfLink\":\"\"}}"));

            using var client = new k8s.Kubernetes(
                      config: new KubernetesClientConfiguration { Host = "http://localhost" },
                      httpClient: mockHttpMessageHandler.ToHttpClient());

            var options = new TestOptionsMonitor <KubernetesDiscoveryOptions>(new KubernetesDiscoveryOptions()
            {
                Namespace = "test"
            });

            IDiscoveryClient discoveryClient = new KubernetesDiscoveryClient(
                new DefaultIsServicePortSecureResolver(options.CurrentValue),
                client,
                options);

            var genericInstances = discoveryClient.GetInstances("endpoint");
            var instances        = genericInstances.Select(s => (KubernetesServiceInstance)s).ToList();

            Assert.NotNull(instances);
            Assert.Single(instances);
            Assert.Single(instances.Where(i => i.Host.Equals("ip1") && !i.IsSecure));
            Assert.Single(instances.Where(i => i.InstanceId.Equals("uid1")));
            Assert.Single(instances.Where(i => i.Port == 80));
        }