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 }