git-lfs/pointer/pointer_test.go

142 lines
4.1 KiB
Go
Raw Normal View History

package pointer
2013-10-04 13:48:08 +00:00
import (
2014-07-24 22:02:27 +00:00
"bufio"
2013-10-04 13:48:08 +00:00
"bytes"
2014-07-24 20:49:47 +00:00
"github.com/bmizerany/assert"
2014-07-24 21:37:18 +00:00
"strings"
2013-10-04 13:48:08 +00:00
"testing"
)
func TestEncode(t *testing.T) {
var buf bytes.Buffer
2014-07-24 22:02:27 +00:00
pointer := NewPointer("booya", 12345)
_, err := Encode(&buf, pointer)
assert.Equal(t, nil, err)
bufReader := bufio.NewReader(&buf)
2015-01-30 19:23:16 +00:00
assertLine(t, bufReader, "version https://hawser.github.com/spec/v1\n")
2014-08-14 17:15:22 +00:00
assertLine(t, bufReader, "oid sha256:booya\n")
assertLine(t, bufReader, "size 12345\n")
2014-07-24 22:02:27 +00:00
line, err := bufReader.ReadString('\n')
if err == nil {
t.Fatalf("More to read: %s", line)
2013-10-04 13:48:08 +00:00
}
2014-07-24 22:02:27 +00:00
assert.Equal(t, "EOF", err.Error())
}
2013-10-04 13:48:08 +00:00
2014-07-24 22:02:27 +00:00
func assertLine(t *testing.T, r *bufio.Reader, expected string) {
actual, err := r.ReadString('\n')
assert.Equal(t, nil, err)
assert.Equal(t, expected, actual)
2013-10-04 13:48:08 +00:00
}
2015-01-30 16:56:12 +00:00
func TestHawserIniDecode(t *testing.T) {
2015-01-30 19:23:16 +00:00
ex := `version https://hawser.github.com/spec/v1
2015-01-30 16:56:12 +00:00
oid sha256:4d7a214614ab2935c943f9e0ff69d22eadbb8f32b1258daaa5e2ca24d17e2393
size 12345`
p, err := Decode(bytes.NewBufferString(ex))
assertEqualWithExample(t, ex, nil, err)
assertEqualWithExample(t, ex, latest, p.Version)
assertEqualWithExample(t, ex, "4d7a214614ab2935c943f9e0ff69d22eadbb8f32b1258daaa5e2ca24d17e2393", p.Oid)
assertEqualWithExample(t, ex, int64(12345), p.Size)
}
2014-07-24 21:37:18 +00:00
func TestIniV2Decode(t *testing.T) {
2014-08-14 17:15:22 +00:00
ex := `version http://git-media.io/v/2
oid sha256:4d7a214614ab2935c943f9e0ff69d22eadbb8f32b1258daaa5e2ca24d17e2393
size 12345`
2014-07-24 20:49:47 +00:00
2014-07-24 21:37:18 +00:00
p, err := Decode(bytes.NewBufferString(ex))
assertEqualWithExample(t, ex, nil, err)
assertEqualWithExample(t, ex, latest, p.Version)
assertEqualWithExample(t, ex, "4d7a214614ab2935c943f9e0ff69d22eadbb8f32b1258daaa5e2ca24d17e2393", p.Oid)
assertEqualWithExample(t, ex, int64(12345), p.Size)
2014-07-24 20:49:47 +00:00
}
func TestAlphaDecode(t *testing.T) {
2014-07-24 21:37:18 +00:00
examples := []string{
"# git-media\n4d7a214614ab2935c943f9e0ff69d22eadbb8f32b1258daaa5e2ca24d17e2393\n",
"# external\n4d7a214614ab2935c943f9e0ff69d22eadbb8f32b1258daaa5e2ca24d17e2393\n",
2014-04-16 21:11:52 +00:00
}
2014-07-24 21:37:18 +00:00
for _, ex := range examples {
p, err := Decode(bytes.NewBufferString(ex))
assertEqualWithExample(t, ex, nil, err)
assertEqualWithExample(t, ex, "4d7a214614ab2935c943f9e0ff69d22eadbb8f32b1258daaa5e2ca24d17e2393", p.Oid)
2014-07-24 21:37:18 +00:00
assertEqualWithExample(t, ex, int64(0), p.Size)
assertEqualWithExample(t, ex, "sha256", p.OidType)
assertEqualWithExample(t, ex, alpha, p.Version)
2013-10-04 13:48:08 +00:00
}
}
func TestDecodeInvalid(t *testing.T) {
2014-07-24 21:37:18 +00:00
examples := []string{
"invalid stuff",
2014-07-24 21:41:41 +00:00
// no sha
2014-07-24 21:37:18 +00:00
"# git-media",
2014-07-24 21:41:41 +00:00
// bad oid type
2015-01-30 19:23:16 +00:00
`version https://hawser.github.com/spec/v1
2014-08-14 17:15:22 +00:00
oid shazam:4d7a214614ab2935c943f9e0ff69d22eadbb8f32b1258daaa5e2ca24d17e2393
size 12345`,
2014-07-24 21:41:41 +00:00
// no oid
2015-01-30 19:23:16 +00:00
`version https://hawser.github.com/spec/v1
2014-08-14 17:15:22 +00:00
size 12345`,
2014-07-24 21:41:41 +00:00
// bad version
2014-08-14 17:15:22 +00:00
`version http://git-media.io/v/whatever
oid sha256:4d7a214614ab2935c943f9e0ff69d22eadbb8f32b1258daaa5e2ca24d17e2393
size 12345`,
2014-07-24 21:41:41 +00:00
// no version
2014-08-14 17:15:22 +00:00
`oid sha256:4d7a214614ab2935c943f9e0ff69d22eadbb8f32b1258daaa5e2ca24d17e2393
size 12345`,
2014-07-24 21:41:41 +00:00
// bad size
2015-01-30 19:23:16 +00:00
`version https://hawser.github.com/spec/v1
2014-08-14 17:15:22 +00:00
oid sha256:4d7a214614ab2935c943f9e0ff69d22eadbb8f32b1258daaa5e2ca24d17e2393
size fif`,
2014-07-24 21:41:41 +00:00
// no size
2015-01-30 19:23:16 +00:00
`version https://hawser.github.com/spec/v1
2014-08-14 17:15:22 +00:00
oid sha256:4d7a214614ab2935c943f9e0ff69d22eadbb8f32b1258daaa5e2ca24d17e2393`,
// bad `key value` format
2015-01-30 19:23:16 +00:00
`version=https://hawser.github.com/spec/v1
2014-08-14 17:15:22 +00:00
oid=sha256:4d7a214614ab2935c943f9e0ff69d22eadbb8f32b1258daaa5e2ca24d17e2393
2014-08-14 20:23:19 +00:00
size=fif`,
// no git-media
`version=http://wat.io/v/2
oid=sha256:4d7a214614ab2935c943f9e0ff69d22eadbb8f32b1258daaa5e2ca24d17e2393
2014-08-14 17:15:22 +00:00
size=fif`,
2014-08-14 20:30:33 +00:00
// extra key
2015-01-30 19:23:16 +00:00
`version https://hawser.github.com/spec/v1
2014-08-14 20:30:33 +00:00
oid sha256:4d7a214614ab2935c943f9e0ff69d22eadbb8f32b1258daaa5e2ca24d17e2393
size 12345
wat wat`,
// keys out of order
2015-01-30 19:23:16 +00:00
`version https://hawser.github.com/spec/v1
2014-08-14 20:30:33 +00:00
size 12345
oid sha256:4d7a214614ab2935c943f9e0ff69d22eadbb8f32b1258daaa5e2ca24d17e2393`,
}
2014-07-24 21:37:18 +00:00
for _, ex := range examples {
p, err := Decode(bytes.NewBufferString(ex))
if err == nil {
t.Errorf("No error decoding: %v\nFrom:\n%s", p, strings.TrimSpace(ex))
}
}
}
2014-07-24 21:37:18 +00:00
func assertEqualWithExample(t *testing.T, example string, expected, actual interface{}) {
assert.Equalf(t, expected, actual, "Example:\n%s", strings.TrimSpace(example))
}