Files
coredns/plugin/etcd/ttl_test.go
2025-09-05 11:45:30 -07:00

114 lines
2.3 KiB
Go

package etcd
import (
"testing"
"github.com/coredns/coredns/plugin/etcd/msg"
"go.etcd.io/etcd/api/v3/mvccpb"
)
func TestTTL(t *testing.T) {
tests := []struct {
name string
leaseID int64
serviceTTL uint32
minLeaseTTL uint32
maxLeaseTTL uint32
hasClient bool
expectedTTL uint32
}{
{
name: "no client, large lease ID falls back to default",
leaseID: 0x12345678FFFFFFFF, // Large lease ID that would cause issues
serviceTTL: 0,
minLeaseTTL: 0,
maxLeaseTTL: 0,
hasClient: false,
expectedTTL: defaultTTL,
},
{
name: "no client, zero lease ID falls back to default",
leaseID: 0,
serviceTTL: 0,
minLeaseTTL: 0,
maxLeaseTTL: 0,
hasClient: false,
expectedTTL: defaultTTL,
},
{
name: "no client, service TTL takes precedence",
leaseID: 120,
serviceTTL: 300,
minLeaseTTL: 0,
maxLeaseTTL: 0,
hasClient: false,
expectedTTL: 300,
},
{
name: "no client, smaller service TTL wins",
leaseID: 600,
serviceTTL: 120,
minLeaseTTL: 0,
maxLeaseTTL: 0,
hasClient: false,
expectedTTL: 120,
},
{
name: "custom bounds, no client",
leaseID: 0x12345678FFFFFFFF,
serviceTTL: 0,
minLeaseTTL: 60, // 1 minute
maxLeaseTTL: 3600, // 1 hour
hasClient: false,
expectedTTL: defaultTTL,
},
{
name: "zero service TTL with lease ID",
leaseID: 600,
serviceTTL: 0,
minLeaseTTL: 0,
maxLeaseTTL: 0,
hasClient: false,
expectedTTL: defaultTTL,
},
{
name: "both zero, falls back to default",
leaseID: 0,
serviceTTL: 0,
minLeaseTTL: 0,
maxLeaseTTL: 0,
hasClient: false,
expectedTTL: defaultTTL,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
// Create Etcd instance with test configuration
e := &Etcd{
MinLeaseTTL: tt.minLeaseTTL,
MaxLeaseTTL: tt.maxLeaseTTL,
}
// Create test data
kv := &mvccpb.KeyValue{
Key: []byte("/test/service"),
Value: []byte(`{"host": "test.example.com"}`),
Lease: tt.leaseID,
}
serv := &msg.Service{
Host: "test.example.com",
TTL: tt.serviceTTL,
}
resultingTTL := e.TTL(kv, serv)
if resultingTTL != tt.expectedTTL {
t.Errorf("TTL() = %d, expected %d", resultingTTL, tt.expectedTTL)
}
})
}
}