github.com/cilium/cilium@v1.16.2/pkg/hubble/parser/seven/dns_test.go (about) 1 // SPDX-License-Identifier: Apache-2.0 2 // Copyright Authors of Hubble 3 4 package seven 5 6 import ( 7 "net" 8 "testing" 9 "time" 10 11 "github.com/stretchr/testify/assert" 12 "github.com/stretchr/testify/require" 13 14 flowpb "github.com/cilium/cilium/api/v1/flow" 15 "github.com/cilium/cilium/pkg/hubble/testutils" 16 "github.com/cilium/cilium/pkg/proxy/accesslog" 17 "github.com/cilium/cilium/pkg/u8proto" 18 ) 19 20 func TestDecodeL7DNSRecord(t *testing.T) { 21 lr := &accesslog.LogRecord{ 22 Type: accesslog.TypeResponse, 23 Timestamp: fakeTimestamp, 24 NodeAddressInfo: fakeNodeInfo, 25 ObservationPoint: accesslog.Ingress, 26 SourceEndpoint: fakeDestinationEndpoint, 27 DestinationEndpoint: fakeSourceEndpoint, 28 IPVersion: accesslog.VersionIPV6, 29 Verdict: accesslog.VerdictForwarded, 30 TransportProtocol: accesslog.TransportProtocol(u8proto.UDP), 31 ServiceInfo: nil, 32 DropReason: nil, 33 DNS: &accesslog.LogRecordDNS{ 34 Query: "deathstar.empire.svc.cluster.local.", 35 IPs: []net.IP{net.ParseIP("1.2.3.4")}, 36 TTL: 5, 37 ObservationSource: accesslog.DNSSourceProxy, 38 RCode: 0, 39 QTypes: []uint16{1}, 40 AnswerTypes: []uint16{1}, 41 }, 42 } 43 lr.SourceEndpoint.Port = 53 44 lr.DestinationEndpoint.Port = 56789 45 46 dnsGetter := &testutils.NoopDNSGetter 47 ipGetter := &testutils.NoopIPGetter 48 serviceGetter := &testutils.NoopServiceGetter 49 endpointGetter := &testutils.NoopEndpointGetter 50 51 parser, err := New(log, dnsGetter, ipGetter, serviceGetter, endpointGetter) 52 require.NoError(t, err) 53 54 f := &flowpb.Flow{} 55 err = parser.Decode(lr, f) 56 require.NoError(t, err) 57 58 ts := f.GetTime().AsTime() 59 assert.Equal(t, fakeTimestamp, ts.Format(time.RFC3339Nano)) 60 61 assert.Equal(t, fakeSourceEndpoint.IPv6, f.GetIP().GetDestination()) 62 assert.Equal(t, uint32(56789), f.GetL4().GetUDP().GetDestinationPort()) 63 assert.Equal(t, []string(nil), f.GetDestinationNames()) 64 assert.Equal(t, fakeSourceEndpoint.Labels.GetModel(), f.GetDestination().GetLabels()) 65 assert.Equal(t, "", f.GetDestination().GetNamespace()) 66 assert.Equal(t, "", f.GetDestination().GetPodName()) 67 assert.Equal(t, "", f.GetDestinationService().GetNamespace()) 68 assert.Equal(t, "", f.GetDestinationService().GetName()) 69 70 assert.Equal(t, fakeDestinationEndpoint.IPv6, f.GetIP().GetSource()) 71 assert.Equal(t, uint32(53), f.GetL4().GetUDP().GetSourcePort()) 72 assert.Equal(t, []string(nil), f.GetSourceNames()) 73 assert.Equal(t, fakeDestinationEndpoint.Labels.GetModel(), f.GetSource().GetLabels()) 74 assert.Equal(t, "", f.GetSource().GetNamespace()) 75 assert.Equal(t, "", f.GetSource().GetPodName()) 76 assert.Equal(t, "", f.GetSourceService().GetNamespace()) 77 assert.Equal(t, "", f.GetSourceService().GetName()) 78 79 assert.Equal(t, flowpb.Verdict_FORWARDED, f.GetVerdict()) 80 81 assert.Equal(t, &flowpb.DNS{ 82 Query: "deathstar.empire.svc.cluster.local.", 83 Ips: []string{"1.2.3.4"}, 84 Ttl: 5, 85 ObservationSource: string(accesslog.DNSSourceProxy), 86 Rcode: 0, 87 Qtypes: []string{"A"}, 88 Rrtypes: []string{"A"}, 89 }, f.GetL7().GetDns()) 90 }