@@ -88,34 +88,6 @@ def test_cancel_is_idempotent(self):
8888 job .cancel ()
8989 job .cancel () # Second call should be nop
9090
91- def test_enable_preview (self ):
92- query = "search index=_internal"
93- job = self .service .jobs .create (
94- query = query ,
95- earliest_time = "-1m" ,
96- latest_time = "now" )
97- self .assertEqual (job ['isPreviewEnabled' ], '0' )
98- job .enable_preview ()
99- tries = 10
100- while tries > 0 :
101- if job .is_done ():
102- self .fail ('Job finished before preview enabled.' )
103- if job ['isPreviewEnabled' ] == '1' :
104- break
105- tries -= 1
106- self .assertEqual (job ['isPreviewEnabled' ], '1' )
107- job .disable_preview ()
108- tries = 10
109- while tries > 0 :
110- if job .is_done ():
111- self .fail ('Job finished before preview disabled.' )
112- if job ['isPreviewEnabled' ] == '0' :
113- break
114- tries -= 1
115- self .assertEqual (job ['isPreviewEnabled' ], '0' )
116-
117-
118-
11991 def check_job (self , job ):
12092 self .check_entity (job )
12193 keys = ['cursorTime' , 'delegate' , 'diskUsage' , 'dispatchState' ,
@@ -139,11 +111,53 @@ def test_read_jobs(self):
139111 job .refresh ()
140112 self .check_job (job )
141113
114+ class TestJobWithDelayedDone (testlib .SDKTestCase ):
115+ def setUp (self ):
116+ super (TestJobWithDelayedDone , self ).setUp ()
117+ self .installAppFromCollection ("sleep_command" )
118+ self .query = "search index=_internal | sleep done=100"
119+ self .job = self .service .jobs .create (
120+ query = self .query ,
121+ earliest_time = "-1m" ,
122+ priority = 5 ,
123+ latest_time = "now" )
124+
125+ def tearDown (self ):
126+ super (TestJobWithDelayedDone , self ).tearDown ()
127+ self .job .cancel ()
128+ self .assertEventuallyTrue (lambda : self .job .sid not in self .service .jobs )
129+
130+ def test_enable_preview (self ):
131+ self .assertEqual (self .job ['isPreviewEnabled' ], '0' )
132+ self .job .enable_preview ()
133+ def is_preview ():
134+ if self .job .is_done ():
135+ self .fail ('Job finished before preview enabled.' )
136+ return self .job ['isPreviewEnabled' ] == '1'
137+ self .assertEventuallyTrue (is_preview )
138+
139+ def test_setpriority (self ):
140+ # Note that you can only *decrease* the priority (i.e., 5 decreased to 3)
141+ # of a job unless Splunk is running as root. This is because Splunk jobs
142+ # are tied up with operating system processes and their priorities.
143+ self .assertEqual (5 , int (self .job ['priority' ]))
144+ new_priority = 3
145+ self .job .set_priority (new_priority )
146+ def priority ():
147+ if self .job .is_done ():
148+ self .fail ("Job already done before priority was set." )
149+ self .job .refresh ()
150+ return int (self .job ['priority' ])
151+ self .assertEventuallyEqual (
152+ new_priority ,
153+ priority ,
154+ timeout = 120
155+ )
142156
143157class TestJob (testlib .SDKTestCase ):
144158 def setUp (self ):
145159 super (TestJob , self ).setUp ()
146- self .query = "search index=_internal earliest=-1m | head 3"
160+ self .query = "search index=_internal | head 3"
147161 self .job = self .service .jobs .create (
148162 query = self .query ,
149163 earliest_time = "-1m" ,
@@ -155,7 +169,7 @@ def tearDown(self):
155169
156170 @log_duration
157171 def test_get_preview_and_events (self ):
158- testlib . retry (self .job , 'isDone' , '1' )
172+ self . assertEventuallyTrue (self .job . is_done )
159173 self .assertLessEqual (int (self .job ['eventCount' ]), 3 )
160174
161175 preview_stream = self .job .preview ()
@@ -176,34 +190,28 @@ def test_pause(self):
176190 self .assertEqual (self .job ['isPaused' ], '0' )
177191
178192 self .job .pause ()
179- testlib .retry (self .job , 'isPaused' , '1' )
180- self .assertEqual (self .job ['isPaused' ], '1' )
193+ self .assertEventuallyEqual (
194+ '1' ,
195+ lambda : self .job .refresh ()['isPaused' ]
196+ )
181197
182198 def test_unpause (self ):
183199 if self .job ['isPaused' ] == '0' :
184200 self .job .pause ()
185201 self .job .refresh ()
186202 self .assertEqual (self .job ['isPaused' ], '1' )
187203 self .job .unpause ()
188- testlib .retry (self .job , 'isPaused' , '0' )
189- self .assertEqual (self .job ['isPaused' ], '0' )
204+ self .assertEventuallyEqual (
205+ '0' ,
206+ lambda : self .job .refresh ()['isPaused' ]
207+ )
190208
191209 def test_finalize (self ):
192210 if self .job ['isFinalized' ] == '1' :
193211 self .fail ("Job is already finalized; can't test .finalize() method." )
194212 else :
195213 self .job .finalize ()
196- testlib .retry (self .job , 'isFinalized' , '1' )
197- self .assertEqual (self .job ['isFinalized' ], '1' )
198-
199- def test_setpriority (self ):
200- old_priority = int (self .job ['priority' ])
201- new_priority = old_priority % 10 + 1
202- self .assertNotEqual (old_priority , new_priority )
203-
204- self .job .set_priority (new_priority )
205- testlib .retry (self .job , 'priority' , str (new_priority ))
206- self .assertEqual (int (self .job ['priority' ]), new_priority )
214+ self .assertEventuallyEqual ('1' , lambda : self .job .refresh ()['isFinalized' ])
207215
208216 def test_setttl (self ):
209217 old_ttl = int (self .job ['ttl' ])
0 commit comments