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  }