mirror of
				https://github.com/coredns/coredns.git
				synced 2025-11-03 18:53:13 -05:00 
			
		
		
		
	
		
			
	
	
		
			223 lines
		
	
	
		
			4.1 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
		
		
			
		
	
	
			223 lines
		
	
	
		
			4.1 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| 
								 | 
							
								package auto
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								import (
							 | 
						||
| 
								 | 
							
									"testing"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									"github.com/coredns/coredns/plugin/file"
							 | 
						||
| 
								 | 
							
								)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								func TestZonesNames(t *testing.T) {
							 | 
						||
| 
								 | 
							
									t.Parallel()
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									tests := []struct {
							 | 
						||
| 
								 | 
							
										name     string
							 | 
						||
| 
								 | 
							
										zones    []string
							 | 
						||
| 
								 | 
							
										expected []string
							 | 
						||
| 
								 | 
							
									}{
							 | 
						||
| 
								 | 
							
										{
							 | 
						||
| 
								 | 
							
											name:     "empty zones",
							 | 
						||
| 
								 | 
							
											zones:    []string{},
							 | 
						||
| 
								 | 
							
											expected: []string{},
							 | 
						||
| 
								 | 
							
										},
							 | 
						||
| 
								 | 
							
										{
							 | 
						||
| 
								 | 
							
											name:     "single zone",
							 | 
						||
| 
								 | 
							
											zones:    []string{"example.org."},
							 | 
						||
| 
								 | 
							
											expected: []string{"example.org."},
							 | 
						||
| 
								 | 
							
										},
							 | 
						||
| 
								 | 
							
										{
							 | 
						||
| 
								 | 
							
											name:     "multiple zones",
							 | 
						||
| 
								 | 
							
											zones:    []string{"example.org.", "test.org.", "another.com."},
							 | 
						||
| 
								 | 
							
											expected: []string{"example.org.", "test.org.", "another.com."},
							 | 
						||
| 
								 | 
							
										},
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									for _, tt := range tests {
							 | 
						||
| 
								 | 
							
										t.Run(tt.name, func(t *testing.T) {
							 | 
						||
| 
								 | 
							
											t.Parallel()
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
											z := &Zones{
							 | 
						||
| 
								 | 
							
												names: tt.zones,
							 | 
						||
| 
								 | 
							
											}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
											result := z.Names()
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
											if len(result) != len(tt.expected) {
							 | 
						||
| 
								 | 
							
												t.Errorf("Expected %d names, got %d", len(tt.expected), len(result))
							 | 
						||
| 
								 | 
							
											}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
											for i, name := range tt.expected {
							 | 
						||
| 
								 | 
							
												if i >= len(result) || result[i] != name {
							 | 
						||
| 
								 | 
							
													t.Errorf("Expected name %s at index %d, got %s", name, i, result[i])
							 | 
						||
| 
								 | 
							
												}
							 | 
						||
| 
								 | 
							
											}
							 | 
						||
| 
								 | 
							
										})
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								func TestZonesOrigins(t *testing.T) {
							 | 
						||
| 
								 | 
							
									t.Parallel()
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									tests := []struct {
							 | 
						||
| 
								 | 
							
										name     string
							 | 
						||
| 
								 | 
							
										origins  []string
							 | 
						||
| 
								 | 
							
										expected []string
							 | 
						||
| 
								 | 
							
									}{
							 | 
						||
| 
								 | 
							
										{
							 | 
						||
| 
								 | 
							
											name:     "empty origins",
							 | 
						||
| 
								 | 
							
											origins:  []string{},
							 | 
						||
| 
								 | 
							
											expected: []string{},
							 | 
						||
| 
								 | 
							
										},
							 | 
						||
| 
								 | 
							
										{
							 | 
						||
| 
								 | 
							
											name:     "single origin",
							 | 
						||
| 
								 | 
							
											origins:  []string{"example.org."},
							 | 
						||
| 
								 | 
							
											expected: []string{"example.org."},
							 | 
						||
| 
								 | 
							
										},
							 | 
						||
| 
								 | 
							
										{
							 | 
						||
| 
								 | 
							
											name:     "multiple origins",
							 | 
						||
| 
								 | 
							
											origins:  []string{"example.org.", "test.org."},
							 | 
						||
| 
								 | 
							
											expected: []string{"example.org.", "test.org."},
							 | 
						||
| 
								 | 
							
										},
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									for _, tt := range tests {
							 | 
						||
| 
								 | 
							
										t.Run(tt.name, func(t *testing.T) {
							 | 
						||
| 
								 | 
							
											t.Parallel()
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
											z := &Zones{
							 | 
						||
| 
								 | 
							
												origins: tt.origins,
							 | 
						||
| 
								 | 
							
											}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
											result := z.Origins()
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
											if len(result) != len(tt.expected) {
							 | 
						||
| 
								 | 
							
												t.Errorf("Expected %d origins, got %d", len(tt.expected), len(result))
							 | 
						||
| 
								 | 
							
											}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
											for i, origin := range tt.expected {
							 | 
						||
| 
								 | 
							
												if i >= len(result) || result[i] != origin {
							 | 
						||
| 
								 | 
							
													t.Errorf("Expected origin %s at index %d, got %s", origin, i, result[i])
							 | 
						||
| 
								 | 
							
												}
							 | 
						||
| 
								 | 
							
											}
							 | 
						||
| 
								 | 
							
										})
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								func TestZonesZones(t *testing.T) {
							 | 
						||
| 
								 | 
							
									t.Parallel()
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									zone1 := &file.Zone{}
							 | 
						||
| 
								 | 
							
									zone2 := &file.Zone{}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									z := &Zones{
							 | 
						||
| 
								 | 
							
										Z: map[string]*file.Zone{
							 | 
						||
| 
								 | 
							
											"example.org.": zone1,
							 | 
						||
| 
								 | 
							
											"test.org.":    zone2,
							 | 
						||
| 
								 | 
							
										},
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									tests := []struct {
							 | 
						||
| 
								 | 
							
										name     string
							 | 
						||
| 
								 | 
							
										zoneName string
							 | 
						||
| 
								 | 
							
										expected *file.Zone
							 | 
						||
| 
								 | 
							
									}{
							 | 
						||
| 
								 | 
							
										{
							 | 
						||
| 
								 | 
							
											name:     "existing zone",
							 | 
						||
| 
								 | 
							
											zoneName: "example.org.",
							 | 
						||
| 
								 | 
							
											expected: zone1,
							 | 
						||
| 
								 | 
							
										},
							 | 
						||
| 
								 | 
							
										{
							 | 
						||
| 
								 | 
							
											name:     "another existing zone",
							 | 
						||
| 
								 | 
							
											zoneName: "test.org.",
							 | 
						||
| 
								 | 
							
											expected: zone2,
							 | 
						||
| 
								 | 
							
										},
							 | 
						||
| 
								 | 
							
										{
							 | 
						||
| 
								 | 
							
											name:     "non-existent zone",
							 | 
						||
| 
								 | 
							
											zoneName: "notfound.org.",
							 | 
						||
| 
								 | 
							
											expected: nil,
							 | 
						||
| 
								 | 
							
										},
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									for _, tt := range tests {
							 | 
						||
| 
								 | 
							
										t.Run(tt.name, func(t *testing.T) {
							 | 
						||
| 
								 | 
							
											t.Parallel()
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
											result := z.Zones(tt.zoneName)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
											if result != tt.expected {
							 | 
						||
| 
								 | 
							
												t.Errorf("Expected zone %v, got %v", tt.expected, result)
							 | 
						||
| 
								 | 
							
											}
							 | 
						||
| 
								 | 
							
										})
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								func TestZonesAdd(t *testing.T) {
							 | 
						||
| 
								 | 
							
									t.Parallel()
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									z := &Zones{}
							 | 
						||
| 
								 | 
							
									zone := &file.Zone{}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									// Test adding to empty zones
							 | 
						||
| 
								 | 
							
									z.Add(zone, "example.org.", nil)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									if z.Z == nil {
							 | 
						||
| 
								 | 
							
										t.Error("Expected Z map to be initialized")
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									if z.Z["example.org."] != zone {
							 | 
						||
| 
								 | 
							
										t.Error("Expected zone to be added to map")
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									if len(z.names) != 1 || z.names[0] != "example.org." {
							 | 
						||
| 
								 | 
							
										t.Errorf("Expected names to contain 'example.org.', got %v", z.names)
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									// Test adding another zone
							 | 
						||
| 
								 | 
							
									zone2 := &file.Zone{}
							 | 
						||
| 
								 | 
							
									z.Add(zone2, "test.org.", nil)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									if len(z.Z) != 2 {
							 | 
						||
| 
								 | 
							
										t.Errorf("Expected 2 zones in map, got %d", len(z.Z))
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									if z.Z["test.org."] != zone2 {
							 | 
						||
| 
								 | 
							
										t.Error("Expected second zone to be added to map")
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									if len(z.names) != 2 {
							 | 
						||
| 
								 | 
							
										t.Errorf("Expected 2 names, got %d", len(z.names))
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								func TestZonesEmptyOperations(t *testing.T) {
							 | 
						||
| 
								 | 
							
									t.Parallel()
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									z := &Zones{}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									names := z.Names()
							 | 
						||
| 
								 | 
							
									if len(names) != 0 {
							 | 
						||
| 
								 | 
							
										t.Errorf("Expected empty names slice, got %v", names)
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									origins := z.Origins()
							 | 
						||
| 
								 | 
							
									if len(origins) != 0 {
							 | 
						||
| 
								 | 
							
										t.Errorf("Expected empty origins slice, got %v", origins)
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									zone := z.Zones("any.zone.")
							 | 
						||
| 
								 | 
							
									if zone != nil {
							 | 
						||
| 
								 | 
							
										t.Errorf("Expected nil zone, got %v", zone)
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									z.Remove("any.zone.")
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									testZone := &file.Zone{}
							 | 
						||
| 
								 | 
							
									z.Add(testZone, "test.org.", nil)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									if z.Z == nil {
							 | 
						||
| 
								 | 
							
										t.Error("Expected Z map to be initialized after Add")
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
									if z.Z["test.org."] != testZone {
							 | 
						||
| 
								 | 
							
										t.Error("Expected zone to be added")
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								}
							 |