Skip to content
This repository was archived by the owner on Aug 17, 2020. It is now read-only.

Commit 700e0ce

Browse files
committed
changes
1 parent b913be2 commit 700e0ce

File tree

3 files changed

+80
-56
lines changed

3 files changed

+80
-56
lines changed

autoinstrument/init.go

Lines changed: 29 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -19,31 +19,39 @@ var (
1919

2020
func init() {
2121
once.Do(func() {
22-
var m *testing.M
23-
var mRunMethod reflect.Method
24-
var ok bool
25-
mType := reflect.TypeOf(m)
26-
if mRunMethod, ok = mType.MethodByName("Run"); !ok {
27-
return
28-
}
29-
30-
var runPatch *mpatch.Patch
31-
var err error
32-
runPatch, err = mpatch.PatchMethodByReflect(mRunMethod, func(m *testing.M) int {
33-
logOnError(runPatch.Unpatch())
34-
defer func() {
35-
logOnError(runPatch.Patch())
36-
}()
37-
scopetesting.PatchTestingLogger()
38-
defer scopetesting.UnpatchTestingLogger()
39-
return scopeagent.Run(m, agent.WithGlobalPanicHandler())
40-
})
41-
logOnError(err)
22+
patchMRun()
23+
scopetesting.PatchTRun()
24+
scopetesting.PatchBRun()
4225
})
4326
}
4427

45-
func logOnError(err error) {
28+
func patchMRun() {
29+
var m *testing.M
30+
var mRunMethod reflect.Method
31+
var ok bool
32+
mType := reflect.TypeOf(m)
33+
if mRunMethod, ok = mType.MethodByName("Run"); !ok {
34+
return
35+
}
36+
37+
var runPatch *mpatch.Patch
38+
var err error
39+
runPatch, err = mpatch.PatchMethodByReflect(mRunMethod, func(m *testing.M) int {
40+
logOnError(runPatch.Unpatch())
41+
defer func() {
42+
logOnError(runPatch.Patch())
43+
}()
44+
scopetesting.PatchTestingLogger()
45+
defer scopetesting.UnpatchTestingLogger()
46+
return scopeagent.Run(m, agent.WithGlobalPanicHandler())
47+
})
48+
logOnError(err)
49+
}
50+
51+
func logOnError(err error) bool {
4652
if err != nil {
4753
instrumentation.Logger().Println(err)
54+
return true
4855
}
56+
return false
4957
}

instrumentation/testing/init.go

Lines changed: 47 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ package testing
22

33
import (
44
"flag"
5-
"os"
65
"reflect"
76
"runtime"
87
"testing"
@@ -14,7 +13,9 @@ import (
1413
)
1514

1615
var (
17-
parallel int
16+
parallel int
17+
tRunPatched bool
18+
bRunPatched bool
1819
)
1920

2021
// Initialize the testing instrumentation
@@ -54,7 +55,7 @@ func Init(m *testing.M) {
5455
benchmarks = append(benchmarks, testing.InternalBenchmark{
5556
Name: benchmark.Name,
5657
F: func(b *testing.B) { // Indirection of the original benchmark
57-
if envDMPatch, set := os.LookupEnv("SCOPE_DISABLE_MONKEY_PATCHING"); !set || envDMPatch == "" {
58+
if bRunPatched {
5859
funcValue(b)
5960
} else {
6061
startBenchmark(b, funcPointer, funcValue)
@@ -64,36 +65,50 @@ func Init(m *testing.M) {
6465
}
6566
*intBenchmarks = benchmarks
6667
}
68+
}
6769

68-
if envDMPatch, set := os.LookupEnv("SCOPE_DISABLE_MONKEY_PATCHING"); !set || envDMPatch == "" {
69-
// We monkey patch the `testing.T.Run()` func to auto instrument sub tests
70-
var t *testing.T
71-
tType := reflect.TypeOf(t)
72-
if tRunMethod, ok := tType.MethodByName("Run"); ok {
73-
_, err := mpatch.PatchMethodByReflect(tRunMethod, func(t *testing.T, name string, f func(t *testing.T)) bool {
74-
pc, _, _, _ := runtime.Caller(1)
75-
gT := FromTestingT(t)
76-
return gT.Run(name, func(childT *testing.T) {
77-
addAutoInstrumentedTest(childT)
78-
childTest := StartTestFromCaller(childT, pc)
79-
defer childTest.end()
80-
f(childT)
81-
})
82-
})
83-
logOnError(err)
84-
}
70+
func PatchTRun() {
71+
// We monkey patch the `testing.T.Run()` func to auto instrument sub tests
72+
var t *testing.T
73+
var tRunMethod reflect.Method
74+
var ok bool
75+
tType := reflect.TypeOf(t)
76+
if tRunMethod, ok = tType.MethodByName("Run"); !ok {
77+
return
78+
}
8579

86-
// We monkey patch the `testing.B.Run()` func to auto instrument sub benchmark
87-
var b *testing.B
88-
bType := reflect.TypeOf(b)
89-
if bRunMethod, ok := bType.MethodByName("Run"); ok {
90-
_, err := mpatch.PatchMethodByReflect(bRunMethod, func(b *testing.B, name string, f func(b *testing.B)) bool {
91-
pc, _, _, _ := runtime.Caller(1)
92-
return FromTestingB(b).Run(name, func(b *testing.B) {
93-
StartBenchmark(b, pc, f)
94-
})
95-
})
96-
logOnError(err)
97-
}
80+
_, err := mpatch.PatchMethodByReflect(tRunMethod, func(t *testing.T, name string, f func(t *testing.T)) bool {
81+
pc, _, _, _ := runtime.Caller(1)
82+
gT := FromTestingT(t)
83+
return gT.Run(name, func(childT *testing.T) {
84+
addAutoInstrumentedTest(childT)
85+
childTest := StartTestFromCaller(childT, pc)
86+
defer childTest.end()
87+
f(childT)
88+
})
89+
})
90+
if !logOnError(err) {
91+
tRunPatched = true
92+
}
93+
}
94+
95+
func PatchBRun() {
96+
// We monkey patch the `testing.B.Run()` func to auto instrument sub benchmark
97+
var b *testing.B
98+
var bRunMethod reflect.Method
99+
var ok bool
100+
bType := reflect.TypeOf(b)
101+
if bRunMethod, ok = bType.MethodByName("Run"); !ok {
102+
return
103+
}
104+
105+
_, err := mpatch.PatchMethodByReflect(bRunMethod, func(b *testing.B, name string, f func(b *testing.B)) bool {
106+
pc, _, _, _ := runtime.Caller(1)
107+
return FromTestingB(b).Run(name, func(b *testing.B) {
108+
StartBenchmark(b, pc, f)
109+
})
110+
})
111+
if !logOnError(err) {
112+
bRunPatched = true
98113
}
99114
}

instrumentation/testing/logger.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -163,17 +163,18 @@ func patch(methodName string, methodBody func(test *Test, argsValues []interface
163163
methodBody(test, argIn)
164164
return nil
165165
})
166-
logOnError(err)
167-
if err == nil {
166+
if !logOnError(err) {
168167
patches[methodName] = methodPatch
169168
patchPointers[reflect.ValueOf(methodBody).Pointer()] = true
170169
}
171170
}
172171

173-
func logOnError(err error) {
172+
func logOnError(err error) bool {
174173
if err != nil {
175174
instrumentation.Logger().Println(err)
175+
return true
176176
}
177+
return false
177178
}
178179

179180
func isAPatchPointer(ptr uintptr) bool {

0 commit comments

Comments
 (0)