-
Notifications
You must be signed in to change notification settings - Fork 11
/
Copy pathcommit_node_test.go
120 lines (102 loc) · 4.06 KB
/
commit_node_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
package versionmgr
import (
"context"
"testing"
"github.com/stretchr/testify/require"
"github.com/GitDataAI/jiaozifs/utils/hash"
"github.com/google/uuid"
"github.com/GitDataAI/jiaozifs/models"
"github.com/GitDataAI/jiaozifs/testhelper"
)
// TestWrapCommitNode
//
// A--->B
// / \
// root E-->F
// \ /
// C---->D
func TestWrapCommitNode(t *testing.T) {
ctx := context.Background()
closeDB, _, db := testhelper.SetupDatabase(ctx, t)
defer closeDB()
repoID := uuid.New()
repo := models.NewRepo(db)
rootCommit, err := makeCommit(ctx, repo.CommitRepo(repoID), hash.Empty, "root")
require.NoError(t, err)
commitA, err := makeCommit(ctx, repo.CommitRepo(repoID), hash.Empty, "commit a", rootCommit.Hash)
require.NoError(t, err)
commitB, err := makeCommit(ctx, repo.CommitRepo(repoID), hash.Empty, "commt b", commitA.Hash)
require.NoError(t, err)
commitC, err := makeCommit(ctx, repo.CommitRepo(repoID), hash.Empty, "commit c", rootCommit.Hash)
require.NoError(t, err)
commitD, err := makeCommit(ctx, repo.CommitRepo(repoID), hash.Empty, "commit d", commitC.Hash)
require.NoError(t, err)
commitE, err := makeCommit(ctx, repo.CommitRepo(repoID), hash.Empty, "commit e", commitB.Hash, commitD.Hash)
require.NoError(t, err)
commitF, err := makeCommit(ctx, repo.CommitRepo(repoID), hash.Empty, "commit f", commitE.Hash)
require.NoError(t, err)
commitFNode := NewWrapCommitNode(repo.CommitRepo(repoID), commitF)
require.Equal(t, commitF.Hash.Hex(), commitFNode.Commit().Hash.Hex())
require.Equal(t, repoID, commitFNode.RepoID())
require.Equal(t, hash.Empty, commitFNode.TreeHash())
require.Equal(t, commitF.Hash.Hex(), commitFNode.Hash().Hex())
t.Run("parent", func(t *testing.T) {
commitENode := NewWrapCommitNode(repo.CommitRepo(repoID), commitE)
node, err := commitENode.Parents(ctx)
require.NoError(t, err)
require.Equal(t, commitB.Hash.Hex(), node[0].Hash().Hex())
require.Equal(t, commitD.Hash.Hex(), node[1].Hash().Hex())
})
t.Run("get commit", func(t *testing.T) {
commit, err := commitFNode.GetCommit(ctx, commitA.Hash)
require.NoError(t, err)
require.Equal(t, commitA.Hash.Hex(), commit.Hash().Hex())
})
t.Run("get commits", func(t *testing.T) {
commits, err := commitFNode.GetCommits(ctx, []hash.Hash{commitA.Hash, commitB.Hash})
require.NoError(t, err)
require.Equal(t, commitA.Hash.Hex(), commits[0].Hash().Hex())
require.Equal(t, commitB.Hash.Hex(), commits[1].Hash().Hex())
})
t.Run("get commits", func(t *testing.T) {
commits, err := commitFNode.GetCommits(ctx, []hash.Hash{commitA.Hash, commitB.Hash})
require.NoError(t, err)
require.Equal(t, commitA.Hash.Hex(), commits[0].Hash().Hex())
require.Equal(t, commitB.Hash.Hex(), commits[1].Hash().Hex())
})
commits, err := commitFNode.GetCommits(ctx, []hash.Hash{commitA.Hash, commitB.Hash})
require.NoError(t, err)
require.Equal(t, commitA.Hash.Hex(), commits[0].Hash().Hex())
require.Equal(t, commitB.Hash.Hex(), commits[1].Hash().Hex())
t.Run("iter foreach", func(t *testing.T) {
iter := newArrayCommitIter(commits)
var exactCommits []*WrapCommitNode
err := iter.ForEach(func(node *WrapCommitNode) error {
exactCommits = append(exactCommits, node)
return nil
})
require.NoError(t, err)
require.Len(t, exactCommits, 2)
require.Equal(t, commitA.Hash.Hex(), exactCommits[0].Hash().Hex())
require.Equal(t, commitB.Hash.Hex(), exactCommits[1].Hash().Hex())
})
t.Run("hash next", func(t *testing.T) {
iter := newArrayCommitIter(commits)
var exactCommits []*WrapCommitNode
for iter.Has() {
node, err := iter.Next()
require.NoError(t, err)
exactCommits = append(exactCommits, node)
}
require.Len(t, exactCommits, 2)
require.Equal(t, commitA.Hash.Hex(), exactCommits[0].Hash().Hex())
require.Equal(t, commitB.Hash.Hex(), exactCommits[1].Hash().Hex())
assertHash(t, exactCommits, commitA.Hash, commitB.Hash)
})
}
func assertHash(t *testing.T, exactCommits []*WrapCommitNode, seq ...hash.Hash) {
require.Equal(t, len(exactCommits), len(seq))
for index, c := range exactCommits {
require.Equal(t, c.Hash().Hex(), seq[index].Hex())
}
}