79 lines
1.7 KiB
Go
79 lines
1.7 KiB
Go
|
package pack
|
||
|
|
||
|
import (
|
||
|
"bytes"
|
||
|
"testing"
|
||
|
|
||
|
"github.com/stretchr/testify/assert"
|
||
|
"github.com/stretchr/testify/require"
|
||
|
)
|
||
|
|
||
|
func TestSetOpenOpensAPackedObject(t *testing.T) {
|
||
|
const sha = "decafdecafdecafdecafdecafdecafdecafdecaf"
|
||
|
const data = "Hello, world!\n"
|
||
|
compressed, _ := compress(data)
|
||
|
|
||
|
set := NewSetPacks(&Packfile{
|
||
|
idx: IndexWith(map[string]uint32{
|
||
|
sha: 0,
|
||
|
}),
|
||
|
r: bytes.NewReader(append([]byte{0x3e}, compressed...)),
|
||
|
})
|
||
|
|
||
|
o, err := set.Object(DecodeHex(t, sha))
|
||
|
|
||
|
assert.NoError(t, err)
|
||
|
assert.Equal(t, TypeBlob, o.Type())
|
||
|
|
||
|
unpacked, err := o.Unpack()
|
||
|
assert.NoError(t, err)
|
||
|
assert.Equal(t, []byte(data), unpacked)
|
||
|
}
|
||
|
|
||
|
func TestSetOpenOpensPackedObjectsInPackOrder(t *testing.T) {
|
||
|
p1 := &Packfile{
|
||
|
Objects: 1,
|
||
|
|
||
|
idx: IndexWith(map[string]uint32{
|
||
|
"aa00000000000000000000000000000000000000": 1,
|
||
|
}),
|
||
|
r: bytes.NewReader(nil),
|
||
|
}
|
||
|
p2 := &Packfile{
|
||
|
Objects: 2,
|
||
|
|
||
|
idx: IndexWith(map[string]uint32{
|
||
|
"aa11111111111111111111111111111111111111": 1,
|
||
|
"aa22222222222222222222222222222222222222": 2,
|
||
|
}),
|
||
|
r: bytes.NewReader(nil),
|
||
|
}
|
||
|
p3 := &Packfile{
|
||
|
Objects: 3,
|
||
|
|
||
|
idx: IndexWith(map[string]uint32{
|
||
|
"aa33333333333333333333333333333333333333": 3,
|
||
|
"aa44444444444444444444444444444444444444": 4,
|
||
|
"aa55555555555555555555555555555555555555": 5,
|
||
|
}),
|
||
|
r: bytes.NewReader(nil),
|
||
|
}
|
||
|
|
||
|
set := NewSetPacks(p1, p2, p3)
|
||
|
|
||
|
var visited []*Packfile
|
||
|
|
||
|
set.each(
|
||
|
DecodeHex(t, "aa55555555555555555555555555555555555555"),
|
||
|
func(p *Packfile) (*Object, error) {
|
||
|
visited = append(visited, p)
|
||
|
return nil, errNotFound
|
||
|
},
|
||
|
)
|
||
|
|
||
|
require.Len(t, visited, 3)
|
||
|
assert.EqualValues(t, visited[0].Objects, 3)
|
||
|
assert.EqualValues(t, visited[1].Objects, 2)
|
||
|
assert.EqualValues(t, visited[2].Objects, 1)
|
||
|
}
|