...

Source file src/edge-infra.dev/pkg/sds/lib/jsonpatch/jsonpatch_test.go

Documentation: edge-infra.dev/pkg/sds/lib/jsonpatch

     1  package jsonpatch
     2  
     3  import (
     4  	"errors"
     5  	"testing"
     6  
     7  	"github.com/stretchr/testify/assert"
     8  	"github.com/stretchr/testify/require"
     9  	corev1 "k8s.io/api/core/v1"
    10  
    11  	v1ien "edge-infra.dev/pkg/sds/ien/k8s/apis/v1"
    12  
    13  	"edge-infra.dev/pkg/sds/ien/node"
    14  )
    15  
    16  func TestOperationsToString(t *testing.T) {
    17  	testCases := []struct {
    18  		ops         []Operation
    19  		expectedStr string
    20  		err         error
    21  	}{
    22  		{
    23  			ops: []Operation{
    24  				{
    25  					Op:   Add,
    26  					Path: "/spec/template/spec/affinity",
    27  					Value: corev1.Affinity{
    28  						NodeAffinity: &corev1.NodeAffinity{
    29  							RequiredDuringSchedulingIgnoredDuringExecution: &corev1.NodeSelector{
    30  								NodeSelectorTerms: []corev1.NodeSelectorTerm{
    31  									{
    32  										MatchExpressions: []corev1.NodeSelectorRequirement{
    33  											{
    34  												Key:      node.ClassLabel,
    35  												Operator: corev1.NodeSelectorOpNotIn,
    36  												Values:   []string{string(v1ien.Server)},
    37  											},
    38  										},
    39  									},
    40  								},
    41  							},
    42  						},
    43  					},
    44  				},
    45  			},
    46  			expectedStr: `- op: add
    47    path: /spec/template/spec/affinity
    48    value:
    49      nodeAffinity:
    50        requiredDuringSchedulingIgnoredDuringExecution:
    51          nodeSelectorTerms:
    52          - matchExpressions:
    53            - key: node.ncr.com/class
    54              operator: NotIn
    55              values:
    56              - server
    57  `,
    58  			err: nil,
    59  		},
    60  		{
    61  			ops: []Operation{
    62  				{
    63  					Op:   Replace,
    64  					Path: "/spec/nodeSelectorTerms",
    65  					Value: []corev1.NodeSelectorTerm{
    66  						{
    67  							MatchExpressions: []corev1.NodeSelectorRequirement{
    68  								{
    69  									Key:      node.ClassLabel,
    70  									Operator: corev1.NodeSelectorOpNotIn,
    71  									Values:   []string{string(v1ien.Server)},
    72  								},
    73  							},
    74  						},
    75  					},
    76  				},
    77  				{
    78  					Op:   Add,
    79  					Path: "/spec/template/metadata/annotations",
    80  					Value: map[string]string{
    81  						"edge.ncr.com/helm-edge-id": "ce77374f-0b5b-4092-bd8b-3b6ee9e96061",
    82  					},
    83  				},
    84  			},
    85  			expectedStr: `- op: replace
    86    path: /spec/nodeSelectorTerms
    87    value:
    88    - matchExpressions:
    89      - key: node.ncr.com/class
    90        operator: NotIn
    91        values:
    92        - server
    93  - op: add
    94    path: /spec/template/metadata/annotations
    95    value:
    96      edge.ncr.com/helm-edge-id: ce77374f-0b5b-4092-bd8b-3b6ee9e96061
    97  `,
    98  			err: nil,
    99  		},
   100  	}
   101  	for _, tc := range testCases {
   102  		patch := NewPatch(tc.ops...)
   103  		actualStr, err := patch.String()
   104  		require.True(t, errors.Is(err, tc.err))
   105  		assert.Equal(t, tc.expectedStr, actualStr)
   106  	}
   107  }
   108  

View as plain text