public void Raise_error_for_non_existing_file() { var logger = Substitute.For <ILogEvents>(); string file = "does_not_exists"; TFSAggregatorSettings.LoadFromFile(file, logger); }
/// <summary> /// Return a proper context /// </summary> /// <returns></returns> public static RuntimeContext GetContext(Func <string> settingsPathGetter, IRequestContext requestContext, ILogEvents logger) { var runtime = (RuntimeContext)Cache.Get(CacheKey); if (runtime == null) { string settingsPath = settingsPathGetter(); var settings = TFSAggregatorSettings.LoadFromFile(settingsPath, logger); runtime = MakeRuntimeContext(settingsPath, settings, requestContext, logger); var itemPolicy = new CacheItemPolicy(); itemPolicy.Priority = CacheItemPriority.NotRemovable; itemPolicy.ChangeMonitors.Add(new HostFileChangeMonitor(new List <string>() { settingsPath })); Cache.Set(CacheKey, runtime, itemPolicy); } else { runtime.RequestContext = requestContext; } return(runtime.Clone() as RuntimeContext); }
/// <summary> /// Initializes a new instance of the <see cref="EventProcessor"/> class. /// </summary> public EventProcessor(IWorkItemRepository workItemStore, IRuntimeContext runtime) { this.logger = runtime.Logger; this.store = workItemStore; this.settings = runtime.Settings; this.engine = runtime.GetEngine(workItemStore); }
/// <summary> /// Initializes a new instance of the <see cref="EventProcessor"/> class. /// </summary> public EventProcessor(IRuntimeContext runtime) { this.logger = runtime.Logger; this.settings = runtime.Settings; this.limiter = runtime.RateLimiter; this.store = runtime.WorkItemRepository; this.engine = runtime.GetEngine(); }
public static RuntimeContext MakeRuntimeContext(string settingsPath, TFSAggregatorSettings settings, IRequestContext requestContext, ILogEvents logger) { var runtime = new RuntimeContext(); runtime.Logger = logger; runtime.RequestContext = requestContext; runtime.SettingsPath = settingsPath; runtime.Settings = settings; logger.MinimumLogLevel = runtime.Settings.LogLevel; runtime.HasErrors = false; return(runtime); }
public void Log_error_for_configuration_invalid_loglevel() { var logger = Substitute.For <ILogEvents>(); string config = @"<AggregatorConfiguration><runtime><logging level='Diag'/></runtime></AggregatorConfiguration>"; var settings = TFSAggregatorSettings.LoadXml(config, logger); Assert.IsNull(settings); logger.Received().InvalidConfiguration( XmlSeverityType.Error, "The 'level' attribute is invalid - The value 'Diag' is invalid according to its datatype 'String' - The Enumeration constraint failed.", 1, 44); }
public void Log_warning_for_unused_rule() { var logger = Substitute.For <ILogEvents>(); string config = @" <AggregatorConfiguration> <rule name='r1'/> <rule name='r2'/> <policy name='p1'> <ruleRef name='r2'/> </policy> </AggregatorConfiguration>"; var settings = TFSAggregatorSettings.LoadXml(config, logger); Assert.IsNotNull(settings); logger.Received().UnreferencedRule("r1"); }
/// <summary> /// Return a proper context /// </summary> /// <returns></returns> public static RuntimeContext GetContext( Func <string> settingsPathGetter, IRequestContext requestContext, ILogEvents logger, Func <IRuntimeContext, IWorkItemRepository> repoBuilder, Func <IRuntimeContext, IScriptLibrary> scriptLibraryBuilder) { string settingsPath = settingsPathGetter(); string cacheKey = CacheKey + settingsPath; var runtime = (RuntimeContext)Cache.Get(cacheKey); if (runtime == null) { logger.HelloWorld(); logger.LoadingConfiguration(settingsPath); var settings = TFSAggregatorSettings.LoadFromFile(settingsPath, logger); runtime = MakeRuntimeContext(settingsPath, settings, requestContext, logger, repoBuilder, scriptLibraryBuilder); if (!runtime.HasErrors) { var itemPolicy = new CacheItemPolicy(); itemPolicy.Priority = CacheItemPriority.NotRemovable; itemPolicy.ChangeMonitors.Add(new HostFileChangeMonitor(new List <string>() { settingsPath })); Cache.Set(cacheKey, runtime, itemPolicy); } logger.ConfigurationLoaded(settingsPath); } else { logger.UsingCachedConfiguration(settingsPath); } runtime = runtime.Clone() as RuntimeContext; // as it changes at each invocation, must be set again here runtime.RequestContext = requestContext; runtime.workItemRepository = null; return(runtime); }
public void Log_error_for_policy_with_no_rules() { var logger = Substitute.For <ILogEvents>(); string config = @" <AggregatorConfiguration> <rule name='r1'/> <policy name='p1'/> </AggregatorConfiguration>"; var settings = TFSAggregatorSettings.LoadXml(config, logger); Assert.IsNull(settings); logger.Received().InvalidConfiguration( XmlSeverityType.Error, "The element 'policy' has incomplete content. List of possible elements expected: 'collectionScope, templateScope, projectScope, ruleRef'.", 4, 6); }
public void Log_error_for_mismatched_rule_name() { var logger = Substitute.For <ILogEvents>(); string config = @" <AggregatorConfiguration> <rule name='r1'/> <policy name='p1'> <ruleRef name='r2'/> </policy> </AggregatorConfiguration>"; var settings = TFSAggregatorSettings.LoadXml(config, logger); Assert.IsNull(settings); logger.Received().InvalidConfiguration( XmlSeverityType.Error, "Reference to undeclared ID is 'r2'.", 5, 18); }
public void Policy_ServerBaseUrl_succeed() { var logger = Substitute.For <ILogEvents>(); string config = @" <AggregatorConfiguration> <runtime> <server baseUrl = ""http://tfs.example.local:8080/"" /> </runtime> <rule name='dummy' /> <policy name='dummy' > <ruleRef name='dummy' /> </policy> </AggregatorConfiguration>"; var settings = TFSAggregatorSettings.LoadXml(config, logger); Assert.AreEqual(settings.ServerBaseUrl, new Uri("http://tfs.example.local:8080/")); }
public void LoadsGivenrateLimitsWhenInteralAttributeIsPresent() { var logger = Substitute.For <ILogEvents>(); string config = @" <AggregatorConfiguration> <runtime> <rateLimiting interval=""01:00:00.0"" /> </runtime> <rule name='dummy' /> <policy name='dummy' > <ruleRef name='dummy' /> </policy> </AggregatorConfiguration>"; var settings = TFSAggregatorSettings.LoadXml(config, logger); Assert.AreEqual(settings.RateLimit?.Interval, TimeSpan.FromHours(1)); }
public void LoadsGivenrateLimitsWhenChangesAttributesIsPresent() { var logger = Substitute.For <ILogEvents>(); string config = @" <AggregatorConfiguration> <runtime> <rateLimiting changes=""100"" /> </runtime> <rule name='dummy' /> <policy name='dummy' > <ruleRef name='dummy' /> </policy> </AggregatorConfiguration>"; var settings = TFSAggregatorSettings.LoadXml(config, logger); Assert.AreEqual(settings.RateLimit?.Changes, 100); }
public static RuntimeContext MakeRuntimeContext( string settingsPath, TFSAggregatorSettings settings, IRequestContext requestContext, ILogEvents logger, Func <Uri, Microsoft.TeamFoundation.Framework.Client.IdentityDescriptor, IRuntimeContext, IWorkItemRepository> repoBuilder) { var runtime = new RuntimeContext(); runtime.Logger = logger; runtime.RequestContext = requestContext; runtime.SettingsPath = settingsPath; runtime.Settings = settings; runtime.RateLimiter = new RateLimiter(runtime); logger.MinimumLogLevel = runtime.Settings?.LogLevel ?? LogLevel.Normal; runtime.repoBuilder = repoBuilder; runtime.HasErrors = settings == null; return(runtime); }
public static RuntimeContext MakeRuntimeContext( string settingsPath, TFSAggregatorSettings settings, IRequestContext requestContext, ILogEvents logger, Func <IRuntimeContext, IWorkItemRepository> repoBuilder, Func <IRuntimeContext, IScriptLibrary> scriptLibraryBuilder) { var runtime = new RuntimeContext(); runtime.Logger = logger; runtime.RequestContext = requestContext; runtime.SettingsPath = settingsPath; runtime.Settings = settings; runtime.RateLimiter = new RateLimiter(runtime); logger.MinimumLogLevel = runtime.Settings?.LogLevel ?? LogLevel.Normal; runtime.repoBuilder = repoBuilder; runtime.scriptLibraryBuilder = scriptLibraryBuilder; runtime.HasErrors = settings == null; return(runtime); }
public void LoadDefaultRateLimitsWhenTagIsPresentButEmpty() { var logger = Substitute.For <ILogEvents>(); string config = @" <AggregatorConfiguration> <runtime> <rateLimiting /> </runtime> <rule name='dummy' /> <policy name='dummy' > <ruleRef name='dummy' /> </policy> </AggregatorConfiguration>"; var settings = TFSAggregatorSettings.LoadXml(config, logger); Assert.IsNotNull(settings); Assert.IsNotNull(settings.RateLimit); Assert.AreEqual(settings.RateLimit?.Interval, TimeSpan.FromSeconds(1)); Assert.AreEqual(settings.RateLimit?.Changes, 5); }
public static TFSAggregatorSettings LoadConfigFromResourceFile(string fileName, ILogEvents logger) { var configXml = LoadTextFromEmbeddedResource(fileName); return(TFSAggregatorSettings.LoadXml(configXml, logger)); }