1
0
mirror of https://github.com/ipfs/kubo.git synced 2025-09-10 05:52:20 +08:00
Files
kubo/fuse/ipns/ipns_test.go
2014-10-04 22:42:03 +00:00

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))
}
}