...

Source file src/github.com/onsi/ginkgo/v2/integration/timeline_test.go

Documentation: github.com/onsi/ginkgo/v2/integration

     1  package integration_test
     2  
     3  import (
     4  	"fmt"
     5  	"runtime"
     6  	"strings"
     7  
     8  	. "github.com/onsi/ginkgo/v2"
     9  	. "github.com/onsi/gomega"
    10  	"github.com/onsi/gomega/gbytes"
    11  	"github.com/onsi/gomega/gexec"
    12  )
    13  
    14  var _ = Describe("Timeline output", func() {
    15  	denoter := "•"
    16  	retryDenoter := "↺"
    17  	if runtime.GOOS == "windows" {
    18  		denoter = "+"
    19  		retryDenoter = "R"
    20  	}
    21  	BeforeEach(func() {
    22  		fm.MountFixture("timeline")
    23  	})
    24  
    25  	Context("when running with succinct and normal verbosity", func() {
    26  		argGroups := [][]string{
    27  			{"--no-color", "--seed=17"},
    28  			{"--no-color", "--seed=17", "--nodes=2"},
    29  			{"--no-color", "--seed=17", "--succinct"},
    30  			{"--no-color", "--seed=17", "--nodes=2", "--succinct"},
    31  		}
    32  		for _, args := range argGroups {
    33  			args := args
    34  			It(fmt.Sprintf("should emit a timeline (%s)", strings.Join(args, " ")), func() {
    35  				session := startGinkgo(fm.PathTo("timeline"), args...)
    36  				Eventually(session).Should(gexec.Exit(1))
    37  
    38  				Ω(session).Should(gbytes.Say(`3 specs`))
    39  				Ω(session).Should(gbytes.Say(`Automatically polling progress`))
    40  				Ω(session).Should(gbytes.Say(`>\s*time\.Sleep\(time\.Millisecond \* 200\)`))
    41  				Ω(session).Should(gbytes.Say(retryDenoter + ` \[FLAKEY TEST - TOOK 3 ATTEMPTS TO PASS\]`))
    42  				Ω(session).Should(gbytes.Say(`a full timeline a flaky test retries a few times`))
    43  				Ω(session).Should(gbytes.Say(`Report Entries >>`))
    44  				Ω(session).Should(gbytes.Say(`a report! - `))
    45  				Ω(session).Should(gbytes.Say(`  Of great value`))
    46  				Ω(session).Should(gbytes.Say(`a report! - `))
    47  				Ω(session).Should(gbytes.Say(`  Of great value`))
    48  				Ω(session).Should(gbytes.Say(`a report! - `))
    49  				Ω(session).Should(gbytes.Say(`  Of great value`))
    50  				Ω(session).Should(gbytes.Say(`<< Report Entries`))
    51  				Ω(session).Should(gbytes.Say(denoter + ` \[TIMEDOUT\]`))
    52  				Ω(session).Should(gbytes.Say(`a full timeline a test with multiple failures \[It\] times out`))
    53  				Ω(session).Should(gbytes.Say(`Timeline >>`))
    54  				Ω(session).Should(gbytes.Say(`STEP: waiting...`))
    55  				Ω(session).Should(gbytes.Say(`\[TIMEDOUT] in \[It\]`))
    56  				Ω(session).Should(gbytes.Say(`then failing!`))
    57  				Ω(session).Should(gbytes.Say(`\[FAILED\] in \[It\]`))
    58  				Ω(session).Should(gbytes.Say(`\[PANICKED\] in \[AfterEach\]`))
    59  				Ω(session).Should(gbytes.Say(`<< Timeline`))
    60  				Ω(session).Should(gbytes.Say(`\[TIMEDOUT\] A node timeout occurred`))
    61  				Ω(session).Should(gbytes.Say(`This is the Progress Report generated when the node timeout occurred:`))
    62  				Ω(session).Should(gbytes.Say(`>.*<-ctx.Done\(\)`))
    63  				Ω(session).Should(gbytes.Say(`\[FAILED\] A node timeout occurred and then the following failure was recorded in the timedout node before it exited:`))
    64  				Ω(session).Should(gbytes.Say(`welp`))
    65  				Ω(session).Should(gbytes.Say(`In \[It\] at:`))
    66  				Ω(session).Should(gbytes.Say(`There were additional failures detected.  To view them in detail run ginkgo -vv`))
    67  				Ω(session).Should(gbytes.Say(denoter))
    68  				Ω(session).Should(gbytes.Say(`Summarizing 1 Failure:`))
    69  				Ω(session).Should(gbytes.Say(`\[TIMEDOUT\]`))
    70  			})
    71  		}
    72  	})
    73  
    74  	Context("when running with -v", func() {
    75  		It("should emit a timeline", func() {
    76  			session := startGinkgo(fm.PathTo("timeline"), "--no-color", "--seed=17", "-v")
    77  			Eventually(session).Should(gexec.Exit(1))
    78  
    79  			Ω(session).Should(gbytes.Say(`3 specs`))
    80  
    81  			Ω(session).Should(gbytes.Say(`a full timeline a flaky test retries a few times`))
    82  			Ω(session).Should(gbytes.Say(`STEP: logging some events`))
    83  			Ω(session).Should(gbytes.Say(`hello!`))
    84  			Ω(session).Should(gbytes.Say(`a report!`))
    85  			Ω(session).Should(gbytes.Say(`  Of great value`))
    86  			Ω(session).Should(gbytes.Say(`let's try...`))
    87  			Ω(session).Should(gbytes.Say(`\[FAILED\] in \[It\]`))
    88  			Ω(session).Should(gbytes.Say(`STEP: cleaning up a bit`))
    89  			Ω(session).Should(gbytes.Say(`all done!`))
    90  			Ω(session).Should(gbytes.Say(`Attempt #1 Failed.  Retrying ` + retryDenoter))
    91  
    92  			Ω(session).Should(gbytes.Say(`STEP: logging some events`))
    93  			Ω(session).Should(gbytes.Say(`hello!`))
    94  			Ω(session).Should(gbytes.Say(`a report!`))
    95  			Ω(session).Should(gbytes.Say(`  Of great value`))
    96  			Ω(session).Should(gbytes.Say(`let's try...`))
    97  			Ω(session).Should(gbytes.Say(`\[FAILED\] in \[It\]`))
    98  			Ω(session).Should(gbytes.Say(`STEP: cleaning up a bit`))
    99  			Ω(session).Should(gbytes.Say(`all done!`))
   100  			Ω(session).Should(gbytes.Say(`Attempt #2 Failed.  Retrying ` + retryDenoter))
   101  
   102  			Ω(session).Should(gbytes.Say(`STEP: logging some events`))
   103  			Ω(session).Should(gbytes.Say(`hello!`))
   104  			Ω(session).Should(gbytes.Say(`a report!`))
   105  			Ω(session).Should(gbytes.Say(`  Of great value`))
   106  			Ω(session).Should(gbytes.Say(`let's try...`))
   107  			Ω(session).Should(gbytes.Say(`hooray!`))
   108  			Ω(session).Should(gbytes.Say(`feeling sleepy...`))
   109  			Ω(session).Should(gbytes.Say(`Automatically polling progress`))
   110  			Ω(session).Should(gbytes.Say(`>\s*time\.Sleep\(time.Millisecond \* 200\)`))
   111  			Ω(session).Should(gbytes.Say(`STEP: cleaning up a bit`))
   112  			Ω(session).Should(gbytes.Say(`all done!`))
   113  			Ω(session).Should(gbytes.Say(retryDenoter + ` \[FLAKEY TEST - TOOK 3 ATTEMPTS TO PASS\]`))
   114  
   115  			Ω(session).Should(gbytes.Say(`a full timeline a test with multiple failures \[It\] times out`))
   116  			Ω(session).Should(gbytes.Say(`\[TIMEDOUT\] A node timeout occurred`))
   117  			Ω(session).Should(gbytes.Say(`This is the Progress Report generated when the node timeout occurred:`))
   118  			Ω(session).Should(gbytes.Say(`>\s*<-ctx\.Done\(\)`))
   119  			Ω(session).Should(gbytes.Say(`\[FAILED\] A node timeout occurred and then the following failure was recorded in the timedout node before it exited:`))
   120  			Ω(session).Should(gbytes.Say(`welp`))
   121  			Ω(session).Should(gbytes.Say(`In \[It\]`))
   122  			Ω(session).Should(gbytes.Say(`There were additional failures detected.  To view them in detail run ginkgo -vv`))
   123  
   124  			Ω(session).Should(gbytes.Say(`a full timeline passes happily`))
   125  			Ω(session).Should(gbytes.Say(`a verbose-only report`))
   126  			Ω(session).ShouldNot(gbytes.Say(`a hidden report`))
   127  			Ω(session).Should(gbytes.Say(denoter))
   128  
   129  			Ω(session).Should(gbytes.Say(`Summarizing 1 Failure:`))
   130  			Ω(session).Should(gbytes.Say(`\[TIMEDOUT\]`))
   131  		})
   132  	})
   133  
   134  	Context("when running with -vv", func() {
   135  		It("should emit a timeline", func() {
   136  			session := startGinkgo(fm.PathTo("timeline"), "--no-color", "--seed=17", "-vv")
   137  			Eventually(session).Should(gexec.Exit(1))
   138  
   139  			Ω(session).Should(gbytes.Say(`3 specs`))
   140  
   141  			Ω(session).Should(gbytes.Say(`a full timeline\n`))
   142  			Ω(session).Should(gbytes.Say(`a flaky test\n`))
   143  			Ω(session).Should(gbytes.Say(`retries a few times\n`))
   144  			Ω(session).Should(gbytes.Say(`> Enter \[BeforeEach\] a flaky test`))
   145  			Ω(session).Should(gbytes.Say(`STEP: logging some events`))
   146  			Ω(session).Should(gbytes.Say(`hello!`))
   147  			Ω(session).Should(gbytes.Say(`a report!`))
   148  			Ω(session).Should(gbytes.Say(`  Of great value`))
   149  			Ω(session).Should(gbytes.Say(`< Exit \[BeforeEach\] a flaky test`))
   150  			Ω(session).Should(gbytes.Say(`let's try...`))
   151  			Ω(session).Should(gbytes.Say(`\[FAILED\] bam!`))
   152  			Ω(session).Should(gbytes.Say(`In \[It\]`))
   153  			Ω(session).Should(gbytes.Say(`STEP: cleaning up a bit`))
   154  			Ω(session).Should(gbytes.Say(`all done!`))
   155  			Ω(session).Should(gbytes.Say(`END STEP: cleaning up a bit`))
   156  			Ω(session).Should(gbytes.Say(`Attempt #1 Failed.  Retrying ` + retryDenoter))
   157  
   158  			Ω(session).Should(gbytes.Say(`STEP: logging some events`))
   159  			Ω(session).Should(gbytes.Say(`hello!`))
   160  			Ω(session).Should(gbytes.Say(`a report!`))
   161  			Ω(session).Should(gbytes.Say(`  Of great value`))
   162  			Ω(session).Should(gbytes.Say(`let's try...`))
   163  			Ω(session).Should(gbytes.Say(`\[FAILED\] bam!`))
   164  			Ω(session).Should(gbytes.Say(`In \[It\]`))
   165  			Ω(session).Should(gbytes.Say(`STEP: cleaning up a bit`))
   166  			Ω(session).Should(gbytes.Say(`all done!`))
   167  			Ω(session).Should(gbytes.Say(`Attempt #2 Failed.  Retrying ` + retryDenoter))
   168  
   169  			Ω(session).Should(gbytes.Say(`STEP: logging some events`))
   170  			Ω(session).Should(gbytes.Say(`hello!`))
   171  			Ω(session).Should(gbytes.Say(`a report!`))
   172  			Ω(session).Should(gbytes.Say(`  Of great value`))
   173  			Ω(session).Should(gbytes.Say(`let's try...`))
   174  			Ω(session).Should(gbytes.Say(`hooray!`))
   175  			Ω(session).Should(gbytes.Say(`feeling sleepy...`))
   176  			Ω(session).Should(gbytes.Say(`Automatically polling progress`))
   177  			Ω(session).Should(gbytes.Say(`>\s*time\.Sleep\(time.Millisecond \* 200\)`))
   178  			Ω(session).Should(gbytes.Say(`STEP: cleaning up a bit`))
   179  			Ω(session).Should(gbytes.Say(`all done!`))
   180  			Ω(session).Should(gbytes.Say(retryDenoter + ` \[FLAKEY TEST - TOOK 3 ATTEMPTS TO PASS\]`))
   181  
   182  			Ω(session).Should(gbytes.Say(`times out`))
   183  			Ω(session).Should(gbytes.Say(`\[TIMEDOUT\] A node timeout occurred`))
   184  			Ω(session).Should(gbytes.Say(`This is the Progress Report generated when the node timeout occurred:`))
   185  			Ω(session).Should(gbytes.Say(`>\s*<-ctx\.Done\(\)`))
   186  			Ω(session).Should(gbytes.Say(`\[FAILED\] A node timeout occurred and then the following failure was recorded in the timedout node before it exited:`))
   187  			Ω(session).Should(gbytes.Say(`welp`))
   188  			Ω(session).Should(gbytes.Say(`In \[It\]`))
   189  			Ω(session).Should(gbytes.Say(`\[PANICKED\] Test Panicked`))
   190  			Ω(session).Should(gbytes.Say(`aaah!`))
   191  			Ω(session).Should(gbytes.Say(`Full Stack Trace`))
   192  			Ω(session).Should(gbytes.Say(denoter + ` \[TIMEDOUT\]`))
   193  
   194  			Ω(session).Should(gbytes.Say(`passes happily`))
   195  			Ω(session).Should(gbytes.Say(`> Enter \[It\] passes happily`))
   196  			Ω(session).Should(gbytes.Say(`a verbose-only report`))
   197  			Ω(session).ShouldNot(gbytes.Say(`a hidden report`))
   198  			Ω(session).Should(gbytes.Say(`< Exit \[It\] passes happily`))
   199  			Ω(session).Should(gbytes.Say(denoter))
   200  
   201  			Ω(session).Should(gbytes.Say(`Summarizing 1 Failure:`))
   202  			Ω(session).Should(gbytes.Say(`\[TIMEDOUT\]`))
   203  		})
   204  	})
   205  
   206  	Context("when running with -v in parallel", func() {
   207  		It("should emit a timeline", func() {
   208  			session := startGinkgo(fm.PathTo("timeline"), "--no-color", "--seed=17", "-v", "-nodes=2")
   209  			Eventually(session).Should(gexec.Exit(1))
   210  
   211  			Ω(session).Should(gbytes.Say(`3 specs`))
   212  
   213  			Ω(session).Should(gbytes.Say(retryDenoter + ` \[FLAKEY TEST - TOOK 3 ATTEMPTS TO PASS\]`))
   214  			Ω(session).Should(gbytes.Say(`STEP: logging some events`))
   215  			Ω(session).Should(gbytes.Say(`hello!`))
   216  			Ω(session).Should(gbytes.Say(`a report!`))
   217  			Ω(session).Should(gbytes.Say(`  Of great value`))
   218  			Ω(session).Should(gbytes.Say(`let's try...`))
   219  			Ω(session).Should(gbytes.Say(`\[FAILED\] in \[It\]`))
   220  			Ω(session).Should(gbytes.Say(`STEP: cleaning up a bit`))
   221  			Ω(session).Should(gbytes.Say(`all done!`))
   222  			Ω(session).Should(gbytes.Say(`Attempt #1 Failed.  Retrying ` + retryDenoter))
   223  
   224  			Ω(session).Should(gbytes.Say(`STEP: logging some events`))
   225  			Ω(session).Should(gbytes.Say(`hello!`))
   226  			Ω(session).Should(gbytes.Say(`a report!`))
   227  			Ω(session).Should(gbytes.Say(`  Of great value`))
   228  			Ω(session).Should(gbytes.Say(`let's try...`))
   229  			Ω(session).Should(gbytes.Say(`\[FAILED\] in \[It\]`))
   230  			Ω(session).Should(gbytes.Say(`STEP: cleaning up a bit`))
   231  			Ω(session).Should(gbytes.Say(`all done!`))
   232  			Ω(session).Should(gbytes.Say(`Attempt #2 Failed.  Retrying ` + retryDenoter))
   233  
   234  			Ω(session).Should(gbytes.Say(`STEP: logging some events`))
   235  			Ω(session).Should(gbytes.Say(`hello!`))
   236  			Ω(session).Should(gbytes.Say(`a report!`))
   237  			Ω(session).Should(gbytes.Say(`  Of great value`))
   238  			Ω(session).Should(gbytes.Say(`let's try...`))
   239  			Ω(session).Should(gbytes.Say(`hooray!`))
   240  			Ω(session).Should(gbytes.Say(`feeling sleepy...`))
   241  			Ω(session).Should(gbytes.Say(`Automatically polling progress`))
   242  			Ω(session).Should(gbytes.Say(`>\s*time\.Sleep\(time.Millisecond \* 200\)`))
   243  			Ω(session).Should(gbytes.Say(`STEP: cleaning up a bit`))
   244  			Ω(session).Should(gbytes.Say(`all done!`))
   245  
   246  			Ω(session).Should(gbytes.Say(`a full timeline a test with multiple failures \[It\] times out`))
   247  			Ω(session).Should(gbytes.Say(`\[TIMEDOUT\] A node timeout occurred`))
   248  			Ω(session).Should(gbytes.Say(`This is the Progress Report generated when the node timeout occurred:`))
   249  			Ω(session).Should(gbytes.Say(`>\s*<-ctx\.Done\(\)`))
   250  			Ω(session).Should(gbytes.Say(`\[FAILED\] A node timeout occurred and then the following failure was recorded in the timedout node before it exited:`))
   251  			Ω(session).Should(gbytes.Say(`welp`))
   252  			Ω(session).Should(gbytes.Say(`In \[It\]`))
   253  			Ω(session).Should(gbytes.Say(`There were additional failures detected.  To view them in detail run ginkgo -vv`))
   254  
   255  			Ω(session).Should(gbytes.Say(denoter))
   256  			Ω(session).Should(gbytes.Say(`a full timeline passes happily`))
   257  			Ω(session).Should(gbytes.Say(`a verbose-only report`))
   258  			Ω(session).ShouldNot(gbytes.Say(`a hidden report`))
   259  
   260  			Ω(session).Should(gbytes.Say(`Summarizing 1 Failure:`))
   261  			Ω(session).Should(gbytes.Say(`\[TIMEDOUT\]`))
   262  		})
   263  	})
   264  
   265  	Context("when running with -vv in parallel", func() {
   266  		It("should emit a timeline", func() {
   267  			session := startGinkgo(fm.PathTo("timeline"), "--no-color", "--seed=17", "-vv", "-nodes=2")
   268  			Eventually(session).Should(gexec.Exit(1))
   269  
   270  			Ω(session).Should(gbytes.Say(`3 specs`))
   271  
   272  			Ω(session).Should(gbytes.Say(retryDenoter + ` \[FLAKEY TEST - TOOK 3 ATTEMPTS TO PASS\]`))
   273  			Ω(session).Should(gbytes.Say(`a full timeline\n`))
   274  			Ω(session).Should(gbytes.Say(`a flaky test\n`))
   275  			Ω(session).Should(gbytes.Say(`retries a few times\n`))
   276  			Ω(session).Should(gbytes.Say(`> Enter \[BeforeEach\] a flaky test`))
   277  			Ω(session).Should(gbytes.Say(`STEP: logging some events`))
   278  			Ω(session).Should(gbytes.Say(`hello!`))
   279  			Ω(session).Should(gbytes.Say(`a report!`))
   280  			Ω(session).Should(gbytes.Say(`  Of great value`))
   281  			Ω(session).Should(gbytes.Say(`< Exit \[BeforeEach\] a flaky test`))
   282  			Ω(session).Should(gbytes.Say(`let's try...`))
   283  			Ω(session).Should(gbytes.Say(`\[FAILED\] Failure recorded during attempt 1:`))
   284  			Ω(session).Should(gbytes.Say(`bam!`))
   285  			Ω(session).Should(gbytes.Say(`In \[It\]`))
   286  			Ω(session).Should(gbytes.Say(`STEP: cleaning up a bit`))
   287  			Ω(session).Should(gbytes.Say(`all done!`))
   288  			Ω(session).Should(gbytes.Say(`END STEP: cleaning up a bit`))
   289  			Ω(session).Should(gbytes.Say(`Attempt #1 Failed.  Retrying ` + retryDenoter))
   290  
   291  			Ω(session).Should(gbytes.Say(`STEP: logging some events`))
   292  			Ω(session).Should(gbytes.Say(`hello!`))
   293  			Ω(session).Should(gbytes.Say(`a report!`))
   294  			Ω(session).Should(gbytes.Say(`  Of great value`))
   295  			Ω(session).Should(gbytes.Say(`let's try...`))
   296  			Ω(session).Should(gbytes.Say(`\[FAILED\] Failure recorded during attempt 2:`))
   297  			Ω(session).Should(gbytes.Say(`bam!`))
   298  			Ω(session).Should(gbytes.Say(`In \[It\]`))
   299  			Ω(session).Should(gbytes.Say(`STEP: cleaning up a bit`))
   300  			Ω(session).Should(gbytes.Say(`all done!`))
   301  			Ω(session).Should(gbytes.Say(`Attempt #2 Failed.  Retrying ` + retryDenoter))
   302  
   303  			Ω(session).Should(gbytes.Say(`STEP: logging some events`))
   304  			Ω(session).Should(gbytes.Say(`hello!`))
   305  			Ω(session).Should(gbytes.Say(`a report!`))
   306  			Ω(session).Should(gbytes.Say(`  Of great value`))
   307  			Ω(session).Should(gbytes.Say(`let's try...`))
   308  			Ω(session).Should(gbytes.Say(`hooray!`))
   309  			Ω(session).Should(gbytes.Say(`feeling sleepy...`))
   310  			Ω(session).Should(gbytes.Say(`Automatically polling progress`))
   311  			Ω(session).Should(gbytes.Say(`>\s*time\.Sleep\(time.Millisecond \* 200\)`))
   312  			Ω(session).Should(gbytes.Say(`STEP: cleaning up a bit`))
   313  			Ω(session).Should(gbytes.Say(`all done!`))
   314  
   315  			Ω(session).Should(gbytes.Say(denoter + ` \[TIMEDOUT\]`))
   316  			Ω(session).Should(gbytes.Say(`times out`))
   317  			Ω(session).Should(gbytes.Say(`\[TIMEDOUT\] A node timeout occurred`))
   318  			Ω(session).Should(gbytes.Say(`This is the Progress Report generated when the node timeout occurred:`))
   319  			Ω(session).Should(gbytes.Say(`>\s*<-ctx\.Done\(\)`))
   320  			Ω(session).Should(gbytes.Say(`\[FAILED\] A node timeout occurred and then the following failure was recorded in the timedout node before it exited:`))
   321  			Ω(session).Should(gbytes.Say(`welp`))
   322  			Ω(session).Should(gbytes.Say(`In \[It\]`))
   323  			Ω(session).Should(gbytes.Say(`\[PANICKED\] Test Panicked`))
   324  			Ω(session).Should(gbytes.Say(`aaah!`))
   325  			Ω(session).Should(gbytes.Say(`Full Stack Trace`))
   326  
   327  			Ω(session).Should(gbytes.Say(denoter))
   328  			Ω(session).Should(gbytes.Say(`passes happily`))
   329  			Ω(session).Should(gbytes.Say(`> Enter \[It\] passes happily`))
   330  			Ω(session).Should(gbytes.Say(`a verbose-only report`))
   331  			Ω(session).ShouldNot(gbytes.Say(`a hidden report`))
   332  			Ω(session).Should(gbytes.Say(`< Exit \[It\] passes happily`))
   333  
   334  			Ω(session).Should(gbytes.Say(`Summarizing 1 Failure:`))
   335  			Ω(session).Should(gbytes.Say(`\[TIMEDOUT\]`))
   336  		})
   337  	})
   338  })
   339  

View as plain text