gitlab.com/SkynetLabs/skyd@v1.6.9/cmd/skyc/rentercmd_test.go (about)

     1  package main
     2  
     3  import (
     4  	"fmt"
     5  	"testing"
     6  
     7  	"gitlab.com/SkynetLabs/skyd/node/api"
     8  	"gitlab.com/SkynetLabs/skyd/skymodules"
     9  	"go.sia.tech/siad/crypto"
    10  	"go.sia.tech/siad/types"
    11  )
    12  
    13  // TestFilePercentageBreakdown tests the filePercentageBreakdown function
    14  func TestFilePercentageBreakdown(t *testing.T) {
    15  	// Test for Panics
    16  	//
    17  	// Test with empty slice
    18  	var dirs []directoryInfo
    19  	fileHealthBreakdown(dirs, false)
    20  	// Test with empty struct
    21  	dirs = append(dirs, directoryInfo{})
    22  	fileHealthBreakdown(dirs, false)
    23  
    24  	// Test basic directory info
    25  	dir := skymodules.DirectoryInfo{AggregateNumFiles: 7}
    26  	f1 := skymodules.FileInfo{MaxHealthPercent: 100}
    27  	f2 := skymodules.FileInfo{MaxHealthPercent: 80}
    28  	f3 := skymodules.FileInfo{MaxHealthPercent: 60, Stuck: true}
    29  	f4 := skymodules.FileInfo{MaxHealthPercent: 30}
    30  	f5 := skymodules.FileInfo{MaxHealthPercent: 10}
    31  	f6 := skymodules.FileInfo{MaxHealthPercent: 0, OnDisk: true}
    32  	f7 := skymodules.FileInfo{MaxHealth: 1.1}
    33  	f8 := skymodules.FileInfo{MaxHealth: 1.1, Lost: true}
    34  	files := []skymodules.FileInfo{f1, f2, f3, f4, f5, f6, f7, f8}
    35  	dirs[0] = directoryInfo{
    36  		dir:   dir,
    37  		files: files,
    38  	}
    39  	percentages, numStuck, err := fileHealthBreakdown(dirs, false)
    40  	if err != nil {
    41  		t.Fatal(err)
    42  	}
    43  
    44  	// Define helper check function
    45  	checkValue := func(expected, actual float64) error {
    46  		if expected != actual {
    47  			return fmt.Errorf("Expected %v, actual %v", expected, actual)
    48  		}
    49  		return nil
    50  	}
    51  
    52  	// Check values
    53  	if numStuck != 1 {
    54  		t.Errorf("Expected 1 stuck file but got %v", numStuck)
    55  	}
    56  	expected := float64(100) * float64(1) / float64(8)
    57  	if err := checkValue(expected, percentages[0]); err != nil {
    58  		t.Log("Full Health")
    59  		t.Error(err)
    60  	}
    61  	if err := checkValue(expected, percentages[1]); err != nil {
    62  		t.Log("Greater than 75")
    63  		t.Error(err)
    64  	}
    65  	if err := checkValue(expected, percentages[2]); err != nil {
    66  		t.Log("Greater than 50")
    67  		t.Error(err)
    68  	}
    69  	if err := checkValue(expected, percentages[3]); err != nil {
    70  		t.Log("Greater than 25")
    71  		t.Error(err)
    72  	}
    73  	if err := checkValue(expected, percentages[5]); err != nil {
    74  		t.Log("Lost")
    75  		t.Error(err)
    76  	}
    77  	expected = float64(100) * float64(2) / float64(8)
    78  	if err := checkValue(expected, percentages[4]); err != nil {
    79  		t.Log("Greater than 0")
    80  		t.Error(err)
    81  	}
    82  }
    83  
    84  // TestContractInfo is a regression test to check for negative currency panics
    85  func TestContractInfo(t *testing.T) {
    86  	contract := api.RenterContract{
    87  		ID:        fileContractID(),
    88  		Fees:      types.NewCurrency64(100),
    89  		TotalCost: types.ZeroCurrency,
    90  	}
    91  	printContractInfo(contract.ID.String(), []api.RenterContract{contract})
    92  }
    93  
    94  // fileContractID is a helper function for generating a FileContractID for
    95  // testing
    96  func fileContractID() types.FileContractID {
    97  	var id types.FileContractID
    98  	h := crypto.NewHash()
    99  	h.Write(types.SpecifierFileContract[:])
   100  	h.Sum(id[:0])
   101  	return id
   102  }