Skip to content
This repository has been archived by the owner on Oct 14, 2021. It is now read-only.

Commit

Permalink
test: Implement GSP-86 Add linker integration tests (#40)
Browse files Browse the repository at this point in the history
* test: Implement GSP-86 Add linker integration tests

* test:Add some cases to linker integration tests

* test: Modify some cases in linker integration test

* fix: Resolve conflicts

* test: Add some cases in linker integration test

* revert: Removing the parts we haven't agreed on yet

* fix: Delete Read should get path object data without error

* test: Modified a few minor areas
  • Loading branch information
abyss-w authored Jul 27, 2021
1 parent 058a824 commit a5d6fd8
Show file tree
Hide file tree
Showing 2 changed files with 209 additions and 1 deletion.
6 changes: 5 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -1 +1,5 @@
*.yaml
*.yaml

# Jetbrain IDE
.idea
*.iml
204 changes: 204 additions & 0 deletions linker.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,204 @@
package tests

import (
"io"
"math/rand"
"testing"

"github.com/google/uuid"
. "github.com/smartystreets/goconvey/convey"

"github.com/beyondstorage/go-storage/v4/pkg/randbytes"
"github.com/beyondstorage/go-storage/v4/types"
)

func TestLinker(t *testing.T, store types.Storager) {
Convey("Given a basic Storager", t, func() {
l, ok := store.(types.Linker)
So(ok, ShouldBeTrue)

Convey("When create a link object", func() {
size := rand.Int63n(4 * 1024 * 1024) // Max file size is 4MB
r := io.LimitReader(randbytes.NewRand(), size)
target := uuid.New().String()

_, err := store.Write(target, r, size)
if err != nil {
t.Fatal(err)
}

defer func() {
err = store.Delete(target)
if err != nil {
t.Error(err)
}
}()

path := uuid.New().String()
o, err := l.CreateLink(path, target)

defer func() {
err = store.Delete(path)
if err != nil {
t.Error(err)
}
}()

Convey("The error should be nil", func() {
So(err, ShouldBeNil)
})

Convey("The object mode should be link", func() {
// Link object's mode must be link.
So(o.Mode.IsLink(), ShouldBeTrue)
})

Convey("The linkTarget of the object must be the same as the target", func() {
// The linkTarget must be the same as the target.
linkTarget, ok := o.GetLinkTarget()

So(ok, ShouldBeTrue)
So(linkTarget, ShouldEqual, target)
})

Convey("Stat should get path object without error", func() {
obj, err := store.Stat(path)

Convey("The error should be nil", func() {
So(err, ShouldBeNil)
})

Convey("The object mode should be link", func() {
// Link object's mode must be link.
So(obj.Mode.IsLink(), ShouldBeTrue)
})

Convey("The linkTarget of the object must be the same as the target", func() {
// The linkTarget must be the same as the target.
linkTarget, ok := obj.GetLinkTarget()

So(ok, ShouldBeTrue)
So(linkTarget, ShouldEqual, target)
})
})
})

Convey("When create a link object from a not existing target", func() {
target := uuid.New().String()

path := uuid.New().String()
o, err := l.CreateLink(path, target)

defer func() {
err = store.Delete(path)
if err != nil {
t.Error(err)
}
}()

Convey("The error should be nil", func() {
So(err, ShouldBeNil)
})

Convey("The object mode should be link", func() {
// Link object's mode must be link.
So(o.Mode.IsLink(), ShouldBeTrue)
})

Convey("The linkTarget of the object must be the same as the target", func() {
linkTarget, ok := o.GetLinkTarget()

So(ok, ShouldBeTrue)
So(linkTarget, ShouldEqual, target)
})

Convey("Stat should get path object without error", func() {
obj, err := store.Stat(path)

Convey("The error should be nil", func() {
So(err, ShouldBeNil)
})

Convey("The object mode should be link", func() {
// Link object's mode must be link.
So(obj.Mode.IsLink(), ShouldBeTrue)
})

Convey("The linkTarget of the object must be the same as the target", func() {
// The linkTarget must be the same as the target.
linkTarget, ok := obj.GetLinkTarget()

So(ok, ShouldBeTrue)
So(linkTarget, ShouldEqual, target)
})
})
})

Convey("When CreateLink to an existing path", func() {
firstSize := rand.Int63n(4 * 1024 * 1024) // Max file size is 4MB
firstR := io.LimitReader(randbytes.NewRand(), firstSize)
firstTarget := uuid.New().String()

_, err := store.Write(firstTarget, firstR, firstSize)
if err != nil {
t.Fatal(err)
}

defer func() {
err = store.Delete(firstTarget)
if err != nil {
t.Error(err)
}
}()

path := uuid.New().String()
o, err := l.CreateLink(path, firstTarget)

defer func() {
err = store.Delete(path)
if err != nil {
t.Error(err)
}
}()

Convey("The first returned error should be nil", func() {
So(err, ShouldBeNil)
})

secondSize := rand.Int63n(4 * 1024 * 1024) // Max file size is 4MB
secondR := io.LimitReader(randbytes.NewRand(), secondSize)
secondTarget := uuid.New().String()

_, err = store.Write(secondTarget, secondR, secondSize)
if err != nil {
t.Fatal(err)
}

defer func() {
err = store.Delete(secondTarget)
if err != nil {
t.Error(err)
}
}()

o, err = l.CreateLink(path, secondTarget)

Convey("The second returned error should also be nil", func() {
So(err, ShouldBeNil)
})

Convey("The object mode should be link", func() {
// Link object's mode must be link.
So(o.Mode.IsLink(), ShouldBeTrue)
})

Convey("The linkTarget of the object must be the same as the secondTarget", func() {
// The linkTarget must be the same as the secondTarget.
linkTarget, ok := o.GetLinkTarget()

So(ok, ShouldBeTrue)
So(linkTarget, ShouldEqual, secondTarget)
})
})
})
}

0 comments on commit a5d6fd8

Please sign in to comment.