github.com/cilium/cilium@v1.16.2/pkg/hubble/metrics/drop/handler_test.go (about) 1 // SPDX-License-Identifier: Apache-2.0 2 // Copyright Authors of Hubble 3 4 package drop 5 6 import ( 7 "context" 8 "testing" 9 10 "github.com/prometheus/client_golang/prometheus" 11 "github.com/stretchr/testify/assert" 12 "github.com/stretchr/testify/require" 13 14 pb "github.com/cilium/cilium/api/v1/flow" 15 "github.com/cilium/cilium/pkg/hubble/metrics/api" 16 monitorAPI "github.com/cilium/cilium/pkg/monitor/api" 17 ) 18 19 func TestDropHandler(t *testing.T) { 20 registry := prometheus.NewRegistry() 21 opts := api.Options{"sourceContext": "namespace", "destinationContext": "namespace"} 22 23 dropHandler := &dropHandler{} 24 25 t.Run("Init", func(t *testing.T) { 26 require.NoError(t, dropHandler.Init(registry, opts)) 27 }) 28 29 t.Run("Status", func(t *testing.T) { 30 require.Equal(t, "destination=namespace,source=namespace", dropHandler.Status()) 31 }) 32 33 t.Run("ProcessFlow_ShouldReportNothingForForwardedFlow", func(t *testing.T) { 34 flow := &pb.Flow{ 35 EventType: &pb.CiliumEventType{Type: monitorAPI.MessageTypePolicyVerdict}, 36 L4: &pb.Layer4{ 37 Protocol: &pb.Layer4_TCP{ 38 TCP: &pb.TCP{}, 39 }, 40 }, 41 Source: &pb.Endpoint{Namespace: "foo"}, 42 Destination: &pb.Endpoint{Namespace: "bar"}, 43 Verdict: pb.Verdict_FORWARDED, 44 } 45 dropHandler.ProcessFlow(context.TODO(), flow) 46 47 metricFamilies, err := registry.Gather() 48 require.NoError(t, err) 49 require.Empty(t, metricFamilies) 50 51 }) 52 53 t.Run("ProcessFlow_ShouldReportDroppedFlow", func(t *testing.T) { 54 flow := &pb.Flow{ 55 EventType: &pb.CiliumEventType{Type: monitorAPI.MessageTypePolicyVerdict}, 56 L4: &pb.Layer4{ 57 Protocol: &pb.Layer4_TCP{ 58 TCP: &pb.TCP{}, 59 }, 60 }, 61 Source: &pb.Endpoint{Namespace: "foo"}, 62 Destination: &pb.Endpoint{Namespace: "bar"}, 63 Verdict: pb.Verdict_DROPPED, 64 DropReason: uint32(pb.DropReason_POLICY_DENIED), 65 DropReasonDesc: pb.DropReason_POLICY_DENIED, 66 } 67 dropHandler.ProcessFlow(context.TODO(), flow) 68 69 metricFamilies, err := registry.Gather() 70 require.NoError(t, err) 71 72 assert.Equal(t, "hubble_drop_total", *metricFamilies[0].Name) 73 require.Len(t, metricFamilies[0].Metric, 1) 74 metric := metricFamilies[0].Metric[0] 75 76 assert.Equal(t, "destination", *metric.Label[0].Name) 77 assert.Equal(t, "bar", *metric.Label[0].Value) 78 79 assert.Equal(t, "protocol", *metric.Label[1].Name) 80 assert.Equal(t, "TCP", *metric.Label[1].Value) 81 82 assert.Equal(t, "reason", *metric.Label[2].Name) 83 assert.Equal(t, "POLICY_DENIED", *metric.Label[2].Value) 84 85 assert.Equal(t, "source", *metric.Label[3].Name) 86 assert.Equal(t, "foo", *metric.Label[3].Value) 87 88 assert.Equal(t, 1., *metric.Counter.Value) 89 90 //send another flow with same labels 91 dropHandler.ProcessFlow(context.TODO(), flow) 92 metricFamilies, _ = registry.Gather() 93 metric = metricFamilies[0].Metric[0] 94 assert.Equal(t, 2., *metric.Counter.Value) 95 }) 96 }