github.com/cs3org/reva/v2@v2.27.7/pkg/storage/utils/decomposedfs/upload/store_test.go (about)

     1  package upload
     2  
     3  import (
     4  	"context"
     5  	"os"
     6  	"testing"
     7  
     8  	userv1beta1 "github.com/cs3org/go-cs3apis/cs3/identity/user/v1beta1"
     9  	providerv1beta1 "github.com/cs3org/go-cs3apis/cs3/storage/provider/v1beta1"
    10  	"github.com/cs3org/reva/v2/pkg/errtypes"
    11  	"github.com/cs3org/reva/v2/pkg/storage/cache"
    12  	"github.com/cs3org/reva/v2/pkg/storage/utils/decomposedfs/aspects"
    13  	"github.com/cs3org/reva/v2/pkg/storage/utils/decomposedfs/lookup"
    14  	"github.com/cs3org/reva/v2/pkg/storage/utils/decomposedfs/metadata"
    15  	"github.com/cs3org/reva/v2/pkg/storage/utils/decomposedfs/node"
    16  	"github.com/cs3org/reva/v2/pkg/storage/utils/decomposedfs/options"
    17  	"github.com/cs3org/reva/v2/pkg/storage/utils/decomposedfs/timemanager"
    18  	"github.com/cs3org/reva/v2/pkg/storage/utils/decomposedfs/tree"
    19  	"github.com/rs/zerolog"
    20  )
    21  
    22  // TestInitNewNode calls greetings.initNewNode
    23  func TestInitNewNode(t *testing.T) {
    24  	log := &zerolog.Logger{}
    25  	root := t.TempDir()
    26  
    27  	lookup := lookup.New(metadata.NewMessagePackBackend(root, cache.Config{}), &options.Options{Root: root}, &timemanager.Manager{})
    28  	tp := tree.New(lookup, nil, &options.Options{}, nil, log)
    29  
    30  	aspects := aspects.Aspects{
    31  		Lookup: lookup,
    32  		Tree:   tp,
    33  	}
    34  	store := NewSessionStore(nil, aspects, root, false, options.TokenOptions{}, log)
    35  
    36  	rootNode := node.New("e48c4e7a-beac-4b82-b991-a5cff7b8c39c", "e48c4e7a-beac-4b82-b991-a5cff7b8c39c", "", "", 0, "", providerv1beta1.ResourceType_RESOURCE_TYPE_CONTAINER, &userv1beta1.UserId{}, lookup)
    37  	rootNode.Exists = true
    38  	rootNode.SpaceRoot = rootNode
    39  
    40  	err := os.MkdirAll(rootNode.InternalPath(), 0700)
    41  	if err != nil {
    42  		t.Fatal(err.Error())
    43  	}
    44  	n := node.New("e48c4e7a-beac-4b82-b991-a5cff7b8c39c", "930b7a2e-b745-41e1-8a9b-712582021842", "e48c4e7a-beac-4b82-b991-a5cff7b8c39c", "newchild", 10, "26493c53-2634-45f8-949f-dc07b88df9b0", providerv1beta1.ResourceType_RESOURCE_TYPE_FILE, &userv1beta1.UserId{}, lookup)
    45  	n.SpaceRoot = rootNode
    46  	unlock, err := store.tp.InitNewNode(context.Background(), n, 10)
    47  	if err != nil {
    48  		t.Fatal(err.Error())
    49  	}
    50  	defer func() {
    51  		_ = unlock()
    52  	}()
    53  
    54  	// try initializing the same new node again in case a concurrent requests tries to create a file with the same name
    55  	n = node.New("e48c4e7a-beac-4b82-b991-a5cff7b8c39c", "a6ede986-cfcd-41c5-a820-6eee955a1c2b", "e48c4e7a-beac-4b82-b991-a5cff7b8c39c", "newchild", 10, "26493c53-2634-45f8-949f-dc07b88df9b0", providerv1beta1.ResourceType_RESOURCE_TYPE_FILE, &userv1beta1.UserId{}, lookup)
    56  	n.SpaceRoot = rootNode
    57  	unlock2, err := store.tp.InitNewNode(context.Background(), n, 10)
    58  	if _, ok := err.(errtypes.IsAlreadyExists); !ok {
    59  		t.Fatalf(`initNewNode(with same 'newchild' name), %v, want %v`, err, errtypes.AlreadyExists("newchild"))
    60  	}
    61  	_ = unlock2()
    62  }