public ObserverProxyValidator() { // Module is only used to construct the type var module = AssemblyDefinition.ReadAssembly(typeof(ExecutionObserverProxy).Assembly.Location).MainModule; _counterProxyTypeRef = ExecutionObserverInjector.ConstructCounterProxy(module, "AElf.Reference"); }
public void ExecutionObserverInjectorPatchTest2() { var module = GetContractModule(typeof(BadContract)); var executionObserverInjector = new ExecutionObserverInjector(); executionObserverInjector.Patch(module); }
public void ConstructCounterProxyTest() { var module = GetContractModule(typeof(TestContract)); var ns = "AElf.CSharp.CodeOps"; var typeDefinition = ExecutionObserverInjector.ConstructCounterProxy(module, ns); typeDefinition.Methods.Count.ShouldBe(3); typeDefinition.Methods.Select(method => method.DeclaringType.FullName) .ShouldAllBe(name => name == string.Concat(ns, ".", nameof(ExecutionObserverProxy))); new[] { nameof(ExecutionObserverProxy.SetObserver), nameof(ExecutionObserverProxy.BranchCount), nameof(ExecutionObserverProxy.CallCount) }.ShouldAllBe(name => typeDefinition.Methods.Select(method => method.Name).Contains(name)); }
public void ExecutionObserverInjectorPatchTest() { var module = GetContractModule(typeof(TestContract)); var typeDefinition = ExecutionObserverInjector.ConstructCounterProxy(module, "AElf.Test"); var executionObserverInjector = new ExecutionObserverInjector(); executionObserverInjector.Patch(module); var typePatched = module.Types.Single(t => t.Name == nameof(ExecutionObserverProxy)); typePatched.HasSameFields(typeDefinition).ShouldBeTrue(); foreach (var method in typePatched.Methods) { method.HasSameBody(typeDefinition.Methods.Single(m => m.Name == method.Name)).ShouldBeTrue(); } }