public async void Configure_ConfiguresOptions() { // Arrange const int dummyInitialInvocationResult = 1; const string dummyTestVariableName1 = "TEST_VARIABLE_1"; const string dummyTestVariableValue1 = "testVariableValue1"; const string dummyTestVariableName2 = "TEST_VARIABLE_2"; const string dummyTestVariableValue2 = "testVariableValue2"; // Act // Invoke javascript once to ensure that an initial NodeJSService is created. The invocation after configuration should properly dispose of this initial instance and create a new one with the // specified options. int initialInvocationResult = await StaticNodeJSService. InvokeFromStringAsync <int>($"module.exports = (callback) => callback(null, {dummyInitialInvocationResult});").ConfigureAwait(false); StaticNodeJSService. Configure <NodeJSProcessOptions>(options => options.EnvironmentVariables.Add(dummyTestVariableName1, dummyTestVariableValue1)); StaticNodeJSService. Configure <NodeJSProcessOptions>(options => options.EnvironmentVariables.Add(dummyTestVariableName2, dummyTestVariableValue2)); // Assert Assert.Equal(dummyInitialInvocationResult, initialInvocationResult); DummyResult result = await StaticNodeJSService. InvokeFromStringAsync <DummyResult>($"module.exports = (callback) => callback(null, {{result: process.env.{dummyTestVariableName1} + process.env.{dummyTestVariableName2}}});"). ConfigureAwait(false); Assert.Equal(dummyTestVariableValue1 + dummyTestVariableValue2, result.Result); }
public async Task <DummyResult> INodeServices_Latency() { _args[0] = _counter++; DummyResult result = await _nodeServices !.InvokeAsync <DummyResult>(DUMMY_LATENCY_MODULE_FILE, _args).ConfigureAwait(false); return(result); }
public void INodeJSService_InvokeFromCache_Setup() { var services = new ServiceCollection(); services.AddNodeJS(); _serviceProvider = services.BuildServiceProvider(); _nodeJSService = _serviceProvider.GetRequiredService <INodeJSService>(); // Default INodeJSService is HttpNodeJSService _counter = 0; // Cache module DummyResult _ = _nodeJSService.InvokeFromStringAsync <DummyResult>("module.exports = (callback, resultString) => callback(null, { result: resultString });", DUMMY_MODULE_IDENTIFIER, args: new object[] { $"success {_counter++}" }).Result; }
public async void InvokeFromFileAsync_InvokesJavascript() { // Arrange const string dummyResultString = "success"; // Act DummyResult result = await StaticNodeJSService. InvokeFromFileAsync <DummyResult>("dummyModule.js", args : new[] { dummyResultString }).ConfigureAwait(false); // Assert Assert.Equal(dummyResultString, result.Result); }
public async void InvokeFromStringAsync_InvokesJavascript() { // Arrange const string dummyResultString = "success"; // Act DummyResult result = await StaticNodeJSService. InvokeFromStringAsync <DummyResult>("module.exports = (callback, resultString) => callback(null, {result: resultString});", args : new[] { dummyResultString }).ConfigureAwait(false); // Assert Assert.Equal(dummyResultString, result.Result); }
public async void InvokeFromFileAsync_InvokesJavascript() { const string dummyResultString = "success"; HttpNodeJSService testSubject = CreateHttpNodeJSService(); // Act DummyResult result = await testSubject. InvokeFromFileAsync <DummyResult>("dummyModule.js", args : new[] { dummyResultString }).ConfigureAwait(false); // Assert Assert.Equal(dummyResultString, result.Result); }
public async void InvokeFromFileAsync_WithTypeParameter_InvokesFromFile() { const string dummyArg = "success"; HttpNodeJSService testSubject = CreateHttpNodeJSService(projectPath: _projectPath); // Act DummyResult result = await testSubject. InvokeFromFileAsync <DummyResult>(DUMMY_RETURNS_ARG_MODULE_FILE, args : new[] { dummyArg }).ConfigureAwait(false); // Assert Assert.Equal(dummyArg, result.Result); }
public void BeCreatedResult_Throws_When_Subject_Isnt_ContentResult() { // Arrange var target = new DummyResult(); var sut = new ResultAssertions(target); // Act & Assert sut.Invoking(x => x.BeCreatedResult()) .Should() .Throw <XunitException>() .WithMessage($"Expected result to be of type Microsoft.AspNetCore.Mvc.ContentResult, but found {target.GetType().FullName}."); }
public async void InvokeFromStreamAsync_WithTypeParameter_WithRawStreamModule_InvokesFromStream() { // Arrange const string dummyArg = "success"; HttpNodeJSService testSubject = CreateHttpNodeJSService(); MemoryStream memoryStream = CreateMemoryStream(_dummyReturnsArgModule); // Act DummyResult result = await testSubject.InvokeFromStreamAsync <DummyResult>(memoryStream, args : new[] { dummyArg }).ConfigureAwait(false); // Assert Assert.Equal(dummyArg, result.Result); }
public async void AllInvokeMethods_InvokeAsyncJavascriptMethods() { // Arrange const string dummyArg = "success"; HttpNodeJSService testSubject = CreateHttpNodeJSService(); // Act DummyResult result = await testSubject. InvokeFromStringAsync <DummyResult>("module.exports = async (resultString) => {return {result: resultString};}", args : new[] { dummyArg }).ConfigureAwait(false); // Assert Assert.Equal(dummyArg, result.Result); }
public async void AllInvokeMethods_InvokeASpecificExportIfExportNameIsNotNull() { // Arrange const string dummyArg = "success"; const string dummyExportName = "dummyExportName"; HttpNodeJSService testSubject = CreateHttpNodeJSService(); // Act DummyResult result = await testSubject. InvokeFromStringAsync <DummyResult>($"module.exports = {{ {dummyExportName}: (callback, resultString) => callback(null, {{result: resultString}}) }};", exportName : dummyExportName, args : new[] { dummyArg }).ConfigureAwait(false); // Assert Assert.Equal(dummyArg, result.Result); }
public async void InvokeFromFileAsync_WithoutTypeParameter_InvokesFromFile() { const string dummyArg = "success"; HttpNodeJSService testSubject = CreateHttpNodeJSService(projectPath: _projectPath); // Act await testSubject.InvokeFromFileAsync(DUMMY_EXPORTS_MULTIPLE_FUNCTIONS_MODULE_FILE, "setString", new[] { dummyArg }).ConfigureAwait(false); // Assert DummyResult result = await testSubject. InvokeFromFileAsync <DummyResult>(DUMMY_EXPORTS_MULTIPLE_FUNCTIONS_MODULE_FILE, "getString").ConfigureAwait(false); Assert.Equal(dummyArg, result.Result); }
public async void InvokeFromStringAsync_WithTypeParameter_WithModuleFactory_InvokesFromCacheIfModuleIsCached() { // Arrange const string dummyArg = "success"; HttpNodeJSService testSubject = CreateHttpNodeJSService(); await testSubject.InvokeFromStringAsync(_dummyExportsMultipleFunctionsModule, DUMMY_CACHE_IDENTIFIER, "setString", new[] { dummyArg }).ConfigureAwait(false); // Act DummyResult result = await testSubject. InvokeFromStringAsync <DummyResult>(() => null, DUMMY_CACHE_IDENTIFIER, "getString").ConfigureAwait(false); // Assert Assert.Equal(dummyArg, result.Result); }
public async void InvokeFromStringAsync_WithoutTypeParameter_WithRawStringModule_InvokesFromString() { const string dummyArg = "success"; HttpNodeJSService testSubject = CreateHttpNodeJSService(projectPath: _projectPath); // Act await testSubject.InvokeFromStringAsync(_dummyExportsMultipleFunctionsModule, DUMMY_CACHE_IDENTIFIER, "setString", new[] { dummyArg }).ConfigureAwait(false); // Assert DummyResult result = await testSubject. InvokeFromStringAsync <DummyResult>(_dummyExportsMultipleFunctionsModule, DUMMY_CACHE_IDENTIFIER, "getString").ConfigureAwait(false); Assert.Equal(dummyArg, result.Result); }
public async void InvokeFromStringAsync_WithTypeParameter_WithModuleFactory_InvokesFromStringAndCachesModuleIfModuleIsNotCached() { // Arrange const string dummyArg = "success"; HttpNodeJSService testSubject = CreateHttpNodeJSService(); // Act // Module hasn't been cached, so if this returns the expected value, string was sent over DummyResult result1 = await testSubject. InvokeFromStringAsync <DummyResult>(() => _dummyReturnsArgModule, DUMMY_CACHE_IDENTIFIER, args : new[] { dummyArg }).ConfigureAwait(false); // Assert // Ensure module was cached (bool success, DummyResult result2) = await testSubject.TryInvokeFromCacheAsync <DummyResult>(DUMMY_CACHE_IDENTIFIER, args : new[] { dummyArg }).ConfigureAwait(false); Assert.Equal(dummyArg, result1.Result); Assert.True(success); Assert.Equal(dummyArg, result2.Result); }
public async void DisposeServiceProvider_DisposesServiceProvider() { // Arrange const string dummyTestVariableName = "TEST_VARIABLE"; const string dummyTestVariableValue = "testVariableValue"; StaticNodeJSService. Configure <NodeJSProcessOptions>(options => options.EnvironmentVariables.Add(dummyTestVariableName, dummyTestVariableValue)); DummyResult initialInvocationResult = await StaticNodeJSService. InvokeFromStringAsync <DummyResult>($"module.exports = (callback) => callback(null, {{result: process.env.{dummyTestVariableName}}});"). ConfigureAwait(false); // Act StaticNodeJSService.DisposeServiceProvider(); // Dispose, environment variable should not be set in the next call DummyResult result = await StaticNodeJSService. InvokeFromStringAsync <DummyResult>($"module.exports = (callback) => callback(null, {{result: process.env.{dummyTestVariableName}}});"). ConfigureAwait(false); // Assert Assert.Equal(dummyTestVariableValue, initialInvocationResult.Result); Assert.Null(result.Result); }
public SpyComponent(List <SpyComponent> invokedComponents, DummyResult result = null) { _invokedComponents = invokedComponents; _result = result; }
public SpyMiddlewareFactory(List <SpyComponent> invokedFactories, List <SpyComponent> invokedComponents, DummyResult result = null) : base(invokedComponents, result) { _invokedFactories = invokedFactories; }
public void Layers_and_Invoke() { { var invokedFactories = new List <SpyComponent>(); var invokedComponents = new List <SpyComponent>(); var factory1 = new SpyMiddlewareFactory(invokedFactories, invokedComponents); var factory2 = new SpyMiddlewareFactory(invokedFactories, invokedComponents); var factory3 = new SpyMiddlewareFactory(invokedFactories, invokedComponents); var handlerResult = new DummyResult(); var handler = new SpyHandler(invokedComponents, handlerResult); var expectedResult = handlerResult; var expectedFactories = new SpyComponent[] { factory1, factory2, factory3 }; var expectedComponents = new SpyComponent[] { factory3, factory2, factory1, handler }; new TestCaseRunner("middlewares 及び handler が順番通りに呼ばれる") .Run(() => new Func <DummyContext, DummyResult>(handler.Invoke) .Layer(factory1.Create) .Layer(factory2.Create) .Layer(factory3.Create) ) .Verify((actual, desc) => { var context = new DummyContext(); var actualResult = actual(context); Assert.AreEqual(expectedResult, actualResult, desc); CollectionAssert.AreEqual(expectedFactories, invokedFactories, $"{desc}: ファクトリーの呼び出し順序が一致しません。"); CollectionAssert.AreEqual(expectedComponents, invokedComponents, $"{desc}: コンポーネントの実行順序が一致しません。"); Assert.IsTrue(invokedComponents.All(x => x.ActualContext == context), desc); }, (Type)null); } { var invokedFactories = new List <SpyComponent>(); var invokedComponents = new List <SpyComponent>(); var result2 = new DummyResult(); var factory1 = new SpyMiddlewareFactory(invokedFactories, invokedComponents); var factory2 = new SpyMiddlewareFactory(invokedFactories, invokedComponents, result2); var factory3 = new SpyMiddlewareFactory(invokedFactories, invokedComponents); var handler = new SpyHandler(invokedComponents, new DummyResult()); var expectedResult = result2; var expectedFactories = new SpyComponent[] { factory1, factory2, factory3 }; var expectedComponents = new SpyComponent[] { factory3, factory2 }; new TestCaseRunner("middleware2 でショートサーキット") .Run(() => new Func <DummyContext, DummyResult>(handler.Invoke) .Layer(factory1.Create) .Layer(factory2.Create) .Layer(factory3.Create) ) .Verify((actual, desc) => { var context = new DummyContext(); var actualResult = actual(context); Assert.AreEqual(expectedResult, actualResult, desc); CollectionAssert.AreEqual(expectedFactories, invokedFactories, $"{desc}: ファクトリーの呼び出し順序が一致しません。"); CollectionAssert.AreEqual(expectedComponents, invokedComponents, $"{desc}: コンポーネントの実行順序が一致しません。"); Assert.IsTrue(invokedComponents.All(x => x.ActualContext == context), desc); }, (Type)null); } }
public async Task <DummyResult> INodeServices_Latency() { DummyResult result = await _nodeServices.InvokeAsync <DummyResult>(DUMMY_LATENCY_MODULE_FILE, _counter ++); return(result); }
public async Task <DummyResult> INodeServices() { DummyResult result = await _nodeServices.InvokeAsync <DummyResult>("dummyModule.js", $"success {_counter++}"); return(result); }
public async Task <DummyResult> INodeJSService_InvokeFromFile() { DummyResult result = await _nodeJSService.InvokeFromFileAsync <DummyResult>("dummyModule.js", args : new object[] { $"success {_counter++}" }); return(result); }
public SpyHandler(List <SpyComponent> invokedComponents, DummyResult result) : base(invokedComponents, result) { }