day_test.go 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  1. package plumbing
  2. import (
  3. "bytes"
  4. "log"
  5. "os"
  6. "testing"
  7. "time"
  8. "github.com/stretchr/testify/assert"
  9. "gopkg.in/src-d/go-git.v4/plumbing"
  10. "gopkg.in/src-d/hercules.v9/internal/core"
  11. "gopkg.in/src-d/hercules.v9/internal/test"
  12. )
  13. func fixtureDaysSinceStart() *DaysSinceStart {
  14. dss := DaysSinceStart{}
  15. dss.Configure(map[string]interface{}{})
  16. dss.Initialize(test.Repository)
  17. return &dss
  18. }
  19. func TestDaysSinceStartMeta(t *testing.T) {
  20. dss := fixtureDaysSinceStart()
  21. assert.Equal(t, dss.Name(), "DaysSinceStart")
  22. assert.Equal(t, len(dss.Provides()), 1)
  23. assert.Equal(t, dss.Provides()[0], DependencyDay)
  24. assert.Equal(t, len(dss.Requires()), 0)
  25. assert.Len(t, dss.ListConfigurationOptions(), 0)
  26. dss.Configure(map[string]interface{}{})
  27. }
  28. func TestDaysSinceStartRegistration(t *testing.T) {
  29. summoned := core.Registry.Summon((&DaysSinceStart{}).Name())
  30. assert.Len(t, summoned, 1)
  31. assert.Equal(t, summoned[0].Name(), "DaysSinceStart")
  32. summoned = core.Registry.Summon((&DaysSinceStart{}).Provides()[0])
  33. assert.Len(t, summoned, 1)
  34. assert.Equal(t, summoned[0].Name(), "DaysSinceStart")
  35. }
  36. func TestDaysSinceStartConsume(t *testing.T) {
  37. dss := fixtureDaysSinceStart()
  38. deps := map[string]interface{}{}
  39. commit, _ := test.Repository.CommitObject(plumbing.NewHash(
  40. "cce947b98a050c6d356bc6ba95030254914027b1"))
  41. deps[core.DependencyCommit] = commit
  42. deps[core.DependencyIndex] = 0
  43. res, err := dss.Consume(deps)
  44. assert.Nil(t, err)
  45. assert.Equal(t, res[DependencyDay].(int), 0)
  46. assert.Equal(t, dss.previousDay, 0)
  47. assert.Equal(t, dss.day0.Hour(), 1) // 18 UTC+1
  48. assert.Equal(t, dss.day0.Minute(), 0) // 30
  49. assert.Equal(t, dss.day0.Second(), 0) // 29
  50. commit, _ = test.Repository.CommitObject(plumbing.NewHash(
  51. "fc9ceecb6dabcb2aab60e8619d972e8d8208a7df"))
  52. deps[core.DependencyCommit] = commit
  53. deps[core.DependencyIndex] = 10
  54. res, err = dss.Consume(deps)
  55. assert.Nil(t, err)
  56. assert.Equal(t, res[DependencyDay].(int), 1)
  57. assert.Equal(t, dss.previousDay, 1)
  58. commit, _ = test.Repository.CommitObject(plumbing.NewHash(
  59. "a3ee37f91f0d705ec9c41ae88426f0ae44b2fbc3"))
  60. deps[core.DependencyCommit] = commit
  61. deps[core.DependencyIndex] = 20
  62. res, err = dss.Consume(deps)
  63. assert.Nil(t, err)
  64. assert.Equal(t, res[DependencyDay].(int), 1)
  65. assert.Equal(t, dss.previousDay, 1)
  66. commit, _ = test.Repository.CommitObject(plumbing.NewHash(
  67. "a8b665a65d7aced63f5ba2ff6d9b71dac227f8cf"))
  68. deps[core.DependencyCommit] = commit
  69. deps[core.DependencyIndex] = 20
  70. res, err = dss.Consume(deps)
  71. assert.Nil(t, err)
  72. assert.Equal(t, res[DependencyDay].(int), 2)
  73. assert.Equal(t, dss.previousDay, 2)
  74. commit, _ = test.Repository.CommitObject(plumbing.NewHash(
  75. "186ff0d7e4983637bb3762a24d6d0a658e7f4712"))
  76. deps[core.DependencyCommit] = commit
  77. deps[core.DependencyIndex] = 30
  78. res, err = dss.Consume(deps)
  79. assert.Nil(t, err)
  80. assert.Equal(t, res[DependencyDay].(int), 2)
  81. assert.Equal(t, dss.previousDay, 2)
  82. assert.Len(t, dss.commits, 3)
  83. assert.Equal(t, dss.commits[0], []plumbing.Hash{plumbing.NewHash(
  84. "cce947b98a050c6d356bc6ba95030254914027b1")})
  85. assert.Equal(t, dss.commits[1], []plumbing.Hash{
  86. plumbing.NewHash("fc9ceecb6dabcb2aab60e8619d972e8d8208a7df"),
  87. plumbing.NewHash("a3ee37f91f0d705ec9c41ae88426f0ae44b2fbc3")})
  88. assert.Equal(t, dss.commits[2], []plumbing.Hash{
  89. plumbing.NewHash("a8b665a65d7aced63f5ba2ff6d9b71dac227f8cf"),
  90. plumbing.NewHash("186ff0d7e4983637bb3762a24d6d0a658e7f4712")})
  91. }
  92. func TestDaysCommits(t *testing.T) {
  93. dss := fixtureDaysSinceStart()
  94. dss.commits[0] = []plumbing.Hash{plumbing.NewHash(
  95. "cce947b98a050c6d356bc6ba95030254914027b1")}
  96. commits := dss.commits
  97. dss.Initialize(test.Repository)
  98. assert.Len(t, dss.commits, 0)
  99. assert.Equal(t, dss.commits, commits)
  100. }
  101. func TestDaysSinceStartFork(t *testing.T) {
  102. dss1 := fixtureDaysSinceStart()
  103. dss1.commits[0] = []plumbing.Hash{plumbing.NewHash(
  104. "cce947b98a050c6d356bc6ba95030254914027b1")}
  105. clones := dss1.Fork(1)
  106. assert.Len(t, clones, 1)
  107. dss2 := clones[0].(*DaysSinceStart)
  108. assert.Equal(t, dss1.day0, dss2.day0)
  109. assert.Equal(t, dss1.previousDay, dss2.previousDay)
  110. assert.Equal(t, dss1.commits, dss2.commits)
  111. dss1.commits[0] = append(dss1.commits[0], plumbing.ZeroHash)
  112. assert.Len(t, dss2.commits[0], 2)
  113. assert.True(t, dss1 != dss2)
  114. // just for the sake of it
  115. dss1.Merge([]core.PipelineItem{dss2})
  116. }
  117. func TestDaysSinceStartConsumeZero(t *testing.T) {
  118. dss := fixtureDaysSinceStart()
  119. deps := map[string]interface{}{}
  120. commit, _ := test.Repository.CommitObject(plumbing.NewHash(
  121. "cce947b98a050c6d356bc6ba95030254914027b1"))
  122. commit.Committer.When = time.Unix(0, 0)
  123. deps[core.DependencyCommit] = commit
  124. deps[core.DependencyIndex] = 0
  125. // print warning to log
  126. myOutput := &bytes.Buffer{}
  127. log.SetOutput(myOutput)
  128. defer func() {
  129. log.SetOutput(os.Stderr)
  130. }()
  131. res, err := dss.Consume(deps)
  132. assert.Nil(t, err)
  133. assert.Contains(t, myOutput.String(), "Warning")
  134. assert.Contains(t, myOutput.String(), "cce947b98a050c6d356bc6ba95030254914027b1")
  135. assert.Contains(t, myOutput.String(), "hercules")
  136. assert.Contains(t, myOutput.String(), "github.com")
  137. assert.Equal(t, res[DependencyDay].(int), 0)
  138. assert.Equal(t, dss.previousDay, 0)
  139. assert.Equal(t, dss.day0.Year(), 1970)
  140. assert.Equal(t, dss.day0.Minute(), 0)
  141. assert.Equal(t, dss.day0.Second(), 0)
  142. }