mirror of
				https://github.com/coredns/coredns.git
				synced 2025-10-31 02:03:20 -04: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")
 | |
| 	}
 | |
| }
 |