github.com/benchkram/bob@v0.0.0-20240314204020-b7a57f2f9be9/test/e2e/nixrun/run_test.go (about) 1 package nixruntest 2 3 import ( 4 "bufio" 5 "context" 6 "io" 7 "os" 8 "time" 9 10 . "github.com/onsi/ginkgo" 11 . "github.com/onsi/gomega" 12 13 "github.com/benchkram/bob/pkg/filepathutil" 14 ) 15 16 var _ = Describe("Testing new nix implementation", func() { 17 AfterEach(func() { 18 filepathutil.ClearListRecursiveCache() 19 }) 20 21 Context("init with dependencies set on bob file", func() { 22 It("installs dependencies set on bob file level for init", func() { 23 useBobfile("init_with_bob_dependencies") 24 defer releaseBobfile("init_with_bob_dependencies") 25 26 useProject("server") 27 defer releaseProject("server") 28 29 b, err := Bob() 30 Expect(err).NotTo(HaveOccurred()) 31 32 startScan() 33 defer stopScan() 34 35 cmdr, err := b.Run(context.Background(), "server") 36 Expect(err).NotTo(HaveOccurred()) 37 38 err = cmdr.Start() 39 Expect(err).NotTo(HaveOccurred()) 40 41 scanner := bufio.NewScanner(pr) 42 Eventually(func() string { 43 scanner.Scan() 44 return scanner.Text() 45 }, 5*time.Second).Should(ContainSubstring("PHP 8.0.18")) 46 47 err = cmdr.Stop() 48 Expect(err).NotTo(HaveOccurred()) 49 }) 50 }) 51 52 Context("init with dependencies set on task level", func() { 53 It("installs dependencies set on task level for init", func() { 54 useBobfile("init_with_task_dependencies") 55 defer releaseBobfile("init_with_task_dependencies") 56 57 useProject("server") 58 defer releaseProject("server") 59 60 b, err := Bob() 61 Expect(err).NotTo(HaveOccurred()) 62 63 startScan() 64 defer stopScan() 65 66 cmdr, err := b.Run(context.Background(), "server") 67 Expect(err).NotTo(HaveOccurred()) 68 69 err = cmdr.Start() 70 Expect(err).NotTo(HaveOccurred()) 71 72 scanner := bufio.NewScanner(pr) 73 Eventually(func() string { 74 scanner.Scan() 75 return scanner.Text() 76 }, 5*time.Second).Should(ContainSubstring("PHP 8.0.18")) 77 78 err = cmdr.Stop() 79 Expect(err).NotTo(HaveOccurred()) 80 }) 81 }) 82 83 Context("initOnce with dependencies set on bob file", func() { 84 It("installs dependencies set on bob file level for initOnce", func() { 85 useBobfile("init_once_with_bob_dependencies") 86 defer releaseBobfile("init_once_with_bob_dependencies") 87 88 useProject("server") 89 defer releaseProject("server") 90 91 b, err := Bob() 92 Expect(err).NotTo(HaveOccurred()) 93 94 startScan() 95 defer stopScan() 96 97 cmdr, err := b.Run(context.Background(), "server") 98 Expect(err).NotTo(HaveOccurred()) 99 100 err = cmdr.Start() 101 Expect(err).NotTo(HaveOccurred()) 102 103 scanner := bufio.NewScanner(pr) 104 Eventually(func() string { 105 scanner.Scan() 106 return scanner.Text() 107 }, 5*time.Second).Should(ContainSubstring("PHP 8.0.18")) 108 109 err = cmdr.Stop() 110 Expect(err).NotTo(HaveOccurred()) 111 }) 112 }) 113 114 Context("initOnce with dependencies set on task level", func() { 115 It("installs dependencies set on task level for initOnce", func() { 116 useBobfile("init_once_with_task_dependencies") 117 defer releaseBobfile("init_once_with_task_dependencies") 118 119 useProject("server") 120 defer releaseProject("server") 121 122 b, err := Bob() 123 Expect(err).NotTo(HaveOccurred()) 124 125 startScan() 126 defer stopScan() 127 128 cmdr, err := b.Run(context.Background(), "server") 129 Expect(err).NotTo(HaveOccurred()) 130 131 err = cmdr.Start() 132 Expect(err).NotTo(HaveOccurred()) 133 134 scanner := bufio.NewScanner(pr) 135 Eventually(func() string { 136 scanner.Scan() 137 return scanner.Text() 138 }, 5*time.Second).Should(ContainSubstring("PHP 8.0.18")) 139 140 err = cmdr.Stop() 141 Expect(err).NotTo(HaveOccurred()) 142 }) 143 }) 144 145 Context("binary with bob dependencies", func() { 146 It("installs dependencies set on bob file level", func() { 147 // update bob.yaml with mock content 148 err := os.Rename("binary_with_bob_dependencies.yaml", "bob.yaml") 149 Expect(err).NotTo(HaveOccurred()) 150 151 useProject("server-with-dep-inside") 152 defer releaseProject("server-with-dep-inside") 153 154 b, err := Bob() 155 Expect(err).NotTo(HaveOccurred()) 156 157 cmdr, err := b.Run(context.Background(), "server") 158 Expect(err).NotTo(HaveOccurred()) 159 160 err = cmdr.Start() 161 Expect(err).NotTo(HaveOccurred()) 162 163 Eventually(func() string { 164 for _, v := range cmdr.Subcommands() { 165 if v.Name() != "server" { 166 continue 167 } 168 buf := make([]byte, 30) 169 170 // FIXME: not able to read from stdout => test blocks 171 _, err := io.ReadFull(v.Stdout(), buf) 172 Expect(err).NotTo(HaveOccurred()) 173 174 return string(buf) 175 } 176 return "" 177 }, "5s").Should(ContainSubstring("PHP 8.0.18")) 178 179 err = cmdr.Stop() 180 Expect(err).NotTo(HaveOccurred()) 181 }) 182 }) 183 184 Context("binary with task dependencies", func() { 185 It("installs dependencies set on task level", func() { 186 useBobfile("binary_with_task_dependencies") 187 defer releaseBobfile("binary_with_task_dependencies") 188 189 useProject("server-with-dep-inside") 190 defer releaseProject("server-with-dep-inside") 191 192 b, err := Bob() 193 Expect(err).NotTo(HaveOccurred()) 194 195 cmdr, err := b.Run(context.Background(), "server") 196 Expect(err).NotTo(HaveOccurred()) 197 198 err = cmdr.Start() 199 Expect(err).NotTo(HaveOccurred()) 200 201 Eventually(func() string { 202 for _, v := range cmdr.Subcommands() { 203 if v.Name() != "server" { 204 continue 205 } 206 buf := make([]byte, 30) 207 208 // FIXME: not able to read from stdout => test blocks 209 _, err := io.ReadFull(v.Stdout(), buf) 210 Expect(err).NotTo(HaveOccurred()) 211 212 return string(buf) 213 } 214 return "" 215 }, 5*time.Second).Should(ContainSubstring("PHP 8.0.18")) 216 217 err = cmdr.Stop() 218 Expect(err).NotTo(HaveOccurred()) 219 }) 220 }) 221 })