Skip to content

Commit b7eaef7

Browse files
committed
added uT
1 parent 501e08f commit b7eaef7

File tree

2 files changed

+87
-8
lines changed

2 files changed

+87
-8
lines changed

internal/config/config.go

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1597,15 +1597,24 @@ func resolveExternalDataSource() *ExternalDataSource {
15971597
MaxBytes: viperInstance.GetInt64(ExternalDataSourceMaxBytesKey),
15981598
}
15991599

1600-
// Validate domains
1601-
if len(externalDataSource.AllowedDomains) > 0 {
1602-
for _, domain := range externalDataSource.AllowedDomains {
1603-
if strings.ContainsAny(domain, "/\\ ") || domain == "" {
1604-
slog.Error("domain is not specified in allowed_domains")
1605-
return nil
1606-
}
1607-
}
1600+
if err := validateAllowedDomains(externalDataSource.AllowedDomains); err != nil {
1601+
return nil
16081602
}
16091603

16101604
return externalDataSource
16111605
}
1606+
1607+
func validateAllowedDomains(domains []string) error {
1608+
if len(domains) == 0 {
1609+
return nil
1610+
}
1611+
1612+
for _, domain := range domains {
1613+
if strings.ContainsAny(domain, "/\\ ") || domain == "" {
1614+
slog.Error("domain is not specified in allowed_domains")
1615+
return errors.New("invalid domain found in allowed_domains")
1616+
}
1617+
}
1618+
1619+
return nil
1620+
}

internal/config/config_test.go

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1576,3 +1576,73 @@ func TestValidateLabel(t *testing.T) {
15761576
})
15771577
}
15781578
}
1579+
1580+
func TestValidateAllowedDomains(t *testing.T) {
1581+
tests := []struct {
1582+
name string
1583+
domains []string
1584+
wantErr bool
1585+
}{
1586+
{
1587+
name: "Test 1: Success: Empty slice",
1588+
domains: []string{},
1589+
wantErr: false,
1590+
},
1591+
{
1592+
name: "Test 2: Success: Nil slice",
1593+
domains: nil,
1594+
wantErr: false,
1595+
},
1596+
{
1597+
name: "Test 3: Success: Valid domains",
1598+
domains: []string{"example.com", "api.nginx.com", "sub.domain.io"},
1599+
wantErr: false,
1600+
},
1601+
{
1602+
name: "Test 4: Failure: Domain contains space",
1603+
domains: []string{"valid.com", "bad domain.com"},
1604+
wantErr: true,
1605+
},
1606+
{
1607+
name: "Test 5: Failure: Empty string domain",
1608+
domains: []string{"valid.com", ""},
1609+
wantErr: true,
1610+
},
1611+
{
1612+
name: "Test 6: Failure: Domain contains forward slash /",
1613+
domains: []string{"domain.com/path"},
1614+
wantErr: true,
1615+
},
1616+
{
1617+
name: "Test 7: Failure: Domain contains backward slash \\",
1618+
domains: []string{"domain.com\\path"},
1619+
wantErr: true,
1620+
},
1621+
{
1622+
name: "Test 8: Failure: Mixed valid and invalid (first is invalid)",
1623+
domains: []string{" only.com", "good.com"},
1624+
wantErr: true,
1625+
},
1626+
}
1627+
1628+
for _, tt := range tests {
1629+
t.Run(tt.name, func(t *testing.T) {
1630+
var logBuffer bytes.Buffer
1631+
logHandler := slog.NewTextHandler(&logBuffer, &slog.HandlerOptions{Level: slog.LevelError})
1632+
1633+
originalLogger := slog.Default()
1634+
slog.SetDefault(slog.New(logHandler))
1635+
defer slog.SetDefault(originalLogger)
1636+
1637+
actualErr := validateAllowedDomains(tt.domains)
1638+
1639+
if tt.wantErr {
1640+
require.Error(t, actualErr, "Expected an error but got nil.")
1641+
assert.Contains(t, logBuffer.String(), "domain is not specified in allowed_domains",
1642+
"Expected the error log message to be present in the output.")
1643+
} else {
1644+
assert.NoError(t, actualErr, "Did not expect an error but got one: %v", actualErr)
1645+
}
1646+
})
1647+
}
1648+
}

0 commit comments

Comments
 (0)