2015-04-23 16:20:36 +00:00
|
|
|
package lfs
|
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"
|
2015-05-28 21:57:29 +00:00
|
|
|
"io"
|
2014-07-24 21:37:18 +00:00
|
|
|
"strings"
|
2013-10-04 13:48:08 +00:00
|
|
|
"testing"
|
2015-05-13 19:43:41 +00:00
|
|
|
|
2015-05-25 18:20:50 +00:00
|
|
|
"github.com/github/git-lfs/vendor/_nuts/github.com/technoweenie/assert"
|
2013-10-04 13:48:08 +00:00
|
|
|
)
|
|
|
|
|
|
|
|
func TestEncode(t *testing.T) {
|
|
|
|
var buf bytes.Buffer
|
2014-07-24 22:02:27 +00:00
|
|
|
pointer := NewPointer("booya", 12345)
|
2015-04-23 16:20:36 +00:00
|
|
|
_, err := EncodePointer(&buf, pointer)
|
2014-07-24 22:02:27 +00:00
|
|
|
assert.Equal(t, nil, err)
|
|
|
|
|
|
|
|
bufReader := bufio.NewReader(&buf)
|
2015-03-19 19:30:55 +00:00
|
|
|
assertLine(t, bufReader, "version https://git-lfs.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-03-19 19:30:55 +00:00
|
|
|
func TestLFSIniDecode(t *testing.T) {
|
|
|
|
ex := `version https://git-lfs.github.com/spec/v1
|
2015-01-30 16:56:12 +00:00
|
|
|
oid sha256:4d7a214614ab2935c943f9e0ff69d22eadbb8f32b1258daaa5e2ca24d17e2393
|
|
|
|
size 12345`
|
|
|
|
|
2015-04-23 16:20:36 +00:00
|
|
|
p, err := DecodePointer(bytes.NewBufferString(ex))
|
2015-01-30 16:56:12 +00:00
|
|
|
assertEqualWithExample(t, ex, nil, err)
|
|
|
|
assertEqualWithExample(t, ex, latest, p.Version)
|
|
|
|
assertEqualWithExample(t, ex, "4d7a214614ab2935c943f9e0ff69d22eadbb8f32b1258daaa5e2ca24d17e2393", p.Oid)
|
|
|
|
assertEqualWithExample(t, ex, int64(12345), p.Size)
|
|
|
|
}
|
|
|
|
|
2015-04-22 15:44:06 +00:00
|
|
|
func TestPreReleaseDecode(t *testing.T) {
|
|
|
|
ex := `version https://hawser.github.com/spec/v1
|
2014-08-14 17:15:22 +00:00
|
|
|
oid sha256:4d7a214614ab2935c943f9e0ff69d22eadbb8f32b1258daaa5e2ca24d17e2393
|
|
|
|
size 12345`
|
2014-07-24 20:49:47 +00:00
|
|
|
|
2015-04-23 16:20:36 +00:00
|
|
|
p, err := DecodePointer(bytes.NewBufferString(ex))
|
2014-07-24 21:37:18 +00:00
|
|
|
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
|
|
|
}
|
|
|
|
|
2015-05-28 21:57:29 +00:00
|
|
|
func TestDecodeFromEmptyReader(t *testing.T) {
|
|
|
|
by, p, err := DecodeFrom(strings.NewReader(""))
|
|
|
|
if err != io.EOF {
|
|
|
|
t.Fatal("unexpected error: %v", err)
|
|
|
|
}
|
|
|
|
|
|
|
|
if p != nil {
|
|
|
|
t.Fatalf("Unexpected pointer: %v", p)
|
|
|
|
}
|
|
|
|
|
|
|
|
if string(by) != "" {
|
|
|
|
t.Fatalf("unexpected result: '%s'", string(by))
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2014-06-04 15:38:16 +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-03-19 19:30:55 +00:00
|
|
|
`version https://git-lfs.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-03-19 19:30:55 +00:00
|
|
|
`version https://git-lfs.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-03-19 19:30:55 +00:00
|
|
|
`version https://git-lfs.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-03-19 19:30:55 +00:00
|
|
|
`version https://git-lfs.github.com/spec/v1
|
2014-08-14 17:15:22 +00:00
|
|
|
oid sha256:4d7a214614ab2935c943f9e0ff69d22eadbb8f32b1258daaa5e2ca24d17e2393`,
|
|
|
|
|
|
|
|
// bad `key value` format
|
2015-03-19 19:30:55 +00:00
|
|
|
`version=https://git-lfs.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-03-19 19:30:55 +00:00
|
|
|
`version https://git-lfs.github.com/spec/v1
|
2014-08-14 20:30:33 +00:00
|
|
|
oid sha256:4d7a214614ab2935c943f9e0ff69d22eadbb8f32b1258daaa5e2ca24d17e2393
|
|
|
|
size 12345
|
|
|
|
wat wat`,
|
|
|
|
|
|
|
|
// keys out of order
|
2015-03-19 19:30:55 +00:00
|
|
|
`version https://git-lfs.github.com/spec/v1
|
2014-08-14 20:30:33 +00:00
|
|
|
size 12345
|
|
|
|
oid sha256:4d7a214614ab2935c943f9e0ff69d22eadbb8f32b1258daaa5e2ca24d17e2393`,
|
2014-06-04 15:38:16 +00:00
|
|
|
}
|
2014-06-04 16:01:45 +00:00
|
|
|
|
2014-07-24 21:37:18 +00:00
|
|
|
for _, ex := range examples {
|
2015-04-23 16:20:36 +00:00
|
|
|
p, err := DecodePointer(bytes.NewBufferString(ex))
|
2014-07-24 21:37:18 +00:00
|
|
|
if err == nil {
|
|
|
|
t.Errorf("No error decoding: %v\nFrom:\n%s", p, strings.TrimSpace(ex))
|
|
|
|
}
|
2014-06-04 16:01:45 +00:00
|
|
|
}
|
|
|
|
}
|
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))
|
|
|
|
}
|