@@ -18,8 +18,11 @@ package wrappers
1818
1919import (
2020 "context"
21+ "net/netip"
2122 "testing"
2223
24+ "github.com/stretchr/testify/assert"
25+ "github.com/stretchr/testify/require"
2326 "sigs.k8s.io/external-dns/endpoint"
2427 "sigs.k8s.io/external-dns/internal/testutils"
2528 "sigs.k8s.io/external-dns/source"
@@ -74,12 +77,11 @@ func testNat64Source(t *testing.T) {
7477 mockSource .On ("Endpoints" ).Return (tc .endpoints , nil )
7578
7679 // Create our object under test and get the endpoints.
77- source := NewNAT64Source (mockSource , []string {"2001:DB8::/96" })
80+ source , err := NewNAT64Source (mockSource , []string {"2001:DB8::/96" })
81+ require .NoError (t , err )
7882
7983 endpoints , err := source .Endpoints (context .Background ())
80- if err != nil {
81- t .Fatal (err )
82- }
84+ require .NoError (t , err )
8385
8486 // Validate returned endpoints against desired endpoints.
8587 validateEndpoints (t , endpoints , tc .expected )
@@ -112,10 +114,77 @@ func TestNat64Source_AddEventHandler(t *testing.T) {
112114 t .Run (tt .title , func (t * testing.T ) {
113115 mockSource := testutils .NewMockSource ()
114116
115- src := NewNAT64Source (mockSource , tt .input )
117+ src , err := NewNAT64Source (mockSource , tt .input )
118+ require .NoError (t , err )
119+
116120 src .AddEventHandler (t .Context (), func () {})
117121
118122 mockSource .AssertNumberOfCalls (t , "AddEventHandler" , tt .times )
119123 })
120124 }
121125}
126+
127+ func TestNewNAT64Source (t * testing.T ) {
128+ type args struct {
129+ source source.Source
130+ nat64Prefixes []string
131+ }
132+ tests := []struct {
133+ name string
134+ args args
135+ want source.Source
136+ wantErr bool
137+ }{
138+ {
139+ name : "empty NAT64 prefixes should succeed" ,
140+ args : args {
141+ source : & testutils.MockSource {},
142+ nat64Prefixes : []string {},
143+ },
144+ want : & nat64Source {source : & testutils.MockSource {}, nat64Prefixes : []netip.Prefix {}},
145+ },
146+ {
147+ name : "multiple valid NAT64 prefixes should succeed" ,
148+ args : args {
149+ source : & testutils.MockSource {},
150+ nat64Prefixes : []string {"2001:db8::/96" , "64:ff9b::/96" },
151+ },
152+ want : & nat64Source {source : & testutils.MockSource {}, nat64Prefixes : []netip.Prefix {netip .MustParsePrefix ("2001:db8::/96" ), netip .MustParsePrefix ("64:ff9b::/96" )}},
153+ },
154+ {
155+ name : "invalid NAT64 prefix should fail" ,
156+ args : args {
157+ source : & testutils.MockSource {},
158+ nat64Prefixes : []string {"invalid-prefix" },
159+ },
160+ wantErr : true ,
161+ },
162+ {
163+ name : "NAT64 prefix with wrong mask length should fail" ,
164+ args : args {
165+ source : & testutils.MockSource {},
166+ nat64Prefixes : []string {"2001:db8::/64" },
167+ },
168+ wantErr : true ,
169+ },
170+ {
171+ name : "IPv4 address as NAT64 prefix should fail" ,
172+ args : args {
173+ source : & testutils.MockSource {},
174+ nat64Prefixes : []string {"192.0.2.0/24" },
175+ },
176+ wantErr : true ,
177+ },
178+ }
179+ for _ , tt := range tests {
180+ t .Run (tt .name , func (t * testing.T ) {
181+ src , err := NewNAT64Source (tt .args .source , tt .args .nat64Prefixes )
182+ if tt .wantErr {
183+ assert .Error (t , err )
184+ } else {
185+ assert .NoError (t , err )
186+ }
187+ assert .Equal (t , tt .want , src )
188+ })
189+ }
190+ }
0 commit comments