Package FuzzManager :: Package FTB :: Module ProgramConfiguration
[hide private]
[frames] | no frames]

Source Code for Module FuzzManager.FTB.ProgramConfiguration

  1  #!/usr/bin/env python 
  2  # encoding: utf-8 
  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  # Ensure print() compatibility with Python 3 
 21  from __future__ import print_function 
 22  import sys 
 23  import os 
 24  from FTB.ConfigurationFiles import ConfigurationFiles 
25 26 27 -class ProgramConfiguration():
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
60 - def fromBinary(binaryPath):
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 # Version field is optional 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
80 - def addEnvironmentVariables(self, env):
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
91 - def addProgramArguments(self, args):
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
101 - def addMetadata(self, metadata):
102 ''' 103 Add (additional) metadata definitions. Existing definitions 104 will be overwritten if they are redefined in the given metadata. 105 106 @type metadata: dict 107 @param metadata: Dictionary containing the metadata 108 ''' 109 assert isinstance(metadata, dict) 110 self.metadata.update(metadata)
111