提交 440de64d 作者: Brian Tiger Chow

refactor(fsrepo/test) extract assert

@jbenet will move in upcoming branch/PR
上级 2fc97ad8
package assert
import "testing"
func Nil(err error, t *testing.T, msgs ...string) {
if err != nil {
t.Fatal(msgs, "error:", err)
}
}
func True(v bool, t *testing.T, msgs ...string) {
if !v {
t.Fatal(msgs)
}
}
func Err(err error, t *testing.T, msgs ...string) {
if err == nil {
t.Fatal(msgs, "error:", err)
}
}
......@@ -7,6 +7,7 @@ import (
datastore "github.com/jbenet/go-ipfs/Godeps/_workspace/src/github.com/jbenet/go-datastore"
"github.com/jbenet/go-ipfs/repo/config"
"github.com/jbenet/go-ipfs/repo/fsrepo/assert"
)
// swap arg order
......@@ -22,35 +23,35 @@ func TestInitIdempotence(t *testing.T) {
t.Parallel()
path := testRepoPath("", t)
for i := 0; i < 10; i++ {
AssertNil(Init(path, &config.Config{}), t, "multiple calls to init should succeed")
assert.Nil(Init(path, &config.Config{}), t, "multiple calls to init should succeed")
}
}
func TestRemove(t *testing.T) {
t.Parallel()
path := testRepoPath("foo", t)
AssertNil(Remove(path), t, "should be able to remove after closed")
assert.Nil(Remove(path), t, "should be able to remove after closed")
}
func TestCannotRemoveIfOpen(t *testing.T) {
t.Parallel()
path := testRepoPath("TestCannotRemoveIfOpen", t)
AssertNil(Init(path, &config.Config{}), t, "should initialize successfully")
assert.Nil(Init(path, &config.Config{}), t, "should initialize successfully")
r := At(path)
AssertNil(r.Open(), t)
AssertErr(Remove(path), t, "should not be able to remove while open")
AssertNil(r.Close(), t)
AssertNil(Remove(path), t, "should be able to remove after closed")
assert.Nil(r.Open(), t)
assert.Err(Remove(path), t, "should not be able to remove while open")
assert.Nil(r.Close(), t)
assert.Nil(Remove(path), t, "should be able to remove after closed")
}
func TestCannotBeReopened(t *testing.T) {
t.Parallel()
path := testRepoPath("", t)
AssertNil(Init(path, &config.Config{}), t)
assert.Nil(Init(path, &config.Config{}), t)
r := At(path)
AssertNil(r.Open(), t)
AssertNil(r.Close(), t)
AssertErr(r.Open(), t, "shouldn't be possible to re-open the repo")
assert.Nil(r.Open(), t)
assert.Nil(r.Close(), t)
assert.Err(r.Open(), t, "shouldn't be possible to re-open the repo")
// mutable state is the enemy. Take Close() as an opportunity to reduce
// entropy. Callers ought to start fresh with a new handle by calling `At`.
......@@ -62,83 +63,65 @@ func TestCanManageReposIndependently(t *testing.T) {
pathB := testRepoPath("b", t)
t.Log("initialize two repos")
AssertNil(Init(pathA, &config.Config{}), t, "a", "should initialize successfully")
AssertNil(Init(pathB, &config.Config{}), t, "b", "should initialize successfully")
assert.Nil(Init(pathA, &config.Config{}), t, "a", "should initialize successfully")
assert.Nil(Init(pathB, &config.Config{}), t, "b", "should initialize successfully")
t.Log("ensure repos initialized")
Assert(IsInitialized(pathA), t, "a should be initialized")
Assert(IsInitialized(pathB), t, "b should be initialized")
assert.True(IsInitialized(pathA), t, "a should be initialized")
assert.True(IsInitialized(pathB), t, "b should be initialized")
t.Log("open the two repos")
repoA := At(pathA)
repoB := At(pathB)
AssertNil(repoA.Open(), t, "a")
AssertNil(repoB.Open(), t, "b")
assert.Nil(repoA.Open(), t, "a")
assert.Nil(repoB.Open(), t, "b")
t.Log("close and remove b while a is open")
AssertNil(repoB.Close(), t, "close b")
AssertNil(Remove(pathB), t, "remove b")
assert.Nil(repoB.Close(), t, "close b")
assert.Nil(Remove(pathB), t, "remove b")
t.Log("close and remove a")
AssertNil(repoA.Close(), t)
AssertNil(Remove(pathA), t)
assert.Nil(repoA.Close(), t)
assert.Nil(Remove(pathA), t)
}
func TestDatastoreGetNotAllowedAfterClose(t *testing.T) {
t.Parallel()
path := testRepoPath("test", t)
Assert(!IsInitialized(path), t, "should NOT be initialized")
AssertNil(Init(path, &config.Config{}), t, "should initialize successfully")
assert.True(!IsInitialized(path), t, "should NOT be initialized")
assert.Nil(Init(path, &config.Config{}), t, "should initialize successfully")
r := At(path)
AssertNil(r.Open(), t, "should open successfully")
assert.Nil(r.Open(), t, "should open successfully")
k := "key"
data := []byte(k)
AssertNil(r.Datastore().Put(datastore.NewKey(k), data), t, "Put should be successful")
assert.Nil(r.Datastore().Put(datastore.NewKey(k), data), t, "Put should be successful")
AssertNil(r.Close(), t)
assert.Nil(r.Close(), t)
_, err := r.Datastore().Get(datastore.NewKey(k))
AssertErr(err, t, "after closer, Get should be fail")
assert.Err(err, t, "after closer, Get should be fail")
}
func TestDatastorePersistsFromRepoToRepo(t *testing.T) {
t.Parallel()
path := testRepoPath("test", t)
AssertNil(Init(path, &config.Config{}), t)
assert.Nil(Init(path, &config.Config{}), t)
r1 := At(path)
AssertNil(r1.Open(), t)
assert.Nil(r1.Open(), t)
k := "key"
expected := []byte(k)
AssertNil(r1.Datastore().Put(datastore.NewKey(k), expected), t, "using first repo, Put should be successful")
AssertNil(r1.Close(), t)
assert.Nil(r1.Datastore().Put(datastore.NewKey(k), expected), t, "using first repo, Put should be successful")
assert.Nil(r1.Close(), t)
r2 := At(path)
AssertNil(r2.Open(), t)
assert.Nil(r2.Open(), t)
v, err := r2.Datastore().Get(datastore.NewKey(k))
AssertNil(err, t, "using second repo, Get should be successful")
assert.Nil(err, t, "using second repo, Get should be successful")
actual, ok := v.([]byte)
Assert(ok, t, "value should be the []byte from r1's Put")
AssertNil(r2.Close(), t)
Assert(bytes.Compare(expected, actual) == 0, t, "data should match")
}
func AssertNil(err error, t *testing.T, msgs ...string) {
if err != nil {
t.Fatal(msgs, "error:", err)
}
}
func Assert(v bool, t *testing.T, msgs ...string) {
if !v {
t.Fatal(msgs)
}
}
func AssertErr(err error, t *testing.T, msgs ...string) {
if err == nil {
t.Fatal(msgs, "error:", err)
}
assert.True(ok, t, "value should be the []byte from r1's Put")
assert.Nil(r2.Close(), t)
assert.True(bytes.Compare(expected, actual) == 0, t, "data should match")
}
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论