mirror of
				https://github.com/caddyserver/caddy.git
				synced 2025-11-04 03:27:23 -05:00 
			
		
		
		
	* httpcaddyfile: Revise automation policy generation This should fix a frustrating edge case where wildcard subjects are used, which potentially get shadowed by more specific versions of themselves; see the new tests for an example. This change is motivated by an actual customer requirement. Although all the tests pass, this logic is incredibly complex and nuanced, and I'm worried it is not correct. But it took me about 4 days to get this far on a solution. I did my best. * Fix typo
		
			
				
	
	
		
			57 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			57 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
package httpcaddyfile
 | 
						|
 | 
						|
import (
 | 
						|
	"testing"
 | 
						|
 | 
						|
	"github.com/caddyserver/caddy/v2/modules/caddytls"
 | 
						|
)
 | 
						|
 | 
						|
func TestAutomationPolicyIsSubset(t *testing.T) {
 | 
						|
	for i, test := range []struct {
 | 
						|
		a, b   []string
 | 
						|
		expect bool
 | 
						|
	}{
 | 
						|
		{
 | 
						|
			a:      []string{"example.com"},
 | 
						|
			b:      []string{},
 | 
						|
			expect: true,
 | 
						|
		},
 | 
						|
		{
 | 
						|
			a:      []string{},
 | 
						|
			b:      []string{"example.com"},
 | 
						|
			expect: false,
 | 
						|
		},
 | 
						|
		{
 | 
						|
			a:      []string{"foo.example.com"},
 | 
						|
			b:      []string{"*.example.com"},
 | 
						|
			expect: true,
 | 
						|
		},
 | 
						|
		{
 | 
						|
			a:      []string{"foo.example.com"},
 | 
						|
			b:      []string{"foo.example.com"},
 | 
						|
			expect: true,
 | 
						|
		},
 | 
						|
		{
 | 
						|
			a:      []string{"foo.example.com"},
 | 
						|
			b:      []string{"example.com"},
 | 
						|
			expect: false,
 | 
						|
		},
 | 
						|
		{
 | 
						|
			a:      []string{"example.com", "foo.example.com"},
 | 
						|
			b:      []string{"*.com", "*.*.com"},
 | 
						|
			expect: true,
 | 
						|
		},
 | 
						|
		{
 | 
						|
			a:      []string{"example.com", "foo.example.com"},
 | 
						|
			b:      []string{"*.com"},
 | 
						|
			expect: false,
 | 
						|
		},
 | 
						|
	} {
 | 
						|
		apA := &caddytls.AutomationPolicy{Subjects: test.a}
 | 
						|
		apB := &caddytls.AutomationPolicy{Subjects: test.b}
 | 
						|
		if actual := automationPolicyIsSubset(apA, apB); actual != test.expect {
 | 
						|
			t.Errorf("Test %d: Expected %t but got %t (A: %v  B: %v)", i, test.expect, actual, test.a, test.b)
 | 
						|
		}
 | 
						|
	}
 | 
						|
}
 |