Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
 public SolvedItemSnapshot(IYodiiItemData item)
 {
     _disabledReason       = item.DisabledReason;
     _runningStatus        = item.DynamicStatus;
     _configOriginalStatus = item.ConfigOriginalStatus;
     _configSolvedStatus   = item.ConfigSolvedStatus;
     _configOriginalImpact = item.ConfigOriginalImpact;
     _configSolvedImpact   = item.RawConfigSolvedImpact;
 }
Ejemplo n.º 3
0
 public SolvedItemSnapshot( IYodiiItemData item )
 {
     _disabledReason = item.DisabledReason;
     _runningStatus = item.DynamicStatus;
     _configOriginalStatus = item.ConfigOriginalStatus;
     _configSolvedStatus = item.ConfigSolvedStatus;
     _configOriginalImpact = item.ConfigOriginalImpact;
     _configSolvedImpact = item.RawConfigSolvedImpact;
 }
Ejemplo n.º 4
0
        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);
        }
Ejemplo n.º 5
0
 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());
 }
Ejemplo n.º 6
0
        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;
        }
Ejemplo n.º 7
0
        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;
        }
Ejemplo n.º 8
0
 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;
     }
 }
Ejemplo n.º 9
0
 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 ) );
         }
     }
 }
Ejemplo n.º 10
0
        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;
            }
        }
Ejemplo n.º 11
0
 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();
 }
Ejemplo n.º 12
0
 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 );
 }
Ejemplo n.º 13
0
 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));
             }
         }
     }
 }
Ejemplo n.º 14
0
 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 );
 }
Ejemplo n.º 15
0
 internal LiveRunCapability( SolvedConfigurationStatus finalConfigStatus, FinalConfigStartableStatus s )
 {
     _flags = new AllFlags( finalConfigStatus, s );
 }
Ejemplo n.º 16
0
 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;
     }
 }
Ejemplo n.º 17
0
        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 );
                }
            }
        }
Ejemplo n.º 18
0
 internal LiveRunCapability(SolvedConfigurationStatus finalConfigStatus, FinalConfigStartableStatus s)
 {
     _flags = new AllFlags(finalConfigStatus, s);
 }
Ejemplo n.º 19
0
        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;
            }
        }
Ejemplo n.º 20
0
        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);
                }
            }
        }