primitives.restler_custom_payload("/storeProperties/tags", quoted=False), primitives.restler_static_string(""" } , "deliveryProperties": { "tags":"""), primitives.restler_fuzzable_object("{ \"fuzz\": false }"), primitives.restler_static_string(""" } , "rush":"""), primitives.restler_fuzzable_bool("true"), primitives.restler_static_string(""", "bagType":"""), primitives.restler_fuzzable_string("fuzzstring", quoted=True), primitives.restler_static_string(""", "items": [ { "name":"""), primitives.restler_fuzzable_string("fuzzstring", quoted=True), primitives.restler_static_string(""", "deliveryTags":"""), primitives.restler_fuzzable_object("{ \"fuzz\": false }"), primitives.restler_static_string(""", "code":"""), primitives.restler_custom_payload("code", quoted=False), primitives.restler_static_string(""", "storeId":"""), primitives.restler_fuzzable_int("1"),
request = requests.Request([ primitives.restler_static_string("PUT "), primitives.restler_static_string("/"), primitives.restler_static_string("city"), primitives.restler_static_string("/"), primitives.restler_custom_payload_uuid4_suffix("cityName"), primitives.restler_static_string(" HTTP/1.1\r\n"), primitives.restler_static_string("Accept: application/json\r\n"), primitives.restler_static_string("Host: restler.unit.test.server.com\r\n"), primitives.restler_static_string("Content-Type: application/json\r\n"), primitives.restler_static_string("\r\n"), primitives.restler_static_string("{"), primitives.restler_static_string('"population":'), primitives.restler_fuzzable_int('10000', quoted=True), primitives.restler_static_string(', "area": "5000",'), primitives.restler_fuzzable_string('strtest', quoted=True), primitives.restler_static_string(':'), primitives.restler_fuzzable_bool('true', quoted=True), primitives.restler_static_string("}"), primitives.restler_refreshable_authentication_token( "authentication_token_tag"), primitives.restler_static_string("\r\n"), { 'post_send': { 'parser': parse_cityNamePut, 'dependencies': [_city_put_name.writer()] } }, ], requestId="/city/{cityName}") req_collection.add_request(request)
def get_fuzzing_blocks(self, config): """ Returns the fuzzing request blocks per the config @return: The list of request blocks @rtype : List[str] """ # default value default_value = config.get_default_value( self.tag, primitives.FUZZABLE_STRING, self._content ) def not_like_string(val): """ Tests if a value seems to be some type other than a string (i.e. array, dict, bool, int) """ if not val or not isinstance(val, str): return True if val[0] == '[' and val[-1] == ']': return True if val[0] == '{' and val[-1] == '}': return True if val.lower() == 'true' or val.lower() == 'false': return True try: v = int(val) return True except Exception: pass return False if self.is_unknown and not_like_string(default_value): # Try to get a new default value without a hint default_value = config.get_default_value( self.tag, primitives.FUZZABLE_STRING, hint=None ) if not_like_string(default_value): return [primitives.restler_static_string(default_value, quoted=False)] if not self.is_fuzzable(): return [primitives.restler_static_string(default_value, quoted=True)] # fuzz as normal fuzzable string if not config.merge_fuzzable_values: blocks = [] blocks.append(primitives.restler_fuzzable_string(default_value), quoted=True) return blocks # get the set of fuzzable values fuzzable_values_raw = config.get_fuzzable_values( self.tag, primitives.FUZZABLE_STRING ) fuzzable_values = [ f'"{value}"' for value in fuzzable_values_raw ] # merge default + fuzzable values fuzzable_group = config.cleanup_fuzzable_group( f'"{default_value}"', fuzzable_values ) return [(primitives.FUZZABLE_GROUP, fuzzable_group)]