github.com/cilium/cilium@v1.16.2/pkg/policy/api/entity_test.go (about)

     1  // SPDX-License-Identifier: Apache-2.0
     2  // Copyright Authors of Cilium
     3  
     4  package api
     5  
     6  import (
     7  	"fmt"
     8  	"testing"
     9  
    10  	"github.com/stretchr/testify/require"
    11  
    12  	k8sapi "github.com/cilium/cilium/pkg/k8s/apis/cilium.io"
    13  	"github.com/cilium/cilium/pkg/labels"
    14  )
    15  
    16  // matches returns true if the entity matches the labels
    17  func (e Entity) matches(ctx labels.LabelArray) bool {
    18  	return EntitySlice{e}.matches(ctx)
    19  }
    20  
    21  // matches returns true if any of the entities in the slice match the labels
    22  func (s EntitySlice) matches(ctx labels.LabelArray) bool {
    23  	return s.GetAsEndpointSelectors().Matches(ctx)
    24  }
    25  
    26  func TestEntityMatches(t *testing.T) {
    27  	InitEntities("cluster1")
    28  
    29  	require.Equal(t, true, EntityHost.matches(labels.ParseLabelArray("reserved:host")))
    30  	require.Equal(t, true, EntityHost.matches(labels.ParseLabelArray("reserved:host", "id:foo")))
    31  	require.Equal(t, false, EntityHost.matches(labels.ParseLabelArray("reserved:world")))
    32  	require.Equal(t, false, EntityHost.matches(labels.ParseLabelArray("reserved:health")))
    33  	require.Equal(t, false, EntityHost.matches(labels.ParseLabelArray("reserved:unmanaged")))
    34  	require.Equal(t, false, EntityHost.matches(labels.ParseLabelArray("reserved:none")))
    35  	require.Equal(t, false, EntityHost.matches(labels.ParseLabelArray("id=foo")))
    36  
    37  	require.Equal(t, true, EntityAll.matches(labels.ParseLabelArray("reserved:host")))
    38  	require.Equal(t, true, EntityAll.matches(labels.ParseLabelArray("reserved:world")))
    39  	require.Equal(t, true, EntityAll.matches(labels.ParseLabelArray("reserved:health")))
    40  	require.Equal(t, true, EntityAll.matches(labels.ParseLabelArray("reserved:unmanaged")))
    41  	require.Equal(t, true, EntityAll.matches(labels.ParseLabelArray("reserved:none"))) // in a white-list model, All trumps None
    42  	require.Equal(t, true, EntityAll.matches(labels.ParseLabelArray("id=foo")))
    43  
    44  	require.Equal(t, true, EntityCluster.matches(labels.ParseLabelArray("reserved:host")))
    45  	require.Equal(t, true, EntityCluster.matches(labels.ParseLabelArray("reserved:init")))
    46  	require.Equal(t, true, EntityCluster.matches(labels.ParseLabelArray("reserved:health")))
    47  	require.Equal(t, true, EntityCluster.matches(labels.ParseLabelArray("reserved:unmanaged")))
    48  	require.Equal(t, false, EntityCluster.matches(labels.ParseLabelArray("reserved:world")))
    49  	require.Equal(t, false, EntityCluster.matches(labels.ParseLabelArray("reserved:none")))
    50  
    51  	clusterLabel := fmt.Sprintf("k8s:%s=%s", k8sapi.PolicyLabelCluster, "cluster1")
    52  	require.Equal(t, true, EntityCluster.matches(labels.ParseLabelArray(clusterLabel, "id=foo")))
    53  	require.Equal(t, true, EntityCluster.matches(labels.ParseLabelArray(clusterLabel, "id=foo", "id=bar")))
    54  	require.Equal(t, false, EntityCluster.matches(labels.ParseLabelArray("id=foo")))
    55  
    56  	require.Equal(t, false, EntityWorld.matches(labels.ParseLabelArray("reserved:host")))
    57  	require.Equal(t, true, EntityWorld.matches(labels.ParseLabelArray("reserved:world")))
    58  	require.Equal(t, false, EntityWorld.matches(labels.ParseLabelArray("reserved:health")))
    59  	require.Equal(t, false, EntityWorld.matches(labels.ParseLabelArray("reserved:unmanaged")))
    60  	require.Equal(t, false, EntityWorld.matches(labels.ParseLabelArray("reserved:none")))
    61  	require.Equal(t, false, EntityWorld.matches(labels.ParseLabelArray("id=foo")))
    62  	require.Equal(t, false, EntityWorld.matches(labels.ParseLabelArray("id=foo", "id=bar")))
    63  
    64  	require.Equal(t, false, EntityNone.matches(labels.ParseLabelArray("reserved:host")))
    65  	require.Equal(t, false, EntityNone.matches(labels.ParseLabelArray("reserved:world")))
    66  	require.Equal(t, false, EntityNone.matches(labels.ParseLabelArray("reserved:health")))
    67  	require.Equal(t, false, EntityNone.matches(labels.ParseLabelArray("reserved:unmanaged")))
    68  	require.Equal(t, false, EntityNone.matches(labels.ParseLabelArray("reserved:init")))
    69  	require.Equal(t, false, EntityNone.matches(labels.ParseLabelArray("id=foo")))
    70  	require.Equal(t, false, EntityNone.matches(labels.ParseLabelArray(clusterLabel, "id=foo", "id=bar")))
    71  
    72  }
    73  
    74  func TestEntitySliceMatches(t *testing.T) {
    75  	InitEntities("cluster1")
    76  
    77  	slice := EntitySlice{EntityHost, EntityWorld}
    78  	require.Equal(t, true, slice.matches(labels.ParseLabelArray("reserved:host")))
    79  	require.Equal(t, true, slice.matches(labels.ParseLabelArray("reserved:world")))
    80  	require.Equal(t, false, slice.matches(labels.ParseLabelArray("reserved:health")))
    81  	require.Equal(t, false, slice.matches(labels.ParseLabelArray("reserved:unmanaged")))
    82  	require.Equal(t, false, slice.matches(labels.ParseLabelArray("reserved:none")))
    83  	require.Equal(t, false, slice.matches(labels.ParseLabelArray("id=foo")))
    84  
    85  	slice = EntitySlice{EntityHost, EntityHealth}
    86  	require.Equal(t, true, slice.matches(labels.ParseLabelArray("reserved:host")))
    87  	require.Equal(t, false, slice.matches(labels.ParseLabelArray("reserved:world")))
    88  	require.Equal(t, true, slice.matches(labels.ParseLabelArray("reserved:health")))
    89  	require.Equal(t, false, slice.matches(labels.ParseLabelArray("reserved:unmanaged")))
    90  	require.Equal(t, false, slice.matches(labels.ParseLabelArray("reserved:none")))
    91  	require.Equal(t, false, slice.matches(labels.ParseLabelArray("id=foo")))
    92  }