annotate UnitTests/CS/Aspects/CounterAspectTest.cs @ 4:f757da6161a1

!bug 100 + 2h fixed gregression
author cin
date Sun, 24 Aug 2014 17:57:42 +0400
parents f990fcb411a9
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1 using System;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2 using System.Security.Principal;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3 using System.Threading;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
4
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
5 using BLToolkit.Aspects;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
6 using BLToolkit.Reflection;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
7
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
8 using NUnit.Framework;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
9
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
10 namespace Aspects
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
11 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
12 [TestFixture]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
13 public class CounterAspectTest
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
14 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
15 [Log]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
16 public abstract class TestClass
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
17 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
18 [Counter]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
19 public virtual void Test()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
20 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
21 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
22
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
23 [Counter]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
24 public virtual void LongTest()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
25 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
26 Thread.Sleep(100);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
27 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
28 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
29
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
30 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
31 public void Test()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
32 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
33 TestClass t = (TestClass)TypeAccessor.CreateInstance(typeof(TestClass));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
34
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
35 for (int i = 0; i < 10; i++)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
36 t.Test();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
37
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
38 MethodCallCounter counter = CounterAspect.GetCounter(typeof(TestClass).GetMethod("Test"));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
39
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
40 Assert.AreEqual(10, counter.TotalCount);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
41
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
42 Console.WriteLine(counter.TotalTime);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
43
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
44 new Thread(new ThreadStart(t.LongTest)).Start();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
45 Thread.Sleep(20);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
46
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
47 lock (CounterAspect.Counters.SyncRoot) foreach (MethodCallCounter c in CounterAspect.Counters)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
48 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
49 Console.WriteLine("{0}.{1,-10} | {2,2} | {3,2} | {4}",
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
50 c.MethodInfo.DeclaringType.Name,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
51 c.MethodInfo.Name,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
52 c.TotalCount,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
53 c.CurrentCalls.Count,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
54 c.TotalTime);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
55
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
56 lock (c.CurrentCalls.SyncRoot) for (int i = 0; i < c.CurrentCalls.Count; i++)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
57 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
58 InterceptCallInfo ci = (InterceptCallInfo)c.CurrentCalls[i];
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
59 IPrincipal pr = ci.CurrentPrincipal;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
60
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
61 Console.WriteLine("{0,15} | {1}",
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
62 pr == null? "***" : pr.Identity.Name,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
63 DateTime.Now - ci.BeginCallTime);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
64 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
65 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
66 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
67
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
68 public abstract class TestClass2
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
69 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
70 [Counter]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
71 public virtual void Test()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
72 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
73 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
74 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
75
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
76 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
77 public void Test2()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
78 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
79 // custom create counter delegate returns null
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
80 CounterAspect.CreateCounter = mi => null;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
81
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
82 var t = (TestClass2)TypeAccessor.CreateInstance(typeof(TestClass2));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
83
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
84 // interceptor should fallback to default counter implementation
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
85 t.Test();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
86 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
87
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
88 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
89 }