@@ -2,6 +2,8 @@ package druid
22
33import (
44 "io/ioutil"
5+ "reflect"
6+ "testing"
57
68 "github.com/ghodss/yaml"
79 . "github.com/onsi/ginkgo/v2"
@@ -213,3 +215,139 @@ func readAndUnmarshallResource(file string, res interface{}) error {
213215 }
214216 return nil
215217}
218+
219+ func TestPodSpecDNSConfig (t * testing.T ) {
220+ tests := []struct {
221+ name string
222+ nodeDNSConfig * corev1.PodDNSConfig
223+ specDNSConfig * corev1.PodDNSConfig
224+ expected * corev1.PodDNSConfig
225+ }{
226+ {
227+ name : "Both nil" ,
228+ nodeDNSConfig : nil ,
229+ specDNSConfig : nil ,
230+ expected : nil ,
231+ },
232+ {
233+ name : "Only spec provided" ,
234+ nodeDNSConfig : nil ,
235+ specDNSConfig : & corev1.PodDNSConfig {
236+ Nameservers : []string {"8.8.8.8" },
237+ Searches : []string {"example.com" },
238+ },
239+ expected : & corev1.PodDNSConfig {
240+ Nameservers : []string {"8.8.8.8" },
241+ Searches : []string {"example.com" },
242+ },
243+ },
244+ {
245+ name : "Only node provided" ,
246+ nodeDNSConfig : & corev1.PodDNSConfig {
247+ Nameservers : []string {"1.1.1.1" },
248+ Searches : []string {"node.local" },
249+ },
250+ specDNSConfig : nil ,
251+ expected : & corev1.PodDNSConfig {
252+ Nameservers : []string {"1.1.1.1" },
253+ Searches : []string {"node.local" },
254+ },
255+ },
256+ {
257+ name : "Both provided, node wins" ,
258+ nodeDNSConfig : & corev1.PodDNSConfig {
259+ Nameservers : []string {"1.1.1.1" },
260+ Searches : []string {"node.local" },
261+ },
262+ specDNSConfig : & corev1.PodDNSConfig {
263+ Nameservers : []string {"8.8.8.8" },
264+ Searches : []string {"example.com" },
265+ },
266+ expected : & corev1.PodDNSConfig {
267+ Nameservers : []string {"1.1.1.1" },
268+ Searches : []string {"node.local" },
269+ },
270+ },
271+ }
272+
273+ for _ , tc := range tests {
274+ t .Run (tc .name , func (t * testing.T ) {
275+ m := & druidv1alpha1.Druid {
276+ Spec : druidv1alpha1.DruidSpec {
277+ DNSConfig : tc .specDNSConfig ,
278+ },
279+ }
280+ nodeSpec := & druidv1alpha1.DruidNodeSpec {
281+ DNSConfig : tc .nodeDNSConfig ,
282+ }
283+ podSpec := makePodSpec (nodeSpec , m , "unique" , "dummySHA" )
284+ if ! reflect .DeepEqual (podSpec .DNSConfig , tc .expected ) {
285+ t .Errorf ("expected DNSConfig %v, got %v" , tc .expected , podSpec .DNSConfig )
286+ }
287+ })
288+ }
289+ }
290+
291+ func TestPodSpecDNSConfigYAML (t * testing.T ) {
292+ m , err := readDruidClusterSpecFromFile ("testdata/druid-test-cr.yaml" )
293+ if err != nil {
294+ t .Fatalf ("failed to read cluster spec: %v" , err )
295+ }
296+ nodeSpec := m .Spec .Nodes ["middlemanagers" ]
297+ podSpec := makePodSpec (& nodeSpec , m , "unique" , "dummySHA" )
298+ expectedDNSConfig := & corev1.PodDNSConfig {
299+ Nameservers : []string {"10.0.0.53" },
300+ Searches : []string {"example.local" },
301+ }
302+ if ! reflect .DeepEqual (podSpec .DNSConfig , expectedDNSConfig ) {
303+ t .Errorf ("expected DNSConfig %v, got %v" , expectedDNSConfig , podSpec .DNSConfig )
304+ }
305+ }
306+
307+ // TestPodSpecDNSPolicy verifies DNSPolicy resolution in makePodSpec.
308+ func TestPodSpecDNSPolicy (t * testing.T ) {
309+ tests := []struct {
310+ name string
311+ nodeDNS string
312+ specDNS string
313+ expected corev1.DNSPolicy
314+ }{
315+ {"Both empty" , "" , "" , corev1 .DNSPolicy ("" )},
316+ {"Only spec provided" , "" , "ClusterFirst" , corev1 .DNSPolicy ("ClusterFirst" )},
317+ {"Only node provided" , "Default" , "" , corev1 .DNSPolicy ("Default" )},
318+ {"Both provided, node wins" , "Default" , "ClusterFirst" , corev1 .DNSPolicy ("Default" )},
319+ }
320+
321+ for _ , tc := range tests {
322+ tc := tc // capture current test case
323+ t .Run (tc .name , func (t * testing.T ) {
324+ m := & druidv1alpha1.Druid {
325+ Spec : druidv1alpha1.DruidSpec {
326+ DNSPolicy : corev1 .DNSPolicy (tc .specDNS ),
327+ },
328+ }
329+ nodeSpec := & druidv1alpha1.DruidNodeSpec {
330+ DNSPolicy : corev1 .DNSPolicy (tc .nodeDNS ),
331+ }
332+ podSpec := makePodSpec (nodeSpec , m , "unique" , "dummySHA" )
333+ if podSpec .DNSPolicy != tc .expected {
334+ t .Errorf ("expected DNSPolicy %q, got %q" , tc .expected , podSpec .DNSPolicy )
335+ }
336+ })
337+ }
338+ }
339+
340+ // TestPodSpecDNSPolicyYAML validates that the generated PodSpec DNSPolicy matches the expected value,
341+ // using the druid-test-cr.yaml as the single input file.
342+ func TestPodSpecDNSPolicyYAML (t * testing.T ) {
343+ m , err := readDruidClusterSpecFromFile ("testdata/druid-test-cr.yaml" )
344+ if err != nil {
345+ t .Fatalf ("failed to read cluster spec: %v" , err )
346+ }
347+ nodeSpec := m .Spec .Nodes ["middlemanagers" ]
348+ podSpec := makePodSpec (& nodeSpec , m , "unique" , "dummySHA" )
349+ expectedDNSPolicy := corev1 .DNSPolicy ("ClusterFirst" )
350+ if podSpec .DNSPolicy != expectedDNSPolicy {
351+ t .Errorf ("expected DNSPolicy %q, got %q" , expectedDNSPolicy , podSpec .DNSPolicy )
352+ }
353+ }
0 commit comments