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

     1  package siafile
     2  
     3  import (
     4  	"fmt"
     5  	"math"
     6  	"os"
     7  	"path/filepath"
     8  
     9  	"gitlab.com/NebulousLabs/errors"
    10  	"gitlab.com/NebulousLabs/fastrand"
    11  	"gitlab.com/SiaPrime/SiaPrime/modules"
    12  	"gitlab.com/SiaPrime/writeaheadlog"
    13  )
    14  
    15  // createLinkedBlankSiafile creates 2 SiaFiles which use the same SiaFile to
    16  // store combined chunks. They reside within 'dir'.
    17  func createLinkedBlankSiafiles(dir string) (*SiaFile, *SiaFile, error) {
    18  	// Create a wal.
    19  	walFilePath := filepath.Join(dir, "writeaheadlog.wal")
    20  	_, wal, err := writeaheadlog.New(walFilePath)
    21  	if err != nil {
    22  		return nil, nil, err
    23  	}
    24  	// Get parameters for the files.
    25  	_, _, source, rc, sk, fileSize, numChunks, fileMode := newTestFileParams(1, true)
    26  	// Create a SiaFile for partial chunks.
    27  	var partialsSiaFile *SiaFile
    28  	partialsSiaPath := modules.CombinedSiaFilePath(rc)
    29  	partialsSiaFilePath := partialsSiaPath.SiaPartialsFileSysPath(dir)
    30  	if _, err = os.Stat(partialsSiaFilePath); os.IsNotExist(err) {
    31  		partialsSiaFile, err = New(partialsSiaFilePath, "", wal, rc, sk, 0, fileMode, nil, false)
    32  	} else {
    33  		partialsSiaFile, err = LoadSiaFile(partialsSiaFilePath, wal)
    34  	}
    35  	if err != nil {
    36  		return nil, nil, fmt.Errorf("failed to load partialsSiaFile: %v", err)
    37  	}
    38  	partialsEntry := &SiaFileSetEntry{
    39  		dummyEntry(partialsSiaFile),
    40  		uint64(fastrand.Intn(math.MaxInt32)),
    41  	}
    42  	// Create the files.
    43  	sf1Path := filepath.Join(dir, "sf1"+modules.SiaFileExtension)
    44  	sf2Path := filepath.Join(dir, "sf2"+modules.SiaFileExtension)
    45  	sf1, err := New(sf1Path, source, wal, rc, sk, fileSize, fileMode, partialsEntry, false)
    46  	if err != nil {
    47  		return nil, nil, err
    48  	}
    49  	sf2, err := New(sf2Path, source, wal, rc, sk, fileSize, fileMode, partialsEntry, false)
    50  	if err != nil {
    51  		return nil, nil, err
    52  	}
    53  	// Check that the number of chunks in the files are correct.
    54  	if numChunks >= 0 && sf1.numChunks != numChunks {
    55  		return nil, nil, errors.New("createLinkedBlankSiafiles didn't create the expected number of chunks")
    56  	}
    57  	if numChunks >= 0 && sf2.numChunks != numChunks {
    58  		return nil, nil, errors.New("createLinkedBlankSiafiles didn't create the expected number of chunks")
    59  	}
    60  	if partialsSiaFile.numChunks != 0 {
    61  		return nil, nil, errors.New("createLinkedBlankSiafiles didn't create an empty partialsSiaFile")
    62  	}
    63  	return sf1, sf2, nil
    64  }