github.com/ddev/ddev@v1.23.2-0.20240519125000-d824ffe36ff3/pkg/ddevapp/extra_expose_test.go (about) 1 package ddevapp_test 2 3 import ( 4 "fmt" 5 "github.com/ddev/ddev/pkg/dockerutil" 6 "os" 7 "path/filepath" 8 "testing" 9 10 "github.com/ddev/ddev/pkg/ddevapp" 11 "github.com/ddev/ddev/pkg/exec" 12 "github.com/ddev/ddev/pkg/testcommon" 13 asrt "github.com/stretchr/testify/assert" 14 "github.com/stretchr/testify/require" 15 ) 16 17 // TestExtraPortExpose tests exposing additional ports with web_extra_exposed_ports. 18 // It also tests web_extra_daemons 19 func TestExtraPortExpose(t *testing.T) { 20 if dockerutil.IsColima() || dockerutil.IsLima() { 21 t.Skip("skipping on Lima/Colima because of unpredictable behavior, unable to connect") 22 } 23 assert := asrt.New(t) 24 25 site := TestSites[0] 26 27 testcommon.ClearDockerEnv() 28 app := new(ddevapp.DdevApp) 29 err := app.Init(site.Dir) 30 assert.NoError(err) 31 32 t.Cleanup(func() { 33 err = app.Stop(true, false) 34 assert.NoError(err) 35 _ = os.RemoveAll(filepath.Join(app.AppRoot, "testfile1.html")) 36 }) 37 38 err = os.WriteFile(filepath.Join(app.AppRoot, "testfile.html"), []byte(`this is test1 in root`), 0755) 39 require.NoError(t, err) 40 err = os.MkdirAll(filepath.Join(app.AppRoot, "sub"), 0777) 41 require.NoError(t, err) 42 err = os.WriteFile(filepath.Join(app.AppRoot, "sub", "testfile.html"), []byte(`this is test2 in root/sub`), 0755) 43 require.NoError(t, err) 44 45 app.WebExtraExposedPorts = []ddevapp.WebExposedPort{ 46 {Name: "first", WebContainerPort: 3000, HTTPPort: 2999, HTTPSPort: 3000}, 47 {Name: "second", WebContainerPort: 4000, HTTPPort: 3999, HTTPSPort: 4000}, 48 } 49 app.WebExtraDaemons = []ddevapp.WebExtraDaemon{ 50 {Name: "FirstDaemon", Command: "php -S 0.0.0.0:3000", Directory: "/var/www/html"}, 51 {Name: "SecondDaemon", Command: "php -S 0.0.0.0:4000", Directory: "/var/www/html/sub"}, 52 } 53 err = app.Start() 54 if err != nil { 55 logs, logErr := exec.RunCommand("docker", []string{"logs", "ddev-" + app.Name + "-web"}) 56 t.Fatalf("app failed to start: %v, logErr=%v logs=%v", err, logErr, logs) 57 } 58 59 // Careful with portsToTest because https ports won't work on GitHub Actions Colima tests (although they work fine on normal Mac) 60 portsToTest := []string{"3000", "4000"} 61 if app.CanUseHTTPOnly() { 62 portsToTest = []string{"2999", "3999"} 63 } 64 65 for i, p := range portsToTest { 66 url := fmt.Sprintf("%s:%s/testfile.html", app.GetPrimaryURL(), p) 67 out, resp, err := testcommon.GetLocalHTTPResponse(t, url) 68 require.NoError(t, err, "failed to get hit url %s, out=%s, resp=%v err=%v", url, out, resp, err) 69 require.Contains(t, out, fmt.Sprintf("this is test%d", i+1)) 70 } 71 }