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

     1  package ddevapp_test
     2  
     3  import (
     4  	"github.com/drud/ddev/pkg/ddevapp"
     5  	"github.com/drud/ddev/pkg/fileutil"
     6  	"github.com/drud/ddev/pkg/globalconfig"
     7  	"github.com/drud/ddev/pkg/testcommon"
     8  	asrt "github.com/stretchr/testify/assert"
     9  	"github.com/stretchr/testify/require"
    10  	"os"
    11  	"path/filepath"
    12  	"strings"
    13  	"testing"
    14  )
    15  
    16  // TestTraefikSimple tests basic traefik router usage
    17  func TestTraefikSimple(t *testing.T) {
    18  	assert := asrt.New(t)
    19  
    20  	// Make sure this leaves us in the original test directory
    21  	origDir, _ := os.Getwd()
    22  
    23  	site := TestSites[0] // 0 == wordpress
    24  	app, err := ddevapp.NewApp(site.Dir, true)
    25  	assert.NoError(err)
    26  
    27  	ddevapp.PowerOff()
    28  	origTraefik := globalconfig.DdevGlobalConfig.UseTraefik
    29  	globalconfig.DdevGlobalConfig.UseTraefik = true
    30  	err = globalconfig.WriteGlobalConfig(globalconfig.DdevGlobalConfig)
    31  	require.NoError(t, err)
    32  	origConfig := *app
    33  
    34  	t.Cleanup(func() {
    35  		err = os.Chdir(origDir)
    36  		assert.NoError(err)
    37  		err = app.Stop(true, false)
    38  		assert.NoError(err)
    39  		ddevapp.PowerOff()
    40  		err = origConfig.WriteConfig()
    41  		assert.NoError(err)
    42  		globalconfig.DdevGlobalConfig.UseTraefik = origTraefik
    43  		err = globalconfig.WriteGlobalConfig(globalconfig.DdevGlobalConfig)
    44  		assert.NoError(err)
    45  	})
    46  
    47  	app.AdditionalHostnames = []string{"one", "two", "*.wild"}
    48  	app.AdditionalFQDNs = []string{"onefullurl.ddev.site", "twofullurl.ddev.site", "*.wild.fqdn"}
    49  	err = app.WriteConfig()
    50  	require.NoError(t, err)
    51  	err = app.StartAndWait(5)
    52  	require.NoError(t, err)
    53  
    54  	desc, err := app.Describe(false)
    55  	assert.True(desc["use_traefik"].(bool))
    56  
    57  	// Test reachabiliity in each of the hostnames
    58  	httpURLs, httpsURLs, allURLs := app.GetAllURLs()
    59  
    60  	// If no mkcert trusted https, use only the httpURLs
    61  	// This is especially the case for colima
    62  	if globalconfig.GetCAROOT() == "" {
    63  		allURLs = httpURLs
    64  	}
    65  
    66  	for _, u := range allURLs {
    67  		// Use something here for wildcard
    68  		u = strings.Replace(u, `*`, `somewildcard`, 1)
    69  		_, err = testcommon.EnsureLocalHTTPContent(t, u+site.Safe200URIWithExpectation.URI, site.Safe200URIWithExpectation.Expect)
    70  		assert.NoError(err, "failed EnsureLocalHTTPContent() %s: %v", u+site.Safe200URIWithExpectation.URI, err)
    71  	}
    72  
    73  	// Test Reachability to PhpMyAdmin, which uses different technique
    74  	_, _ = testcommon.EnsureLocalHTTPContent(t, httpURLs[0]+":8036", "phpMyAdmin")
    75  	if globalconfig.DdevGlobalConfig.MkcertCARoot != "" {
    76  		_, _ = testcommon.EnsureLocalHTTPContent(t, httpsURLs[0]+":8037", "phpMyAdmin")
    77  	}
    78  }
    79  
    80  // TestTraefikVirtualHost tests traefik with an extra VIRTUAL_HOST
    81  func TestTraefikVirtualHost(t *testing.T) {
    82  	assert := asrt.New(t)
    83  
    84  	// Make sure this leaves us in the original test directory
    85  	origDir, _ := os.Getwd()
    86  
    87  	site := TestSites[0] // 0 == wordpress
    88  	app, err := ddevapp.NewApp(site.Dir, true)
    89  	assert.NoError(err)
    90  
    91  	ddevapp.PowerOff()
    92  	origTraefik := globalconfig.DdevGlobalConfig.UseTraefik
    93  	globalconfig.DdevGlobalConfig.UseTraefik = true
    94  	err = globalconfig.WriteGlobalConfig(globalconfig.DdevGlobalConfig)
    95  	require.NoError(t, err)
    96  	origConfig := *app
    97  
    98  	t.Cleanup(func() {
    99  		err = os.Chdir(origDir)
   100  		assert.NoError(err)
   101  		err = os.RemoveAll(app.GetConfigPath(`docker-compose.extra.yaml`))
   102  		assert.NoError(err)
   103  		err = app.Stop(true, false)
   104  		assert.NoError(err)
   105  		ddevapp.PowerOff()
   106  		err = origConfig.WriteConfig()
   107  		assert.NoError(err)
   108  		globalconfig.DdevGlobalConfig.UseTraefik = origTraefik
   109  		err = globalconfig.WriteGlobalConfig(globalconfig.DdevGlobalConfig)
   110  		assert.NoError(err)
   111  	})
   112  
   113  	err = fileutil.CopyFile(filepath.Join(origDir, "testdata", t.Name(), "docker-compose.extra.yaml"), app.GetConfigPath("docker-compose.extra.yaml"))
   114  	require.NoError(t, err)
   115  
   116  	err = app.StartAndWait(5)
   117  	require.NoError(t, err)
   118  
   119  	desc, err := app.Describe(false)
   120  	assert.True(desc["use_traefik"].(bool))
   121  
   122  	// Test reachabiliity in each of the hostnames
   123  	httpURLs, _, allURLs := app.GetAllURLs()
   124  
   125  	// If no mkcert trusted https, use only the httpURLs
   126  	// This is especially the case for colima
   127  	if globalconfig.GetCAROOT() == "" {
   128  		allURLs = httpURLs
   129  	}
   130  
   131  	for _, u := range allURLs {
   132  		// Use something here for wildcard
   133  		u = strings.Replace(u, `*`, `somewildcard`, 1)
   134  		_, err = testcommon.EnsureLocalHTTPContent(t, u+site.Safe200URIWithExpectation.URI, site.Safe200URIWithExpectation.Expect)
   135  		assert.NoError(err, "failed EnsureLocalHTTPContent() %s: %v", u+site.Safe200URIWithExpectation.URI, err)
   136  	}
   137  
   138  	// Test Reachability to nginx special VIRTUAL_HOST
   139  	_, _ = testcommon.EnsureLocalHTTPContent(t, "http://extra.ddev.site", "Welcome to nginx")
   140  	if globalconfig.DdevGlobalConfig.MkcertCARoot != "" {
   141  		_, _ = testcommon.EnsureLocalHTTPContent(t, "https://extra.ddev.site", "Welcome to nginx")
   142  	}
   143  }