Example #1
0
    def test_checkers_in_settings(self):
        settings_file = {
                    'settings_file_exists':True,
                    'checkers' :
                    {
                        'NamespaceRule' : {
                            'mode' : 'exhaustive'
                        },
                        'useafterfree' : {
                            'mode' : 'exhaustive'
                        },
                        'leakagerule' : {
                            'mode' : 'exhaustive'
                        },
                        'resourcehierarchy' : {
                            'mode' : 'exhaustive'
                        }
                    }
                }

        settings = RestlerSettings(settings_file)
        candidate_values = primitives.CandidateValuesPool()
        test_dict = {
                    }
        candidate_values.set_candidate_values(test_dict)
        self.assertEqual('exhaustive', settings.get_checker_arg('namespacerule', 'mode'))
        self.assertEqual('exhaustive', settings.get_checker_arg('USEAFTERFREE', 'mode'))
        self.assertEqual('exhaustive', settings.get_checker_arg('LeakageRule', 'mode'))
        self.assertEqual('exhaustive', settings.get_checker_arg('resourcehierarchy', 'mode'))
        self.assertEqual(None, settings.get_checker_arg('namespace_rule_mode', 'mode'))
        self.assertEqual(None, settings.get_checker_arg('use_after_free_rule_mode', 'mode'))
        self.assertEqual(None, settings.get_checker_arg('leakage_rule_mode', 'mode'))
        self.assertEqual(None, settings.get_checker_arg('resource_hierarchy_rule_mode', 'mode'))
    def test_settings_file_upload(self):
        with open(
                os.path.join(os.path.dirname(__file__),
                             "restler_user_settings.json")) as json_file:
            settings_file = json.load(json_file)
        settings = RestlerSettings(settings_file)

        self.assertEqual('exhaustive',
                         settings.get_checker_arg('namespacerule', 'mode'))
        self.assertEqual('exhaustive',
                         settings.get_checker_arg('useafterfree', 'mode'))
        self.assertEqual('exhaustive',
                         settings.get_checker_arg('leakagerule', 'mode'))
        self.assertEqual('exhaustive',
                         settings.get_checker_arg('resourcehierarchy', 'mode'))
        self.assertEqual(
            None, settings.get_checker_arg('invaliddynamicobject', 'mode'))
        self.assertEqual('normal',
                         settings.get_checker_arg('payloadbody', 'mode'))
        self.assertTrue(
            settings.get_checker_arg('payloadbody', 'start_with_valid'))
        self.assertTrue(
            settings.get_checker_arg('payloadbody', 'start_with_examples'))
        self.assertFalse(
            settings.get_checker_arg('payloadbody', 'size_dep_budget'))
        self.assertTrue(settings.get_checker_arg('payloadbody',
                                                 'use_feedback'))
        self.assertEqual(
            'C:\\restler\\restlerpayloadbody\\recipe_custom.json',
            settings.get_checker_arg('payloadbody', 'recipe_file'))

        request1 = "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/dnsZones/{zoneName}/{recordType}/{relativeRecordSetName}"
        request2 = "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/dnsZones/{zoneName}"
        self.assertEqual(1,
                         settings.get_producer_timing_delay(hex_def(request1)))
        self.assertEqual(5,
                         settings.get_producer_timing_delay(hex_def(request2)))
        self.assertEqual(
            2,
            settings.get_producer_timing_delay(
                hex_def("test_unknown_request_id")))

        custom_dicts = settings.get_endpoint_custom_mutations_paths()
        self.assertEqual("c:\\restler\\custom_dict1.json",
                         custom_dicts[hex_def(request1)])
        self.assertEqual("c:\\restler\\custom_dict2.json",
                         custom_dicts[hex_def(request2)])

        self.assertEqual(20, settings.max_combinations)
        self.assertEqual(90, settings.max_request_execution_time)

        self.assertEqual(True,
                         hex_def(request1) in settings.create_once_endpoints)
        self.assertNotEqual(
            True,
            hex_def(request2) in settings.create_once_endpoints)

        self.assertEqual("\\path\\to\\file.pem",
                         settings.client_certificate_path)
        self.assertEqual(200, settings.dyn_objects_cache_size)
        self.assertEqual(2, settings.fuzzing_jobs)
        self.assertEqual('directed-smoke-test', settings.fuzzing_mode)
        self.assertEqual(30, settings.garbage_collection_interval)
        self.assertTrue(settings.ignore_dependencies)
        self.assertTrue(settings.ignore_feedback)
        self.assertTrue(settings.connection_settings.include_user_agent)
        self.assertEqual(45, settings.max_async_resource_creation_time)
        self.assertEqual(11, settings.max_sequence_length)
        self.assertFalse(settings.connection_settings.use_ssl)
        self.assertTrue(settings.connection_settings.disable_cert_validation)
        self.assertTrue(settings.no_tokens_in_logs)
        self.assertEqual('(\w*)/ddosProtectionPlans(\w*)', settings.path_regex)
        self.assertEqual(500, settings.request_throttle_ms)
        self.assertEqual('100.100.100.100',
                         settings.connection_settings.target_ip)
        self.assertEqual(500, settings.connection_settings.target_port)
        self.assertEqual(12, settings.time_budget)
        self.assertEqual('some refresh command', settings.token_refresh_cmd)
        self.assertEqual(60, settings.token_refresh_interval)
        self.assertEqual(False, settings.wait_for_async_resource_creation)
        self.assertEqual(True, settings.ignore_decoding_failures)
        self.assertEqual('0.0.0', settings.version)
        code1 = re.compile('400')
        code2 = re.compile('2.4')
        code3 = re.compile('3.+')
        code4 = re.compile('404')
        code5 = re.compile('500')
        self.assertEqual([code1, code2, code3], settings.custom_bug_codes)
        self.assertEqual([code4, code5], settings.custom_non_bug_codes)