run_test.go 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483
  1. package integration_test
  2. import (
  3. "fmt"
  4. "io/ioutil"
  5. "os"
  6. "regexp"
  7. "runtime"
  8. "strings"
  9. . "github.com/onsi/ginkgo"
  10. "github.com/onsi/ginkgo/types"
  11. . "github.com/onsi/gomega"
  12. "github.com/onsi/gomega/gbytes"
  13. "github.com/onsi/gomega/gexec"
  14. )
  15. var _ = Describe("Running Specs", func() {
  16. var pathToTest string
  17. isWindows := (runtime.GOOS == "windows")
  18. denoter := "•"
  19. if isWindows {
  20. denoter = "+"
  21. }
  22. Context("when pointed at the current directory", func() {
  23. BeforeEach(func() {
  24. pathToTest = tmpPath("ginkgo")
  25. copyIn(fixturePath("passing_ginkgo_tests"), pathToTest, false)
  26. })
  27. It("should run the tests in the working directory", func() {
  28. session := startGinkgo(pathToTest, "--noColor")
  29. Eventually(session).Should(gexec.Exit(0))
  30. output := string(session.Out.Contents())
  31. Ω(output).Should(ContainSubstring("Running Suite: Passing_ginkgo_tests Suite"))
  32. Ω(output).Should(ContainSubstring(strings.Repeat(denoter, 4)))
  33. Ω(output).Should(ContainSubstring("SUCCESS! -- 4 Passed"))
  34. Ω(output).Should(ContainSubstring("Test Suite Passed"))
  35. })
  36. })
  37. Context("when passed an explicit package to run", func() {
  38. BeforeEach(func() {
  39. pathToTest = tmpPath("ginkgo")
  40. copyIn(fixturePath("passing_ginkgo_tests"), pathToTest, false)
  41. })
  42. It("should run the ginkgo style tests", func() {
  43. session := startGinkgo(tmpDir, "--noColor", pathToTest)
  44. Eventually(session).Should(gexec.Exit(0))
  45. output := string(session.Out.Contents())
  46. Ω(output).Should(ContainSubstring("Running Suite: Passing_ginkgo_tests Suite"))
  47. Ω(output).Should(ContainSubstring(strings.Repeat(denoter, 4)))
  48. Ω(output).Should(ContainSubstring("SUCCESS! -- 4 Passed"))
  49. Ω(output).Should(ContainSubstring("Test Suite Passed"))
  50. })
  51. })
  52. Context("when passed a number of packages to run", func() {
  53. BeforeEach(func() {
  54. pathToTest = tmpPath("ginkgo")
  55. otherPathToTest := tmpPath("other")
  56. copyIn(fixturePath("passing_ginkgo_tests"), pathToTest, false)
  57. copyIn(fixturePath("more_ginkgo_tests"), otherPathToTest, false)
  58. })
  59. It("should run the ginkgo style tests", func() {
  60. session := startGinkgo(tmpDir, "--noColor", "--succinct=false", "ginkgo", "./other")
  61. Eventually(session).Should(gexec.Exit(0))
  62. output := string(session.Out.Contents())
  63. Ω(output).Should(ContainSubstring("Running Suite: Passing_ginkgo_tests Suite"))
  64. Ω(output).Should(ContainSubstring("Running Suite: More_ginkgo_tests Suite"))
  65. Ω(output).Should(ContainSubstring("Test Suite Passed"))
  66. })
  67. })
  68. Context("when passed a number of packages to run, some of which have focused tests", func() {
  69. BeforeEach(func() {
  70. pathToTest = tmpPath("ginkgo")
  71. otherPathToTest := tmpPath("other")
  72. focusedPathToTest := tmpPath("focused")
  73. copyIn(fixturePath("passing_ginkgo_tests"), pathToTest, false)
  74. copyIn(fixturePath("more_ginkgo_tests"), otherPathToTest, false)
  75. copyIn(fixturePath("focused_fixture"), focusedPathToTest, false)
  76. })
  77. It("should exit with a status code of 2 and explain why", func() {
  78. session := startGinkgo(tmpDir, "--noColor", "--succinct=false", "-r")
  79. Eventually(session).Should(gexec.Exit(types.GINKGO_FOCUS_EXIT_CODE))
  80. output := string(session.Out.Contents())
  81. Ω(output).Should(ContainSubstring("Running Suite: Passing_ginkgo_tests Suite"))
  82. Ω(output).Should(ContainSubstring("Running Suite: More_ginkgo_tests Suite"))
  83. Ω(output).Should(ContainSubstring("Test Suite Passed"))
  84. Ω(output).Should(ContainSubstring("Detected Programmatic Focus - setting exit status to %d", types.GINKGO_FOCUS_EXIT_CODE))
  85. })
  86. Context("when the GINKGO_EDITOR_INTEGRATION environment variable is set", func() {
  87. BeforeEach(func() {
  88. os.Setenv("GINKGO_EDITOR_INTEGRATION", "true")
  89. })
  90. AfterEach(func() {
  91. os.Setenv("GINKGO_EDITOR_INTEGRATION", "")
  92. })
  93. It("should exit with a status code of 0 to allow a coverage file to be generated", func() {
  94. session := startGinkgo(tmpDir, "--noColor", "--succinct=false", "-r")
  95. Eventually(session).Should(gexec.Exit(0))
  96. output := string(session.Out.Contents())
  97. Ω(output).Should(ContainSubstring("Running Suite: Passing_ginkgo_tests Suite"))
  98. Ω(output).Should(ContainSubstring("Running Suite: More_ginkgo_tests Suite"))
  99. Ω(output).Should(ContainSubstring("Test Suite Passed"))
  100. })
  101. })
  102. })
  103. Context("when told to skipPackages", func() {
  104. BeforeEach(func() {
  105. pathToTest = tmpPath("ginkgo")
  106. otherPathToTest := tmpPath("other")
  107. focusedPathToTest := tmpPath("focused")
  108. copyIn(fixturePath("passing_ginkgo_tests"), pathToTest, false)
  109. copyIn(fixturePath("more_ginkgo_tests"), otherPathToTest, false)
  110. copyIn(fixturePath("focused_fixture"), focusedPathToTest, false)
  111. })
  112. It("should skip packages that match the list", func() {
  113. session := startGinkgo(tmpDir, "--noColor", "--skipPackage=other,focused", "-r")
  114. Eventually(session).Should(gexec.Exit(0))
  115. output := string(session.Out.Contents())
  116. Ω(output).Should(ContainSubstring("Passing_ginkgo_tests Suite"))
  117. Ω(output).ShouldNot(ContainSubstring("More_ginkgo_tests Suite"))
  118. Ω(output).ShouldNot(ContainSubstring("Focused_fixture Suite"))
  119. Ω(output).Should(ContainSubstring("Test Suite Passed"))
  120. })
  121. Context("when all packages are skipped", func() {
  122. It("should not run anything, but still exit 0", func() {
  123. session := startGinkgo(tmpDir, "--noColor", "--skipPackage=other,focused,ginkgo", "-r")
  124. Eventually(session).Should(gexec.Exit(0))
  125. output := string(session.Out.Contents())
  126. Ω(output).Should(ContainSubstring("All tests skipped!"))
  127. Ω(output).ShouldNot(ContainSubstring("Passing_ginkgo_tests Suite"))
  128. Ω(output).ShouldNot(ContainSubstring("More_ginkgo_tests Suite"))
  129. Ω(output).ShouldNot(ContainSubstring("Focused_fixture Suite"))
  130. Ω(output).ShouldNot(ContainSubstring("Test Suite Passed"))
  131. })
  132. })
  133. })
  134. Context("when there are no tests to run", func() {
  135. It("should exit 1", func() {
  136. session := startGinkgo(tmpDir, "--noColor", "--skipPackage=other,focused", "-r")
  137. Eventually(session).Should(gexec.Exit(1))
  138. output := string(session.Err.Contents())
  139. Ω(output).Should(ContainSubstring("Found no test suites"))
  140. })
  141. })
  142. Context("when there are test files but `go test` reports there are no tests to run", func() {
  143. BeforeEach(func() {
  144. pathToTest = tmpPath("ginkgo")
  145. copyIn(fixturePath("no_test_fn"), pathToTest, false)
  146. })
  147. It("suggests running ginkgo bootstrap", func() {
  148. session := startGinkgo(tmpDir, "--noColor", "--skipPackage=other,focused", "-r")
  149. Eventually(session).Should(gexec.Exit(0))
  150. output := string(session.Err.Contents())
  151. Ω(output).Should(ContainSubstring(`Found no test suites, did you forget to run "ginkgo bootstrap"?`))
  152. })
  153. It("fails if told to requireSuite", func() {
  154. session := startGinkgo(tmpDir, "--noColor", "--skipPackage=other,focused", "-r", "-requireSuite")
  155. Eventually(session).Should(gexec.Exit(1))
  156. output := string(session.Err.Contents())
  157. Ω(output).Should(ContainSubstring(`Found no test suites, did you forget to run "ginkgo bootstrap"?`))
  158. })
  159. })
  160. Context("when told to randomizeSuites", func() {
  161. BeforeEach(func() {
  162. pathToTest = tmpPath("ginkgo")
  163. otherPathToTest := tmpPath("other")
  164. copyIn(fixturePath("passing_ginkgo_tests"), pathToTest, false)
  165. copyIn(fixturePath("more_ginkgo_tests"), otherPathToTest, false)
  166. })
  167. It("should skip packages that match the regexp", func() {
  168. session := startGinkgo(tmpDir, "--noColor", "--randomizeSuites", "-r", "--seed=2")
  169. Eventually(session).Should(gexec.Exit(0))
  170. Ω(session).Should(gbytes.Say("More_ginkgo_tests Suite"))
  171. Ω(session).Should(gbytes.Say("Passing_ginkgo_tests Suite"))
  172. session = startGinkgo(tmpDir, "--noColor", "--randomizeSuites", "-r", "--seed=3")
  173. Eventually(session).Should(gexec.Exit(0))
  174. Ω(session).Should(gbytes.Say("Passing_ginkgo_tests Suite"))
  175. Ω(session).Should(gbytes.Say("More_ginkgo_tests Suite"))
  176. })
  177. })
  178. Context("when pointed at a package with xunit style tests", func() {
  179. BeforeEach(func() {
  180. pathToTest = tmpPath("xunit")
  181. copyIn(fixturePath("xunit_tests"), pathToTest, false)
  182. })
  183. It("should run the xunit style tests", func() {
  184. session := startGinkgo(pathToTest)
  185. Eventually(session).Should(gexec.Exit(0))
  186. output := string(session.Out.Contents())
  187. Ω(output).Should(ContainSubstring("--- PASS: TestAlwaysTrue"))
  188. Ω(output).Should(ContainSubstring("Test Suite Passed"))
  189. })
  190. })
  191. Context("when pointed at a package with no tests", func() {
  192. BeforeEach(func() {
  193. pathToTest = tmpPath("no_tests")
  194. copyIn(fixturePath("no_tests"), pathToTest, false)
  195. })
  196. It("should fail", func() {
  197. session := startGinkgo(pathToTest, "--noColor")
  198. Eventually(session).Should(gexec.Exit(1))
  199. Ω(session.Err.Contents()).Should(ContainSubstring("Found no test suites"))
  200. })
  201. })
  202. Context("when pointed at a package that fails to compile", func() {
  203. BeforeEach(func() {
  204. pathToTest = tmpPath("does_not_compile")
  205. copyIn(fixturePath("does_not_compile"), pathToTest, false)
  206. })
  207. It("should fail", func() {
  208. session := startGinkgo(pathToTest, "--noColor")
  209. Eventually(session).Should(gexec.Exit(1))
  210. output := string(session.Out.Contents())
  211. Ω(output).Should(ContainSubstring("Failed to compile"))
  212. })
  213. })
  214. Context("when running in parallel", func() {
  215. BeforeEach(func() {
  216. pathToTest = tmpPath("ginkgo")
  217. copyIn(fixturePath("passing_ginkgo_tests"), pathToTest, false)
  218. })
  219. Context("with a specific number of -nodes", func() {
  220. It("should use the specified number of nodes", func() {
  221. session := startGinkgo(pathToTest, "--noColor", "-succinct", "-nodes=2")
  222. Eventually(session).Should(gexec.Exit(0))
  223. output := string(session.Out.Contents())
  224. Ω(output).Should(MatchRegexp(`\[\d+\] Passing_ginkgo_tests Suite - 4 specs - 2 nodes [%s]{4} SUCCESS! \d+(\.\d+)?[muµ]s`, regexp.QuoteMeta(denoter)))
  225. Ω(output).Should(ContainSubstring("Test Suite Passed"))
  226. })
  227. })
  228. Context("with -p", func() {
  229. It("it should autocompute the number of nodes", func() {
  230. session := startGinkgo(pathToTest, "--noColor", "-succinct", "-p")
  231. Eventually(session).Should(gexec.Exit(0))
  232. output := string(session.Out.Contents())
  233. nodes := runtime.NumCPU()
  234. if nodes == 1 {
  235. Skip("Can't test parallel testings with 1 CPU")
  236. }
  237. if nodes > 4 {
  238. nodes = nodes - 1
  239. }
  240. Ω(output).Should(MatchRegexp(`\[\d+\] Passing_ginkgo_tests Suite - 4 specs - %d nodes [%s]{4} SUCCESS! \d+(\.\d+)?[muµ]?s`, nodes, regexp.QuoteMeta(denoter)))
  241. Ω(output).Should(ContainSubstring("Test Suite Passed"))
  242. })
  243. })
  244. })
  245. Context("when running in parallel with -debug", func() {
  246. BeforeEach(func() {
  247. pathToTest = tmpPath("ginkgo")
  248. copyIn(fixturePath("debug_parallel_fixture"), pathToTest, false)
  249. })
  250. Context("without -v", func() {
  251. It("should emit node output to files on disk", func() {
  252. session := startGinkgo(pathToTest, "--nodes=2", "--debug")
  253. Eventually(session).Should(gexec.Exit(0))
  254. f0, err := ioutil.ReadFile(pathToTest + "/ginkgo-node-1.log")
  255. Ω(err).ShouldNot(HaveOccurred())
  256. f1, err := ioutil.ReadFile(pathToTest + "/ginkgo-node-2.log")
  257. Ω(err).ShouldNot(HaveOccurred())
  258. content := string(append(f0, f1...))
  259. for i := 0; i < 10; i += 1 {
  260. Ω(content).Should(ContainSubstring("StdOut %d\n", i))
  261. Ω(content).Should(ContainSubstring("GinkgoWriter %d\n", i))
  262. }
  263. })
  264. })
  265. Context("without -v", func() {
  266. It("should emit node output to files on disk, without duplicating the GinkgoWriter output", func() {
  267. session := startGinkgo(pathToTest, "--nodes=2", "--debug", "-v")
  268. Eventually(session).Should(gexec.Exit(0))
  269. f0, err := ioutil.ReadFile(pathToTest + "/ginkgo-node-1.log")
  270. Ω(err).ShouldNot(HaveOccurred())
  271. f1, err := ioutil.ReadFile(pathToTest + "/ginkgo-node-2.log")
  272. Ω(err).ShouldNot(HaveOccurred())
  273. content := string(append(f0, f1...))
  274. out := strings.Split(content, "GinkgoWriter 2")
  275. Ω(out).Should(HaveLen(2))
  276. })
  277. })
  278. })
  279. Context("when streaming in parallel", func() {
  280. BeforeEach(func() {
  281. pathToTest = tmpPath("ginkgo")
  282. copyIn(fixturePath("passing_ginkgo_tests"), pathToTest, false)
  283. })
  284. It("should print output in realtime", func() {
  285. session := startGinkgo(pathToTest, "--noColor", "-stream", "-nodes=2")
  286. Eventually(session).Should(gexec.Exit(0))
  287. output := string(session.Out.Contents())
  288. Ω(output).Should(ContainSubstring(`[1] Parallel test node 1/2.`))
  289. Ω(output).Should(ContainSubstring(`[2] Parallel test node 2/2.`))
  290. Ω(output).Should(ContainSubstring(`[1] SUCCESS!`))
  291. Ω(output).Should(ContainSubstring(`[2] SUCCESS!`))
  292. Ω(output).Should(ContainSubstring("Test Suite Passed"))
  293. })
  294. })
  295. Context("when running recursively", func() {
  296. BeforeEach(func() {
  297. passingTest := tmpPath("A")
  298. otherPassingTest := tmpPath("E")
  299. copyIn(fixturePath("passing_ginkgo_tests"), passingTest, false)
  300. copyIn(fixturePath("more_ginkgo_tests"), otherPassingTest, false)
  301. })
  302. Context("when all the tests pass", func() {
  303. Context("with the -r flag", func() {
  304. It("should run all the tests (in succinct mode) and succeed", func() {
  305. session := startGinkgo(tmpDir, "--noColor", "-r", ".")
  306. Eventually(session).Should(gexec.Exit(0))
  307. output := string(session.Out.Contents())
  308. outputLines := strings.Split(output, "\n")
  309. Ω(outputLines[0]).Should(MatchRegexp(`\[\d+\] Passing_ginkgo_tests Suite - 4/4 specs [%s]{4} SUCCESS! \d+(\.\d+)?[muµ]s PASS`, regexp.QuoteMeta(denoter)))
  310. Ω(outputLines[1]).Should(MatchRegexp(`\[\d+\] More_ginkgo_tests Suite - 2/2 specs [%s]{2} SUCCESS! \d+(\.\d+)?[muµ]s PASS`, regexp.QuoteMeta(denoter)))
  311. Ω(output).Should(ContainSubstring("Test Suite Passed"))
  312. })
  313. })
  314. Context("with a trailing /...", func() {
  315. It("should run all the tests (in succinct mode) and succeed", func() {
  316. session := startGinkgo(tmpDir, "--noColor", "./...")
  317. Eventually(session).Should(gexec.Exit(0))
  318. output := string(session.Out.Contents())
  319. outputLines := strings.Split(output, "\n")
  320. Ω(outputLines[0]).Should(MatchRegexp(`\[\d+\] Passing_ginkgo_tests Suite - 4/4 specs [%s]{4} SUCCESS! \d+(\.\d+)?[muµ]s PASS`, regexp.QuoteMeta(denoter)))
  321. Ω(outputLines[1]).Should(MatchRegexp(`\[\d+\] More_ginkgo_tests Suite - 2/2 specs [%s]{2} SUCCESS! \d+(\.\d+)?[muµ]s PASS`, regexp.QuoteMeta(denoter)))
  322. Ω(output).Should(ContainSubstring("Test Suite Passed"))
  323. })
  324. })
  325. })
  326. Context("when one of the packages has a failing tests", func() {
  327. BeforeEach(func() {
  328. failingTest := tmpPath("C")
  329. copyIn(fixturePath("failing_ginkgo_tests"), failingTest, false)
  330. })
  331. It("should fail and stop running tests", func() {
  332. session := startGinkgo(tmpDir, "--noColor", "-r")
  333. Eventually(session).Should(gexec.Exit(1))
  334. output := string(session.Out.Contents())
  335. outputLines := strings.Split(output, "\n")
  336. Ω(outputLines[0]).Should(MatchRegexp(`\[\d+\] Passing_ginkgo_tests Suite - 4/4 specs [%s]{4} SUCCESS! \d+(\.\d+)?[muµ]s PASS`, regexp.QuoteMeta(denoter)))
  337. Ω(outputLines[1]).Should(MatchRegexp(`\[\d+\] Failing_ginkgo_tests Suite - 2/2 specs`))
  338. Ω(output).Should(ContainSubstring(fmt.Sprintf("%s Failure", denoter)))
  339. Ω(output).ShouldNot(ContainSubstring("More_ginkgo_tests Suite"))
  340. Ω(output).Should(ContainSubstring("Test Suite Failed"))
  341. Ω(output).Should(ContainSubstring("Summarizing 1 Failure:"))
  342. Ω(output).Should(ContainSubstring("[Fail] FailingGinkgoTests [It] should fail"))
  343. })
  344. })
  345. Context("when one of the packages fails to compile", func() {
  346. BeforeEach(func() {
  347. doesNotCompileTest := tmpPath("C")
  348. copyIn(fixturePath("does_not_compile"), doesNotCompileTest, false)
  349. })
  350. It("should fail and stop running tests", func() {
  351. session := startGinkgo(tmpDir, "--noColor", "-r")
  352. Eventually(session).Should(gexec.Exit(1))
  353. output := string(session.Out.Contents())
  354. outputLines := strings.Split(output, "\n")
  355. Ω(outputLines[0]).Should(MatchRegexp(`\[\d+\] Passing_ginkgo_tests Suite - 4/4 specs [%s]{4} SUCCESS! \d+(\.\d+)?[muµ]s PASS`, regexp.QuoteMeta(denoter)))
  356. Ω(outputLines[1]).Should(ContainSubstring("Failed to compile C:"))
  357. Ω(output).ShouldNot(ContainSubstring("More_ginkgo_tests Suite"))
  358. Ω(output).Should(ContainSubstring("Test Suite Failed"))
  359. })
  360. })
  361. Context("when either is the case, but the keepGoing flag is set", func() {
  362. BeforeEach(func() {
  363. doesNotCompileTest := tmpPath("B")
  364. copyIn(fixturePath("does_not_compile"), doesNotCompileTest, false)
  365. failingTest := tmpPath("C")
  366. copyIn(fixturePath("failing_ginkgo_tests"), failingTest, false)
  367. })
  368. It("should soldier on", func() {
  369. session := startGinkgo(tmpDir, "--noColor", "-r", "-keepGoing")
  370. Eventually(session).Should(gexec.Exit(1))
  371. output := string(session.Out.Contents())
  372. outputLines := strings.Split(output, "\n")
  373. Ω(outputLines[0]).Should(MatchRegexp(`\[\d+\] Passing_ginkgo_tests Suite - 4/4 specs [%s]{4} SUCCESS! \d+(\.\d+)?[muµ]s PASS`, regexp.QuoteMeta(denoter)))
  374. Ω(outputLines[1]).Should(ContainSubstring("Failed to compile B:"))
  375. Ω(output).Should(MatchRegexp(`\[\d+\] Failing_ginkgo_tests Suite - 2/2 specs`))
  376. Ω(output).Should(ContainSubstring(fmt.Sprintf("%s Failure", denoter)))
  377. Ω(output).Should(MatchRegexp(`\[\d+\] More_ginkgo_tests Suite - 2/2 specs [%s]{2} SUCCESS! \d+(\.\d+)?[muµ]s PASS`, regexp.QuoteMeta(denoter)))
  378. Ω(output).Should(ContainSubstring("Test Suite Failed"))
  379. })
  380. })
  381. })
  382. Context("when told to keep going --untilItFails", func() {
  383. BeforeEach(func() {
  384. copyIn(fixturePath("eventually_failing"), tmpDir, false)
  385. })
  386. It("should keep rerunning the tests, until a failure occurs", func() {
  387. session := startGinkgo(tmpDir, "--untilItFails", "--noColor")
  388. Eventually(session).Should(gexec.Exit(1))
  389. Ω(session).Should(gbytes.Say("This was attempt #1"))
  390. Ω(session).Should(gbytes.Say("This was attempt #2"))
  391. Ω(session).Should(gbytes.Say("Tests failed on attempt #3"))
  392. //it should change the random seed between each test
  393. lines := strings.Split(string(session.Out.Contents()), "\n")
  394. randomSeeds := []string{}
  395. for _, line := range lines {
  396. if strings.Contains(line, "Random Seed:") {
  397. randomSeeds = append(randomSeeds, strings.Split(line, ": ")[1])
  398. }
  399. }
  400. Ω(randomSeeds[0]).ShouldNot(Equal(randomSeeds[1]))
  401. Ω(randomSeeds[1]).ShouldNot(Equal(randomSeeds[2]))
  402. Ω(randomSeeds[0]).ShouldNot(Equal(randomSeeds[2]))
  403. })
  404. })
  405. })