gitlab.com/SiaPrime/SiaPrime@v1.4.1/modules/renter/stuckstack_test.go (about)

     1  package renter
     2  
     3  import (
     4  	"strconv"
     5  	"testing"
     6  
     7  	"gitlab.com/SiaPrime/SiaPrime/modules"
     8  )
     9  
    10  // TestStuckStack probes the implementation of the stuck stack
    11  func TestStuckStack(t *testing.T) {
    12  	stack := stuckStack{
    13  		stack:    make([]modules.SiaPath, 0, maxSuccessfulStuckRepairFiles),
    14  		siaPaths: make(map[modules.SiaPath]struct{}),
    15  	}
    16  
    17  	// Check stack initialized as expected
    18  	if stack.managedLen() != 0 {
    19  		t.Fatal("Expected length of 0 got", stack.managedLen())
    20  	}
    21  
    22  	// Create some SiaPaths to add to the stack
    23  	sp1, _ := modules.NewSiaPath("siaPath1")
    24  	sp2, _ := modules.NewSiaPath("siaPath2")
    25  
    26  	// Test pushing 1 siapath onto stack
    27  	stack.managedPush(sp1)
    28  	if stack.managedLen() != 1 {
    29  		t.Fatal("Expected length of 1 got", stack.managedLen())
    30  	}
    31  	siaPath := stack.managedPop()
    32  	if !siaPath.Equals(sp1) {
    33  		t.Log("siaPath:", siaPath)
    34  		t.Log("sp1:", sp1)
    35  		t.Fatal("SiaPaths not equal")
    36  	}
    37  	if stack.managedLen() != 0 {
    38  		t.Fatal("Expected length of 0 got", stack.managedLen())
    39  	}
    40  
    41  	// Test adding multiple siaPaths to stack
    42  	stack.managedPush(sp1)
    43  	stack.managedPush(sp2)
    44  	if stack.managedLen() != 2 {
    45  		t.Fatal("Expected length of 2 got", stack.managedLen())
    46  	}
    47  	// Last siapath added should be returned
    48  	siaPath = stack.managedPop()
    49  	if !siaPath.Equals(sp2) {
    50  		t.Log("siaPath:", siaPath)
    51  		t.Log("sp2:", sp2)
    52  		t.Fatal("SiaPaths not equal")
    53  	}
    54  
    55  	// Pushing first siapath again should result in moving it to the top
    56  	stack.managedPush(sp2)
    57  	stack.managedPush(sp1)
    58  	if stack.managedLen() != 2 {
    59  		t.Fatal("Expected length of 2 got", stack.managedLen())
    60  	}
    61  	siaPath = stack.managedPop()
    62  	if !siaPath.Equals(sp1) {
    63  		t.Log("siaPath:", siaPath)
    64  		t.Log("sp1:", sp1)
    65  		t.Fatal("SiaPaths not equal")
    66  	}
    67  
    68  	// Length should never exceed maxSuccessfulStuckRepairFiles
    69  	for i := 0; i < 2*maxSuccessfulStuckRepairFiles; i++ {
    70  		sp, _ := modules.NewSiaPath(strconv.Itoa(i))
    71  		stack.managedPush(sp)
    72  		if stack.managedLen() > maxSuccessfulStuckRepairFiles {
    73  			t.Fatalf("Length exceeded %v, %v", maxSuccessfulStuckRepairFiles, stack.managedLen())
    74  		}
    75  	}
    76  }