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

     1  package renter
     2  
     3  import (
     4  	"bytes"
     5  	"context"
     6  	"testing"
     7  	"time"
     8  
     9  	"github.com/tus/tusd/pkg/handler"
    10  	"gitlab.com/NebulousLabs/fastrand"
    11  	"go.sia.tech/siad/modules"
    12  )
    13  
    14  // TestWriteChunkSetLastWrite is a unit test that confirms lastWrite is updated
    15  // correctly on uploads.
    16  func TestWriteChunkSetLastWrite(t *testing.T) {
    17  	if testing.Short() {
    18  		t.SkipNow()
    19  	}
    20  	t.Parallel()
    21  
    22  	wt, err := newWorkerTester(t.Name())
    23  	if err != nil {
    24  		t.Fatal(err)
    25  	}
    26  	defer func() {
    27  		if err := wt.Close(); err != nil {
    28  			t.Fatal(err)
    29  		}
    30  	}()
    31  	r := wt.rt.renter
    32  	tu := r.staticSkynetTUSUploader
    33  
    34  	// Small upload.
    35  	info := handler.FileInfo{
    36  		MetaData: make(handler.MetaData),
    37  		Size:     1,
    38  	}
    39  	upload, err := tu.NewUpload(context.Background(), info)
    40  	if err != nil {
    41  		t.Fatal(err)
    42  	}
    43  	stu := upload.(*ongoingTUSUpload)
    44  	imu := stu.staticUpload.(*skynetInMemoryUpload)
    45  	if imu.lastWrite.IsZero() {
    46  		t.Fatal("lastWrite wasn't initialized")
    47  	}
    48  	start := time.Now()
    49  	n, err := upload.WriteChunk(context.Background(), 0, bytes.NewReader(fastrand.Bytes(int(info.Size))))
    50  	if err != nil {
    51  		t.Fatal(err)
    52  	}
    53  	if n != info.Size {
    54  		t.Fatal("wrong n", n)
    55  	}
    56  	if start.After(imu.lastWrite) {
    57  		t.Fatal("last write wasn't updated", start, imu.lastWrite)
    58  	}
    59  
    60  	// Large upload.
    61  	info = handler.FileInfo{
    62  		MetaData: make(handler.MetaData),
    63  		Size:     int64(modules.SectorSize) + 1,
    64  	}
    65  	upload, err = tu.NewUpload(context.Background(), info)
    66  	if err != nil {
    67  		t.Fatal(err)
    68  	}
    69  	stu = upload.(*ongoingTUSUpload)
    70  	imu = stu.staticUpload.(*skynetInMemoryUpload)
    71  	if imu.lastWrite.IsZero() {
    72  		t.Fatal("lastWrite wasn't initialized")
    73  	}
    74  	start = time.Now()
    75  	n, err = upload.WriteChunk(context.Background(), 0, bytes.NewReader(fastrand.Bytes(int(info.Size))))
    76  	if err != nil {
    77  		t.Fatal(err)
    78  	}
    79  	if n != info.Size {
    80  		t.Fatal("wrong n", n)
    81  	}
    82  	if start.After(imu.lastWrite) {
    83  		t.Fatal("last write wasn't updated", start, imu.lastWrite)
    84  	}
    85  }