5
5
*/
6
6
package org .elasticsearch .xpack .ml .datafeed ;
7
7
8
+ import org .elasticsearch .ElasticsearchException ;
9
+ import org .elasticsearch .ElasticsearchWrapperException ;
10
+ import org .elasticsearch .action .search .SearchPhaseExecutionException ;
11
+ import org .elasticsearch .action .search .ShardSearchFailure ;
8
12
import org .elasticsearch .test .ESTestCase ;
9
13
import org .elasticsearch .xpack .ml .notifications .AnomalyDetectionAuditor ;
10
14
import org .junit .Before ;
@@ -27,33 +31,43 @@ public void setUpTests() {
27
31
}
28
32
29
33
public void testReportExtractionProblem () {
30
- problemTracker .reportExtractionProblem ("foo" );
34
+ problemTracker .reportExtractionProblem (createExtractionProblem ( "top level" , "cause" ) );
31
35
32
- verify (auditor ).error ("foo" , "Datafeed is encountering errors extracting data: foo" );
36
+ verify (auditor ).error ("foo" , "Datafeed is encountering errors extracting data: cause" );
37
+ assertTrue (problemTracker .hasProblems ());
38
+ }
39
+
40
+ public void testReportExtractionProblem_GivenSearchPhaseExecutionException () {
41
+ SearchPhaseExecutionException searchPhaseExecutionException = new SearchPhaseExecutionException ("test-phase" ,
42
+ "partial shards failure" , new ShardSearchFailure [] { new ShardSearchFailure (new ElasticsearchException ("for the cause!" )) });
43
+
44
+ problemTracker .reportExtractionProblem (new DatafeedJob .ExtractionProblemException (0L , searchPhaseExecutionException ));
45
+
46
+ verify (auditor ).error ("foo" , "Datafeed is encountering errors extracting data: for the cause!" );
33
47
assertTrue (problemTracker .hasProblems ());
34
48
}
35
49
36
50
public void testReportAnalysisProblem () {
37
- problemTracker .reportAnalysisProblem ("foo" );
51
+ problemTracker .reportAnalysisProblem (createAnalysisProblem ( "top level" , "cause" ) );
38
52
39
- verify (auditor ).error ("foo" , "Datafeed is encountering errors submitting data for analysis: foo " );
53
+ verify (auditor ).error ("foo" , "Datafeed is encountering errors submitting data for analysis: cause " );
40
54
assertTrue (problemTracker .hasProblems ());
41
55
}
42
56
43
57
public void testReportProblem_GivenSameProblemTwice () {
44
- problemTracker .reportExtractionProblem ("foo" );
45
- problemTracker .reportAnalysisProblem ("foo" );
58
+ problemTracker .reportExtractionProblem (createExtractionProblem ( "top level" , "cause" ) );
59
+ problemTracker .reportAnalysisProblem (createAnalysisProblem ( "top level" , "cause" ) );
46
60
47
- verify (auditor , times (1 )).error ("foo" , "Datafeed is encountering errors extracting data: foo " );
61
+ verify (auditor , times (1 )).error ("foo" , "Datafeed is encountering errors extracting data: cause " );
48
62
assertTrue (problemTracker .hasProblems ());
49
63
}
50
64
51
65
public void testReportProblem_GivenSameProblemAfterFinishReport () {
52
- problemTracker .reportExtractionProblem ("foo" );
66
+ problemTracker .reportExtractionProblem (createExtractionProblem ( "top level" , "cause" ) );
53
67
problemTracker .finishReport ();
54
- problemTracker .reportExtractionProblem ("foo" );
68
+ problemTracker .reportExtractionProblem (createExtractionProblem ( "top level" , "cause" ) );
55
69
56
- verify (auditor , times (1 )).error ("foo" , "Datafeed is encountering errors extracting data: foo " );
70
+ verify (auditor , times (1 )).error ("foo" , "Datafeed is encountering errors extracting data: cause " );
57
71
assertTrue (problemTracker .hasProblems ());
58
72
}
59
73
@@ -108,12 +122,31 @@ public void testFinishReport_GivenNoProblems() {
108
122
}
109
123
110
124
public void testFinishReport_GivenRecovery () {
111
- problemTracker .reportExtractionProblem (" bar" );
125
+ problemTracker .reportExtractionProblem (createExtractionProblem ( "top level" , " bar") );
112
126
problemTracker .finishReport ();
113
127
problemTracker .finishReport ();
114
128
115
129
verify (auditor ).error ("foo" , "Datafeed is encountering errors extracting data: bar" );
116
130
verify (auditor ).info ("foo" , "Datafeed has recovered data extraction and analysis" );
117
131
assertFalse (problemTracker .hasProblems ());
118
132
}
133
+
134
+ private static DatafeedJob .ExtractionProblemException createExtractionProblem (String error , String cause ) {
135
+ Exception causeException = new RuntimeException (cause );
136
+ Exception wrappedException = new TestWrappedException (error , causeException );
137
+ return new DatafeedJob .ExtractionProblemException (0L , wrappedException );
138
+ }
139
+
140
+ private static DatafeedJob .AnalysisProblemException createAnalysisProblem (String error , String cause ) {
141
+ Exception causeException = new RuntimeException (cause );
142
+ Exception wrappedException = new TestWrappedException (error , causeException );
143
+ return new DatafeedJob .AnalysisProblemException (0L , false , wrappedException );
144
+ }
145
+
146
+ private static class TestWrappedException extends RuntimeException implements ElasticsearchWrapperException {
147
+
148
+ TestWrappedException (String message , Throwable cause ) {
149
+ super (message , cause );
150
+ }
151
+ }
119
152
}
0 commit comments