file_history_test.go 5.2 KB

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