gitlab.com/SkynetLabs/skyd@v1.6.9/skymodules/siadconfig_test.go (about)

     1  package skymodules
     2  
     3  import (
     4  	"fmt"
     5  	"os"
     6  	"path/filepath"
     7  	"testing"
     8  
     9  	"gitlab.com/SkynetLabs/skyd/build"
    10  	"go.sia.tech/siad/persist"
    11  )
    12  
    13  // TestSiadConfigPersistCompat confirms that the compat code for the writebps
    14  // json tag update performs as expected
    15  func TestSiadConfigPersistCompat(t *testing.T) {
    16  	if testing.Short() {
    17  		t.SkipNow()
    18  	}
    19  	t.Parallel()
    20  
    21  	// Create siadconfig
    22  	testDir := build.TempDir("siadconfig", t.Name())
    23  	if err := os.MkdirAll(testDir, persist.DefaultDiskPermissionsTest); err != nil {
    24  		t.Fatal(err)
    25  	}
    26  	path := filepath.Join(testDir, ConfigName)
    27  	sc, err := NewConfig(path)
    28  	if err != nil {
    29  		t.Fatal(err)
    30  	}
    31  
    32  	// Test setting deprecated field only
    33  	err = saveLoadCheck(sc, 0, 100)
    34  	if err != nil {
    35  		t.Fatal(err)
    36  	}
    37  
    38  	// Test setting both fields
    39  	err = saveLoadCheck(sc, 150, 250)
    40  	if err != nil {
    41  		t.Fatal(err)
    42  	}
    43  
    44  	// Confirm that set limits sets the new field and not the old field
    45  	err = sc.SetRatelimit(0, 200)
    46  	if err != nil {
    47  		t.Fatal(err)
    48  	}
    49  	if err = checkWriteBPS(sc, 200); err != nil {
    50  		t.Fatal(err)
    51  	}
    52  
    53  	// Calling Load should have no impact now
    54  	err = sc.load(path)
    55  	if err != nil {
    56  		t.Fatal(err)
    57  	}
    58  	if err = checkWriteBPS(sc, 200); err != nil {
    59  		t.Fatal(err)
    60  	}
    61  }
    62  
    63  // saveLoadCheck is a helper to check saving and loading the siad config file
    64  // and verifying the correct values for the WriteBPS fields
    65  func saveLoadCheck(sc *SiadConfig, writeBPS, writeBPSDeprepacted int64) error {
    66  	// Set both fields
    67  	sc.WriteBPSDeprecated = writeBPSDeprepacted
    68  	sc.WriteBPS = writeBPS
    69  
    70  	// Save
    71  	err := sc.save()
    72  	if err != nil {
    73  		return err
    74  	}
    75  
    76  	// Load
    77  	err = sc.load(sc.path)
    78  	if err != nil {
    79  		return err
    80  	}
    81  
    82  	// Confirm that the new field is set and the old field is zeroed out
    83  	expectedValue := writeBPS
    84  	if expectedValue == 0 {
    85  		expectedValue = writeBPSDeprepacted
    86  	}
    87  	return checkWriteBPS(sc, expectedValue)
    88  }
    89  
    90  // checkWriteBPS is a helper to check the WriteBPS and WriteBPSDeprecated fields
    91  func checkWriteBPS(sc *SiadConfig, writeBPS int64) error {
    92  	if sc.WriteBPS != writeBPS {
    93  		return fmt.Errorf("Expected WriteBPS to be set to %v on load but got: %v", writeBPS, sc.WriteBPS)
    94  	}
    95  	if sc.WriteBPSDeprecated != 0 {
    96  		return fmt.Errorf("Expected WriteBPSDeprecated to be reset to 0 but got: %v", sc.WriteBPSDeprecated)
    97  	}
    98  	return nil
    99  }