file_history_test.go 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173
  1. package leaves
  2. import (
  3. "bytes"
  4. "testing"
  5. "github.com/gogo/protobuf/proto"
  6. "github.com/stretchr/testify/assert"
  7. "gopkg.in/src-d/go-git.v4/plumbing"
  8. "gopkg.in/src-d/go-git.v4/plumbing/object"
  9. "gopkg.in/src-d/hercules.v4/internal/core"
  10. "gopkg.in/src-d/hercules.v4/internal/pb"
  11. items "gopkg.in/src-d/hercules.v4/internal/plumbing"
  12. "gopkg.in/src-d/hercules.v4/internal/test"
  13. )
  14. func fixtureFileHistory() *FileHistory {
  15. fh := FileHistory{}
  16. fh.Initialize(test.Repository)
  17. return &fh
  18. }
  19. func TestFileHistoryMeta(t *testing.T) {
  20. fh := fixtureFileHistory()
  21. assert.Equal(t, fh.Name(), "FileHistory")
  22. assert.Equal(t, len(fh.Provides()), 0)
  23. assert.Equal(t, len(fh.Requires()), 1)
  24. assert.Equal(t, fh.Requires()[0], items.DependencyTreeChanges)
  25. assert.Len(t, fh.ListConfigurationOptions(), 0)
  26. fh.Configure(nil)
  27. }
  28. func TestFileHistoryRegistration(t *testing.T) {
  29. summoned := core.Registry.Summon((&FileHistory{}).Name())
  30. assert.Len(t, summoned, 1)
  31. assert.Equal(t, summoned[0].Name(), "FileHistory")
  32. leaves := core.Registry.GetLeaves()
  33. matched := false
  34. for _, tp := range leaves {
  35. if tp.Flag() == (&FileHistory{}).Flag() {
  36. matched = true
  37. break
  38. }
  39. }
  40. assert.True(t, matched)
  41. }
  42. func TestFileHistoryConsume(t *testing.T) {
  43. fh := fixtureFileHistory()
  44. deps := map[string]interface{}{}
  45. changes := make(object.Changes, 3)
  46. treeFrom, _ := test.Repository.TreeObject(plumbing.NewHash(
  47. "a1eb2ea76eb7f9bfbde9b243861474421000eb96"))
  48. treeTo, _ := test.Repository.TreeObject(plumbing.NewHash(
  49. "994eac1cd07235bb9815e547a75c84265dea00f5"))
  50. changes[0] = &object.Change{From: object.ChangeEntry{
  51. Name: "analyser.go",
  52. Tree: treeFrom,
  53. TreeEntry: object.TreeEntry{
  54. Name: "analyser.go",
  55. Mode: 0100644,
  56. Hash: plumbing.NewHash("dc248ba2b22048cc730c571a748e8ffcf7085ab9"),
  57. },
  58. }, To: object.ChangeEntry{
  59. Name: "analyser.go",
  60. Tree: treeTo,
  61. TreeEntry: object.TreeEntry{
  62. Name: "analyser.go",
  63. Mode: 0100644,
  64. Hash: plumbing.NewHash("baa64828831d174f40140e4b3cfa77d1e917a2c1"),
  65. },
  66. }}
  67. changes[1] = &object.Change{To: object.ChangeEntry{}, From: object.ChangeEntry{
  68. Name: "cmd/hercules/main.go",
  69. Tree: treeTo,
  70. TreeEntry: object.TreeEntry{
  71. Name: "cmd/hercules/main.go",
  72. Mode: 0100644,
  73. Hash: plumbing.NewHash("c29112dbd697ad9b401333b80c18a63951bc18d9"),
  74. },
  75. },
  76. }
  77. changes[2] = &object.Change{From: object.ChangeEntry{}, To: object.ChangeEntry{
  78. Name: ".travis.yml",
  79. Tree: treeTo,
  80. TreeEntry: object.TreeEntry{
  81. Name: ".travis.yml",
  82. Mode: 0100644,
  83. Hash: plumbing.NewHash("291286b4ac41952cbd1389fda66420ec03c1a9fe"),
  84. },
  85. },
  86. }
  87. deps[items.DependencyTreeChanges] = changes
  88. commit, _ := test.Repository.CommitObject(plumbing.NewHash(
  89. "2b1ed978194a94edeabbca6de7ff3b5771d4d665"))
  90. deps["commit"] = commit
  91. fh.files["cmd/hercules/main.go"] = []plumbing.Hash{plumbing.NewHash(
  92. "0000000000000000000000000000000000000000")}
  93. fh.files["analyser.go"] = []plumbing.Hash{plumbing.NewHash(
  94. "ffffffffffffffffffffffffffffffffffffffff")}
  95. fh.Consume(deps)
  96. assert.Len(t, fh.files, 2)
  97. assert.Nil(t, fh.files["cmd/hercules/main.go"])
  98. assert.Len(t, fh.files["analyser.go"], 2)
  99. assert.Equal(t, fh.files["analyser.go"][0], plumbing.NewHash(
  100. "ffffffffffffffffffffffffffffffffffffffff"))
  101. assert.Equal(t, fh.files["analyser.go"][1], plumbing.NewHash(
  102. "2b1ed978194a94edeabbca6de7ff3b5771d4d665"))
  103. assert.Len(t, fh.files[".travis.yml"], 1)
  104. assert.Equal(t, fh.files[".travis.yml"][0], plumbing.NewHash(
  105. "2b1ed978194a94edeabbca6de7ff3b5771d4d665"))
  106. res := fh.Finalize().(FileHistoryResult)
  107. assert.Equal(t, fh.files, res.Files)
  108. }
  109. func TestFileHistorySerializeText(t *testing.T) {
  110. fh := fixtureFileHistory()
  111. deps := map[string]interface{}{}
  112. changes := make(object.Changes, 1)
  113. treeTo, _ := test.Repository.TreeObject(plumbing.NewHash(
  114. "994eac1cd07235bb9815e547a75c84265dea00f5"))
  115. changes[0] = &object.Change{From: object.ChangeEntry{}, To: object.ChangeEntry{
  116. Name: ".travis.yml",
  117. Tree: treeTo,
  118. TreeEntry: object.TreeEntry{
  119. Name: ".travis.yml",
  120. Mode: 0100644,
  121. Hash: plumbing.NewHash("291286b4ac41952cbd1389fda66420ec03c1a9fe"),
  122. },
  123. },
  124. }
  125. deps[items.DependencyTreeChanges] = changes
  126. commit, _ := test.Repository.CommitObject(plumbing.NewHash(
  127. "2b1ed978194a94edeabbca6de7ff3b5771d4d665"))
  128. deps["commit"] = commit
  129. fh.Consume(deps)
  130. res := fh.Finalize().(FileHistoryResult)
  131. buffer := &bytes.Buffer{}
  132. fh.Serialize(res, false, buffer)
  133. assert.Equal(t, buffer.String(), " - .travis.yml: [\"2b1ed978194a94edeabbca6de7ff3b5771d4d665\"]\n")
  134. }
  135. func TestFileHistorySerializeBinary(t *testing.T) {
  136. fh := fixtureFileHistory()
  137. deps := map[string]interface{}{}
  138. changes := make(object.Changes, 1)
  139. treeTo, _ := test.Repository.TreeObject(plumbing.NewHash(
  140. "994eac1cd07235bb9815e547a75c84265dea00f5"))
  141. changes[0] = &object.Change{From: object.ChangeEntry{}, To: object.ChangeEntry{
  142. Name: ".travis.yml",
  143. Tree: treeTo,
  144. TreeEntry: object.TreeEntry{
  145. Name: ".travis.yml",
  146. Mode: 0100644,
  147. Hash: plumbing.NewHash("291286b4ac41952cbd1389fda66420ec03c1a9fe"),
  148. },
  149. },
  150. }
  151. deps[items.DependencyTreeChanges] = changes
  152. commit, _ := test.Repository.CommitObject(plumbing.NewHash(
  153. "2b1ed978194a94edeabbca6de7ff3b5771d4d665"))
  154. deps["commit"] = commit
  155. fh.Consume(deps)
  156. res := fh.Finalize().(FileHistoryResult)
  157. buffer := &bytes.Buffer{}
  158. fh.Serialize(res, true, buffer)
  159. msg := pb.FileHistoryResultMessage{}
  160. proto.Unmarshal(buffer.Bytes(), &msg)
  161. assert.Len(t, msg.Files, 1)
  162. assert.Len(t, msg.Files[".travis.yml"].Commits, 1)
  163. assert.Equal(t, msg.Files[".travis.yml"].Commits[0], "2b1ed978194a94edeabbca6de7ff3b5771d4d665")
  164. }