コード例 #1
0
ファイル: CobClientProxyTest.cs プロジェクト: aspark/CobMvc
        private ProxyFactoryBag CreateProxyFactory()
        {
            ProxyFactoryBag result = new ProxyFactoryBag();

            var request = new Mock <ICobRequest>();

            request.Setup(m => m.DoRequest(It.IsAny <CobRequestContext>(), It.IsAny <object>())).Callback <CobRequestContext, object>((ctx, s) => {
                result.Context = ctx;
                result.State   = s;
                result.InvokeCount++;
            }).Returns <CobRequestContext, object>((ctx, s) => {
                var typed    = ctx as TypedCobRequestContext;
                var service  = new ServiceA();
                object value = null;

                switch (typed.Method.Name)
                {
                case nameof(ContractA.GetName):
                    value = service.GetName(ctx.Parameters["id"].ToString()).Result;
                    break;

                case nameof(ContractA.GetScore):
                    value = service.GetScore((int)ctx.Parameters["id"]);
                    break;

                case nameof(ContractA.SaveChanged):
                    value = service.SaveChanged((Dto)ctx.Parameters["dto"]).Result;
                    break;
                }

                return(Task.FromResult(value));
            });

            var requestResovler = new Mock <ICobRequestResolver>();

            requestResovler.Setup(m => m.Get(It.IsAny <string>())).Returns(request.Object);

            var contextAccessor = new CobMvcContextAccessor();

            var serviceRegistration = new InMemoryServiceRegistration();

            serviceRegistration.Register(new Core.Service.ServiceInfo {
                ID = "a", Name = nameof(ContractA), Address = "http://cobmvc.test", Status = Core.Service.ServiceInfoStatus.Healthy
            });
            var requestOptions = Options.Create(new CobMvcRequestOptions());

            result.Factory = new CobClientProxyFactory(
                requestResovler.Object,
                serviceRegistration,
                new CobServiceDescriptionGenerator(requestOptions, new ConfigurationBuilder().Build()),
                new LoggerFactory(),
                contextAccessor,
                requestOptions);

            return(result);
        }
コード例 #2
0
        public void TestSelector()
        {
            var registration = new InMemoryServiceRegistration();

            var a = new Core.Service.ServiceInfo {
                Name = "name", Address = "http:/a.com", ID = "a", Status = Core.Service.ServiceInfoStatus.Healthy
            };

            registration.Register(a);

            var b = new Core.Service.ServiceInfo {
                Name = "name", Address = "http:/b.com", ID = "b", Status = Core.Service.ServiceInfoStatus.Healthy
            };

            registration.Register(b);
            var selector = new DefaultServiceSelector(registration, "name", new LoggerFactory().CreateLogger <DefaultServiceSelector>());

            var last = selector.GetOne();

            last.ShouldNotBeNull();

            var service = selector.GetOne();

            service.ID.ShouldNotBe(last.ID);
            last = service;

            service = selector.GetOne();
            service.ID.ShouldNotBe(last.ID);
            last = service;

            var failed = service.ID == b.ID ? a : b;

            while (failed.Status == Core.Service.ServiceInfoStatus.Healthy)
            {
                selector.MarkServiceFailed(failed, true);
            }
            selector.GetOne().ID.ShouldBe(last.ID);
            selector.GetOne().ID.ShouldBe(last.ID);

            selector.MarkServiceHealthy(failed, TimeSpan.FromSeconds(0));
            failed.Status = Core.Service.ServiceInfoStatus.Healthy;

            service = selector.GetOne();
            if (service.ID == last.ID)
            {
                service = selector.GetOne();
            }
            service.ID.ShouldNotBe(last.ID);
            last = service;

            service = selector.GetOne();
            service.ID.ShouldNotBe(last.ID);
            last = service;

            while (a.Status == Core.Service.ServiceInfoStatus.Healthy)
            {
                selector.MarkServiceFailed(a, true);
            }
            while (b.Status == Core.Service.ServiceInfoStatus.Healthy)
            {
                selector.MarkServiceFailed(b, true);
            }
            selector.GetOne().ShouldBeNull();

            selector.MarkServiceHealthy(failed, TimeSpan.FromSeconds(0));
            failed.Status = Core.Service.ServiceInfoStatus.Healthy;
            selector.GetOne().ShouldNotBeNull();
        }