private void PropagateAndAssert(PropagateTestDescription ptd)
        {
            var propagation = new MethodPrivilegePropagation(new[] { _assembly }, ptd.methodsRequiringPrivileges, ptd.safeCriticalMethods, ptd.criticalTypes, ptd.callsToIgnore);
            var report      = propagation.CreateReportBuilder().Build();
            var injections  = report.GetInjectionsFor(_assembly).ToList();

            CollectionAssert.AreEquivalent(ptd.expectedInjections.ToList(), injections);
        }
        public void TwoAssembliesWithCriticalType()
        {
            var assembly1 = AssemblyCompiler.CompileTempAssembly(@"
            public interface IMyEnumerator
            {
                void M1();
            }");

            var assembly2 = PrepareTestForAssembly(@"
            public class CriticalType : IMyEnumerator
            {
                public void M1()
                {
                    Evil.Do();
                }
            }
", assembly1.AssemblyPath());

            var finderForAssembly2 = new CecilDefinitionFinder(assembly2);
            var evilDo             = finderForAssembly2.FindMethod("System.Void Evil::Do()");
            var criticaltype       = finderForAssembly2.FindType("CriticalType");

            var assemblies = new[] { assembly1, assembly2 };

            var propagation = new MethodPrivilegePropagation(assemblies, new[] { evilDo }, new MethodDefinition[] { }, new[] { criticaltype }, new List <MethodToMethodCall>());
            var report      = propagation.CreateReportBuilder().Build();

            CollectionAssert.IsEmpty(report.GetInjectionsFor(assembly1));

            var injections = report.GetInjectionsFor(assembly2);
            var expected   = new[] {
                new CecilSecurityAttributeDescriptor(criticaltype, SecurityAttributeType.Critical),
                new CecilSecurityAttributeDescriptor(evilDo, SecurityAttributeType.Critical)
            };

            CollectionAssert.AreEquivalent(expected, injections);
        }
        public void TwoAssembliesWithCriticalType()
        {
            var assembly1 = AssemblyCompiler.CompileTempAssembly(@"
            public interface IMyEnumerator
            {
                void M1();
            }");

            var assembly2 = PrepareTestForAssembly(@"
            public class CriticalType : IMyEnumerator
            {
                public void M1()
                {
                    Evil.Do();
                }
            }
            ", assembly1.AssemblyPath());

            var finderForAssembly2 = new CecilDefinitionFinder(assembly2);
            var evilDo = finderForAssembly2.FindMethod("System.Void Evil::Do()");
            var criticaltype = finderForAssembly2.FindType("CriticalType");

            var assemblies = new[] { assembly1, assembly2 };

            var propagation = new MethodPrivilegePropagation(assemblies, new[] { evilDo }, new MethodDefinition[] { }, new[] { criticaltype }, new List<MethodToMethodCall>());
            var report = propagation.CreateReportBuilder().Build();

            CollectionAssert.IsEmpty(report.GetInjectionsFor(assembly1));

            var injections = report.GetInjectionsFor(assembly2);
            var expected = new[] {
                new CecilSecurityAttributeDescriptor(criticaltype, SecurityAttributeType.Critical),
                new CecilSecurityAttributeDescriptor(evilDo, SecurityAttributeType.Critical)
            };
            CollectionAssert.AreEquivalent(expected, injections);
        }
 private void PropagateAndAssert(PropagateTestDescription ptd)
 {
     var propagation = new MethodPrivilegePropagation(new[] { _assembly }, ptd.methodsRequiringPrivileges, ptd.safeCriticalMethods, ptd.criticalTypes, ptd.callsToIgnore);
     var report = propagation.CreateReportBuilder().Build();
     var injections = report.GetInjectionsFor(_assembly).ToList();
     CollectionAssert.AreEquivalent(ptd.expectedInjections.ToList(), injections);
 }
示例#5
0
        private static void GenerateReportsFor(IEnumerable <AssemblyDefinition> assemblies, IEnumerable <KeyValuePair <MethodDefinition, string> > methodsRequiringPrivilegesThemselvesWithComments, MethodPrivilegePropagation privilegePropagation, string profileDirectory, string outputDirectory)
        {
            EnsureDirectoryIsEmpty(outputDirectory);

            var reportBuilder = privilegePropagation.CreateReportBuilder();

            foreach (var assembly in assemblies)
            {
                GenerateMethodsRequiringPrivilegesThemselvesInfo(assembly, methodsRequiringPrivilegesThemselvesWithComments, outputDirectory);
                GeneratePublicApisInfo(assembly, reportBuilder, profileDirectory, outputDirectory);
            }
        }