github.com/NebulousLabs/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  }