@@ -179,6 +179,7 @@ def test_update_fuzzer(self):
179179 'additional_environment_string' : 'args=123' ,
180180 'data_bundle_name' : 'test_bundle' ,
181181 'external_contribution' : True ,
182+ 'untrusted' : False ,
182183 'executable_path' : 'executable' ,
183184 'last_edited_by' : 'editor@example.com' ,
184185 'launcher_script' : 'launcher' ,
@@ -188,3 +189,68 @@ def test_update_fuzzer(self):
188189 'source' : 'original@example.com' ,
189190 'timeout' : 30 ,
190191 })
192+
193+ def test_update_fuzzer_untrusted_success (self ):
194+ """Test updating a fuzzer to untrusted with a Linux job succeeds."""
195+ # Create a Linux job.
196+ job = data_types .Job (name = 'linux_job' , platform = 'LINUX' )
197+ job .put ()
198+
199+ fuzzer_name = 'test_fuzzer'
200+ fuzzer = data_types .Fuzzer (
201+ name = fuzzer_name ,
202+ jobs = [],
203+ revision = 1 ,
204+ source = 'original@example.com' ,
205+ timeout = 10 ,
206+ )
207+ fuzzer .put ()
208+
209+ request_payload = {
210+ 'csrf_token' : form .generate_csrf_token (),
211+ 'key' : fuzzer .key .id (),
212+ 'name' : fuzzer_name ,
213+ 'untrusted' : True ,
214+ 'jobs' : ['linux_job' ],
215+ }
216+
217+ resp = self .app .post_json ('/fuzzers/edit' , request_payload )
218+ self .assertEqual (302 , resp .status_int ) # Redirects to /fuzzers
219+
220+ fuzzer = fuzzer .key .get ()
221+ self .assertTrue (fuzzer .untrusted )
222+ self .assertEqual (fuzzer .jobs , ['linux_job' ])
223+
224+ def test_update_fuzzer_untrusted_failure_non_linux (self ):
225+ """Test updating a fuzzer to untrusted with a non-Linux job fails."""
226+ # Create a Windows job.
227+ job = data_types .Job (name = 'windows_job' , platform = 'WINDOWS' )
228+ job .put ()
229+
230+ fuzzer_name = 'test_fuzzer'
231+ fuzzer = data_types .Fuzzer (
232+ name = fuzzer_name ,
233+ jobs = [],
234+ revision = 1 ,
235+ source = 'original@example.com' ,
236+ timeout = 10 ,
237+ )
238+ fuzzer .put ()
239+
240+ request_payload = {
241+ 'csrf_token' : form .generate_csrf_token (),
242+ 'key' : fuzzer .key .id (),
243+ 'name' : fuzzer_name ,
244+ 'untrusted' : True ,
245+ 'jobs' : ['windows_job' ],
246+ }
247+
248+ resp = self .app .post_json (
249+ '/fuzzers/edit' , request_payload , expect_errors = True )
250+ self .assertEqual (400 , resp .status_int )
251+ self .assertIn ('Untrusted fuzzers can only be run on Linux jobs' ,
252+ resp .normal_body .decode ())
253+
254+ # Verify fuzzer was not updated to untrusted.
255+ fuzzer = fuzzer .key .get ()
256+ self .assertFalse (fuzzer .untrusted )
0 commit comments