git-bug/entity/dag/operation_pack_test.go

160 lines
3.4 KiB
Go
Raw Normal View History

2021-01-04 01:59:25 +03:00
package dag
import (
2021-02-20 17:48:44 +03:00
"math/rand"
2021-01-04 01:59:25 +03:00
"testing"
"github.com/stretchr/testify/require"
2021-02-09 12:46:33 +03:00
"github.com/MichaelMure/git-bug/identity"
2021-03-21 20:22:04 +03:00
"github.com/MichaelMure/git-bug/repository"
2021-01-04 01:59:25 +03:00
)
func TestOperationPackReadWrite(t *testing.T) {
repo, id1, _, resolver, def := makeTestContext()
2021-01-04 01:59:25 +03:00
opp := &operationPack{
Author: id1,
Operations: []Operation{
2021-03-21 20:22:04 +03:00
newOp1(id1, "foo"),
2021-01-04 01:59:25 +03:00
newOp2(id1, "bar"),
},
CreateTime: 123,
EditTime: 456,
}
commitHash, err := opp.Write(def, repo)
require.NoError(t, err)
commit, err := repo.ReadCommit(commitHash)
require.NoError(t, err)
opp2, err := readOperationPack(def, repo, resolver, commit)
2021-01-04 01:59:25 +03:00
require.NoError(t, err)
require.Equal(t, opp, opp2)
// make sure we get the same Id with the same data
opp3 := &operationPack{
Author: id1,
Operations: []Operation{
2021-03-21 20:22:04 +03:00
newOp1(id1, "foo"),
2021-01-04 01:59:25 +03:00
newOp2(id1, "bar"),
},
CreateTime: 123,
EditTime: 456,
}
require.Equal(t, opp.Id(), opp3.Id())
}
2021-02-09 12:46:33 +03:00
func TestOperationPackSignedReadWrite(t *testing.T) {
repo, id1, _, resolver, def := makeTestContext()
2021-02-09 12:46:33 +03:00
err := id1.(*identity.Identity).Mutate(repo, func(orig *identity.Mutator) {
orig.Keys = append(orig.Keys, identity.GenerateKey())
})
require.NoError(t, err)
opp := &operationPack{
Author: id1,
Operations: []Operation{
newOp1(id1, "foo"),
newOp2(id1, "bar"),
},
CreateTime: 123,
EditTime: 456,
}
commitHash, err := opp.Write(def, repo)
require.NoError(t, err)
commit, err := repo.ReadCommit(commitHash)
require.NoError(t, err)
opp2, err := readOperationPack(def, repo, resolver, commit)
2021-02-09 12:46:33 +03:00
require.NoError(t, err)
require.Equal(t, opp, opp2)
// make sure we get the same Id with the same data
opp3 := &operationPack{
Author: id1,
Operations: []Operation{
newOp1(id1, "foo"),
newOp2(id1, "bar"),
},
CreateTime: 123,
EditTime: 456,
}
require.Equal(t, opp.Id(), opp3.Id())
}
2021-02-20 17:48:44 +03:00
2021-03-21 20:22:04 +03:00
func TestOperationPackFiles(t *testing.T) {
repo, id1, _, resolver, def := makeTestContext()
blobHash1, err := repo.StoreData(randomData())
require.NoError(t, err)
blobHash2, err := repo.StoreData(randomData())
require.NoError(t, err)
opp := &operationPack{
Author: id1,
Operations: []Operation{
newOp1(id1, "foo", blobHash1, blobHash2),
newOp1(id1, "foo", blobHash2),
},
CreateTime: 123,
EditTime: 456,
}
commitHash, err := opp.Write(def, repo)
require.NoError(t, err)
commit, err := repo.ReadCommit(commitHash)
require.NoError(t, err)
opp2, err := readOperationPack(def, repo, resolver, commit)
require.NoError(t, err)
require.Equal(t, opp, opp2)
require.ElementsMatch(t, opp2.Operations[0].(OperationWithFiles).GetFiles(), []repository.Hash{
blobHash1,
blobHash2,
})
require.ElementsMatch(t, opp2.Operations[1].(OperationWithFiles).GetFiles(), []repository.Hash{
blobHash2,
})
tree, err := repo.ReadTree(commit.TreeHash)
require.NoError(t, err)
extraTreeHash, ok := repository.SearchTreeEntry(tree, extraEntryName)
require.True(t, ok)
extraTree, err := repo.ReadTree(extraTreeHash.Hash)
require.NoError(t, err)
require.ElementsMatch(t, extraTree, []repository.TreeEntry{
{
ObjectType: repository.Blob,
Hash: blobHash1,
Name: "file0",
},
{
ObjectType: repository.Blob,
Hash: blobHash2,
Name: "file1",
},
})
}
2021-02-20 17:48:44 +03:00
func randomData() []byte {
var letterRunes = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
b := make([]byte, 32)
for i := range b {
b[i] = letterRunes[rand.Intn(len(letterRunes))]
}
return b
}