2017-05-15 21:51:50 +00:00
|
|
|
package odb
|
|
|
|
|
|
|
|
import (
|
|
|
|
"bytes"
|
|
|
|
"encoding/hex"
|
|
|
|
"fmt"
|
|
|
|
"io"
|
|
|
|
"io/ioutil"
|
2017-05-16 21:02:37 +00:00
|
|
|
"strings"
|
2017-05-15 21:51:50 +00:00
|
|
|
"testing"
|
|
|
|
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
|
|
)
|
|
|
|
|
|
|
|
func TestMemoryStorerIncludesGivenEntries(t *testing.T) {
|
|
|
|
sha := "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
|
|
|
|
hex, err := hex.DecodeString(sha)
|
|
|
|
|
|
|
|
assert.Nil(t, err)
|
|
|
|
|
2017-05-16 21:29:03 +00:00
|
|
|
ms := newMemoryStorer(map[string]io.ReadWriter{
|
2017-05-15 21:51:50 +00:00
|
|
|
sha: bytes.NewBuffer([]byte{0x1}),
|
|
|
|
})
|
|
|
|
|
|
|
|
buf, err := ms.Open(hex)
|
|
|
|
assert.Nil(t, err)
|
|
|
|
|
|
|
|
contents, err := ioutil.ReadAll(buf)
|
|
|
|
assert.Nil(t, err)
|
|
|
|
assert.Equal(t, []byte{0x1}, contents)
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestMemoryStorerAcceptsNilEntries(t *testing.T) {
|
2017-05-16 21:29:03 +00:00
|
|
|
ms := newMemoryStorer(nil)
|
2017-05-15 21:51:50 +00:00
|
|
|
|
|
|
|
assert.NotNil(t, ms)
|
|
|
|
assert.Equal(t, 0, len(ms.fs))
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestMemoryStorerDoesntOpenMissingEntries(t *testing.T) {
|
|
|
|
sha := "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
|
|
|
|
|
|
|
|
hex, err := hex.DecodeString(sha)
|
|
|
|
assert.Nil(t, err)
|
|
|
|
|
|
|
|
defer func() {
|
|
|
|
if err := recover(); err != nil {
|
|
|
|
expeced := fmt.Sprintf("git/odb: memory storage cannot open %x, doesn't exist", hex)
|
|
|
|
assert.Equal(t, expeced, err)
|
|
|
|
} else {
|
|
|
|
t.Fatal("expected panic()")
|
|
|
|
}
|
|
|
|
}()
|
|
|
|
|
2017-05-16 21:29:03 +00:00
|
|
|
ms := newMemoryStorer(nil)
|
2017-05-15 21:51:50 +00:00
|
|
|
|
|
|
|
ms.Open(hex)
|
|
|
|
}
|
|
|
|
|
2017-05-16 21:02:37 +00:00
|
|
|
func TestMemoryStorerStoresNewEntries(t *testing.T) {
|
2017-05-15 21:51:50 +00:00
|
|
|
hex, err := hex.DecodeString("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa")
|
|
|
|
assert.Nil(t, err)
|
|
|
|
|
2017-05-16 21:29:03 +00:00
|
|
|
ms := newMemoryStorer(nil)
|
2017-05-15 21:51:50 +00:00
|
|
|
|
|
|
|
assert.Equal(t, 0, len(ms.fs))
|
|
|
|
|
2017-05-16 21:02:37 +00:00
|
|
|
_, err = ms.Store(hex, strings.NewReader("hello"))
|
2017-05-15 21:51:50 +00:00
|
|
|
assert.Nil(t, err)
|
|
|
|
assert.Equal(t, 1, len(ms.fs))
|
2017-05-16 21:02:37 +00:00
|
|
|
|
|
|
|
got, err := ms.Open(hex)
|
|
|
|
assert.Nil(t, err)
|
|
|
|
|
|
|
|
contents, err := ioutil.ReadAll(got)
|
|
|
|
assert.Nil(t, err)
|
|
|
|
assert.Equal(t, "hello", string(contents))
|
2017-05-15 21:51:50 +00:00
|
|
|
}
|
|
|
|
|
2017-05-16 21:02:37 +00:00
|
|
|
func TestMemoryStorerStoresNewEntriesExclusively(t *testing.T) {
|
2017-05-15 21:51:50 +00:00
|
|
|
hex, err := hex.DecodeString("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa")
|
|
|
|
assert.Nil(t, err)
|
|
|
|
|
2017-05-16 21:29:03 +00:00
|
|
|
ms := newMemoryStorer(nil)
|
2017-05-15 21:51:50 +00:00
|
|
|
|
|
|
|
assert.Equal(t, 0, len(ms.fs))
|
|
|
|
|
2017-05-16 21:02:37 +00:00
|
|
|
_, err = ms.Store(hex, new(bytes.Buffer))
|
2017-05-15 21:51:50 +00:00
|
|
|
assert.Nil(t, err)
|
|
|
|
assert.Equal(t, 1, len(ms.fs))
|
|
|
|
|
|
|
|
defer func() {
|
|
|
|
expected := fmt.Sprintf("git/odb: memory storage create %x, already exists", hex)
|
|
|
|
if err := recover(); err != nil {
|
|
|
|
assert.Equal(t, expected, err)
|
|
|
|
} else {
|
|
|
|
t.Fatal("expected panic()")
|
|
|
|
}
|
|
|
|
}()
|
|
|
|
|
2017-05-16 21:02:37 +00:00
|
|
|
ms.Store(hex, new(bytes.Buffer))
|
2017-05-15 21:51:50 +00:00
|
|
|
}
|