protected void WithProvisionRunnerContext(Action <ProvisionRunnerContext> action)
        {
            foreach (var provisionRunner in ProvisionRunners)
            {
                var type = provisionRunner.GetType().FullName;

                provisionRunner.ProvisionGenerationCount = ProvisionGenerationCount;

                provisionRunner.EnableDefinitionProvision  = EnableDefinitionProvision;
                provisionRunner.EnableDefinitionValidation = EnableDefinitionValidation;

                CurrentProvisionRunner = provisionRunner;

                Trace.WriteLine(string.Format("[INF]    Testing with runner impl: [{0}]", type));
                Trace.WriteLine(string.Format("[INF]    Testing with Is64BitProcess flag: [{0}]", Environment.Is64BitProcess));
                Trace.WriteLine(string.Format(@"[INF]    Testing as user: [{0}\{1}]", Environment.UserDomainName, Environment.UserName));
                Trace.WriteLine(string.Empty);

                Trace.WriteLine(string.Format("[INF]        - Current VM: [{0}]", Environment.MachineName));
                Trace.WriteLine(string.Format("[INF]        - Current VM CPU: [{0}]", Environment.ProcessorCount));
                Trace.WriteLine(string.Empty);

                Trace.WriteLine(string.Format("[INF]        - ProvisionGenerationCount: [{0}]", ProvisionGenerationCount));
                Trace.WriteLine(string.Format("[INF]        - EnableDefinitionValidation: [{0}]", EnableDefinitionValidation));

                action(new ProvisionRunnerContext
                {
                    Runner = provisionRunner
                });
            }
        }
        private void ValidateDefinitionHostRunnerSupport(ProvisionRunnerBase runner, Type targetType)
        {
            var attrs = targetType.GetCustomAttributes()
                        .OfType <SPObjectTypeAttribute>();

            if (CurrentProvisionRunner.Name == "SSOM")
            {
                var att = attrs.FirstOrDefault(a => a.ObjectModelType == SPObjectModelType.SSOM);

                if (att == null)
                {
                    throw new SPMeta2UnsupportedCSOMRunnerException();
                }
            }
            if (CurrentProvisionRunner.Name == "CSOM")
            {
                var att = attrs.FirstOrDefault(a => a.ObjectModelType == SPObjectModelType.CSOM);

                if (att == null)
                {
                    throw new SPMeta2UnsupportedCSOMRunnerException();
                }
            }
            if (CurrentProvisionRunner.Name == "O365")
            {
                var att = attrs.FirstOrDefault(a => a.ObjectModelType == SPObjectModelType.CSOM);

                if (att == null)
                {
                    throw new SPMeta2UnsupportedO365RunnerException();
                }
            }
        }
        private SPObjectModelType GetRunnerType(ProvisionRunnerBase runner)
        {
            if (runner.Name == "SSOM")
            {
                return(SPObjectModelType.SSOM);
            }

            if (runner.Name == "O365" || runner.Name == "CSOM")
            {
                return(SPObjectModelType.CSOM);
            }

            throw new SPMeta2NotSupportedException(string.Format("Cannot find SPObjectModelType type for runer of type:[{0}]", runner.Name));
        }
        protected void WithProvisionRunnerContext(Action <ProvisionRunnerContext> action)
        {
            foreach (var provisionRunner in ProvisionRunners)
            {
                var type = provisionRunner.GetType().FullName;

                provisionRunner.ProvisionGenerationCount = ProvisionGenerationCount;

                provisionRunner.EnableDefinitionProvision  = EnableDefinitionProvision;
                provisionRunner.EnableDefinitionValidation = EnableDefinitionValidation;

                CurrentProvisionRunner = provisionRunner;

                Trace.WriteLine(string.Format("[INF]    Testing with runner impl: [{0}]", type));
                Trace.WriteLine(string.Format("[INF]        - ProvisionGenerationCount: [{0}]", ProvisionGenerationCount));
                Trace.WriteLine(string.Format("[INF]        - EnableDefinitionValidation: [{0}]", EnableDefinitionValidation));

                action(new ProvisionRunnerContext
                {
                    Runner = provisionRunner
                });
            }
        }
 private void ValidateDefinitionHostRunnerSupport <T1>(ProvisionRunnerBase runner)
 {
     ValidateDefinitionHostRunnerSupport(runner, typeof(T1));
 }