github.com/drud/ddev@v1.21.5-alpha1.0.20230226034409-94fcc4b94453/pkg/ddevapp/extra_expose_test.go (about)

     1  package ddevapp_test
     2  
     3  import (
     4  	"fmt"
     5  	. "github.com/drud/ddev/pkg/ddevapp"
     6  	"github.com/drud/ddev/pkg/exec"
     7  	"github.com/drud/ddev/pkg/globalconfig"
     8  	"github.com/drud/ddev/pkg/nodeps"
     9  	"github.com/drud/ddev/pkg/testcommon"
    10  	asrt "github.com/stretchr/testify/assert"
    11  	"github.com/stretchr/testify/require"
    12  	"os"
    13  	"path/filepath"
    14  	"testing"
    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  	assert := asrt.New(t)
    21  
    22  	site := TestSites[0]
    23  
    24  	testcommon.ClearDockerEnv()
    25  	app := new(DdevApp)
    26  	err := app.Init(site.Dir)
    27  	assert.NoError(err)
    28  
    29  	t.Cleanup(func() {
    30  		err = app.Stop(true, false)
    31  		assert.NoError(err)
    32  		err = os.RemoveAll(filepath.Join(app.AppRoot, "testfile1.html"))
    33  		assert.NoError(err)
    34  	})
    35  
    36  	err = os.WriteFile(filepath.Join(app.AppRoot, "testfile.html"), []byte(`this is test1 in root`), 0755)
    37  	require.NoError(t, err)
    38  	err = os.MkdirAll(filepath.Join(app.AppRoot, "sub"), 0777)
    39  	require.NoError(t, err)
    40  	err = os.WriteFile(filepath.Join(app.AppRoot, "sub", "testfile.html"), []byte(`this is test2 in root/sub`), 0755)
    41  	require.NoError(t, err)
    42  
    43  	app.WebExtraExposedPorts = []WebExposedPort{
    44  		{Name: "first", WebContainerPort: 3000, HTTPPort: 2999, HTTPSPort: 3000},
    45  		{Name: "second", WebContainerPort: 4000, HTTPPort: 3999, HTTPSPort: 4000},
    46  	}
    47  	app.WebExtraDaemons = []WebExtraDaemon{
    48  		{Name: "FirstDaemon", Command: "php -S 0.0.0.0:3000", Directory: "/var/www/html"},
    49  		{Name: "SecondDaemon", Command: "php -S 0.0.0.0:4000", Directory: "/var/www/html/sub"},
    50  	}
    51  	err = app.Start()
    52  	if err != nil {
    53  		logs, logErr := exec.RunCommand("docker", []string{"logs", "ddev-" + app.Name + "-web"})
    54  		t.Fatalf("app failed to start: %v, logErr=%v logs=%v", err, logErr, logs)
    55  	}
    56  
    57  	// Careful with portsToTest because https ports won't work on github actions Colima tests (although they work fine on normal mac)
    58  	portsToTest := []string{"3000", "4000"}
    59  	if !nodeps.IsGitpod() && !nodeps.IsCodespaces() && (globalconfig.GetCAROOT() == "" || IsRouterDisabled(app)) {
    60  		portsToTest = []string{"2999", "3999"}
    61  	}
    62  
    63  	for i, p := range portsToTest {
    64  		url := fmt.Sprintf("%s:%s/testfile.html", app.GetPrimaryURL(), p)
    65  		out, resp, err := testcommon.GetLocalHTTPResponse(t, url)
    66  		assert.NoError(err, "failed to get hit url %s, out=%s, resp=%v err=%v", url, out, resp, err)
    67  		assert.Contains(out, fmt.Sprintf("this is test%d", i+1))
    68  	}
    69  }