4
4
import static utils .TestClassFileHelper .getClassFileBytes ;
5
5
6
6
import com .datadog .debugger .probe .LogProbe ;
7
+ import datadog .trace .api .Config ;
7
8
import java .lang .instrument .IllegalClassFormatException ;
9
+ import java .util .Arrays ;
10
+ import java .util .Collections ;
8
11
import java .util .HashMap ;
12
+ import java .util .HashSet ;
9
13
import java .util .List ;
10
14
import org .junit .jupiter .api .Test ;
15
+ import utils .TestHelper ;
11
16
12
17
class SourceFileTrackingTransformerTest {
13
18
@ Test
14
19
void transformTopLevel () throws IllegalClassFormatException {
15
- ClassesToRetransformFinder finder = new ClassesToRetransformFinder ();
16
- SourceFileTrackingTransformer sourceFileTrackingTransformer =
17
- new SourceFileTrackingTransformer (finder );
18
- ConfigurationComparer comparer = createComparer ("TopLevelHelper.java" );
19
- sourceFileTrackingTransformer .transform (
20
- null ,
21
- getInternalName (TopLevelHelper .class ),
22
- null ,
23
- null ,
24
- getClassFileBytes (TopLevelHelper .class ));
25
- List <Class <?>> changedClasses =
26
- finder .getAllLoadedChangedClasses (new Class [] {TopLevelHelper .class }, comparer );
27
- assertEquals (1 , changedClasses .size ());
28
- assertEquals (TopLevelHelper .class , changedClasses .get (0 ));
29
- sourceFileTrackingTransformer .transform (
30
- null ,
31
- getInternalName (MyTopLevelClass .class ),
32
- null ,
33
- null ,
34
- getClassFileBytes (MyTopLevelClass .class ));
35
- sourceFileTrackingTransformer .flush ();
36
- changedClasses =
37
- finder .getAllLoadedChangedClasses (
38
- new Class [] {TopLevelHelper .class , MyTopLevelClass .class }, comparer );
39
- assertEquals (2 , changedClasses .size ());
40
- assertEquals (TopLevelHelper .class , changedClasses .get (0 ));
41
- assertEquals (MyTopLevelClass .class , changedClasses .get (1 ));
20
+ TestHelper .setFieldInConfig (
21
+ Config .get (),
22
+ "debuggerThirdPartyExcludes" ,
23
+ new HashSet <>(Arrays .asList ("com.datadog.debugger.agent" )));
24
+ try {
25
+ ClassesToRetransformFinder finder = new ClassesToRetransformFinder ();
26
+ SourceFileTrackingTransformer sourceFileTrackingTransformer =
27
+ new SourceFileTrackingTransformer (finder );
28
+ ConfigurationComparer comparer = createComparer ("TopLevelHelper.java" );
29
+ sourceFileTrackingTransformer .transform (
30
+ null ,
31
+ getInternalName (TopLevelHelper .class ),
32
+ null ,
33
+ null ,
34
+ getClassFileBytes (TopLevelHelper .class ));
35
+ List <Class <?>> changedClasses =
36
+ finder .getAllLoadedChangedClasses (new Class [] {TopLevelHelper .class }, comparer );
37
+ assertEquals (1 , changedClasses .size ());
38
+ assertEquals (TopLevelHelper .class , changedClasses .get (0 ));
39
+ sourceFileTrackingTransformer .transform (
40
+ null ,
41
+ getInternalName (MyTopLevelClass .class ),
42
+ null ,
43
+ null ,
44
+ getClassFileBytes (MyTopLevelClass .class ));
45
+ sourceFileTrackingTransformer .flush ();
46
+ changedClasses =
47
+ finder .getAllLoadedChangedClasses (
48
+ new Class [] {TopLevelHelper .class , MyTopLevelClass .class }, comparer );
49
+ assertEquals (2 , changedClasses .size ());
50
+ assertEquals (TopLevelHelper .class , changedClasses .get (0 ));
51
+ assertEquals (MyTopLevelClass .class , changedClasses .get (1 ));
52
+ } finally {
53
+ TestHelper .setFieldInConfig (
54
+ Config .get (), "debuggerThirdPartyExcludes" , Collections .emptySet ());
55
+ }
42
56
}
43
57
44
58
@ Test
45
59
void transformInner () throws IllegalClassFormatException {
46
- ClassesToRetransformFinder finder = new ClassesToRetransformFinder ();
47
- SourceFileTrackingTransformer sourceFileTrackingTransformer =
48
- new SourceFileTrackingTransformer (finder );
49
- ConfigurationComparer comparer = createComparer ("InnerHelper.java" );
50
- sourceFileTrackingTransformer .transform (
51
- null , getInternalName (InnerHelper .class ), null , null , getClassFileBytes (InnerHelper .class ));
52
- sourceFileTrackingTransformer .flush ();
53
- List <Class <?>> changedClasses =
54
- finder .getAllLoadedChangedClasses (new Class [] {InnerHelper .class }, comparer );
55
- assertEquals (1 , changedClasses .size ());
56
- assertEquals (InnerHelper .class , changedClasses .get (0 ));
57
- sourceFileTrackingTransformer .transform (
58
- null ,
59
- getInternalName (InnerHelper .MyInner .class ),
60
- null ,
61
- null ,
62
- getClassFileBytes (InnerHelper .MyInner .class ));
63
- sourceFileTrackingTransformer .transform (
64
- null ,
65
- getInternalName (InnerHelper .MySecondInner .class ),
66
- null ,
67
- null ,
68
- getClassFileBytes (InnerHelper .MySecondInner .class ));
69
- sourceFileTrackingTransformer .flush ();
70
- changedClasses =
71
- finder .getAllLoadedChangedClasses (
72
- new Class [] {
73
- InnerHelper .class , InnerHelper .MyInner .class , InnerHelper .MySecondInner .class
74
- },
75
- comparer );
76
- assertEquals (3 , changedClasses .size ());
77
- assertEquals (InnerHelper .class , changedClasses .get (0 ));
78
- assertEquals (InnerHelper .MyInner .class , changedClasses .get (1 ));
79
- assertEquals (InnerHelper .MySecondInner .class , changedClasses .get (2 ));
60
+ TestHelper .setFieldInConfig (
61
+ Config .get (),
62
+ "debuggerThirdPartyExcludes" ,
63
+ new HashSet <>(Arrays .asList ("com.datadog.debugger.agent" )));
64
+ try {
65
+ ClassesToRetransformFinder finder = new ClassesToRetransformFinder ();
66
+ SourceFileTrackingTransformer sourceFileTrackingTransformer =
67
+ new SourceFileTrackingTransformer (finder );
68
+ ConfigurationComparer comparer = createComparer ("InnerHelper.java" );
69
+ sourceFileTrackingTransformer .transform (
70
+ null ,
71
+ getInternalName (InnerHelper .class ),
72
+ null ,
73
+ null ,
74
+ getClassFileBytes (InnerHelper .class ));
75
+ sourceFileTrackingTransformer .flush ();
76
+ List <Class <?>> changedClasses =
77
+ finder .getAllLoadedChangedClasses (new Class [] {InnerHelper .class }, comparer );
78
+ assertEquals (1 , changedClasses .size ());
79
+ assertEquals (InnerHelper .class , changedClasses .get (0 ));
80
+ sourceFileTrackingTransformer .transform (
81
+ null ,
82
+ getInternalName (InnerHelper .MyInner .class ),
83
+ null ,
84
+ null ,
85
+ getClassFileBytes (InnerHelper .MyInner .class ));
86
+ sourceFileTrackingTransformer .transform (
87
+ null ,
88
+ getInternalName (InnerHelper .MySecondInner .class ),
89
+ null ,
90
+ null ,
91
+ getClassFileBytes (InnerHelper .MySecondInner .class ));
92
+ sourceFileTrackingTransformer .flush ();
93
+ changedClasses =
94
+ finder .getAllLoadedChangedClasses (
95
+ new Class [] {
96
+ InnerHelper .class , InnerHelper .MyInner .class , InnerHelper .MySecondInner .class
97
+ },
98
+ comparer );
99
+ assertEquals (3 , changedClasses .size ());
100
+ assertEquals (InnerHelper .class , changedClasses .get (0 ));
101
+ assertEquals (InnerHelper .MyInner .class , changedClasses .get (1 ));
102
+ assertEquals (InnerHelper .MySecondInner .class , changedClasses .get (2 ));
103
+ } finally {
104
+ TestHelper .setFieldInConfig (
105
+ Config .get (), "debuggerThirdPartyExcludes" , Collections .emptySet ());
106
+ }
80
107
}
81
108
82
109
@ Test
@@ -95,6 +122,22 @@ void transformNotAllowed() throws IllegalClassFormatException {
95
122
assertEquals (0 , finder .getClassNamesBySourceFile ().size ());
96
123
}
97
124
125
+ @ Test
126
+ void thirdPartyExcludes () throws IllegalClassFormatException {
127
+ ClassesToRetransformFinder finder = new ClassesToRetransformFinder ();
128
+ SourceFileTrackingTransformer sourceFileTrackingTransformer =
129
+ new SourceFileTrackingTransformer (finder );
130
+ ConfigurationComparer comparer = createComparer ("TopLevelHelper.java" );
131
+ sourceFileTrackingTransformer .transform (
132
+ null ,
133
+ getInternalName (TopLevelHelper .class ),
134
+ null ,
135
+ null ,
136
+ getClassFileBytes (TopLevelHelper .class ));
137
+ sourceFileTrackingTransformer .flush ();
138
+ assertEquals (0 , finder .getClassNamesBySourceFile ().size ());
139
+ }
140
+
98
141
private static void replaceInByteArray (byte [] buffer , byte [] oldBytes , byte [] newBytes ) {
99
142
int oldIdx = 0 ;
100
143
for (int i = 0 ; i < buffer .length ; i ++) {
0 commit comments