operation_pack_test.go

  1package dag
  2
  3import (
  4	"math/rand"
  5	"testing"
  6
  7	"github.com/stretchr/testify/require"
  8
  9	"github.com/MichaelMure/git-bug/identity"
 10)
 11
 12func TestOperationPackReadWrite(t *testing.T) {
 13	repo, id1, _, resolver, def := makeTestContext()
 14
 15	blobHash1, err := repo.StoreData(randomData())
 16	require.NoError(t, err)
 17
 18	blobHash2, err := repo.StoreData(randomData())
 19	require.NoError(t, err)
 20
 21	opp := &operationPack{
 22		Author: id1,
 23		Operations: []Operation{
 24			newOp1(id1, "foo", blobHash1, blobHash2),
 25			newOp2(id1, "bar"),
 26		},
 27		CreateTime: 123,
 28		EditTime:   456,
 29	}
 30
 31	commitHash, err := opp.Write(def, repo)
 32	require.NoError(t, err)
 33
 34	commit, err := repo.ReadCommit(commitHash)
 35	require.NoError(t, err)
 36
 37	opp2, err := readOperationPack(def, repo, resolver, commit)
 38	require.NoError(t, err)
 39
 40	require.Equal(t, opp, opp2)
 41
 42	// make sure we get the same Id with the same data
 43	opp3 := &operationPack{
 44		Author: id1,
 45		Operations: []Operation{
 46			newOp1(id1, "foo", blobHash1, blobHash2),
 47			newOp2(id1, "bar"),
 48		},
 49		CreateTime: 123,
 50		EditTime:   456,
 51	}
 52	require.Equal(t, opp.Id(), opp3.Id())
 53}
 54
 55func TestOperationPackSignedReadWrite(t *testing.T) {
 56	repo, id1, _, resolver, def := makeTestContext()
 57
 58	err := id1.(*identity.Identity).Mutate(repo, func(orig *identity.Mutator) {
 59		orig.Keys = append(orig.Keys, identity.GenerateKey())
 60	})
 61	require.NoError(t, err)
 62
 63	opp := &operationPack{
 64		Author: id1,
 65		Operations: []Operation{
 66			newOp1(id1, "foo"),
 67			newOp2(id1, "bar"),
 68		},
 69		CreateTime: 123,
 70		EditTime:   456,
 71	}
 72
 73	commitHash, err := opp.Write(def, repo)
 74	require.NoError(t, err)
 75
 76	commit, err := repo.ReadCommit(commitHash)
 77	require.NoError(t, err)
 78
 79	opp2, err := readOperationPack(def, repo, resolver, commit)
 80	require.NoError(t, err)
 81
 82	require.Equal(t, opp, opp2)
 83
 84	// make sure we get the same Id with the same data
 85	opp3 := &operationPack{
 86		Author: id1,
 87		Operations: []Operation{
 88			newOp1(id1, "foo"),
 89			newOp2(id1, "bar"),
 90		},
 91		CreateTime: 123,
 92		EditTime:   456,
 93	}
 94	require.Equal(t, opp.Id(), opp3.Id())
 95}
 96
 97func randomData() []byte {
 98	var letterRunes = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
 99	b := make([]byte, 32)
100	for i := range b {
101		b[i] = letterRunes[rand.Intn(len(letterRunes))]
102	}
103	return b
104}