Skip to content

Commit 75589a2

Browse files
committed
Add unit test for create fuzzer
1 parent a5c8464 commit 75589a2

1 file changed

Lines changed: 52 additions & 0 deletions

File tree

src/clusterfuzz/_internal/tests/appengine/handlers/fuzzers_test.py

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,14 @@
1717
import datetime
1818
import unittest
1919

20+
import flask
21+
import webtest
22+
2023
from clusterfuzz._internal.datastore import data_types
24+
from clusterfuzz._internal.tests.test_libs import helpers as test_helpers
25+
from clusterfuzz._internal.tests.test_libs import test_utils
2126
from handlers import fuzzers
27+
from libs import form
2228

2329

2430
class BaseEditHandlerTest(unittest.TestCase):
@@ -56,3 +62,49 @@ def test_get_fuzzer_state_str(self):
5662
self.assertNotIn('sample_testcase:', state_str)
5763
self.assertNotIn('stats_columns:', state_str)
5864
self.assertNotIn('stats_column_descriptions:', state_str)
65+
66+
67+
@test_utils.with_cloud_emulators('datastore')
68+
class CreateHandlerTest(unittest.TestCase):
69+
"""Tests CreateHandler creates a new Fuzzer"""
70+
71+
def setUp(self):
72+
test_helpers.patch(self, [
73+
'libs.access.has_access',
74+
'libs.auth.get_current_user',
75+
'libs.helpers.get_user_email',
76+
'handlers.fuzzers.datetime',
77+
'handlers.fuzzers.CreateHandler.get_upload',
78+
'handlers.fuzzers.CreateHandler.apply_fuzzer_changes',
79+
])
80+
self.mock.has_access.return_value = True
81+
self.mock.get_current_user().email = 'test@user.com'
82+
self.mock.get_user_email.return_value = 'test@user.com'
83+
84+
self.mock_time = datetime.datetime(2026, 1, 1, tzinfo=None)
85+
self.mock.datetime.datetime.now.return_value = self.mock_time
86+
self.mock.datetime.timezone = datetime.timezone
87+
88+
flaskapp = flask.Flask('testflask')
89+
flaskapp.add_url_rule('/', view_func=fuzzers.CreateHandler.as_view('/'))
90+
self.app = webtest.TestApp(flaskapp)
91+
92+
def test_create_fuzzer(self):
93+
"""Test create fuzzer with basic properties."""
94+
fuzzer_name = 'test_fuzzer'
95+
96+
resp = self.app.post_json('/', {
97+
'csrf_token': form.generate_csrf_token(),
98+
'name': fuzzer_name,
99+
})
100+
101+
self.assertEqual(200, resp.status_int)
102+
103+
self.mock.apply_fuzzer_changes.assert_called_once()
104+
105+
fuzzer = self.mock.apply_fuzzer_changes.call_args[0][1]
106+
upload_info = self.mock.apply_fuzzer_changes.call_args[0][2]
107+
108+
self.assertEqual(fuzzer.name, fuzzer_name)
109+
self.assertEqual(fuzzer.revision, 0)
110+
self.assertEqual(fuzzer.created_at, self.mock_time)

0 commit comments

Comments
 (0)