Skip to content
go-libfossil Artifact [a992bd145c]
Login

Artifact [a992bd145c]

Artifact a992bd145c2d1dd310d0d9d026443838976f72fd81287a5aa02fc41d8b643d17:


package vfile

import (
	"path/filepath"
	"testing"

	"github.com/danmestas/go-libfossil/simio"
)

// A storage without links (memory, browser) never sees one: a symlink
// entry is written as a plain file holding its target's name, as fossil's
// symlink_create writes it with allow-symlinks off, and permissions are not
// read from it.
func TestDiskWithoutLinks(t *testing.T) {
	env := &simio.Env{
		Clock: simio.NewSimClock(), Rand: simio.NewSeededRand(1), Storage: simio.NewMemStorage(),
	}
	d := NewDisk(env, true)
	if d.ReadsPerms() || d.Symlinks() {
		t.Fatalf("ReadsPerms %v, Symlinks %v on a storage without links", d.ReadsPerms(), d.Symlinks())
	}
	p := filepath.Join("/ck", "sub", "link")
	if err := d.Write(p, []byte("target.txt"), false, true); err != nil {
		t.Fatal(err)
	}
	info, err := d.Stat(p)
	if err != nil || info == nil || IsLink(info) {
		t.Fatalf("Stat = %v, %v; want a plain file", info, err)
	}
	data, err := d.Read(p, info)
	if err != nil || string(data) != "target.txt" {
		t.Fatalf("Read = %q, %v; want the target's name", data, err)
	}
	if err := d.Remove(p); err != nil {
		t.Fatal(err)
	}
	if err := d.Remove(p); err != nil {
		t.Fatalf("Remove of nothing = %v, want nil", err)
	}
	if info, err := d.Stat(p); info != nil || err != nil {
		t.Fatalf("Stat after Remove = %v, %v; want nothing", info, err)
	}
}

func TestZeroDiskPanics(t *testing.T) {
	defer func() {
		if recover() == nil {
			t.Fatal("a zero Disk did not panic")
		}
	}()
	var d Disk
	_, _ = d.Stat("/x")
}