...

Source file src/edge-infra.dev/pkg/k8s/testing/kmp/conditions_test.go

Documentation: edge-infra.dev/pkg/k8s/testing/kmp

     1  package kmp
     2  
     3  import (
     4  	"testing"
     5  
     6  	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
     7  
     8  	"edge-infra.dev/pkg/k8s/meta/status"
     9  	"edge-infra.dev/pkg/k8s/runtime/conditions"
    10  )
    11  
    12  func TestConditions(t *testing.T) {
    13  	t.Parallel()
    14  
    15  	var (
    16  		empty      = &metav1.Condition{}
    17  		rdy        = conditions.TrueCondition(status.ReadyCondition, "", "")
    18  		rdySuccess = conditions.TrueCondition(status.ReadyCondition, status.SucceededReason, "")
    19  		rdyMsg     = conditions.TrueCondition(status.ReadyCondition, status.SucceededReason, "we done it")
    20  		rdyMsg2    = conditions.TrueCondition(status.ReadyCondition, status.SucceededReason, "we done it again")
    21  		recFalse   = conditions.FalseCondition(status.ReconcilingCondition, "Progressing", "")
    22  		recFalse2  = conditions.FalseCondition(status.ReconcilingCondition, "", "")
    23  		stalled    = conditions.TrueCondition(status.StalledCondition, status.DependencyInvalidReason, "")
    24  	)
    25  
    26  	tcs := map[string]map[string]testCase{
    27  		"SameCondition": {
    28  			"nil is same": {
    29  				SameCondition(nil, nil),
    30  				true,
    31  			},
    32  			"empty is same": {
    33  				SameCondition(empty, empty),
    34  				true,
    35  			},
    36  			"empty is not same": {
    37  				SameCondition(empty, rdy),
    38  				false,
    39  			},
    40  			"same": {
    41  				SameCondition(rdy, rdy),
    42  				true,
    43  			},
    44  			"same with reason": {
    45  				SameCondition(rdySuccess, rdySuccess),
    46  				true,
    47  			},
    48  			"same with message": {
    49  				SameCondition(rdyMsg, rdyMsg),
    50  				true,
    51  			},
    52  			"not same with substring message": {
    53  				SameCondition(rdyMsg, rdyMsg2),
    54  				false,
    55  			},
    56  			"not same with empty message": {
    57  				SameCondition(rdy, rdyMsg),
    58  				false,
    59  			},
    60  			"not same with different status": {
    61  				SameCondition(recFalse, recFalse2),
    62  				false,
    63  			},
    64  			"not same with different type": {
    65  				SameCondition(rdy, stalled),
    66  				false,
    67  			},
    68  		},
    69  		"SameConditions": {
    70  			"same": {
    71  				SameConditions(
    72  					[]metav1.Condition{*stalled, *recFalse},
    73  					[]metav1.Condition{*stalled, *recFalse},
    74  				),
    75  				true,
    76  			},
    77  			"empty is same": {
    78  				SameConditions(
    79  					[]metav1.Condition{},
    80  					[]metav1.Condition{},
    81  				),
    82  				true,
    83  			},
    84  			"not same": {
    85  				SameConditions(
    86  					[]metav1.Condition{*rdyMsg, *recFalse},
    87  					[]metav1.Condition{*rdyMsg2, *recFalse},
    88  				),
    89  				false,
    90  			},
    91  			"not same with different lengths": {
    92  				SameConditions(
    93  					[]metav1.Condition{*rdy, *recFalse},
    94  					[]metav1.Condition{*rdy},
    95  				),
    96  				false,
    97  			},
    98  		},
    99  		"EqualCondition": {
   100  			"nil is equal": {
   101  				EqualCondition(nil, nil),
   102  				true,
   103  			},
   104  			"empty is equal": {
   105  				EqualCondition(empty, empty),
   106  				true,
   107  			},
   108  			"equal": {
   109  				EqualCondition(rdy, rdy),
   110  				true,
   111  			},
   112  			"equal with reason": {
   113  				EqualCondition(rdySuccess, rdySuccess),
   114  				true,
   115  			},
   116  			"equal with same message": {
   117  				EqualCondition(rdyMsg, rdyMsg),
   118  				true,
   119  			},
   120  			"equal with substring message": {
   121  				EqualCondition(rdyMsg2, rdyMsg),
   122  				true,
   123  			},
   124  			"empty is not equal": {
   125  				EqualCondition(empty, rdy),
   126  				false,
   127  			},
   128  			"not equal with empty message": {
   129  				EqualCondition(rdy, rdyMsg),
   130  				false,
   131  			},
   132  			"not equal with different status": {
   133  				EqualCondition(recFalse, recFalse2),
   134  				false,
   135  			},
   136  			"not equal with different type": {
   137  				EqualCondition(rdy, stalled),
   138  				false,
   139  			},
   140  		},
   141  		"EqualConditions": {
   142  			"empty is equal": {
   143  				EqualConditions(
   144  					[]metav1.Condition{},
   145  					[]metav1.Condition{},
   146  				),
   147  				true,
   148  			},
   149  			"equal": {
   150  				EqualConditions(
   151  					[]metav1.Condition{*stalled, *recFalse},
   152  					[]metav1.Condition{*stalled, *recFalse},
   153  				),
   154  				true,
   155  			},
   156  			"equal with substring message": {
   157  				EqualConditions(
   158  					[]metav1.Condition{*rdyMsg, *recFalse},
   159  					[]metav1.Condition{*rdyMsg2, *recFalse},
   160  				),
   161  				true,
   162  			},
   163  			"not equal": {
   164  				EqualConditions(
   165  					[]metav1.Condition{*rdyMsg, *recFalse},
   166  					[]metav1.Condition{*rdy, *recFalse},
   167  				),
   168  				false,
   169  			},
   170  			"not equal with different lengths": {
   171  				EqualConditions(
   172  					[]metav1.Condition{*rdy, *recFalse},
   173  					[]metav1.Condition{*rdy},
   174  				),
   175  				false,
   176  			},
   177  		},
   178  	}
   179  
   180  	for fn, fnTestCases := range tcs {
   181  		fnTestCases := fnTestCases
   182  		// Run tests so they are structured like:
   183  		// TestConditions/EqualCondition/equal_is_same
   184  		t.Run(fn, func(t *testing.T) {
   185  			t.Parallel()
   186  			for name, tc := range fnTestCases {
   187  				t.Run(name, func(t *testing.T) {
   188  					run(t, tc)
   189  				})
   190  			}
   191  		})
   192  	}
   193  }
   194  

View as plain text