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'], )
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')
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)
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)
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)
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)
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)
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)
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'])
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)
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)
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'], )