static void CheckPluginsStatus(this IYodiiEngineStaticOnlyResult @this, SolvedConfigurationStatus status, string pluginOrServiceNames, bool expectedIsPartial) { string[] expected = pluginOrServiceNames.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries); var withTheStatus = @this.StaticSolvedConfiguration.Plugins.Where(p => p.FinalConfigSolvedStatus == status).Select(p => p.PluginInfo.PluginFullName); TestExtensions.CheckContainsWithAlternative(expected, withTheStatus, expectedIsPartial); }
public SolvedItemSnapshot(IYodiiItemData item) { _disabledReason = item.DisabledReason; _runningStatus = item.DynamicStatus; _configOriginalStatus = item.ConfigOriginalStatus; _configSolvedStatus = item.ConfigSolvedStatus; _configOriginalImpact = item.ConfigOriginalImpact; _configSolvedImpact = item.RawConfigSolvedImpact; }
public SolvedItemSnapshot( IYodiiItemData item ) { _disabledReason = item.DisabledReason; _runningStatus = item.DynamicStatus; _configOriginalStatus = item.ConfigOriginalStatus; _configSolvedStatus = item.ConfigSolvedStatus; _configOriginalImpact = item.ConfigOriginalImpact; _configSolvedImpact = item.RawConfigSolvedImpact; }
internal void UpdateFrom(SolvedConfigurationStatus finalConfigStatus, FinalConfigStartableStatus s, DelayedPropertyNotification notifier) { AllFlags newOne = new AllFlags(finalConfigStatus, s); notifier.Update(this, ref _flags.CanStop, newOne.CanStop, () => CanStop); notifier.Update(this, ref _flags.CanStart, newOne.CanStart, () => CanStart); notifier.Update(this, ref _flags.CanStartWithFullStart, newOne.CanStartWithFullStart, () => CanStartWithFullStart); notifier.Update(this, ref _flags.CanStartWithStartRecommended, newOne.CanStartWithStartRecommended, () => CanStartWithStartRecommended); notifier.Update(this, ref _flags.CanStartWithStopOptionalAndRunnable, newOne.CanStartWithStopOptionalAndRunnable, () => CanStartWithStopOptionalAndRunnable); notifier.Update(this, ref _flags.CanStartWithFullStop, newOne.CanStartWithFullStop, () => CanStartWithFullStop); }
internal bool SetRunningStatus(PluginRunningRequirementReason reason) { if (_configSolvedStatus == SolvedConfigurationStatus.Running) { return(!Disabled); } _configSolvedStatus = SolvedConfigurationStatus.Running; _configSolvedStatusReason = reason; if (Service != null && !Service.Family.SetRunningPlugin(this)) { return(false); } return(PropagateRunningStatus()); }
protected LiveYodiiItemInfo( YodiiEngine engine, IYodiiItemData d, string fullName ) { Debug.Assert( d != null && engine != null && !String.IsNullOrEmpty( fullName ) ); _engine = engine; _capability = new LiveRunCapability( d.FinalConfigSolvedStatus, d.FinalStartableStatus ); _fullName = fullName; Debug.Assert( d.DynamicStatus != null ); _disabledReason = d.DisabledReason; _runningStatus = d.DynamicStatus.Value; _configOriginalStatus = d.ConfigOriginalStatus; _configSolvedStatus = d.ConfigSolvedStatus; _configOriginalImpact = d.ConfigOriginalImpact; _configSolvedImpact = d.RawConfigSolvedImpact; }
protected LiveYodiiItemInfo(YodiiEngine engine, IYodiiItemData d, string fullName) { Debug.Assert(d != null && engine != null && !String.IsNullOrEmpty(fullName)); _engine = engine; _capability = new LiveRunCapability(d.FinalConfigSolvedStatus, d.FinalStartableStatus); _fullName = fullName; Debug.Assert(d.DynamicStatus != null); _disabledReason = d.DisabledReason; _runningStatus = d.DynamicStatus.Value; _configOriginalStatus = d.ConfigOriginalStatus; _configSolvedStatus = d.ConfigSolvedStatus; _configOriginalImpact = d.ConfigOriginalImpact; _configSolvedImpact = d.RawConfigSolvedImpact; }
public AllFlags(SolvedConfigurationStatus finalConfigStatus, FinalConfigStartableStatus s) { Debug.Assert((s == null) == (finalConfigStatus == SolvedConfigurationStatus.Disabled), "!Disabled <==> StartableStatus != null"); CanStop = finalConfigStatus != SolvedConfigurationStatus.Running; if (s != null) { CanStart = true; CanStartWithFullStart = s.CallableWithFullStart; CanStartWithStartRecommended = s.CallableWithStartRecommended; CanStartWithStopOptionalAndRunnable = s.CallableWithStopOptionalAndRunnable; CanStartWithFullStop = s.CanStartWithFullStop; } else { CanStart = CanStartWithFullStart = CanStartWithStartRecommended = CanStartWithStopOptionalAndRunnable = CanStartWithFullStop = false; } }
public static void CheckWantedConfigSolvedStatusIs( this IYodiiEngineResult @this, string pluginOrServiceFullName, SolvedConfigurationStatus wantedStatus ) { if( @this.Success ) { Assert.Fail( "Not implemented ==> TODO: IYodiiEngineResult SHOULD have a 'IYodiiEngine Engine' property!" ); } else { var service = @this.StaticFailureResult.StaticSolvedConfiguration.Services.FirstOrDefault( s => s.ServiceInfo.ServiceFullName == pluginOrServiceFullName ); if( service != null ) Assert.That( service.WantedConfigSolvedStatus, Is.EqualTo( wantedStatus ), String.Format( "Service '{0}' has a WantedConfigSolvedStatus = '{1}'. It must be '{2}'.", pluginOrServiceFullName, service.WantedConfigSolvedStatus, wantedStatus ) ); else { var plugin = @this.StaticFailureResult.StaticSolvedConfiguration.Plugins.FirstOrDefault( p => p.PluginInfo.PluginFullName == pluginOrServiceFullName ); if( plugin != null ) Assert.That( plugin.WantedConfigSolvedStatus, Is.EqualTo( wantedStatus ), String.Format( "Plugin '{0}' has a WantedConfigSolvedStatus = '{1}'. It must be '{2}'.", pluginOrServiceFullName, plugin.WantedConfigSolvedStatus, wantedStatus ) ); else Assert.Fail( String.Format( "Plugin or Service '{0}' not found.", pluginOrServiceFullName ) ); } } }
void Initialize() { switch (ConfigOriginalStatus) { case ConfigurationStatus.Disabled: _configSolvedStatus = SolvedConfigurationStatus.Disabled; break; case ConfigurationStatus.Running: _configSolvedStatus = SolvedConfigurationStatus.Running; break; default: _configSolvedStatus = SolvedConfigurationStatus.Runnable; break; } _configSolvedStatusReason = ServiceSolvedConfigStatusReason.Config; if (ConfigOriginalStatus == ConfigurationStatus.Disabled) { _configDisabledReason = ServiceDisabledReason.Config; } else if (ServiceInfo.HasError) { _configDisabledReason = ServiceDisabledReason.ServiceInfoHasError; } else if (Generalization != null && Generalization.Disabled) { _configDisabledReason = ServiceDisabledReason.GeneralizationIsDisabledByConfig; } if (Disabled) { _configSolvedStatusReason = ServiceSolvedConfigStatusReason.Config; } else if (ConfigOriginalStatus == ConfigurationStatus.Running) { Family.SetRunningService(this, ServiceSolvedConfigStatusReason.Config); } else if (Family.RunningService != null && !Family.RunningService.IsStrictGeneralizationOf(this)) { _configDisabledReason = ServiceDisabledReason.AnotherServiceIsRunningByConfig; } }
internal bool SetRunningStatus( PluginRunningRequirementReason reason ) { if( _configSolvedStatus == SolvedConfigurationStatus.Running ) return !Disabled; _configSolvedStatus = SolvedConfigurationStatus.Running; _configSolvedStatusReason = reason; if( Service != null && !Service.Family.SetRunningPlugin( this ) ) return false; return PropagateRunningStatus(); }
static void CheckStatus( this IYodiiEngineStaticOnlyResult @this, SolvedConfigurationStatus status, string pluginOrServiceNames, bool expectedIsPartial ) { string[] expected = pluginOrServiceNames.Split( new[] { ',' }, StringSplitOptions.RemoveEmptyEntries ); var withTheStatus = @this.StaticSolvedConfiguration.Plugins.Where( p => p.FinalConfigSolvedStatus == status ).Select( p => p.PluginInfo.PluginFullName ); withTheStatus = withTheStatus.Concat( @this.StaticSolvedConfiguration.Services.Where( s => s.FinalConfigSolvedStatus == status ).Select( s => s.ServiceInfo.ServiceFullName ) ); TestExtensions.CheckContainsWithAlternative( expected, withTheStatus, expectedIsPartial ); }
public static void CheckWantedConfigSolvedStatusIs(this IYodiiEngineResult @this, string pluginOrServiceFullName, SolvedConfigurationStatus wantedStatus) { if (@this.Success) { Assert.Fail("Not implemented ==> TODO: IYodiiEngineResult SHOULD have a 'IYodiiEngine Engine' property!"); } else { var service = @this.StaticFailureResult.StaticSolvedConfiguration.Services.FirstOrDefault(s => s.ServiceInfo.ServiceFullName == pluginOrServiceFullName); if (service != null) { Assert.That(service.WantedConfigSolvedStatus, Is.EqualTo(wantedStatus), String.Format("Service '{0}' has a WantedConfigSolvedStatus = '{1}'. It must be '{2}'.", pluginOrServiceFullName, service.WantedConfigSolvedStatus, wantedStatus)); } else { var plugin = @this.StaticFailureResult.StaticSolvedConfiguration.Plugins.FirstOrDefault(p => p.PluginInfo.PluginFullName == pluginOrServiceFullName); if (plugin != null) { Assert.That(plugin.WantedConfigSolvedStatus, Is.EqualTo(wantedStatus), String.Format("Plugin '{0}' has a WantedConfigSolvedStatus = '{1}'. It must be '{2}'.", pluginOrServiceFullName, plugin.WantedConfigSolvedStatus, wantedStatus)); } else { Assert.Fail(String.Format("Plugin or Service '{0}' not found.", pluginOrServiceFullName)); } } } }
internal void UpdateFrom( SolvedConfigurationStatus finalConfigStatus, FinalConfigStartableStatus s, DelayedPropertyNotification notifier ) { AllFlags newOne = new AllFlags( finalConfigStatus, s ); notifier.Update( this, ref _flags.CanStop, newOne.CanStop, () => CanStop ); notifier.Update( this, ref _flags.CanStart, newOne.CanStart, () => CanStart ); notifier.Update( this, ref _flags.CanStartWithFullStart, newOne.CanStartWithFullStart, () => CanStartWithFullStart ); notifier.Update( this, ref _flags.CanStartWithStartRecommended, newOne.CanStartWithStartRecommended, () => CanStartWithStartRecommended ); notifier.Update( this, ref _flags.CanStartWithStopOptionalAndRunnable, newOne.CanStartWithStopOptionalAndRunnable, () => CanStartWithStopOptionalAndRunnable ); notifier.Update( this, ref _flags.CanStartWithFullStop, newOne.CanStartWithFullStop, () => CanStartWithFullStop ); }
internal LiveRunCapability( SolvedConfigurationStatus finalConfigStatus, FinalConfigStartableStatus s ) { _flags = new AllFlags( finalConfigStatus, s ); }
public AllFlags( SolvedConfigurationStatus finalConfigStatus, FinalConfigStartableStatus s ) { Debug.Assert( (s == null) == (finalConfigStatus == SolvedConfigurationStatus.Disabled), "!Disabled <==> StartableStatus != null" ); CanStop = finalConfigStatus != SolvedConfigurationStatus.Running; if( s != null ) { CanStart = true; CanStartWithFullStart = s.CallableWithFullStart; CanStartWithStartRecommended = s.CallableWithStartRecommended; CanStartWithStopOptionalAndRunnable = s.CallableWithStopOptionalAndRunnable; CanStartWithFullStop = s.CanStartWithFullStop; } else { CanStart = CanStartWithFullStart = CanStartWithStartRecommended = CanStartWithStopOptionalAndRunnable = CanStartWithFullStop = false; } }
internal PluginData( IConfigurationSolver solver, IPluginInfo p, ServiceData service, ConfigurationStatus pluginStatus, StartDependencyImpact impact = StartDependencyImpact.Unknown ) { _solver = solver; PluginInfo = p; Service = service; ConfigOriginalStatus = pluginStatus; switch( pluginStatus ) { case ConfigurationStatus.Disabled: _configSolvedStatus = SolvedConfigurationStatus.Disabled; break; case ConfigurationStatus.Running: _configSolvedStatus = SolvedConfigurationStatus.Running; break; default: _configSolvedStatus = SolvedConfigurationStatus.Runnable; break; } _configSolvedStatusReason = PluginRunningRequirementReason.Config; RawConfigSolvedImpact = ConfigOriginalImpact = impact; if( RawConfigSolvedImpact == StartDependencyImpact.Unknown && Service != null ) { RawConfigSolvedImpact = Service.ConfigSolvedImpact; } _configSolvedImpact = RawConfigSolvedImpact; if( _configSolvedImpact == StartDependencyImpact.Unknown || (_configSolvedImpact & StartDependencyImpact.IsTryOnly) != 0 ) { _configSolvedImpact = StartDependencyImpact.Minimal; } if( ConfigOriginalStatus == ConfigurationStatus.Disabled ) { _configDisabledReason = PluginDisabledReason.Config; } else if( p.HasError ) { _configDisabledReason = PluginDisabledReason.PluginInfoHasError; } else if( Service != null ) { if( Service.Disabled ) { _configDisabledReason = PluginDisabledReason.ServiceIsDisabled; } else if( Service.Family.RunningPlugin != null ) { _configDisabledReason = PluginDisabledReason.AnotherRunningPluginExistsInFamilyByConfig; } } // Immediately check for Runnable references to Disabled Services: this disables us. if( !Disabled ) { foreach( var sRef in PluginInfo.ServiceReferences ) { if( sRef.Requirement >= DependencyRequirement.Runnable ) { // If the required service is already disabled, we immediately disable this plugin. if( sRef.Reference.HasError && !Disabled ) { _configDisabledReason = PluginDisabledReason.RunnableReferenceServiceIsOnError; break; } ServiceData sr = _solver.FindExistingService( sRef.Reference.ServiceFullName ); if( sr.Disabled && !Disabled ) { _configDisabledReason = PluginDisabledReason.RunnableReferenceIsDisabled; break; } } } } if( Service != null ) Service.AddPlugin( this ); if( !Disabled ) { // If the plugin is not yet disabled, we register it: // whenever the referenced service is disabled (or stopped during dynamic resolution), this // will disable (or stop) the plugin according to its ConfigSolvedImpact. foreach( var sRef in PluginInfo.ServiceReferences ) { _solver.FindExistingService( sRef.Reference.ServiceFullName ).RegisterPluginReference( this, sRef.Requirement ); } if( Service != null && ConfigOriginalStatus == ConfigurationStatus.Running ) { Service.Family.SetRunningPlugin( this ); } } }
internal LiveRunCapability(SolvedConfigurationStatus finalConfigStatus, FinalConfigStartableStatus s) { _flags = new AllFlags(finalConfigStatus, s); }
void Initialize() { switch( ConfigOriginalStatus ) { case ConfigurationStatus.Disabled: _configSolvedStatus = SolvedConfigurationStatus.Disabled; break; case ConfigurationStatus.Running: _configSolvedStatus = SolvedConfigurationStatus.Running; break; default: _configSolvedStatus = SolvedConfigurationStatus.Runnable; break; } _configSolvedStatusReason = ServiceSolvedConfigStatusReason.Config; if( ConfigOriginalStatus == ConfigurationStatus.Disabled ) { _configDisabledReason = ServiceDisabledReason.Config; } else if( ServiceInfo.HasError ) { _configDisabledReason = ServiceDisabledReason.ServiceInfoHasError; } else if( Generalization != null && Generalization.Disabled ) { _configDisabledReason = ServiceDisabledReason.GeneralizationIsDisabledByConfig; } if( Disabled ) { _configSolvedStatusReason = ServiceSolvedConfigStatusReason.Config; } else if( ConfigOriginalStatus == ConfigurationStatus.Running ) { Family.SetRunningService( this, ServiceSolvedConfigStatusReason.Config ); } else if( Family.RunningService != null && !Family.RunningService.IsStrictGeneralizationOf( this ) ) { _configDisabledReason = ServiceDisabledReason.AnotherServiceIsRunningByConfig; } }
internal PluginData(IConfigurationSolver solver, IPluginInfo p, ServiceData service, ConfigurationStatus pluginStatus, StartDependencyImpact impact = StartDependencyImpact.Unknown) { _solver = solver; PluginInfo = p; Service = service; ConfigOriginalStatus = pluginStatus; switch (pluginStatus) { case ConfigurationStatus.Disabled: _configSolvedStatus = SolvedConfigurationStatus.Disabled; break; case ConfigurationStatus.Running: _configSolvedStatus = SolvedConfigurationStatus.Running; break; default: _configSolvedStatus = SolvedConfigurationStatus.Runnable; break; } _configSolvedStatusReason = PluginRunningRequirementReason.Config; RawConfigSolvedImpact = ConfigOriginalImpact = impact; if (RawConfigSolvedImpact == StartDependencyImpact.Unknown && Service != null) { RawConfigSolvedImpact = Service.ConfigSolvedImpact; } _configSolvedImpact = RawConfigSolvedImpact; if (_configSolvedImpact == StartDependencyImpact.Unknown || (_configSolvedImpact & StartDependencyImpact.IsTryOnly) != 0) { _configSolvedImpact = StartDependencyImpact.Minimal; } if (ConfigOriginalStatus == ConfigurationStatus.Disabled) { _configDisabledReason = PluginDisabledReason.Config; } else if (p.HasError) { _configDisabledReason = PluginDisabledReason.PluginInfoHasError; } else if (Service != null) { if (Service.Disabled) { _configDisabledReason = PluginDisabledReason.ServiceIsDisabled; } else if (Service.Family.RunningPlugin != null) { _configDisabledReason = PluginDisabledReason.AnotherRunningPluginExistsInFamilyByConfig; } } // Immediately check for Runnable references to Disabled Services: this disables us. if (!Disabled) { foreach (var sRef in PluginInfo.ServiceReferences) { if (sRef.Requirement >= DependencyRequirement.Runnable) { // If the required service is already disabled, we immediately disable this plugin. if (sRef.Reference.HasError && !Disabled) { _configDisabledReason = PluginDisabledReason.RunnableReferenceServiceIsOnError; break; } ServiceData sr = _solver.FindExistingService(sRef.Reference.ServiceFullName); if (sr.Disabled && !Disabled) { _configDisabledReason = PluginDisabledReason.RunnableReferenceIsDisabled; break; } } } } if (Service != null) { Service.AddPlugin(this); } if (!Disabled) { // If the plugin is not yet disabled, we register it: // whenever the referenced service is disabled (or stopped during dynamic resolution), this // will disable (or stop) the plugin according to its ConfigSolvedImpact. foreach (var sRef in PluginInfo.ServiceReferences) { _solver.FindExistingService(sRef.Reference.ServiceFullName).RegisterPluginReference(this, sRef.Requirement); } if (Service != null && ConfigOriginalStatus == ConfigurationStatus.Running) { Service.Family.SetRunningPlugin(this); } } }