github.com/verrazzano/verrazzano@v1.7.1/tools/psr/backend/workmanager/manager_test.go (about)

     1  // Copyright (c) 2022, Oracle and/or its affiliates.
     2  // Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl.
     3  
     4  package workmanager
     5  
     6  import (
     7  	"github.com/prometheus/client_golang/prometheus"
     8  	"github.com/stretchr/testify/assert"
     9  	"github.com/verrazzano/verrazzano/pkg/log/vzlog"
    10  	"github.com/verrazzano/verrazzano/tools/psr/backend/config"
    11  	"github.com/verrazzano/verrazzano/tools/psr/backend/osenv"
    12  	"github.com/verrazzano/verrazzano/tools/psr/backend/spi"
    13  
    14  	"testing"
    15  )
    16  
    17  type fakeManagerWorker struct {
    18  	doWorkCount int64
    19  }
    20  
    21  var _ spi.Worker = &fakeManagerWorker{2}
    22  
    23  type fakeEnv struct {
    24  	data map[string]string
    25  }
    26  
    27  // TestStartWorkerRunners tests the manager
    28  // GIVEN a manager
    29  //
    30  //	WHEN StartWorkerRunners is called
    31  //	THEN ensure that the runners are called
    32  func TestStartWorkerRunners(t *testing.T) {
    33  	var tests = []struct {
    34  		name       string
    35  		envMap     map[string]string
    36  		envKey     string
    37  		workerType string
    38  		expectErr  bool
    39  	}{
    40  		{name: "ExampleWorker",
    41  			workerType: config.WorkerTypeExample,
    42  			expectErr:  false,
    43  			envMap: map[string]string{
    44  				config.PsrWorkerType: config.WorkerTypeExample,
    45  				config.PsrNumLoops:   "1",
    46  			},
    47  		},
    48  		{name: "WorkerTypeOpsWriteLogs",
    49  			workerType: config.WorkerTypeOpsWriteLogs,
    50  			expectErr:  false,
    51  			envMap: map[string]string{
    52  				config.PsrWorkerType: config.WorkerTypeOpsWriteLogs,
    53  				config.PsrNumLoops:   "1",
    54  			},
    55  		},
    56  		{name: "WorkerTypeOpsGetLogs",
    57  			workerType: config.WorkerTypeOpsGetLogs,
    58  			expectErr:  false,
    59  			envMap: map[string]string{
    60  				config.PsrWorkerType: config.WorkerTypeOpsGetLogs,
    61  				config.PsrNumLoops:   "1",
    62  			},
    63  		},
    64  		{name: "MissingWorkerType",
    65  			expectErr: true,
    66  			envMap: map[string]string{
    67  				config.PsrNumLoops: "1",
    68  			},
    69  		},
    70  		{name: "InvalidWorkerType",
    71  			expectErr: true,
    72  			envMap: map[string]string{
    73  				config.PsrWorkerType: "InvalidWorker",
    74  				config.PsrNumLoops:   "1",
    75  			},
    76  		},
    77  	}
    78  	for _, test := range tests {
    79  		t.Run(test.name, func(t *testing.T) {
    80  			f := fakeEnv{data: test.envMap}
    81  			saveEnv := osenv.GetEnvFunc
    82  			osenv.GetEnvFunc = f.GetEnv
    83  			defer func() {
    84  				osenv.GetEnvFunc = saveEnv
    85  			}()
    86  
    87  			saveStartMetrics := startMetricsFunc
    88  			startMetricsFunc = fakeStartMetrics
    89  			defer func() {
    90  				startMetricsFunc = saveStartMetrics
    91  			}()
    92  
    93  			err := StartWorkerRunners(vzlog.DefaultLogger())
    94  			if test.expectErr {
    95  				assert.Error(t, err)
    96  			} else {
    97  				assert.NoError(t, err)
    98  			}
    99  		})
   100  	}
   101  }
   102  
   103  // GetWorkerDesc returns the WorkerDesc for the worker
   104  func (w fakeManagerWorker) GetWorkerDesc() spi.WorkerDesc {
   105  	return spi.WorkerDesc{
   106  		WorkerType:    config.WorkerTypeExample,
   107  		Description:   "Example worker that demonstrates executing a fake use case",
   108  		MetricsPrefix: "example",
   109  	}
   110  }
   111  
   112  func (w *fakeManagerWorker) GetEnvDescList() []osenv.EnvVarDesc {
   113  	return []osenv.EnvVarDesc{}
   114  }
   115  
   116  func (w *fakeManagerWorker) GetMetricDescList() []prometheus.Desc {
   117  	return nil
   118  }
   119  
   120  func (w *fakeManagerWorker) GetMetricList() []prometheus.Metric {
   121  	return nil
   122  }
   123  
   124  func (w *fakeManagerWorker) WantLoopInfoLogged() bool {
   125  	return true
   126  }
   127  
   128  func (w *fakeManagerWorker) PreconditionsMet() (bool, error) {
   129  	return true, nil
   130  }
   131  
   132  func (w *fakeManagerWorker) DoWork(conf config.CommonConfig, log vzlog.VerrazzanoLogger) error {
   133  	w.doWorkCount = w.doWorkCount + 1
   134  	return nil
   135  }
   136  
   137  func (f *fakeEnv) GetEnv(key string) string {
   138  	return f.data[key]
   139  }
   140  
   141  func fakeStartMetrics(_ []spi.WorkerMetricsProvider) {
   142  }