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 }