Esempio n. 1
0
// NewFuzz creates a fuzz URL flow with defined components and links.
func NewFuzz(configuration *configuration.Configuration) *Fuzz {
	graph := new(flow.Graph)
	graph.InitGraphState()

	entryProducer := httpmethod.NewEntryProducer(configuration)
	entryProducer.Component.Mode = flow.ComponentModePool
	entryProducer.Component.PoolSize = 8

	urlChecker := httprequest.NewURLChecker(configuration)
	urlChecker.Component.Mode = flow.ComponentModePool
	urlChecker.Component.PoolSize = uint8(configuration.WorkersNumber())

	resultBroadcaster := broadcaster.NewResultBroadcaster(configuration)
	resultBroadcaster.Component.Mode = flow.ComponentModePool
	resultBroadcaster.Component.PoolSize = 1

	printer := printer.NewPrinter()
	printer.Component.Mode = flow.ComponentModePool
	printer.Component.PoolSize = 1

	fileWriter := filewriter.NewFileWriter(configuration)
	printer.Component.Mode = flow.ComponentModePool
	printer.Component.PoolSize = 1

	graph.Add(entryProducer, "entryProducer")
	graph.Add(urlChecker, "urlChecker")
	graph.Add(resultBroadcaster, "resultBroadcaster")
	graph.Add(printer, "printer")
	graph.Add(fileWriter, "fileWriter")
	graph.Connect("entryProducer", "Entry", "urlChecker", "Entry")
	graph.Connect("urlChecker", "FoundEntry", "resultBroadcaster", "FoundEntry")
	graph.Connect("resultBroadcaster", "Printer", "printer", "FoundEntry")
	graph.Connect("resultBroadcaster", "FileWriter", "fileWriter", "FoundEntry")
	graph.MapInPort("In", "entryProducer", "RelativeURL")

	var input = make(chan string, fuzzNetworkInputSize)
	graph.SetInPort("In", input)

	return &Fuzz{graph: graph, input: input, configuration: configuration}
}