Skip to content

Commit a19b6b5

Browse files
committed
Fix golangci-lint issues: improve error handling, formatting, and test package structure
1 parent 1202ae0 commit a19b6b5

File tree

4 files changed

+54
-43
lines changed

4 files changed

+54
-43
lines changed

internal/verification/dns.go

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -163,7 +163,11 @@ func VerifyDNSRecordWithConfig(domain, expectedToken string, config *DNSVerifica
163163
}
164164

165165
// performDNSVerificationWithRetries implements the retry logic for DNS verification
166-
func performDNSVerificationWithRetries(ctx context.Context, domain, expectedToken string, config *DNSVerificationConfig) (*DNSVerificationResult, error) {
166+
func performDNSVerificationWithRetries(
167+
ctx context.Context,
168+
domain, expectedToken string,
169+
config *DNSVerificationConfig,
170+
) (*DNSVerificationResult, error) {
167171
var lastErr error
168172
var lastResult *DNSVerificationResult
169173

@@ -181,7 +185,7 @@ func performDNSVerificationWithRetries(ctx context.Context, domain, expectedToke
181185
return nil, &DNSVerificationError{
182186
Domain: domain,
183187
Token: expectedToken,
184-
Message: "verification cancelled",
188+
Message: "verification canceled",
185189
Cause: ctx.Err(),
186190
}
187191
}
@@ -199,7 +203,7 @@ func performDNSVerificationWithRetries(ctx context.Context, domain, expectedToke
199203
lastResult = result
200204

201205
// Check if error is retryable
202-
if !isRetryableDNSError(err) {
206+
if !IsRetryableDNSError(err) {
203207
log.Printf("Non-retryable DNS error for domain %s: %v", domain, err)
204208
break
205209
}
@@ -276,14 +280,15 @@ func performDNSVerification(ctx context.Context, domain, expectedToken string, c
276280
return result, nil
277281
}
278282

279-
// isRetryableDNSError determines if a DNS error should be retried
280-
func isRetryableDNSError(err error) bool {
283+
// IsRetryableDNSError determines if a DNS error should be retried
284+
func IsRetryableDNSError(err error) bool {
281285
if err == nil {
282286
return false
283287
}
284288

285289
// Check for temporary network errors
286-
if netErr, ok := err.(*net.OpError); ok {
290+
var netErr *net.OpError
291+
if errors.As(err, &netErr) {
287292
return netErr.Temporary()
288293
}
289294

@@ -293,14 +298,14 @@ func isRetryableDNSError(err error) bool {
293298
}
294299

295300
// Check for DNS-specific temporary failures
296-
dnsErr, ok := err.(*net.DNSError)
297-
if ok {
301+
var dnsErr *net.DNSError
302+
if errors.As(err, &dnsErr) {
298303
return dnsErr.Temporary()
299304
}
300305

301306
// Unwrap and check nested errors
302307
if unwrapped := errors.Unwrap(err); unwrapped != nil {
303-
return isRetryableDNSError(unwrapped)
308+
return IsRetryableDNSError(unwrapped)
304309
}
305310

306311
return false

internal/verification/dns_mock_test.go

Lines changed: 21 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package verification
1+
package verification_test
22

33
import (
44
"context"
@@ -8,24 +8,26 @@ import (
88
"strings"
99
"testing"
1010
"time"
11+
12+
"github.com/modelcontextprotocol/registry/internal/verification"
1113
)
1214

1315
const testDomain = "example.com"
1416

1517
func TestVerifyDNSRecordWithMockSuccess(t *testing.T) {
16-
token, err := GenerateVerificationToken()
18+
token, err := verification.GenerateVerificationToken()
1719
if err != nil {
1820
t.Fatalf("Failed to generate test token: %v", err)
1921
}
2022

21-
mockResolver := NewMockDNSResolver()
23+
mockResolver := verification.NewMockDNSResolver()
2224
mockResolver.SetVerificationToken(testDomain, token)
2325

24-
config := DefaultDNSConfig()
26+
config := verification.DefaultDNSConfig()
2527
config.Resolver = mockResolver
2628
config.Timeout = 1 * time.Second
2729

28-
result, err := VerifyDNSRecordWithConfig(testDomain, token, config)
30+
result, err := verification.VerifyDNSRecordWithConfig(testDomain, token, config)
2931

3032
if err != nil {
3133
t.Errorf("VerifyDNSRecord returned unexpected error: %v", err)
@@ -57,18 +59,18 @@ func TestVerifyDNSRecordWithMockSuccess(t *testing.T) {
5759
}
5860

5961
func TestVerifyDNSRecordWithMockTokenNotFound(t *testing.T) {
60-
token, err := GenerateVerificationToken()
62+
token, err := verification.GenerateVerificationToken()
6163
if err != nil {
6264
t.Fatalf("Failed to generate test token: %v", err)
6365
}
6466

65-
mockResolver := NewMockDNSResolver()
67+
mockResolver := verification.NewMockDNSResolver()
6668
mockResolver.SetTXTRecord(testDomain, "v=spf1 -all", "some-other-record")
6769

68-
config := DefaultDNSConfig()
70+
config := verification.DefaultDNSConfig()
6971
config.Resolver = mockResolver
7072

71-
result, err := VerifyDNSRecordWithConfig(testDomain, token, config)
73+
result, err := verification.VerifyDNSRecordWithConfig(testDomain, token, config)
7274

7375
if err != nil {
7476
t.Errorf("Unexpected error: %v", err)
@@ -92,12 +94,12 @@ func TestVerifyDNSRecordWithMockTokenNotFound(t *testing.T) {
9294
}
9395

9496
func TestVerifyDNSRecordWithMockDNSError(t *testing.T) {
95-
token, err := GenerateVerificationToken()
97+
token, err := verification.GenerateVerificationToken()
9698
if err != nil {
9799
t.Fatalf("Failed to generate test token: %v", err)
98100
}
99101

100-
mockResolver := NewMockDNSResolver()
102+
mockResolver := verification.NewMockDNSResolver()
101103
mockResolver.SetError(testDomain, &net.DNSError{
102104
Err: "no such host",
103105
Name: testDomain,
@@ -106,13 +108,13 @@ func TestVerifyDNSRecordWithMockDNSError(t *testing.T) {
106108
IsTemporary: false,
107109
})
108110

109-
config := DefaultDNSConfig()
111+
config := verification.DefaultDNSConfig()
110112
config.Resolver = mockResolver
111113
config.MaxRetries = 0
112114

113-
result, err := VerifyDNSRecordWithConfig(testDomain, token, config)
115+
result, err := verification.VerifyDNSRecordWithConfig(testDomain, token, config)
114116

115-
var dnsErr *DNSVerificationError
117+
var dnsErr *verification.DNSVerificationError
116118
if !errors.As(err, &dnsErr) {
117119
t.Errorf("Expected DNSVerificationError, got: %T", err)
118120
}
@@ -131,21 +133,21 @@ func TestVerifyDNSRecordWithMockDNSError(t *testing.T) {
131133
}
132134

133135
func TestVerifyDNSRecordWithMockTimeout(t *testing.T) {
134-
token, err := GenerateVerificationToken()
136+
token, err := verification.GenerateVerificationToken()
135137
if err != nil {
136138
t.Fatalf("Failed to generate test token: %v", err)
137139
}
138140

139-
mockResolver := NewMockDNSResolver()
141+
mockResolver := verification.NewMockDNSResolver()
140142
mockResolver.Delay = 200 * time.Millisecond
141143
mockResolver.SetVerificationToken(testDomain, token)
142144

143-
config := DefaultDNSConfig()
145+
config := verification.DefaultDNSConfig()
144146
config.Resolver = mockResolver
145147
config.Timeout = 50 * time.Millisecond
146148
config.MaxRetries = 0
147149

148-
_, err = VerifyDNSRecordWithConfig(testDomain, token, config)
150+
_, err = verification.VerifyDNSRecordWithConfig(testDomain, token, config)
149151

150152
if err == nil {
151153
t.Error("Expected timeout error")
@@ -157,7 +159,7 @@ func TestVerifyDNSRecordWithMockTimeout(t *testing.T) {
157159
}
158160

159161
func TestMockDNSResolverHelperMethods(t *testing.T) {
160-
mock := NewMockDNSResolver()
162+
mock := verification.NewMockDNSResolver()
161163

162164
token := "test-token-123"
163165
mock.SetVerificationToken(testDomain, token)

internal/verification/dns_resolver.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@ func (d *DefaultDNSResolver) LookupTXT(ctx context.Context, name string) ([]stri
2121
}
2222

2323
// NewDefaultDNSResolver creates a DNS resolver with the given configuration
24+
//
25+
//nolint:ireturn // Factory function returning interface is acceptable for dependency injection
2426
func NewDefaultDNSResolver(config *DNSVerificationConfig) DNSResolver {
2527
if config.UseSecureResolvers && len(config.CustomResolvers) > 0 {
2628
// Create custom dialer for secure resolvers

internal/verification/dns_test.go

Lines changed: 17 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package verification
1+
package verification_test
22

33
import (
44
"context"
@@ -8,16 +8,18 @@ import (
88
"strings"
99
"testing"
1010
"time"
11+
12+
"github.com/modelcontextprotocol/registry/internal/verification"
1113
)
1214

1315
func TestVerifyDNSRecordSuccess(t *testing.T) {
14-
token, err := GenerateVerificationToken()
16+
token, err := verification.GenerateVerificationToken()
1517
if err != nil {
1618
t.Fatalf("Failed to generate test token: %v", err)
1719
}
1820

1921
domain := "example.com"
20-
result, err := VerifyDNSRecord(domain, token)
22+
result, err := verification.VerifyDNSRecord(domain, token)
2123
if err != nil {
2224
t.Errorf("VerifyDNSRecord returned unexpected error: %v", err)
2325
}
@@ -70,7 +72,7 @@ func TestVerifyDNSRecordInvalidInputs(t *testing.T) {
7072

7173
for _, tt := range tests {
7274
t.Run(tt.name, func(t *testing.T) {
73-
result, err := VerifyDNSRecord(tt.domain, tt.token)
75+
result, err := verification.VerifyDNSRecord(tt.domain, tt.token)
7476

7577
if tt.expectError {
7678
if err == nil {
@@ -90,16 +92,16 @@ func TestVerifyDNSRecordInvalidInputs(t *testing.T) {
9092
}
9193

9294
func TestVerifyDNSRecordTokenFormatValidation(t *testing.T) {
93-
token, err := GenerateVerificationToken()
95+
token, err := verification.GenerateVerificationToken()
9496
if err != nil {
9597
t.Fatalf("Failed to generate test token: %v", err)
9698
}
9799

98100
domain := "example.com"
99-
result, err := VerifyDNSRecord(domain, token)
101+
result, err := verification.VerifyDNSRecord(domain, token)
100102

101103
if err != nil {
102-
var dnsErr *DNSVerificationError
104+
var dnsErr *verification.DNSVerificationError
103105
if errors.As(err, &dnsErr) {
104106
if strings.Contains(dnsErr.Message, "invalid token format") {
105107
t.Errorf("Unexpected token format validation error: %v", err)
@@ -121,12 +123,12 @@ func TestVerifyDNSRecordTokenFormatValidation(t *testing.T) {
121123
}
122124

123125
func TestVerifyDNSRecordWithConfigTimeout(t *testing.T) {
124-
token, err := GenerateVerificationToken()
126+
token, err := verification.GenerateVerificationToken()
125127
if err != nil {
126128
t.Fatalf("Failed to generate test token: %v", err)
127129
}
128130

129-
config := &DNSVerificationConfig{
131+
config := &verification.DNSVerificationConfig{
130132
Timeout: 100 * time.Millisecond,
131133
MaxRetries: 0,
132134
RetryDelay: 0,
@@ -135,7 +137,7 @@ func TestVerifyDNSRecordWithConfigTimeout(t *testing.T) {
135137
}
136138

137139
domain := "non-existent-domain-that-should-timeout.com"
138-
result, err := VerifyDNSRecordWithConfig(domain, token, config)
140+
result, err := verification.VerifyDNSRecordWithConfig(domain, token, config)
139141

140142
if err == nil {
141143
t.Log("DNS query succeeded unexpectedly")
@@ -155,7 +157,7 @@ func TestVerifyDNSRecordWithConfigTimeout(t *testing.T) {
155157
}
156158

157159
func TestDefaultDNSConfig(t *testing.T) {
158-
config := DefaultDNSConfig()
160+
config := verification.DefaultDNSConfig()
159161

160162
if config == nil {
161163
t.Fatal("DefaultDNSConfig returned nil")
@@ -186,7 +188,7 @@ func TestDefaultDNSConfig(t *testing.T) {
186188

187189
func TestDNSVerificationError(t *testing.T) {
188190
baseErr := errors.New("base network error")
189-
dnsErr := &DNSVerificationError{
191+
dnsErr := &verification.DNSVerificationError{
190192
Domain: "example.com",
191193
Token: "test-token",
192194
Message: "DNS query failed",
@@ -207,7 +209,7 @@ func TestDNSVerificationError(t *testing.T) {
207209
}
208210

209211
unwrapped := errors.Unwrap(dnsErr)
210-
if unwrapped != baseErr {
212+
if !errors.Is(unwrapped, baseErr) {
211213
t.Errorf("Unwrap should return base error, got: %v", unwrapped)
212214
}
213215
}
@@ -242,7 +244,7 @@ func TestIsRetryableDNSError(t *testing.T) {
242244

243245
for _, tt := range tests {
244246
t.Run(tt.name, func(t *testing.T) {
245-
result := isRetryableDNSError(tt.err)
247+
result := verification.IsRetryableDNSError(tt.err)
246248
if result != tt.shouldRetry {
247249
t.Errorf("isRetryableDNSError(%v) = %t, want %t", tt.err, result, tt.shouldRetry)
248250
}
@@ -254,7 +256,7 @@ func TestDNSRecordFormat(t *testing.T) {
254256
token := "TBeVXe_X4npM6p8vpzStnA"
255257
expectedFormat := "mcp-verify=" + token
256258

257-
tokenInfo, err := GenerateTokenWithInfo()
259+
tokenInfo, err := verification.GenerateTokenWithInfo()
258260
if err != nil {
259261
t.Fatalf("Failed to generate token info: %v", err)
260262
}

0 commit comments

Comments
 (0)