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); }
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); } }
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); }