diff --git a/lns.go b/lns.go index 151e5ae..6f86d49 100644 --- a/lns.go +++ b/lns.go @@ -272,6 +272,16 @@ func GetNewResource() *Resource { return NewResource() } +// DecodeResource decodes a raw DNS resource payload. +func DecodeResource(raw []byte) (*Resource, error) { + return dnspkg.DecodeResource(raw) +} + +// GetDecodeResource is an alias for DecodeResource. +func GetDecodeResource(raw []byte) (*Resource, error) { + return DecodeResource(raw) +} + // Create constructs a reference NSEC record container. func Create(name, nextDomain string, typeBitmap []byte) NSECRecord { return dnspkg.Create(name, nextDomain, typeBitmap) diff --git a/lns_package_test.go b/lns_package_test.go index 9c4f138..ce536d2 100644 --- a/lns_package_test.go +++ b/lns_package_test.go @@ -712,6 +712,30 @@ func TestPackageResourceAliases(t *testing.T) { if resource.HasType(dnspkg.HSTypeTXT) == false { t.Fatal("resource aliases should expose record type helpers from pkg/dns") } + + encoded, err := resource.Encode() + if err != nil { + t.Fatalf("Resource.Encode returned error: %v", err) + } + + decoded, err := DecodeResource(encoded) + if err != nil { + t.Fatalf("DecodeResource returned error: %v", err) + } + + if decoded.TTL != DEFAULT_TTL { + t.Fatalf("DecodeResource TTL = %d, want %d", decoded.TTL, DEFAULT_TTL) + } + + if len(decoded.Records) != len(resource.Records) { + t.Fatalf("DecodeResource records = %d, want %d", len(decoded.Records), len(resource.Records)) + } + + if got, err := GetDecodeResource(encoded); err != nil { + t.Fatalf("GetDecodeResource returned error: %v", err) + } else if got.TTL != decoded.TTL || len(got.Records) != len(decoded.Records) { + t.Fatal("GetDecodeResource should alias DecodeResource") + } } func TestPackageNameStateAliases(t *testing.T) {