mirror of
				https://github.com/caddyserver/caddy.git
				synced 2025-11-04 03:27:23 -05:00 
			
		
		
		
	
		
			Some checks failed
		
		
	
	Tests / test (./cmd/caddy/caddy, ~1.24.1, ubuntu-latest, 0, 1.24, linux) (push) Failing after 2m9s
				
			Tests / test (s390x on IBM Z) (push) Has been skipped
				
			Tests / goreleaser-check (push) Has been skipped
				
			Cross-Build / build (~1.24.1, 1.24, aix) (push) Successful in 1m23s
				
			Cross-Build / build (~1.24.1, 1.24, darwin) (push) Successful in 1m28s
				
			Cross-Build / build (~1.24.1, 1.24, dragonfly) (push) Successful in 1m22s
				
			Cross-Build / build (~1.24.1, 1.24, freebsd) (push) Successful in 1m15s
				
			Cross-Build / build (~1.24.1, 1.24, illumos) (push) Successful in 1m19s
				
			Cross-Build / build (~1.24.1, 1.24, linux) (push) Successful in 1m17s
				
			Cross-Build / build (~1.24.1, 1.24, netbsd) (push) Successful in 1m15s
				
			Cross-Build / build (~1.24.1, 1.24, openbsd) (push) Successful in 1m17s
				
			Cross-Build / build (~1.24.1, 1.24, solaris) (push) Successful in 1m17s
				
			Cross-Build / build (~1.24.1, 1.24, windows) (push) Successful in 1m20s
				
			Lint / lint (ubuntu-latest, linux) (push) Successful in 2m15s
				
			Lint / govulncheck (push) Successful in 1m34s
				
			Lint / dependency-review (push) Failing after 50s
				
			OpenSSF Scorecard supply-chain security / Scorecard analysis (push) Failing after 1m37s
				
			Tests / test (./cmd/caddy/caddy, ~1.24.1, macos-14, 0, 1.24, mac) (push) Has been cancelled
				
			Tests / test (./cmd/caddy/caddy.exe, ~1.24.1, windows-latest, True, 1.24, windows) (push) Has been cancelled
				
			Lint / lint (macos-14, mac) (push) Has been cancelled
				
			Lint / lint (windows-latest, windows) (push) Has been cancelled
				
			* httpcaddyfile: Validates TLS DNS challenge options Adds validation to the TLS Caddyfile adapter to ensure that when DNS challenge options (such as propagation_delay or dns_ttl) are specified, a DNS provider is also configured. Adds new integration tests to verify this validation logic, and implements a new mechanism for adapt tests to assert a config adapt error. * Add some more AI-generated tests asserting config errors * Parallel doesn't work here, we use global variables * Windows fix
		
			
				
	
	
		
			76 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			76 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
package integration
 | 
						|
 | 
						|
import (
 | 
						|
	jsonMod "encoding/json"
 | 
						|
	"fmt"
 | 
						|
	"os"
 | 
						|
	"path/filepath"
 | 
						|
	"regexp"
 | 
						|
	"strings"
 | 
						|
	"testing"
 | 
						|
 | 
						|
	"github.com/caddyserver/caddy/v2/caddyconfig"
 | 
						|
	"github.com/caddyserver/caddy/v2/caddytest"
 | 
						|
	_ "github.com/caddyserver/caddy/v2/internal/testmocks"
 | 
						|
)
 | 
						|
 | 
						|
func TestCaddyfileAdaptToJSON(t *testing.T) {
 | 
						|
	// load the list of test files from the dir
 | 
						|
	files, err := os.ReadDir("./caddyfile_adapt")
 | 
						|
	if err != nil {
 | 
						|
		t.Errorf("failed to read caddyfile_adapt dir: %s", err)
 | 
						|
	}
 | 
						|
 | 
						|
	// prep a regexp to fix strings on windows
 | 
						|
	winNewlines := regexp.MustCompile(`\r?\n`)
 | 
						|
 | 
						|
	for _, f := range files {
 | 
						|
		if f.IsDir() {
 | 
						|
			continue
 | 
						|
		}
 | 
						|
		filename := f.Name()
 | 
						|
 | 
						|
		// run each file as a subtest, so that we can see which one fails more easily
 | 
						|
		t.Run(filename, func(t *testing.T) {
 | 
						|
			// read the test file
 | 
						|
			data, err := os.ReadFile("./caddyfile_adapt/" + filename)
 | 
						|
			if err != nil {
 | 
						|
				t.Errorf("failed to read %s dir: %s", filename, err)
 | 
						|
			}
 | 
						|
 | 
						|
			// split the Caddyfile (first) and JSON (second) parts
 | 
						|
			// (append newline to Caddyfile to match formatter expectations)
 | 
						|
			parts := strings.Split(string(data), "----------")
 | 
						|
			caddyfile, expected := strings.TrimSpace(parts[0])+"\n", strings.TrimSpace(parts[1])
 | 
						|
 | 
						|
			// replace windows newlines in the json with unix newlines
 | 
						|
			expected = winNewlines.ReplaceAllString(expected, "\n")
 | 
						|
 | 
						|
			// replace os-specific default path for file_server's hide field
 | 
						|
			replacePath, _ := jsonMod.Marshal(fmt.Sprint(".", string(filepath.Separator), "Caddyfile"))
 | 
						|
			expected = strings.ReplaceAll(expected, `"./Caddyfile"`, string(replacePath))
 | 
						|
 | 
						|
			// if the expected output is JSON, compare it
 | 
						|
			if len(expected) > 0 && expected[0] == '{' {
 | 
						|
				ok := caddytest.CompareAdapt(t, filename, caddyfile, "caddyfile", expected)
 | 
						|
				if !ok {
 | 
						|
					t.Errorf("failed to adapt %s", filename)
 | 
						|
				}
 | 
						|
				return
 | 
						|
			}
 | 
						|
 | 
						|
			// otherwise, adapt the Caddyfile and check for errors
 | 
						|
			cfgAdapter := caddyconfig.GetAdapter("caddyfile")
 | 
						|
			_, _, err = cfgAdapter.Adapt([]byte(caddyfile), nil)
 | 
						|
			if err == nil {
 | 
						|
				t.Errorf("expected error for %s but got none", filename)
 | 
						|
			} else {
 | 
						|
				normalizedErr := winNewlines.ReplaceAllString(err.Error(), "\n")
 | 
						|
				if !strings.Contains(normalizedErr, expected) {
 | 
						|
					t.Errorf("expected error for %s to contain:\n%s\nbut got:\n%s", filename, expected, normalizedErr)
 | 
						|
				}
 | 
						|
			}
 | 
						|
		})
 | 
						|
	}
 | 
						|
}
 |