tree_diff_test.go 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. package hercules
  2. import (
  3. "testing"
  4. "github.com/stretchr/testify/assert"
  5. "gopkg.in/src-d/go-git.v4/plumbing"
  6. "gopkg.in/src-d/go-git.v4/plumbing/object"
  7. "gopkg.in/src-d/go-git.v4/utils/merkletrie"
  8. )
  9. func fixtureTreeDiff() *TreeDiff {
  10. td := TreeDiff{}
  11. td.Configure(nil)
  12. td.Initialize(testRepository)
  13. return &td
  14. }
  15. func TestTreeDiffMeta(t *testing.T) {
  16. td := fixtureTreeDiff()
  17. assert.Equal(t, td.Name(), "TreeDiff")
  18. assert.Equal(t, len(td.Requires()), 0)
  19. assert.Equal(t, len(td.Provides()), 1)
  20. assert.Equal(t, td.Provides()[0], DependencyTreeChanges)
  21. opts := td.ListConfigurationOptions()
  22. assert.Len(t, opts, 0)
  23. }
  24. func TestTreeDiffRegistration(t *testing.T) {
  25. tp, exists := Registry.registered[(&TreeDiff{}).Name()]
  26. assert.True(t, exists)
  27. assert.Equal(t, tp.Elem().Name(), "TreeDiff")
  28. tps, exists := Registry.provided[(&TreeDiff{}).Provides()[0]]
  29. assert.True(t, exists)
  30. assert.True(t, len(tps) >= 1)
  31. matched := false
  32. for _, tp := range tps {
  33. matched = matched || tp.Elem().Name() == "TreeDiff"
  34. }
  35. assert.True(t, matched)
  36. }
  37. func TestTreeDiffConsume(t *testing.T) {
  38. td := fixtureTreeDiff()
  39. commit, _ := testRepository.CommitObject(plumbing.NewHash(
  40. "2b1ed978194a94edeabbca6de7ff3b5771d4d665"))
  41. deps := map[string]interface{}{}
  42. deps["commit"] = commit
  43. prevCommit, _ := testRepository.CommitObject(plumbing.NewHash(
  44. "fbe766ffdc3f87f6affddc051c6f8b419beea6a2"))
  45. td.previousTree, _ = prevCommit.Tree()
  46. res, err := td.Consume(deps)
  47. assert.Nil(t, err)
  48. assert.Equal(t, len(res), 1)
  49. changes := res[DependencyTreeChanges].(object.Changes)
  50. assert.Equal(t, len(changes), 12)
  51. baseline := map[string]merkletrie.Action{
  52. "analyser.go": merkletrie.Delete,
  53. "cmd/hercules/main.go": merkletrie.Modify,
  54. "blob_cache.go": merkletrie.Insert,
  55. "burndown.go": merkletrie.Insert,
  56. "day.go": merkletrie.Insert,
  57. "dummies.go": merkletrie.Insert,
  58. "identity.go": merkletrie.Insert,
  59. "pipeline.go": merkletrie.Insert,
  60. "renames.go": merkletrie.Insert,
  61. "toposort/toposort.go": merkletrie.Insert,
  62. "toposort/toposort_test.go": merkletrie.Insert,
  63. "tree_diff.go": merkletrie.Insert,
  64. }
  65. for _, change := range changes {
  66. action, err := change.Action()
  67. assert.Nil(t, err)
  68. if change.From.Name != "" {
  69. assert.Contains(t, baseline, change.From.Name)
  70. assert.Equal(t, baseline[change.From.Name], action)
  71. } else {
  72. assert.Contains(t, baseline, change.To.Name)
  73. assert.Equal(t, baseline[change.To.Name], action)
  74. }
  75. }
  76. }
  77. func TestTreeDiffConsumeFirst(t *testing.T) {
  78. td := fixtureTreeDiff()
  79. commit, _ := testRepository.CommitObject(plumbing.NewHash(
  80. "2b1ed978194a94edeabbca6de7ff3b5771d4d665"))
  81. deps := map[string]interface{}{}
  82. deps["commit"] = commit
  83. res, err := td.Consume(deps)
  84. assert.Nil(t, err)
  85. assert.Equal(t, len(res), 1)
  86. changes := res[DependencyTreeChanges].(object.Changes)
  87. assert.Equal(t, len(changes), 21)
  88. for _, change := range changes {
  89. action, err := change.Action()
  90. assert.Nil(t, err)
  91. assert.Equal(t, action, merkletrie.Insert)
  92. }
  93. }
  94. func TestTreeDiffBadCommit(t *testing.T) {
  95. td := fixtureTreeDiff()
  96. commit, _ := testRepository.CommitObject(plumbing.NewHash(
  97. "2b1ed978194a94edeabbca6de7ff3b5771d4d665"))
  98. commit.TreeHash = plumbing.NewHash("0000000000000000000000000000000000000000")
  99. deps := map[string]interface{}{}
  100. deps["commit"] = commit
  101. res, err := td.Consume(deps)
  102. assert.Nil(t, res)
  103. assert.NotNil(t, err)
  104. }