mirror of
				https://github.com/caddyserver/caddy.git
				synced 2025-11-03 19:17:29 -05:00 
			
		
		
		
	Even if defined for multiple hosts. Startup or shutdown callbacks registered by any directive (startup, shutdown, markdown, git, log, etc.) will only run as many times as it appears in the Caddyfile, not repeated for each host that shares that server block. Fixing this involved refactoring three packages (yeesh) and we need to restore some tests that are no longer valid (that used to verify splitting a multiServerBlock into multiple serverBlocks).
		
			
				
	
	
		
			63 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			63 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
package config
 | 
						|
 | 
						|
import (
 | 
						|
	"testing"
 | 
						|
 | 
						|
	"github.com/mholt/caddy/server"
 | 
						|
)
 | 
						|
 | 
						|
func TestResolveAddr(t *testing.T) {
 | 
						|
	// NOTE: If tests fail due to comparing to string "127.0.0.1",
 | 
						|
	// it's possible that system env resolves with IPv6, or ::1.
 | 
						|
	// If that happens, maybe we should use actualAddr.IP.IsLoopback()
 | 
						|
	// for the assertion, rather than a direct string comparison.
 | 
						|
 | 
						|
	// NOTE: Tests with {Host: "", Port: ""} and {Host: "localhost", Port: ""}
 | 
						|
	// will not behave the same cross-platform, so they have been omitted.
 | 
						|
 | 
						|
	for i, test := range []struct {
 | 
						|
		config         server.Config
 | 
						|
		shouldWarnErr  bool
 | 
						|
		shouldFatalErr bool
 | 
						|
		expectedIP     string
 | 
						|
		expectedPort   int
 | 
						|
	}{
 | 
						|
		{server.Config{Host: "localhost", Port: "1234"}, false, false, "127.0.0.1", 1234},
 | 
						|
		{server.Config{Host: "127.0.0.1", Port: "1234"}, false, false, "127.0.0.1", 1234},
 | 
						|
		{server.Config{Host: "should-not-resolve", Port: "1234"}, true, false, "0.0.0.0", 1234},
 | 
						|
		{server.Config{Host: "localhost", Port: "http"}, false, false, "127.0.0.1", 80},
 | 
						|
		{server.Config{Host: "localhost", Port: "https"}, false, false, "127.0.0.1", 443},
 | 
						|
		{server.Config{Host: "", Port: "1234"}, false, false, "<nil>", 1234},
 | 
						|
		{server.Config{Host: "localhost", Port: "abcd"}, false, true, "", 0},
 | 
						|
		{server.Config{BindHost: "127.0.0.1", Host: "should-not-be-used", Port: "1234"}, false, false, "127.0.0.1", 1234},
 | 
						|
		{server.Config{BindHost: "localhost", Host: "should-not-be-used", Port: "1234"}, false, false, "127.0.0.1", 1234},
 | 
						|
		{server.Config{BindHost: "should-not-resolve", Host: "localhost", Port: "1234"}, true, false, "0.0.0.0", 1234},
 | 
						|
	} {
 | 
						|
		actualAddr, warnErr, fatalErr := resolveAddr(test.config)
 | 
						|
 | 
						|
		if test.shouldFatalErr && fatalErr == nil {
 | 
						|
			t.Errorf("Test %d: Expected error, but there wasn't any", i)
 | 
						|
		}
 | 
						|
		if !test.shouldFatalErr && fatalErr != nil {
 | 
						|
			t.Errorf("Test %d: Expected no error, but there was one: %v", i, fatalErr)
 | 
						|
		}
 | 
						|
		if fatalErr != nil {
 | 
						|
			continue
 | 
						|
		}
 | 
						|
 | 
						|
		if test.shouldWarnErr && warnErr == nil {
 | 
						|
			t.Errorf("Test %d: Expected warning, but there wasn't any", i)
 | 
						|
		}
 | 
						|
		if !test.shouldWarnErr && warnErr != nil {
 | 
						|
			t.Errorf("Test %d: Expected no warning, but there was one: %v", i, warnErr)
 | 
						|
		}
 | 
						|
 | 
						|
		if actual, expected := actualAddr.IP.String(), test.expectedIP; actual != expected {
 | 
						|
			t.Errorf("Test %d: IP was %s but expected %s", i, actual, expected)
 | 
						|
		}
 | 
						|
		if actual, expected := actualAddr.Port, test.expectedPort; actual != expected {
 | 
						|
			t.Errorf("Test %d: Port was %d but expected %d", i, actual, expected)
 | 
						|
		}
 | 
						|
	}
 | 
						|
}
 |