mirror of
https://github.com/taigrr/bitcask
synced 2025-01-18 04:03:17 -08:00
* live backup first commit * exclude lock file in backup * create path if not exist for backup Co-authored-by: yash <yash.chandra@grabpay.com> Co-authored-by: James Mills <prologic@shortcircuit.net.au>
109 lines
2.7 KiB
Go
109 lines
2.7 KiB
Go
package internal
|
|
|
|
import (
|
|
"io"
|
|
"io/ioutil"
|
|
"os"
|
|
"path/filepath"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
func Test_Copy(t *testing.T) {
|
|
assert := assert.New(t)
|
|
t.Run("CopyDir", func(t *testing.T) {
|
|
tempsrc, err := ioutil.TempDir("", "test")
|
|
assert.NoError(err)
|
|
defer os.RemoveAll(tempsrc)
|
|
var f *os.File
|
|
|
|
tempdir, err := ioutil.TempDir(tempsrc, "")
|
|
assert.NoError(err)
|
|
|
|
f, err = os.OpenFile(filepath.Join(tempsrc, "file1"), os.O_WRONLY|os.O_CREATE, 0755)
|
|
assert.NoError(err)
|
|
n, err := f.WriteString("test123")
|
|
assert.Equal(7, n)
|
|
assert.NoError(err)
|
|
f.Close()
|
|
|
|
f, err = os.OpenFile(filepath.Join(tempsrc, "file2"), os.O_WRONLY|os.O_CREATE, 0755)
|
|
assert.NoError(err)
|
|
n, err = f.WriteString("test1234")
|
|
assert.Equal(8, n)
|
|
assert.NoError(err)
|
|
f.Close()
|
|
|
|
f, err = os.OpenFile(filepath.Join(tempsrc, "file3"), os.O_WRONLY|os.O_CREATE, 0755)
|
|
assert.NoError(err)
|
|
f.Close()
|
|
|
|
tempdst, err := ioutil.TempDir("", "backup")
|
|
assert.NoError(err)
|
|
defer os.RemoveAll(tempdst)
|
|
err = Copy(tempsrc, tempdst, []string{"file3"})
|
|
assert.NoError(err)
|
|
buf := make([]byte, 10)
|
|
|
|
exists := Exists(filepath.Join(tempdst, filepath.Base(tempdir)))
|
|
assert.Equal(true, exists)
|
|
|
|
f, err = os.Open(filepath.Join(tempdst, "file1"))
|
|
assert.NoError(err)
|
|
n, err = f.Read(buf[:7])
|
|
assert.NoError(err)
|
|
assert.Equal(7, n)
|
|
assert.Equal([]byte("test123"), buf[:7])
|
|
_, err = f.Read(buf)
|
|
assert.Equal(io.EOF, err)
|
|
f.Close()
|
|
|
|
f, err = os.Open(filepath.Join(tempdst, "file2"))
|
|
assert.NoError(err)
|
|
n, err = f.Read(buf[:8])
|
|
assert.NoError(err)
|
|
assert.Equal(8, n)
|
|
assert.Equal([]byte("test1234"), buf[:8])
|
|
_, err = f.Read(buf)
|
|
assert.Equal(io.EOF, err)
|
|
f.Close()
|
|
|
|
exists = Exists(filepath.Join(tempdst, "file3"))
|
|
assert.Equal(false, exists)
|
|
})
|
|
}
|
|
|
|
func Test_SaveAndLoad(t *testing.T) {
|
|
assert := assert.New(t)
|
|
t.Run("save and load", func(t *testing.T) {
|
|
tempdir, err := ioutil.TempDir("", "bitcask")
|
|
assert.NoError(err)
|
|
defer os.RemoveAll(tempdir)
|
|
type test struct {
|
|
Value bool `json:"value"`
|
|
}
|
|
m := test{Value: true}
|
|
err = SaveJsonToFile(&m, filepath.Join(tempdir, "meta.json"), 0755)
|
|
assert.NoError(err)
|
|
m1 := test{}
|
|
err = LoadFromJsonFile(filepath.Join(tempdir, "meta.json"), &m1)
|
|
assert.NoError(err)
|
|
assert.Equal(m, m1)
|
|
})
|
|
|
|
t.Run("save and load error", func(t *testing.T) {
|
|
tempdir, err := ioutil.TempDir("", "bitcask")
|
|
assert.NoError(err)
|
|
defer os.RemoveAll(tempdir)
|
|
type test struct {
|
|
Value bool `json:"value"`
|
|
}
|
|
err = SaveJsonToFile(make(chan int), filepath.Join(tempdir, "meta.json"), 0755)
|
|
assert.Error(err)
|
|
m1 := test{}
|
|
err = LoadFromJsonFile(filepath.Join(tempdir, "meta.json"), &m1)
|
|
assert.Error(err)
|
|
})
|
|
}
|