github.com/ZuluSpl0it/Sia@v1.3.7/siatest/renter/hostdb_test.go (about) 1 package renter 2 3 import ( 4 "fmt" 5 "path/filepath" 6 "testing" 7 "time" 8 9 "github.com/NebulousLabs/Sia/build" 10 "github.com/NebulousLabs/Sia/node" 11 "github.com/NebulousLabs/Sia/siatest" 12 ) 13 14 // TestInitialScanComplete tests if the initialScanComplete field is set 15 // correctly. 16 func TestInitialScanComplete(t *testing.T) { 17 if testing.Short() { 18 t.SkipNow() 19 } 20 21 // Get a directory for testing. 22 testDir, err := siatest.TestDir(t.Name()) 23 if err != nil { 24 t.Fatal(err) 25 } 26 testDir = filepath.Join(testDir, t.Name()) 27 28 // Create a group. The renter should block the scanning thread using a 29 // dependency. 30 deps := &dependencyBlockScan{} 31 renterTemplate := node.Renter(filepath.Join(testDir, "renter")) 32 renterTemplate.SkipSetAllowance = true 33 renterTemplate.SkipHostDiscovery = true 34 renterTemplate.HostDBDeps = deps 35 36 tg, err := siatest.NewGroup(renterTemplate, node.Host(filepath.Join(testDir, "host")), 37 siatest.Miner(filepath.Join(testDir, "miner"))) 38 if err != nil { 39 t.Fatal("Failed to create group: ", err) 40 } 41 defer func() { 42 deps.Scan() 43 if err := tg.Close(); err != nil { 44 t.Fatal(err) 45 } 46 }() 47 48 // The renter should have 1 offline host in its database and 49 // initialScanComplete should be false. 50 renter := tg.Renters()[0] 51 hdag, err := renter.HostDbAllGet() 52 if err != nil { 53 t.Fatal(err) 54 } 55 hdg, err := renter.HostDbGet() 56 if err != nil { 57 t.Fatal(err) 58 } 59 if len(hdag.Hosts) != 1 { 60 t.Fatalf("HostDB should have 1 host but had %v", len(hdag.Hosts)) 61 } 62 if hdag.Hosts[0].ScanHistory.Len() > 0 { 63 t.Fatalf("Host should have 0 scans but had %v", hdag.Hosts[0].ScanHistory.Len()) 64 } 65 if hdg.InitialScanComplete { 66 t.Fatal("Initial scan is complete even though it shouldn't") 67 } 68 69 deps.Scan() 70 err = build.Retry(600, 100*time.Millisecond, func() error { 71 hdag, err := renter.HostDbAllGet() 72 if err != nil { 73 t.Fatal(err) 74 } 75 hdg, err := renter.HostDbGet() 76 if err != nil { 77 t.Fatal(err) 78 } 79 if !hdg.InitialScanComplete { 80 return fmt.Errorf("Initial scan is not complete even though it should be") 81 } 82 if len(hdag.Hosts) != 1 { 83 return fmt.Errorf("HostDB should have 1 host but had %v", len(hdag.Hosts)) 84 } 85 if hdag.Hosts[0].ScanHistory.Len() == 0 { 86 return fmt.Errorf("Host should have >0 scans but had %v", hdag.Hosts[0].ScanHistory.Len()) 87 } 88 return nil 89 }) 90 if err != nil { 91 t.Fatal(err) 92 } 93 }