Skip to content

Commit d11d0b3

Browse files
committed
Make Target generic
1 parent 1b12476 commit d11d0b3

14 files changed

+306
-212
lines changed

.gitignore

-3
Original file line numberDiff line numberDiff line change
@@ -63,9 +63,6 @@ instance/
6363
# Sphinx documentation
6464
docs/_build/
6565

66-
# PyBuilder
67-
target/
68-
6966
# IPython Notebook
7067
.ipynb_checkpoints
7168

grizzly/args.py

+7
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ def add_arguments(self, actions):
2828

2929
class CommonArgs(object):
3030
IGNORABLE = ("log-limit", "memory", "timeout")
31+
PLATFORMS = ("local",)
3132

3233
def __init__(self):
3334
self._sanity_skip = set()
@@ -60,6 +61,9 @@ def __init__(self):
6061
self.parser.add_argument(
6162
"-m", "--memory", type=int,
6263
help="Browser process memory limit in MBs (default: 'no limit')")
64+
self.parser.add_argument(
65+
"--platform", default="local",
66+
help="Platforms available: %s (default: %%(default)s)" % ", ".join(self.PLATFORMS))
6367
self.parser.add_argument(
6468
"-p", "--prefs",
6569
help="prefs.js file to use")
@@ -117,6 +121,9 @@ def sanity_check(self, args):
117121
if not os.path.isdir(ext) or (os.path.isfile(ext) and ext.endswith(".xpi")):
118122
self.parser.error("Extension must be a folder or .xpi")
119123

124+
if args.platform.lower() not in self.PLATFORMS:
125+
self.parser.error("Unsupported platform %r" % args.platform)
126+
120127
if args.prefs is not None and not os.path.isfile(args.prefs):
121128
self.parser.error("file not found: %r" % args.prefs)
122129

grizzly/core.py

+17-15
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,8 @@
3232
from .reporter import FilesystemReporter, FuzzManagerReporter, S3FuzzManagerReporter
3333
from .status import Status
3434
from .corpman.storage import TestFile
35-
from .target import Target
35+
from .target import PuppetTarget
36+
3637

3738
__author__ = "Tyson Smith"
3839
__credits__ = ["Tyson Smith", "Jesse Schwartzentruber"]
@@ -223,11 +224,11 @@ def run(self):
223224
self.iomanager.tests.pop().cleanup()
224225

225226
# handle failure if detected
226-
if failure_detected == Target.RESULT_FAILURE:
227+
if failure_detected == self.target.RESULT_FAILURE:
227228
self.status.results += 1
228229
log.info("Result detected")
229230
self.report_result()
230-
elif failure_detected == Target.RESULT_IGNORED:
231+
elif failure_detected == self.target.RESULT_IGNORED:
231232
self.status.ignored += 1
232233
log.info("Ignored (%d)", self.status.ignored)
233234

@@ -314,17 +315,18 @@ def main(args):
314315
log.info("Running in FUZZING mode")
315316

316317
log.debug("initializing the Target")
317-
target = Target(
318-
args.binary,
319-
args.extension,
320-
args.launch_timeout,
321-
args.log_limit,
322-
args.memory,
323-
args.prefs,
324-
args.relaunch,
325-
args.rr,
326-
args.valgrind,
327-
args.xvfb)
318+
if args.platform == "local":
319+
target = PuppetTarget(
320+
args.binary,
321+
args.extension,
322+
args.launch_timeout,
323+
args.log_limit,
324+
args.memory,
325+
args.prefs,
326+
args.relaunch,
327+
args.rr,
328+
args.valgrind,
329+
args.xvfb)
328330
adapter.monitor = target.monitor
329331
if args.soft_asserts:
330332
target.add_abort_token("###!!! ASSERTION:")
@@ -375,7 +377,7 @@ def main(args):
375377
if session is not None:
376378
session.close()
377379
if target is not None:
378-
if target.rr_path is not None and os.path.isdir(target.rr_path):
380+
if target.use_rr and target.rr_path is not None and os.path.isdir(target.rr_path):
379381
shutil.rmtree(target.rr_path)
380382
target.cleanup()
381383
if adapter is not None:

grizzly/reduce/interesting.py

+3-3
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
import ffpuppet
1919
import sapphire
2020
from ..reporter import FuzzManagerReporter, Report
21-
from ..target import Target
21+
from ..target.target import Target
2222

2323

2424
__author__ = "Jesse Schwartzentruber"
@@ -295,7 +295,7 @@ def _dyn_resp_close():
295295
self.server.add_dynamic_response("/harness", lambda: harness, mime_type="text/html")
296296
self.server.set_redirect("/first_test", str(self.landing_page), required=True)
297297

298-
# (re)launch FFPuppet
298+
# (re)launch Target
299299
if self.target.closed:
300300
# Try to launch the browser at most, 4 times
301301
for retries in reversed(range(4)):
@@ -375,7 +375,7 @@ def keep_waiting():
375375
self.orig_sig = crash.createCrashSignature(maxFrames=max_frames)
376376
# the amount of time it can take to replay a test case can vary
377377
# when under Valgrind so do not update the timeout in that case
378-
if not self.target.use_valgrind:
378+
if not getattr(self.target, "use_valgrind", False):
379379
self.update_timeout(end_time - start_time)
380380
else:
381381
LOG.info("Uninteresting: different signature: %s", short_sig)

grizzly/reduce/reduce.py

+14-13
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727
from ..core import Session
2828
from ..corpman.storage import TestFile, TestCase
2929
from ..reporter import FilesystemReporter, FuzzManagerReporter, Report
30-
from ..target import Target
30+
from ..target import PuppetTarget
3131

3232

3333
__author__ = "Jesse Schwartzentruber"
@@ -732,17 +732,18 @@ def main(args, interesting_cb=None, result_cb=None):
732732
job_cancelled = False
733733
try:
734734
LOG.debug("initializing the Target")
735-
target = Target(
736-
args.binary,
737-
args.extension,
738-
args.launch_timeout,
739-
args.log_limit,
740-
args.memory,
741-
None,
742-
args.relaunch,
743-
False, # rr
744-
args.valgrind,
745-
args.xvfb)
735+
if args.platform == "local":
736+
target = PuppetTarget(
737+
args.binary,
738+
args.extension,
739+
args.launch_timeout,
740+
args.log_limit,
741+
args.memory,
742+
None, # prefs
743+
args.relaunch,
744+
False, # rr
745+
args.valgrind,
746+
args.xvfb)
746747

747748
job = ReductionJob(
748749
args.ignore,
@@ -787,7 +788,7 @@ def main(args, interesting_cb=None, result_cb=None):
787788

788789
# detect soft assertions
789790
if args.soft_asserts:
790-
job.interesting.target._puppet.add_abort_token("###!!! ASSERTION:")
791+
job.interesting.target.add_abort_token("###!!! ASSERTION:")
791792

792793
# setup interesting callback if requested
793794
if interesting_cb is not None:

grizzly/reduce/test_common.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
55
from __future__ import unicode_literals
66
import os
7-
from grizzly.target import Target
7+
from grizzly.target.target import Target
88
from grizzly.reporter import Reporter
99

1010

grizzly/reduce/test_interesting.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
import ffpuppet
1010
import sapphire
1111
from grizzly.reduce.interesting import Interesting
12-
from grizzly.target import Target
12+
from grizzly.target.target import Target
1313
from .test_common import FakeTarget, create_target_binary
1414

1515

grizzly/target/__init__.py

+11
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
# coding=utf-8
2+
# This Source Code Form is subject to the terms of the Mozilla Public
3+
# License, v. 2.0. If a copy of the MPL was not distributed with this
4+
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
5+
6+
from .puppet_target import PuppetTarget
7+
from .target import Target
8+
9+
__all__ = ("PuppetTarget", "Target")
10+
__author__ = "Tyson Smith"
11+
__credits__ = ["Tyson Smith", "Jesse Schwartzentruber"]

0 commit comments

Comments
 (0)