internal static void StartOwinTest(string url, LogMeController.TestContext testContext, Action testsFunc) { // HttpSelfHostConfiguration. So info: http://www.asp.net/web-api/overview/hosting-aspnet-web-api/use-owin-to-self-host-web-api // Start webservice using (WebApp.Start(url, (appBuilder) => { // Configure Web API for self-host. HttpConfiguration config = new HttpConfiguration(); config.DependencyResolver = new ControllerResolver <LogMeController>(() => new LogMeController() { Context = testContext }); config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{id}", defaults: new { id = RouteParameter.Optional } ); appBuilder.UseWebApi(config); })) { testsFunc(); //wait for all received message, or timeout. There is no exception on timeout, so we have to check carefully in the unit test. if (testContext.CountdownEvent != null) { testContext.CountdownEvent.Wait(webserviceCheckTimeoutMs); //we need some extra time for completion Thread.Sleep(1000); } } }
public void WebserviceTest_restapi_httpget_flush() { string wsAddress = getNewWsAddress(); var logFactory = SetUpHttpGetWebservice(wsAddress, "api/logme"); var logger = logFactory.GetCurrentClassLogger(); var context = new LogMeController.TestContext(); context.ResetState(0); var message1 = "message with a post"; StartOwinTest(wsAddress, context, () => { for (int i = 0; i < 100; ++i) { logger.Info(message1); } // Make triple-flush to fully exercise the async flushing logic try { LogManager.Flush(0); } catch (NLogRuntimeException) { } logFactory.Flush(); // Waits for flush (Scheduled on top of the previous flush) logFactory.Flush(); // Nothing to flush }); Assert.Equal(100, context.ReceivedLogsGetParam1.Count); }
public void WebserviceTest_restapi_httppost_checkingLost() { RetryingIntegrationTest(3, () => { string wsAddress = getNewWsAddress(); var logFactory = new LogFactory().Setup() .SetupExtensions(ext => ext.RegisterAssembly(typeof(WebServiceTarget).Assembly)) .LoadConfigurationFromXml($@" <nlog throwExceptions='true'> <targets> <target type='WebService' name='ws' url='{wsAddress}{"api/logme"}' protocol='HttpPost' encoding='UTF-8' > <parameter name='param1' type='System.String' layout='${{message}}'/> <parameter name='param2' type='System.String' layout='${{level}}'/> </target> </targets> <rules> <logger name='*' writeTo='ws' /> </rules> </nlog>").LogFactory; var logger = logFactory.GetCurrentClassLogger(); const int messageCount = 1000; var createdMessages = new List <string>(messageCount); for (int i = 0; i < messageCount; i++) { var message = "message " + i; createdMessages.Add(message); } //reset var context = new LogMeController.TestContext(); context.ResetState(messageCount); StartOwinTest(wsAddress, context, () => { foreach (var createdMessage in createdMessages) { logger.Info(createdMessage); } }); Assert.Equal(0, context.CountdownEvent.CurrentCount); Assert.Equal(createdMessages.Count, context.ReceivedLogsPostParam1.Count); }); }
public void WebServiceTest_restapi_httpget_querystring() { string wsAddress = getNewWsAddress(); var logger = SetUpHttpGetWebservice(wsAddress, "api/logme?paramFromConfig=valueFromConfig").GetCurrentClassLogger(); var context = new LogMeController.TestContext(); context.ResetState(1); StartOwinTest(wsAddress, context, () => { logger.Info("another message"); }); Assert.Equal(0, context.CountdownEvent.CurrentCount); Assert.Single(context.ReceivedLogsGetParam1); CheckQueueMessage("another message", context.ReceivedLogsGetParam1); }
public void WebserviceTest_restapi_httppost() { string wsAddress = getNewWsAddress(); var logFactory = new LogFactory().Setup() .SetupExtensions(ext => ext.RegisterAssembly(typeof(WebServiceTarget).Assembly)) .LoadConfigurationFromXml($@" <nlog throwExceptions='true'> <targets> <target type='WebService' name='ws' url='{wsAddress}{"api/logme"}' protocol='HttpPost' encoding='UTF-8' > <parameter name='param1' type='System.String' layout='${{message}}'/> <parameter name='param2' type='System.String' layout='${{level}}'/> </target> </targets> <rules> <logger name='*' writeTo='ws' /> </rules> </nlog>").LogFactory; var logger = logFactory.GetCurrentClassLogger(); var context = new LogMeController.TestContext(); context.ResetState(2); var message1 = "message 1 with a post"; var message2 = "a b c é k è ï ?"; StartOwinTest(wsAddress, context, () => { logger.Info(message1); logger.Info(message2); }); Assert.Equal(0, context.CountdownEvent.CurrentCount); Assert.Equal(2, context.ReceivedLogsPostParam1.Count); CheckQueueMessage(message1, context.ReceivedLogsPostParam1); CheckQueueMessage(message2, context.ReceivedLogsPostParam1); }
public void WebserviceTest_restapi_httpget() { string wsAddress = getNewWsAddress(); var logger = SetUpHttpGetWebservice(wsAddress, "api/logme").GetCurrentClassLogger(); var context = new LogMeController.TestContext(); context.ResetState(2); var message1 = "message 1 with a post"; var message2 = "a b c é k è ï ?"; StartOwinTest(wsAddress, context, () => { logger.Info(message1); logger.Info(message2); }); Assert.Equal(0, context.CountdownEvent.CurrentCount); Assert.Equal(2, context.ReceivedLogsGetParam1.Count); CheckQueueMessage(message1, context.ReceivedLogsGetParam1); CheckQueueMessage(message2, context.ReceivedLogsGetParam1); }