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}