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))); }
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")); }