diff --git a/pkg/kubelet/cm/topologymanager/socketmask/socketmask.go b/pkg/kubelet/cm/topologymanager/socketmask/socketmask.go index c68a9ecb984..a95b3199383 100644 --- a/pkg/kubelet/cm/topologymanager/socketmask/socketmask.go +++ b/pkg/kubelet/cm/topologymanager/socketmask/socketmask.go @@ -171,3 +171,17 @@ func (s *socketMask) GetSockets() []int { } return sockets } + +//And is a package level implementation of 'and' between first and masks +func And(first SocketMask, masks ...SocketMask) SocketMask { + s := *first.(*socketMask) + s.And(masks...) + return &s +} + +//Or is a package level implementation of 'or' between first and masks +func Or(first SocketMask, masks ...SocketMask) SocketMask { + s := *first.(*socketMask) + s.Or(masks...) + return &s +} diff --git a/pkg/kubelet/cm/topologymanager/socketmask/socketmask_test.go b/pkg/kubelet/cm/topologymanager/socketmask/socketmask_test.go index 31c2680617d..eaad0a819e0 100644 --- a/pkg/kubelet/cm/topologymanager/socketmask/socketmask_test.go +++ b/pkg/kubelet/cm/topologymanager/socketmask/socketmask_test.go @@ -106,6 +106,12 @@ func TestAnd(t *testing.T) { for _, tc := range tcases { firstMask, _ := NewSocketMask(tc.firstMaskBit) secondMask, _ := NewSocketMask(tc.secondMaskBit) + + result := And(firstMask, secondMask) + if result.String() != string(tc.andMask) { + t.Errorf("Expected mask to be %v, got %v", tc.andMask, result) + } + firstMask.And(secondMask) if firstMask.String() != string(tc.andMask) { t.Errorf("Expected mask to be %v, got %v", tc.andMask, firstMask) @@ -130,6 +136,12 @@ func TestOr(t *testing.T) { for _, tc := range tcases { firstMask, _ := NewSocketMask(tc.firstMaskBit) secondMask, _ := NewSocketMask(tc.secondMaskBit) + + result := Or(firstMask, secondMask) + if result.String() != string(tc.orMask) { + t.Errorf("Expected mask to be %v, got %v", tc.orMask, result) + } + firstMask.Or(secondMask) if firstMask.String() != string(tc.orMask) { t.Errorf("Expected mask to be %v, got %v", tc.orMask, firstMask)