This repository has been archived by the owner on Oct 14, 2021. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 2
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
test: Implement GSP-86 Add linker integration tests (#40)
* 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
Showing
2 changed files
with
209 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1 +1,5 @@ | ||
*.yaml | ||
*.yaml | ||
|
||
# Jetbrain IDE | ||
.idea | ||
*.iml |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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) | ||
}) | ||
}) | ||
}) | ||
} |