コード例 #1
0
ファイル: test_crashdata.py プロジェクト: xqrt/ffw
    def test_writeread(self):
        config = self._getConfig()
        testutils.prepareFs(config)

        # get some example corpus
        corpusData = self._getCorpusData(config)

        # assume this corpus crashed the server
        crashData = CrashData(config, corpusData)
        crashData.setCrashInformation(asanOutput="meh")

        # write it
        crashData.writeToFile()

        # try to read it again
        crashData2 = CrashData(config, filename=crashData.filename)
        crashData2.readFromFile()

        # test an example of each layer
        self.assertEqual(
            crashData.asanOutput,
            crashData2.asanOutput)
        self.assertEqual(
            crashData.corpusData.filename,
            crashData2.corpusData.filename)
        self.assertEqual(
            crashData.corpusData.networkData.messages[0]['data'],
            crashData2.corpusData.networkData.messages[0]['data'],
        )
コード例 #2
0
ファイル: test_honggcorpusmanager.py プロジェクト: xqrt/ffw
    def test_loadfilesdep(self):
        """Load files, and test its dependencies (parent)."""
        config = self._getConfig()
        testutils.prepareFs(config)

        # write an corpus file
        corpusData = self._getCorpusData(config)
        corpusData.writeToFile()

        # wrie a fuzzed file
        mutatorInterface = MutatorInterface(config, 0)
        corpusDataFuzzed = mutatorInterface.fuzz(corpusData)
        corpusDataFuzzed.writeToFile()

        # load all corpus files
        honggCorpusManager = HonggCorpusManager(config)
        honggCorpusManager.loadCorpusFiles()
        self.assertEqual(honggCorpusManager.getCorpusCount(), 2)

        for corpus in honggCorpusManager:
            if corpus.getParentCorpus() is not None:
                self.assertNotEqual(corpus.filename, 'data0')
                self.assertEqual(corpus.getParentCorpus().filename, 'data0')
            else:
                # this is the main
                self.assertEqual(corpus.filename, 'data0')
コード例 #3
0
ファイル: test_honggcorpusmanager.py プロジェクト: xqrt/ffw
    def test_getNotified(self):
        """Check if we get notified (and can load) new files."""
        config = self._getConfig()
        testutils.prepareFs(config)

        # load all corpus - should be empty
        honggCorpusManager = HonggCorpusManager(config)
        honggCorpusManager.loadCorpusFiles()
        self.assertEqual(honggCorpusManager.getCorpusCount(), 0)

        # start it up
        honggCorpusManager.startWatch()

        # write file
        corpusData = self._getCorpusData(config)
        corpusData.seed = 42
        corpusData.writeToFile()

        # check if we detect the file write
        honggCorpusManager.checkForNewFiles()
        self.assertEqual(honggCorpusManager.getCorpusCount(), 1)

        # some more sanity checks
        corpusData = honggCorpusManager.corpus[0]
        self.assertNotEqual(corpusData.seed, None)
        self.assertTrue(corpusData.isExternal)
        self.assertFalse(corpusData.processed)
コード例 #4
0
ファイル: test_honggcorpusmanager.py プロジェクト: xqrt/ffw
    def test_doCreate(self):
        """Test if wo correctly add new corpus we found ourselfs."""
        config = self._getConfig()
        testutils.prepareFs(config)

        # load all corpus - should be empty
        honggCorpusManager = HonggCorpusManager(config)
        honggCorpusManager.loadCorpusFiles()
        self.assertEqual(honggCorpusManager.getCorpusCount(), 0)

        # start it up
        honggCorpusManager.startWatch()

        # imitate fuzzer which has been detected new corpus
        # we add it here, but it should not generate a notification
        # (because we already have it, but still watching for files)
        corpusData = self._getCorpusData(config)
        corpusData.seed = 42
        honggCorpusManager.addNewCorpusData(corpusData)

        self.assertEqual(honggCorpusManager.getCorpusCount(), 1)
        honggCorpusManager.checkForNewFiles()
        # should be still 1
        self.assertEqual(honggCorpusManager.getCorpusCount(), 1)

        corpusData = honggCorpusManager.corpus[0]
        self.assertFalse(corpusData.isExternal)
        self.assertTrue(corpusData.processed)
コード例 #5
0
ファイル: test_dictionaryfuzzer.py プロジェクト: xqrt/ffw
    def test_dictionaryfuzzer(self):
        config = self._getConfig()
        testutils.prepareFs(config)
        config['mutator'] = ['Dictionary']
        self._writeDictionary(config)
        self.assertTrue(testMutatorConfig(config, 'basic'))
        mutatorInterface = MutatorInterface(config, 0)

        corpusData = self._getCorpusData(config)

        fuzzedCorpusData1 = mutatorInterface.fuzz(corpusData)
        fuzzedCorpusData2 = mutatorInterface.fuzz(corpusData)
        fuzzedCorpusData3 = mutatorInterface.fuzz(corpusData)
        fuzzedCorpusData4 = mutatorInterface.fuzz(corpusData)
        fuzzedCorpusData5 = mutatorInterface.fuzz(corpusData)

        #print("1: " + fuzzedCorpusData1.networkData.messages[0]['data'])
        self.assertEqual(fuzzedCorpusData1.networkData.messages[0]['data'],
                         'msg 1 cli test2')
        self.assertIsNotNone(fuzzedCorpusData1.networkData.fuzzMsgIdx)
        self.assertIsNotNone(fuzzedCorpusData1.networkData.fuzzMsgChoice)
        self.assertEqual(fuzzedCorpusData2.networkData.messages[1]['data'],
                         'msg 1 cli test2 test2 test2')
        self.assertEqual(fuzzedCorpusData3.networkData.messages[1]['data'],
                         'msg 1 cli test1 test1 test2')
        self.assertEqual(fuzzedCorpusData4.networkData.messages[1]['data'],
                         'msg 1 cli test1 test2 test1')
        self.assertIsNone(fuzzedCorpusData5)
コード例 #6
0
ファイル: test_corpusfile.py プロジェクト: xqrt/ffw
    def test_missingclimsg(self):
        """Test fail-on missing cli message (need one to fuzz)."""
        config = self._getConfig()
        testutils.prepareFs(config)
        networkData = self._getNetworkDataNoCli(config)
        filename = "test.pickle"

        corpusData1 = CorpusData(config, filename, networkData)
        corpusData1.writeToFile()

        corpusData2 = CorpusData(config, filename)
        self.assertRaises(ValueError, corpusData2.readFromFile)
コード例 #7
0
ファイル: test_honggcorpusmanager.py プロジェクト: xqrt/ffw
    def test_loadfiles(self):
        """Test if we can load the initial corpus."""
        config = self._getConfig()
        testutils.prepareFs(config)

        # write an corpus file
        corpusData = self._getCorpusData(config)
        corpusData.writeToFile()

        # load all corpus files
        honggCorpusManager = HonggCorpusManager(config)
        honggCorpusManager.loadCorpusFiles()
        self.assertEqual(honggCorpusManager.getCorpusCount(), 1)
コード例 #8
0
    def test_loadfiles(self):
        """Test if we can load the initial corpus."""
        config = self._getConfig()
        testutils.prepareFs(config)

        # write an crashdata file
        crashData = self._getCrashData(config)
        crashData.writeToFile()

        # load all corpus files
        crashManager = CrashManager(config)
        crashManager.loadCrashFiles()
        self.assertEqual(crashManager.getCrashCount(), 1)
コード例 #9
0
ファイル: test_corpusfile.py プロジェクト: xqrt/ffw
    def test_readwrite(self):
        """Test if writing+reading file works."""
        config = self._getConfig()
        testutils.prepareFs(config)
        networkData = self._getNetworkData(config)
        filename = "test.pickle"

        corpusData1 = CorpusData(config, filename, networkData)
        corpusData1.writeToFile()

        self.assertTrue(os.path.isfile(config['input_dir'] + "/test.pickle"))

        corpusData2 = CorpusData(config, filename)
        corpusData2.readFromFile()

        self.assertEqual(corpusData1.networkData.messages[0]['data'],
                         corpusData2.networkData.messages[0]['data'])
コード例 #10
0
ファイル: test_dictionaryfuzzer.py プロジェクト: xqrt/ffw
    def test_dictionaryfuzzerWithRadamsa(self):
        config = self._getConfig()
        testutils.prepareFs(config)
        config['mutator'] = ['Dictionary', 'Radamsa']
        self._writeDictionary(config)
        self.assertTrue(testMutatorConfig(config, 'basic'))
        mutatorInterface = MutatorInterface(config, 0)

        corpusData = self._getCorpusData(config)

        n = 0
        stats = {
            'Dictionary': 0,
            'Radamsa': 0,
        }
        while n < 20:
            fuzzedCorpusData = mutatorInterface.fuzz(corpusData)
            stats[fuzzedCorpusData.fuzzer] += 1
            n += 1

        self.assertEqual(stats['Dictionary'], 4)
        self.assertEqual(stats['Radamsa'], 16)
コード例 #11
0
ファイル: test_corpusfile.py プロジェクト: xqrt/ffw
    def test_fuzz(self):
        """Try to fuzz and check if it worked."""
        config = self._getConfig()
        testutils.prepareFs(config)
        networkData = self._getNetworkData(config)
        fuzzer = MockupFuzzer(config)
        filename = "test.pickle"

        corpusDataParent = CorpusData(config, filename, networkData)
        corpusDataChild = fuzzer.fuzz(corpusDataParent)
        corpusDataChild.writeToFile()

        self.assertTrue(
            os.path.isfile(config['input_dir'] + "/test.1_0.pickle"))

        # note that we only have one cli message, which is at index 0
        self.assertEqual(corpusDataChild.networkData.fuzzMsgIdx, 0)
        self.assertNotEqual(corpusDataParent.networkData.messages[0]['data'],
                            corpusDataChild.networkData.messages[0]['data'])

        self.assertNotEqual(corpusDataChild.filename,
                            corpusDataChild.parentFilename)
        self.assertEqual(corpusDataChild._parent, corpusDataParent)
コード例 #12
0
ファイル: test_verifydata.py プロジェクト: xqrt/ffw
    def test_writeread(self):
        config = self._getConfig()
        testutils.prepareFs(config)

        # get some example verifyData
        verifyData = self._getVerifyData(config)

        # write it
        verifyData.writeToFile()

        # try to read it again
        verifyData2 = VerifyData(config, filename=verifyData.filename)
        verifyData2.readFromFile()

        # test an example of each layer
        self.assertEqual(verifyData.faultaddress, verifyData2.faultaddress)
        self.assertEqual(verifyData.crashData.asanOutput,
                         verifyData2.crashData.asanOutput)
        self.assertEqual(verifyData.crashData.corpusData.seed,
                         verifyData2.crashData.corpusData.seed)
        self.assertEqual(
            verifyData.crashData.corpusData.networkData.messages[0]['data'],
            verifyData2.crashData.corpusData.networkData.messages[0]['data'],
        )