public async Task Test()
        {
            var prog      = new MyProg();
            var activator = new FakeActivator();

            activator.Add(prog);
            var logger = new MyLogger();
            var host   = TestHelpers.NewJobHost <MyProg>(activator, logger);

            // Invoke with method Info
            var method = prog.GetType().GetMethod("Test");

            host.Call(method);
            prog.AssertValid();
            logger.AssertValid();

            // Invoke with new name.
            await host.CallAsync(MyProg.NewName);

            prog.AssertValid();
            logger.AssertValid();

            // Invoke with original name fails
            await Assert.ThrowsAsync <InvalidOperationException>(async() => await host.CallAsync("Test"));

            await Assert.ThrowsAsync <InvalidOperationException>(async() => await host.CallAsync("MyProg.Test"));
        }
        public void Test()
        {
            MyProg prog      = new MyProg();
            var    activator = new FakeActivator();

            activator.Add(prog);

            JobHostConfiguration config = TestHelpers.NewConfig <MyProg>(activator);

            var ext = new TestExtension();

            config.AddExtension(ext);

            var host = new TestJobHost <MyProg>(config);
            IJobHostMetadataProvider metadataProvider = host.CreateMetadataProvider();

            Assert.Equal(1, ext._counter);

            // Callable
            host.Call("Test");
            Assert.Equal(1, ext._counter);

            // Fact that we registered a Widget converter is enough to add the assembly
            Assembly asm;
            bool     resolved;

            resolved = metadataProvider.TryResolveAssembly(typeof(Widget).Assembly.GetName().Name, out asm);
            Assert.True(resolved);
            Assert.Same(asm, typeof(Widget).Assembly);

            // check with full name
            resolved = metadataProvider.TryResolveAssembly(typeof(Widget).Assembly.GetName().FullName, out asm);
            Assert.True(resolved);
            Assert.Same(asm, typeof(Widget).Assembly);

            // This requires the target attribute to be unique within the assembly.
            var attrType = metadataProvider.GetAttributeTypeFromName("Test9");

            Assert.Equal(typeof(Test9Attribute), attrType);

            // JObject --> Attribute
            var attr = GetAttr <Test9Attribute>(metadataProvider, new { Flag = "xyz" });

            Assert.Equal("xyz", attr.Flag);

            // Getting default type.
            var defaultType = metadataProvider.GetDefaultType(attr, FileAccess.Read, null);

            Assert.Equal(typeof(JObject), defaultType);

            // If we have no match for output, we'll try IAsyncCollector<string>
            Assert.Equal(typeof(IAsyncCollector <string>), metadataProvider.GetDefaultType(attr, FileAccess.Write, typeof(object)));
        }
Exemplo n.º 3
0
        public void Test()
        {
            MyProg prog      = new MyProg();
            var    activator = new FakeActivator();

            activator.Add(prog);

            JobHostConfiguration config = TestHelpers.NewConfig <MyProg>(activator);

            var ext = new TestExtension();

            config.AddExtension(ext);

            IJobHostMetadataProvider tooling = config.CreateMetadataProvider();

            Assert.Equal(1, ext._counter);

            // Callable
            var host = new TestJobHost <MyProg>(config);

            host.Call("Test");
            Assert.Equal(1, ext._counter);

            // Fact that we registered a Widget converter is enough to add the assembly
            Assembly asm;
            bool     resolved;

            resolved = tooling.TryResolveAssembly(typeof(Widget).Assembly.GetName().Name, out asm);
            Assert.True(resolved);
            Assert.Same(asm, typeof(Widget).Assembly);

            // check with full name
            resolved = tooling.TryResolveAssembly(typeof(Widget).Assembly.GetName().FullName, out asm);
            Assert.True(resolved);
            Assert.Same(asm, typeof(Widget).Assembly);

            var attrType = tooling.GetAttributeTypeFromName("Test");

            Assert.Equal(typeof(TestAttribute), attrType);

            // JObject --> Attribute
            var attr = GetAttr <TestAttribute>(tooling, new { Flag = "xyz" });

            Assert.Equal("xyz", attr.Flag);

            // Getting default type.
            var defaultType = tooling.GetDefaultType(attr, FileAccess.Read, null);

            Assert.Equal(typeof(JObject), defaultType);

            Assert.Throws <InvalidOperationException>(() => tooling.GetDefaultType(attr, FileAccess.Write, typeof(object)));
        }
        public void InvokeAsync_IfInstanceIsDisposable_DoesNotDisposeWhileTaskIsRunning2()
        {
            var prog = new MyProg();
            var tsc  = new TaskCompletionSource <object>();

            prog._waiter = tsc.Task;
            var activator = new FakeActivator(prog);
            var host      = TestHelpers.NewJobHost <MyProg>(activator);

            var task = host.CallAsync("MyProg.Method");

            Assert.True(!task.IsCompleted);

            Assert.False(prog._disposed, "User job should not yet be disposed.");
            tsc.SetResult(true); // This will let method run to completion and call dispose.

            task.Wait(3000);
            Assert.True(task.IsCompleted);
            Assert.True(prog._disposed, "User job should be disposed.");
        }
        public async Task Test()
        {
            var prog      = new MyProg();
            var activator = new FakeActivator();

            activator.Add(prog);
            var logger = new MyLogger();

            IHost host = new HostBuilder()
                         .ConfigureDefaultTestHost <MyProg>(_ => { }, activator: activator)
                         .ConfigureServices(services =>
            {
                services.AddSingleton <IAsyncCollector <FunctionInstanceLogEntry> >(logger);
            })
                         .Build();

            var jobHost = host.GetJobHost <MyProg>();

            // Invoke with method Info
            var method = prog.GetType().GetMethod("Test");
            await jobHost.CallAsync(method);

            prog.AssertValid();
            logger.AssertValid();

            // Invoke with new name.
            await jobHost.CallAsync(MyProg.NewName);

            prog.AssertValid();
            logger.AssertValid();

            // Invoke with original name fails
            await Assert.ThrowsAsync <InvalidOperationException>(async() => await jobHost.CallAsync("Test"));

            await Assert.ThrowsAsync <InvalidOperationException>(async() => await jobHost.CallAsync("MyProg.Test"));
        }