mirror of
https://github.com/ipfs/kubo.git
synced 2025-09-10 05:52:20 +08:00
112 lines
1.9 KiB
Go
112 lines
1.9 KiB
Go
package ipns
|
|
|
|
import (
|
|
"bytes"
|
|
"crypto/rand"
|
|
"io/ioutil"
|
|
"os"
|
|
"testing"
|
|
"time"
|
|
|
|
fstest "github.com/jbenet/go-ipfs/Godeps/_workspace/src/bazil.org/fuse/fs/fstestutil"
|
|
"github.com/jbenet/go-ipfs/core"
|
|
)
|
|
|
|
func randBytes(size int) []byte {
|
|
b := make([]byte, size)
|
|
rand.Read(b)
|
|
return b
|
|
}
|
|
|
|
func writeFile(t *testing.T, size int, path string) ([]byte, error) {
|
|
data := randBytes(size)
|
|
fi, err := os.Create(path)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
n, err := fi.Write(data)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
if n != len(data) {
|
|
t.Fatal("Didnt write proper amount!")
|
|
}
|
|
|
|
err = fi.Close()
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
return data, nil
|
|
}
|
|
|
|
func setupIpnsTest(t *testing.T, node *core.IpfsNode) (*core.IpfsNode, *fstest.Mount) {
|
|
var err error
|
|
if node == nil {
|
|
node, err = core.NewMockNode()
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
}
|
|
|
|
fs, err := NewIpns(node, "")
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
mnt, err := fstest.MountedT(t, fs)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
return node, mnt
|
|
}
|
|
|
|
func TestIpnsBasicIO(t *testing.T) {
|
|
_, mnt := setupIpnsTest(t, nil)
|
|
defer mnt.Close()
|
|
|
|
fname := mnt.Dir + "/local/testfile"
|
|
data, err := writeFile(t, 12345, fname)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
rbuf, err := ioutil.ReadFile(fname)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
if !bytes.Equal(rbuf, data) {
|
|
t.Fatal("Incorrect Read!")
|
|
}
|
|
}
|
|
|
|
func TestFilePersistence(t *testing.T) {
|
|
node, mnt := setupIpnsTest(t, nil)
|
|
|
|
fname := "/local/atestfile"
|
|
data, err := writeFile(t, 127, mnt.Dir+fname)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
// Wait for publish: TODO: make publish happen faster in tests
|
|
time.Sleep(time.Millisecond * 40)
|
|
|
|
mnt.Close()
|
|
|
|
node, mnt = setupIpnsTest(t, node)
|
|
defer mnt.Close()
|
|
|
|
rbuf, err := ioutil.ReadFile(mnt.Dir + fname)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
if !bytes.Equal(rbuf, data) {
|
|
t.Fatalf("File data changed between mounts! sizes differ: %d != %d", len(data), len(rbuf))
|
|
}
|
|
}
|