mirror of
				https://github.com/caddyserver/caddy.git
				synced 2025-10-31 02:27:19 -04:00 
			
		
		
		
	Add tests for case insensitivity of keys and saving contexts
This commit is contained in:
		
							parent
							
								
									76d9d695be
								
							
						
					
					
						commit
						9077cce126
					
				| @ -65,7 +65,7 @@ type httpContext struct { | ||||
| 
 | ||||
| func (h *httpContext) saveConfig(key string, cfg *SiteConfig) { | ||||
| 	h.siteConfigs = append(h.siteConfigs, cfg) | ||||
| 	h.keysToSiteConfigs[strings.ToLower(key)] = cfg | ||||
| 	h.keysToSiteConfigs[key] = cfg | ||||
| } | ||||
| 
 | ||||
| // InspectServerBlocks make sure that everything checks out before | ||||
| @ -178,8 +178,9 @@ func GetConfig(c *caddy.Controller) *SiteConfig { | ||||
| 	// we should only get here during tests because directive | ||||
| 	// actions typically skip the server blocks where we make | ||||
| 	// the configs | ||||
| 	ctx.saveConfig(key, &SiteConfig{Root: Root, TLS: new(caddytls.Config)}) | ||||
| 	return GetConfig(c) | ||||
| 	cfg := &SiteConfig{Root: Root, TLS: new(caddytls.Config)} | ||||
| 	ctx.saveConfig(key, cfg) | ||||
| 	return cfg | ||||
| } | ||||
| 
 | ||||
| // shortCaddyfileLoader loads a Caddyfile if positional arguments are | ||||
|  | ||||
| @ -4,6 +4,7 @@ import ( | ||||
| 	"strings" | ||||
| 	"testing" | ||||
| 
 | ||||
| 	"github.com/mholt/caddy" | ||||
| 	"github.com/mholt/caddy/caddyfile" | ||||
| ) | ||||
| 
 | ||||
| @ -138,6 +139,39 @@ func TestInspectServerBlocksWithCustomDefaultPort(t *testing.T) { | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func TestInspectServerBlocksCaseInsensitiveKey(t *testing.T) { | ||||
| 	filename := "Testfile" | ||||
| 	ctx := newContext().(*httpContext) | ||||
| 	input := strings.NewReader("localhost {\n}\nLOCALHOST {\n}") | ||||
| 	sblocks, err := caddyfile.Parse(filename, input, nil) | ||||
| 	if err != nil { | ||||
| 		t.Fatalf("Expected no error setting up test, got: %v", err) | ||||
| 	} | ||||
| 	_, err = ctx.InspectServerBlocks(filename, sblocks) | ||||
| 	if err == nil { | ||||
| 		t.Error("Expected an error because keys on this server type are case-insensitive (so these are duplicated), but didn't get an error") | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func TestGetConfig(t *testing.T) { | ||||
| 	// case insensitivity for key | ||||
| 	con := caddy.NewTestController("http", "") | ||||
| 	con.Key = "foo" | ||||
| 	cfg := GetConfig(con) | ||||
| 	con.Key = "FOO" | ||||
| 	cfg2 := GetConfig(con) | ||||
| 	if cfg != cfg2 { | ||||
| 		t.Errorf("Expected same config using same key with different case; got %p and %p", cfg, cfg2) | ||||
| 	} | ||||
| 
 | ||||
| 	// make sure different key returns different config | ||||
| 	con.Key = "foobar" | ||||
| 	cfg3 := GetConfig(con) | ||||
| 	if cfg == cfg3 { | ||||
| 		t.Errorf("Expected different configs using when key is different; got %p and %p", cfg, cfg3) | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func TestDirectivesList(t *testing.T) { | ||||
| 	for i, dir1 := range directives { | ||||
| 		if dir1 == "" { | ||||
| @ -157,3 +191,21 @@ func TestDirectivesList(t *testing.T) { | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func TestContextSaveConfig(t *testing.T) { | ||||
| 	ctx := newContext().(*httpContext) | ||||
| 	ctx.saveConfig("foo", new(SiteConfig)) | ||||
| 	if _, ok := ctx.keysToSiteConfigs["foo"]; !ok { | ||||
| 		t.Error("Expected config to be saved, but it wasn't") | ||||
| 	} | ||||
| 	if got, want := len(ctx.siteConfigs), 1; got != want { | ||||
| 		t.Errorf("Expected len(siteConfigs) == %d, but was %d", want, got) | ||||
| 	} | ||||
| 	ctx.saveConfig("Foobar", new(SiteConfig)) | ||||
| 	if _, ok := ctx.keysToSiteConfigs["foobar"]; ok { | ||||
| 		t.Error("Did not expect to get config with case-insensitive key, but did") | ||||
| 	} | ||||
| 	if got, want := len(ctx.siteConfigs), 2; got != want { | ||||
| 		t.Errorf("Expected len(siteConfigs) == %d, but was %d", want, got) | ||||
| 	} | ||||
| } | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user