|
1 | 1 | package internal_integration_test
|
2 | 2 |
|
3 | 3 | import (
|
| 4 | + "fmt" |
| 5 | + "time" |
| 6 | + |
4 | 7 | . "github.com/onsi/ginkgo/v2"
|
5 | 8 | "github.com/onsi/ginkgo/v2/types"
|
6 | 9 | . "github.com/onsi/gomega"
|
7 | 10 | )
|
8 | 11 |
|
9 | 12 | var _ = Describe("ReportEntries", func() {
|
10 |
| - BeforeEach(func() { |
11 |
| - success, _ := RunFixture("Report Entries", func() { |
12 |
| - BeforeSuite(func() { |
13 |
| - AddReportEntry("bridge", "engaged") |
14 |
| - }) |
| 13 | + Context("happy path", func() { |
| 14 | + BeforeEach(func() { |
| 15 | + success, _ := RunFixture("Report Entries", func() { |
| 16 | + BeforeSuite(func() { |
| 17 | + AddReportEntry("bridge", "engaged") |
| 18 | + }) |
| 19 | + |
| 20 | + It("adds-entries", func() { |
| 21 | + AddReportEntry("medical", "healthy") |
| 22 | + AddReportEntry("engineering", "on fire") |
| 23 | + }) |
15 | 24 |
|
16 |
| - It("adds-entries", func() { |
17 |
| - AddReportEntry("medical", "healthy") |
18 |
| - AddReportEntry("engineering", "on fire") |
| 25 | + It("adds-no-entries", func() {}) |
19 | 26 | })
|
| 27 | + Ω(success).Should(BeTrue()) |
| 28 | + }) |
20 | 29 |
|
21 |
| - It("adds-no-entries", func() {}) |
| 30 | + It("attaches entries to the report", func() { |
| 31 | + Ω(reporter.Did.Find("adds-entries").ReportEntries[0].Name).Should(Equal("medical")) |
| 32 | + Ω(reporter.Did.Find("adds-entries").ReportEntries[0].Value.String()).Should(Equal("healthy")) |
| 33 | + Ω(reporter.Did.Find("adds-entries").ReportEntries[1].Name).Should(Equal("engineering")) |
| 34 | + Ω(reporter.Did.Find("adds-entries").ReportEntries[1].Value.String()).Should(Equal("on fire")) |
| 35 | + Ω(reporter.Did.Find("adds-no-entries").ReportEntries).Should(BeEmpty()) |
| 36 | + Ω(reporter.Did.FindByLeafNodeType(types.NodeTypeBeforeSuite).ReportEntries[0].Name).Should(Equal("bridge")) |
| 37 | + Ω(reporter.Did.FindByLeafNodeType(types.NodeTypeBeforeSuite).ReportEntries[0].Value.String()).Should(Equal("engaged")) |
22 | 38 | })
|
23 |
| - Ω(success).Should(BeTrue()) |
24 | 39 | })
|
25 | 40 |
|
26 |
| - It("attaches entries to the report", func() { |
27 |
| - Ω(reporter.Did.Find("adds-entries").ReportEntries[0].Name).Should(Equal("medical")) |
28 |
| - Ω(reporter.Did.Find("adds-entries").ReportEntries[0].Value.String()).Should(Equal("healthy")) |
29 |
| - Ω(reporter.Did.Find("adds-entries").ReportEntries[1].Name).Should(Equal("engineering")) |
30 |
| - Ω(reporter.Did.Find("adds-entries").ReportEntries[1].Value.String()).Should(Equal("on fire")) |
31 |
| - Ω(reporter.Did.Find("adds-no-entries").ReportEntries).Should(BeEmpty()) |
32 |
| - Ω(reporter.Did.FindByLeafNodeType(types.NodeTypeBeforeSuite).ReportEntries[0].Name).Should(Equal("bridge")) |
33 |
| - Ω(reporter.Did.FindByLeafNodeType(types.NodeTypeBeforeSuite).ReportEntries[0].Value.String()).Should(Equal("engaged")) |
| 41 | + Context("avoiding races", func() { |
| 42 | + BeforeEach(func() { |
| 43 | + success, _ := RunFixture("Report Entries - but no races", func() { |
| 44 | + BeforeEach(func() { |
| 45 | + stop := make(chan interface{}) |
| 46 | + done := make(chan interface{}) |
| 47 | + ticker := time.NewTicker(10 * time.Millisecond) |
| 48 | + i := 0 |
| 49 | + go func() { |
| 50 | + for { |
| 51 | + select { |
| 52 | + case <-ticker.C: |
| 53 | + AddReportEntry(fmt.Sprintf("report-%d", i)) |
| 54 | + i++ |
| 55 | + case <-stop: |
| 56 | + ticker.Stop() |
| 57 | + close(done) |
| 58 | + return |
| 59 | + } |
| 60 | + } |
| 61 | + }() |
| 62 | + DeferCleanup(func() { |
| 63 | + close(stop) |
| 64 | + <-done |
| 65 | + }) |
| 66 | + }) |
| 67 | + |
| 68 | + It("reporter", func() { |
| 69 | + for i := 0; i < 5; i++ { |
| 70 | + time.Sleep(20 * time.Millisecond) |
| 71 | + AddReportEntry(fmt.Sprintf("waiting... %d", i)) |
| 72 | + Ω(len(CurrentSpecReport().ReportEntries)).Should(BeNumerically("<", (i+1)*10)) |
| 73 | + } |
| 74 | + }) |
| 75 | + |
| 76 | + ReportAfterEach(func(report SpecReport) { |
| 77 | + //no races here, either |
| 78 | + Ω(len(report.ReportEntries)).Should(BeNumerically(">", 5)) |
| 79 | + }) |
| 80 | + |
| 81 | + }) |
| 82 | + Ω(success).Should(BeTrue()) |
| 83 | + }) |
| 84 | + |
| 85 | + It("attaches entries without racing", func() { |
| 86 | + Ω(reporter.Did.Find("reporter").ReportEntries).Should(ContainElement(HaveField("Name", "report-0"))) |
| 87 | + Ω(reporter.Did.Find("reporter").ReportEntries).Should(ContainElement(HaveField("Name", "report-2"))) |
| 88 | + Ω(reporter.Did.Find("reporter").ReportEntries).Should(ContainElement(HaveField("Name", "waiting... 1"))) |
| 89 | + Ω(reporter.Did.Find("reporter").ReportEntries).Should(ContainElement(HaveField("Name", "waiting... 3"))) |
| 90 | + }) |
34 | 91 | })
|
35 | 92 | })
|
0 commit comments