...

Source file src/edge-infra.dev/pkg/edge/bsl/watch_test.go

Documentation: edge-infra.dev/pkg/edge/bsl

     1  package bsl_test
     2  
     3  import (
     4  	"context"
     5  	"testing"
     6  	"time"
     7  
     8  	. "edge-infra.dev/pkg/edge/bsl" //nolint:revive //TODO: dont be lazy
     9  	fakebsl "edge-infra.dev/pkg/edge/bsl/fake"
    10  	"edge-infra.dev/pkg/lib/logging"
    11  
    12  	assertapi "github.com/stretchr/testify/assert"
    13  	"sigs.k8s.io/controller-runtime/pkg/client/fake"
    14  )
    15  
    16  var (
    17  	waitForCallbackFunction = 200 * time.Millisecond
    18  )
    19  
    20  func TestOnConfigMapUpdate(t *testing.T) {
    21  	assert := assertapi.New(t)
    22  
    23  	cl := fake.NewClientBuilder().Build()
    24  	ctx := context.Background()
    25  
    26  	configMap := fakebsl.GetBSLInfoConfigMap()
    27  	updatedConfigmap := fakebsl.GetBSLInfoConfigMap()
    28  	updatedConfigmap.Data[BSLSiteID] = "foo1"
    29  
    30  	// create ConfigMap watch
    31  	callCount := 0
    32  	logger := logging.NewLogger().WithName("TestOnConfigMapUpdate")
    33  	watch, err := OnConfigMapUpdate(ctx, cl, logger, func(i *BSLInfo) {
    34  		assert.NotNil(configMap)
    35  		if callCount == 0 {
    36  			actual, err := FromConfigMap(configMap)
    37  			assert.NoError(err)
    38  			assert.Equal(actual, i)
    39  		} else {
    40  			actual, err := FromConfigMap(updatedConfigmap)
    41  			assert.NoError(err)
    42  			assert.Equal(actual, i)
    43  		}
    44  		callCount++
    45  	})
    46  	assert.NoError(err)
    47  	defer watch.Stop()
    48  
    49  	assert.NoError(cl.Create(ctx, configMap))
    50  	time.Sleep(waitForCallbackFunction) // wait for async call
    51  	assert.NoError(cl.Update(ctx, updatedConfigmap))
    52  	time.Sleep(waitForCallbackFunction)
    53  	assert.Equal(2, callCount)
    54  }
    55  
    56  func TestOnConfigMapUpdateInvalid(t *testing.T) {
    57  	assert := assertapi.New(t)
    58  
    59  	cl := fake.NewClientBuilder().Build()
    60  	ctx := context.Background()
    61  
    62  	configMap := fakebsl.GetBSLInfoConfigMap()
    63  	updatedConfigmap := fakebsl.GetBSLInfoConfigMap()
    64  	updatedConfigmap.Data[BSLSiteCoordinateLatitude] = "invalid value, number only"
    65  
    66  	// create ConfigMap watch
    67  	callCount := 0
    68  	logger := logging.NewLogger().WithName("TestOnConfigMapUpdateInvalid")
    69  	watch, err := OnConfigMapUpdate(ctx, cl, logger, func(i *BSLInfo) {
    70  		assert.NotNil(configMap)
    71  		actual, err := FromConfigMap(configMap)
    72  		assert.NoError(err)
    73  		assert.Equal(actual, i)
    74  		callCount++
    75  	})
    76  	assert.NoError(err)
    77  	defer watch.Stop()
    78  
    79  	assert.NoError(cl.Create(ctx, configMap))
    80  	time.Sleep(waitForCallbackFunction) // wait for async call
    81  	assert.NoError(cl.Update(ctx, updatedConfigmap))
    82  	time.Sleep(waitForCallbackFunction)
    83  	assert.Equal(1, callCount)
    84  }
    85  
    86  // nolint: dupl
    87  func TestOnConfigMapUpdateFilterMatchAll(t *testing.T) {
    88  	assert := assertapi.New(t)
    89  
    90  	cl := fake.NewClientBuilder().Build()
    91  	ctx := context.Background()
    92  
    93  	configMap := fakebsl.GetBSLInfoConfigMap()
    94  	updatedConfigmap := fakebsl.GetBSLInfoConfigMap()
    95  	updatedConfigmap.Data[BSLSiteName] = "foo2"
    96  	updatedConfigmap.Data[BSLSiteReferenceID] = "new-id"
    97  
    98  	// create ConfigMap watch
    99  	callCount := 0
   100  	logger := logging.NewLogger().WithName("TestOnConfigMapUpdateFilterMatchAll")
   101  	watch, err := OnConfigMapUpdate(ctx, cl, logger, func(i *BSLInfo) {
   102  		assert.NotNil(configMap)
   103  		if callCount == 0 {
   104  			actual, err := FromConfigMap(configMap)
   105  			assert.NoError(err)
   106  			assert.Equal(actual, i)
   107  		} else {
   108  			actual, err := FromConfigMap(updatedConfigmap)
   109  			assert.NoError(err)
   110  			assert.Equal(actual, i)
   111  		}
   112  		callCount++
   113  	}, BSLSiteName, BSLSiteReferenceID)
   114  	assert.NoError(err)
   115  	defer watch.Stop()
   116  
   117  	assert.NoError(cl.Create(ctx, configMap))
   118  	time.Sleep(waitForCallbackFunction)
   119  	assert.NoError(cl.Update(ctx, updatedConfigmap))
   120  	time.Sleep(waitForCallbackFunction)
   121  	assert.Equal(2, callCount)
   122  }
   123  
   124  // nolint: dupl
   125  func TestOnConfigMapUpdateFilterMatchOne(t *testing.T) {
   126  	assert := assertapi.New(t)
   127  
   128  	cl := fake.NewClientBuilder().Build()
   129  	ctx := context.Background()
   130  
   131  	configMap := fakebsl.GetBSLInfoConfigMap()
   132  	updatedConfigmap := fakebsl.GetBSLInfoConfigMap()
   133  	updatedConfigmap.Data[BSLSiteName] = "foo3"
   134  	updatedConfigmap.Data[BSLSiteAddressStreet] = "new-location"
   135  
   136  	// create ConfigMap watch
   137  	callCount := 0
   138  	logger := logging.NewLogger().WithName("TestOnConfigMapUpdateFilterMatchOne")
   139  	watch, err := OnConfigMapUpdate(ctx, cl, logger, func(i *BSLInfo) {
   140  		assert.NotNil(configMap)
   141  		if callCount == 0 {
   142  			actual, err := FromConfigMap(configMap)
   143  			assert.NoError(err)
   144  			assert.Equal(actual, i)
   145  		} else {
   146  			actual, err := FromConfigMap(updatedConfigmap)
   147  			assert.NoError(err)
   148  			assert.Equal(actual, i)
   149  		}
   150  		callCount++
   151  	}, BSLSiteName, BSLSiteID)
   152  	assert.NoError(err)
   153  	defer watch.Stop()
   154  
   155  	assert.NoError(cl.Create(ctx, configMap))
   156  	time.Sleep(waitForCallbackFunction)
   157  	assert.NoError(cl.Update(ctx, updatedConfigmap))
   158  	time.Sleep(waitForCallbackFunction)
   159  	assert.Equal(2, callCount)
   160  }
   161  
   162  func TestOnConfigMapUpdateFilterMatchNone(t *testing.T) {
   163  	assert := assertapi.New(t)
   164  
   165  	cl := fake.NewClientBuilder().Build()
   166  	ctx := context.Background()
   167  
   168  	configMap := fakebsl.GetBSLInfoConfigMap()
   169  	updatedConfigmap := fakebsl.GetBSLInfoConfigMap()
   170  	updatedConfigmap.Data[BSLSiteName] = "foo4"
   171  
   172  	// create ConfigMap watch
   173  	callCount := 0
   174  	logger := logging.NewLogger().WithName("TestOnConfigMapUpdateFilterMatchNone")
   175  	watch, err := OnConfigMapUpdate(ctx, cl, logger, func(i *BSLInfo) {
   176  		assert.NotNil(configMap)
   177  		actual, err := FromConfigMap(configMap)
   178  		assert.NoError(err)
   179  		assert.Equal(actual, i)
   180  		callCount++
   181  	}, BSLSiteID, BSLSiteEnterpriseUnitName)
   182  	assert.NoError(err)
   183  	defer watch.Stop()
   184  
   185  	assert.NoError(cl.Create(ctx, configMap))
   186  	time.Sleep(waitForCallbackFunction) // wait for async call
   187  	assert.NoError(cl.Update(ctx, updatedConfigmap))
   188  	time.Sleep(waitForCallbackFunction)
   189  	assert.Equal(1, callCount)
   190  }
   191  

View as plain text