1
1
import pytest
2
2
import sys
3
+ from unittest .mock import patch
3
4
from sentry_sdk .integrations .spark .spark_driver import (
4
5
_set_app_properties ,
5
6
_start_sentry_listener ,
6
7
SentryListener ,
8
+ SparkIntegration ,
7
9
)
8
-
9
10
from sentry_sdk .integrations .spark .spark_worker import SparkWorkerIntegration
10
11
11
12
from pyspark import SparkContext
@@ -40,27 +41,27 @@ def test_start_sentry_listener():
40
41
assert gateway ._callback_server is not None
41
42
42
43
43
- @pytest .fixture
44
- def sentry_listener (monkeypatch ):
45
- class MockHub :
46
- def __init__ (self ):
47
- self .args = []
48
- self .kwargs = {}
44
+ def test_initialize_spark_integration (sentry_init ):
45
+ sentry_init (integrations = [SparkIntegration ()])
46
+ SparkContext .getOrCreate ()
47
+
49
48
50
- def add_breadcrumb (self , * args , ** kwargs ):
51
- self .args = args
52
- self .kwargs = kwargs
49
+ @pytest .fixture
50
+ def sentry_listener ():
53
51
54
52
listener = SentryListener ()
55
- mock_hub = MockHub ()
56
53
57
- monkeypatch .setattr (listener , "hub" , mock_hub )
54
+ return listener
55
+
58
56
59
- return listener , mock_hub
57
+ @pytest .fixture
58
+ def mock_add_breadcrumb ():
59
+ with patch ("sentry_sdk.add_breadcrumb" ) as mock :
60
+ yield mock
60
61
61
62
62
- def test_sentry_listener_on_job_start (sentry_listener ):
63
- listener , mock_hub = sentry_listener
63
+ def test_sentry_listener_on_job_start (sentry_listener , mock_add_breadcrumb ):
64
+ listener = sentry_listener
64
65
65
66
class MockJobStart :
66
67
def jobId (self ): # noqa: N802
@@ -69,15 +70,20 @@ def jobId(self): # noqa: N802
69
70
mock_job_start = MockJobStart ()
70
71
listener .onJobStart (mock_job_start )
71
72
73
+ mock_add_breadcrumb .assert_called_once ()
74
+ mock_hub = mock_add_breadcrumb .call_args
75
+
72
76
assert mock_hub .kwargs ["level" ] == "info"
73
77
assert "sample-job-id-start" in mock_hub .kwargs ["message" ]
74
78
75
79
76
80
@pytest .mark .parametrize (
77
81
"job_result, level" , [("JobSucceeded" , "info" ), ("JobFailed" , "warning" )]
78
82
)
79
- def test_sentry_listener_on_job_end (sentry_listener , job_result , level ):
80
- listener , mock_hub = sentry_listener
83
+ def test_sentry_listener_on_job_end (
84
+ sentry_listener , mock_add_breadcrumb , job_result , level
85
+ ):
86
+ listener = sentry_listener
81
87
82
88
class MockJobResult :
83
89
def toString (self ): # noqa: N802
@@ -94,13 +100,16 @@ def jobResult(self): # noqa: N802
94
100
mock_job_end = MockJobEnd ()
95
101
listener .onJobEnd (mock_job_end )
96
102
103
+ mock_add_breadcrumb .assert_called_once ()
104
+ mock_hub = mock_add_breadcrumb .call_args
105
+
97
106
assert mock_hub .kwargs ["level" ] == level
98
107
assert mock_hub .kwargs ["data" ]["result" ] == job_result
99
108
assert "sample-job-id-end" in mock_hub .kwargs ["message" ]
100
109
101
110
102
- def test_sentry_listener_on_stage_submitted (sentry_listener ):
103
- listener , mock_hub = sentry_listener
111
+ def test_sentry_listener_on_stage_submitted (sentry_listener , mock_add_breadcrumb ):
112
+ listener = sentry_listener
104
113
105
114
class StageInfo :
106
115
def stageId (self ): # noqa: N802
@@ -120,6 +129,9 @@ def stageInfo(self): # noqa: N802
120
129
mock_stage_submitted = MockStageSubmitted ()
121
130
listener .onStageSubmitted (mock_stage_submitted )
122
131
132
+ mock_add_breadcrumb .assert_called_once ()
133
+ mock_hub = mock_add_breadcrumb .call_args
134
+
123
135
assert mock_hub .kwargs ["level" ] == "info"
124
136
assert "sample-stage-id-submit" in mock_hub .kwargs ["message" ]
125
137
assert mock_hub .kwargs ["data" ]["attemptId" ] == 14
@@ -163,13 +175,16 @@ def stageInfo(self): # noqa: N802
163
175
164
176
165
177
def test_sentry_listener_on_stage_completed_success (
166
- sentry_listener , get_mock_stage_completed
178
+ sentry_listener , mock_add_breadcrumb , get_mock_stage_completed
167
179
):
168
- listener , mock_hub = sentry_listener
180
+ listener = sentry_listener
169
181
170
182
mock_stage_completed = get_mock_stage_completed (failure_reason = False )
171
183
listener .onStageCompleted (mock_stage_completed )
172
184
185
+ mock_add_breadcrumb .assert_called_once ()
186
+ mock_hub = mock_add_breadcrumb .call_args
187
+
173
188
assert mock_hub .kwargs ["level" ] == "info"
174
189
assert "sample-stage-id-submit" in mock_hub .kwargs ["message" ]
175
190
assert mock_hub .kwargs ["data" ]["attemptId" ] == 14
@@ -178,13 +193,16 @@ def test_sentry_listener_on_stage_completed_success(
178
193
179
194
180
195
def test_sentry_listener_on_stage_completed_failure (
181
- sentry_listener , get_mock_stage_completed
196
+ sentry_listener , mock_add_breadcrumb , get_mock_stage_completed
182
197
):
183
- listener , mock_hub = sentry_listener
198
+ listener = sentry_listener
184
199
185
200
mock_stage_completed = get_mock_stage_completed (failure_reason = True )
186
201
listener .onStageCompleted (mock_stage_completed )
187
202
203
+ mock_add_breadcrumb .assert_called_once ()
204
+ mock_hub = mock_add_breadcrumb .call_args
205
+
188
206
assert mock_hub .kwargs ["level" ] == "warning"
189
207
assert "sample-stage-id-submit" in mock_hub .kwargs ["message" ]
190
208
assert mock_hub .kwargs ["data" ]["attemptId" ] == 14
0 commit comments