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  })