Package FuzzManager ::
Package FTB ::
Module ProgramConfiguration
|
|
1
2
3 '''
4 ProgramConfiguration -- Configuration of a target program
5
6 Container class that stores various configuration parameters, like platform,
7 product, OS, version and other parameters relevant for reproducing the issue.
8
9 @author: Christian Holler (:decoder)
10
11 @license:
12
13 This Source Code Form is subject to the terms of the Mozilla Public
14 License, v. 2.0. If a copy of the MPL was not distributed with this
15 file, You can obtain one at http://mozilla.org/MPL/2.0/.
16
17 @contact: choller@mozilla.com
18 '''
19
20
21 from __future__ import print_function
22 import sys
23 import os
24 from FTB.ConfigurationFiles import ConfigurationFiles
28 - def __init__(self, product, platform, os, version=None, env=None, args=None, metadata=None):
29 '''
30 @type product: string
31 @param product: The name of the product/program/branch tested
32 @type platform: string
33 @param platform: Platform on which is tested (e.g. x86, x86-64 or arm)
34 @type os: string
35 @param os: Operating system on which is tested (e.g. linux, windows, macosx)
36 '''
37 self.product = product.lower()
38 self.platform = platform.lower()
39 self.os = os.lower()
40 self.version = version
41
42 if env is None:
43 env = {}
44
45 if args is None:
46 args = []
47
48 if metadata is None:
49 metadata = {}
50
51 assert isinstance(env, dict)
52 assert isinstance(args, list)
53 assert isinstance(metadata, dict)
54
55 self.env = env
56 self.args = args
57 self.metadata = metadata
58
59 @staticmethod
61 binaryConfig = "%s.fuzzmanagerconf" % binaryPath
62 if not os.path.exists(binaryConfig):
63 print("Warning: No binary configuration found at %s" % binaryConfig, file=sys.stderr)
64 return None
65
66 config = ConfigurationFiles([binaryConfig])
67 mainConfig = config.mainConfig
68
69 for field in ["product", "platform", "os"]:
70 if not field in mainConfig:
71 raise RuntimeError('Missing "%s" in binary configuration file %s' % (field, binaryConfig))
72
73
74 version = None
75 if "product_version" in mainConfig:
76 version = mainConfig["product_version"]
77
78 return ProgramConfiguration(mainConfig["product"], mainConfig["platform"], mainConfig["os"], version=version, metadata=config.metadataConfig)
79
81 '''
82 Add (additional) environment variable definitions. Existing definitions
83 will be overwritten if they are redefined in the given environment.
84
85 @type env: dict
86 @param env: Dictionary containing the environment variables
87 '''
88 assert isinstance(env, dict)
89 self.env.update(env)
90
92 '''
93 Add (additional) program arguments.
94
95 @type args: list
96 @param args: List containing the program arguments
97 '''
98 assert isinstance(args, list)
99 self.args.extend(args)
100
111