// Check if the revision field avoid data concurrency. Is better to fail than to store the // wrong state func scanConcurrency(scanDAO dao.ScanDAO) { scan := newScan() // Create scan if err := scanDAO.Save(&scan); err != nil { utils.Fatalln("Couldn't save scan in database", err) } scan1, err := scanDAO.FindByStartedAt(scan.StartedAt) if err != nil { utils.Fatalln("Couldn't find created scan in database", err) } scan2, err := scanDAO.FindByStartedAt(scan.StartedAt) if err != nil { utils.Fatalln("Couldn't find created scan in database", err) } if err := scanDAO.Save(&scan1); err != nil { utils.Fatalln("Couldn't save scan in database", err) } if err := scanDAO.Save(&scan2); err == nil { utils.Fatalln("Not controlling scan concurrency", nil) } // Remove scan if err := scanDAO.RemoveByStartedAt(scan.StartedAt); err != nil { utils.Fatalln("Error while trying to remove a scan", err) } }
func (i *Scan) Before(w http.ResponseWriter, r *http.Request) { date, err := time.Parse(time.RFC3339Nano, strings.ToUpper(i.scanHandler.GetStartedAt())) if err != nil { if err := i.scanHandler.MessageResponse("invalid-uri", r.URL.RequestURI()); err == nil { w.WriteHeader(http.StatusBadRequest) } else { log.Println("Error while writing response. Details:", err) w.WriteHeader(http.StatusInternalServerError) } return } scanDAO := dao.ScanDAO{ Database: i.scanHandler.GetDatabase(), } scan, err := scanDAO.FindByStartedAt(date) if err != nil { w.WriteHeader(http.StatusNotFound) return } i.scanHandler.SetScan(scan) }
func scanStatistics(scanDAO dao.ScanDAO) { scan := newScan() scan.NameserverStatistics = map[string]uint64{ "OK": 40, "TIMEOUT": 10, } scan.DSStatistics = map[string]uint64{ "OK": 8, "DNSERR": 2, } // Create scan if err := scanDAO.Save(&scan); err != nil { utils.Fatalln("Couldn't save scan in database", err) } var err error scan, err = scanDAO.FindByStartedAt(scan.StartedAt) if err != nil { utils.Fatalln("Couldn't find created scan in database", err) } if len(scan.NameserverStatistics) != 2 || scan.NameserverStatistics["OK"] != 40 || scan.NameserverStatistics["TIMEOUT"] != 10 { utils.Fatalln("Not retrieving nameserver statistics correctly", nil) } if len(scan.DSStatistics) != 2 || scan.DSStatistics["OK"] != 8 || scan.DSStatistics["DNSERR"] != 2 { utils.Fatalln("Not retrieving DS statistics correctly", nil) } if err := scanDAO.RemoveAll(); err != nil { utils.Fatalln("Error removing scans from database", err) } }
// Test all phases of the scan life cycle func scanLifeCycle(scanDAO dao.ScanDAO) { scan := newScan() // Create scan if err := scanDAO.Save(&scan); err != nil { utils.Fatalln("Couldn't save scan in database", err) } // Search and compare created scan if scanRetrieved, err := scanDAO.FindByStartedAt(scan.StartedAt); err != nil { utils.Fatalln("Couldn't find created scan in database", err) } else if !utils.CompareScan(scan, scanRetrieved) { utils.Fatalln("Scan created in being persisted wrongly", nil) } // Update scan scan.DomainsScanned = 100 if err := scanDAO.Save(&scan); err != nil { utils.Fatalln("Couldn't save scan in database", err) } // Search and compare updated scan if scanRetrieved, err := scanDAO.FindByStartedAt(scan.StartedAt); err != nil { utils.Fatalln("Couldn't find updated scan in database", err) } else if !utils.CompareScan(scan, scanRetrieved) { utils.Fatalln("Scan updated in being persisted wrongly", nil) } // Remove scan if err := scanDAO.RemoveByStartedAt(scan.StartedAt); err != nil { utils.Fatalln("Error while trying to remove a scan", err) } // Check removal if _, err := scanDAO.FindByStartedAt(scan.StartedAt); err == nil { utils.Fatalln("Scan was not removed from database", nil) } }