예제 #1
0
        public void TestServiceCollectorWindows()
        {
            if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
            {
                // Create a service - This won't throw an exception, but it won't work if you are not an Admin.
                var serviceName = "AsaDemoService";
                var exeName     = "AsaDemoService.exe";
                var cmd         = string.Format("create {0} binPath=\"{1}\"", serviceName, exeName);
                ExternalCommandRunner.RunExternalCommand("sc.exe", cmd);

                var sc = new ServiceCollector(new CollectCommandOptions());
                sc.TryExecute();

                Assert.IsTrue(sc.Results.Any(x => x is ServiceObject RO && RO.Name.Equals(serviceName)));

                ConcurrentStack <CollectObject> results = new ConcurrentStack <CollectObject>();
                sc = new ServiceCollector(changeHandler: x => results.Push(x));
                sc.TryExecute();

                Assert.IsTrue(results.Any(x => x is ServiceObject RO && RO.Name.Equals(serviceName)));

                // Clean up
                cmd = string.Format("delete {0}", serviceName);
                ExternalCommandRunner.RunExternalCommand("sc.exe", cmd);
            }
        }
        public void TestServiceCollectorWindows()
        {
            if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
            {
                var FirstRunId  = "TestServiceCollector-1";
                var SecondRunId = "TestServiceCollector-2";

                var fwc = new ServiceCollector(FirstRunId);
                fwc.Execute();

                // Create a service - This won't throw an exception, but it won't work if you are not an Admin.
                var serviceName = "AsaDemoService";
                var exeName     = "AsaDemoService.exe";
                var cmd         = string.Format("create {0} binPath=\"{1}\"", serviceName, exeName);
                ExternalCommandRunner.RunExternalCommand("sc.exe", cmd);

                fwc = new ServiceCollector(SecondRunId);
                fwc.Execute();

                // Clean up
                cmd = string.Format("delete {0}", serviceName);
                ExternalCommandRunner.RunExternalCommand("sc.exe", cmd);

                BaseCompare bc = new BaseCompare();
                if (!bc.TryCompare(FirstRunId, SecondRunId))
                {
                    Assert.Fail();
                }

                var results = bc.Results;

                Assert.IsTrue(results.ContainsKey("SERVICE_CREATED"));
                Assert.IsTrue(results["SERVICE_CREATED"].Where(x => x.Identity.Contains("AsaDemoService")).Count() > 0);
            }
        }
예제 #3
0
        public void Collect()
        {
            var sut = new ServiceCollector();

            var services = sut.Collect().ToArray();

            Assert.AreEqual(16, services.Length);

            var service = services.Where(s => s.ServiceType.Name.IndexOf("MyService") >= 0 && s.EntryPointMethodname == "Echo").FirstOrDefault();

            Assert.AreEqual(servicehost.nonpublic.HttpMethods.Get, service.HttpMethod);
            Assert.AreEqual("Arrange", service.SetupMethodname);
            Assert.AreEqual("Cleanup", service.TeardownMethodname);
            Assert.AreEqual("/echo", service.Route);

            Assert.AreEqual(1, service.Parameters.Length);
            Assert.AreEqual("ping", service.Parameters[0].Name);
            Assert.AreSame(typeof(string), service.Parameters[0].Type);

            Assert.AreEqual(typeof(string), service.ResultType);


            service = services.Where(s => s.ServiceType.Name.IndexOf("MyService") >= 0 && s.EntryPointMethodname == "JsonDeser").FirstOrDefault();
            Assert.AreEqual(servicehost.nonpublic.HttpMethods.Post, service.HttpMethod);
            Assert.AreEqual("Arrange", service.SetupMethodname);
            Assert.AreEqual("Cleanup", service.TeardownMethodname);
            Assert.AreEqual("/reflection/{id}", service.Route);

            Assert.AreEqual(2, service.Parameters.Length);
            Assert.AreEqual("id", service.Parameters[0].Name);
            Assert.AreSame(typeof(string), service.Parameters[0].Type);
            Assert.IsFalse(service.Parameters[0].IsPayload);
            Assert.AreEqual("payload", service.Parameters[1].Name);
            Assert.IsTrue(service.Parameters[1].Type.Name.IndexOf("JsonPayload") >= 0);
            Assert.IsTrue(service.Parameters[1].IsPayload);

            Assert.IsTrue(service.ResultType.Name.IndexOf("JsonPayload") >= 0);


            service = services.Where(s => s.ServiceType.Name.IndexOf("YourService") >= 0 && s.EntryPointMethodname == "Add").FirstOrDefault();
            Assert.AreEqual(servicehost.nonpublic.HttpMethods.Post, service.HttpMethod);
            Assert.AreEqual(null, service.SetupMethodname);
            Assert.AreEqual(null, service.TeardownMethodname);
            Assert.AreEqual("/add", service.Route);
            Assert.IsTrue(service.ResultType.Name.IndexOf("AddResult") >= 0);


            service = services.Where(s => s.ServiceType.Name.IndexOf("MyService") >= 0 && s.EntryPointMethodname == "Deafmute").FirstOrDefault();
            Assert.AreEqual(servicehost.nonpublic.HttpMethods.Get, service.HttpMethod);
            Assert.AreEqual("Arrange", service.SetupMethodname);
            Assert.AreEqual("Cleanup", service.TeardownMethodname);
            Assert.AreEqual("/deafmute", service.Route);
            Assert.AreEqual(0, service.Parameters.Length);
            Assert.AreSame(service.ResultType, typeof(void));
        }
예제 #4
0
        public static IServiceCollection AddServiceDescriptors(this IServiceCollection services)
        {
            foreach (var service in ServiceCollector.GetServices())
            {
                services.Add(service);
            }

            // Singleton DI for session
            services.AddSingleton <IHttpContextAccessor, HttpContextAccessor>();
            // Singleton DI for security
            services.AddSingleton <ISecurityService, SecurityService>();

            return(services);
        }
예제 #5
0
        public void Collect_explicit()
        {
            var sut = new ServiceCollector();

            var services = sut.Collect(new[] { typeof(SomeTestService), typeof(test_ServiceCollector) }).ToArray();

            Assert.AreEqual(17, services.Length);

            var service = services.Where(s => s.ServiceType.Name.IndexOf("SomeTestService") >= 0 && s.EntryPointMethodname == "f").FirstOrDefault();

            Assert.IsNotNull(service);

            service = services.Where(s => s.ServiceType.Name.IndexOf("test_ServiceCollector") >= 0).FirstOrDefault();
            Assert.IsNull(service);
        }