github.com/kubewharf/katalyst-core@v0.5.3/pkg/agent/sysadvisor/plugin/inference/inference_test.go (about) 1 /* 2 Copyright 2022 The Katalyst Authors. 3 4 Licensed under the Apache License, Version 2.0 (the "License"); 5 you may not use this file except in compliance with the License. 6 You may obtain a copy of the License at 7 8 http://www.apache.org/licenses/LICENSE-2.0 9 10 Unless required by applicable law or agreed to in writing, software 11 distributed under the License is distributed on an "AS IS" BASIS, 12 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 See the License for the specific language governing permissions and 14 limitations under the License. 15 */ 16 17 package inference 18 19 import ( 20 "context" 21 "testing" 22 "time" 23 24 "github.com/kubewharf/katalyst-core/pkg/agent/sysadvisor/metacache" 25 "github.com/kubewharf/katalyst-core/pkg/agent/sysadvisor/plugin/inference/modelresultfetcher" 26 borweinfetcher "github.com/kubewharf/katalyst-core/pkg/agent/sysadvisor/plugin/inference/modelresultfetcher/borwein" 27 "github.com/kubewharf/katalyst-core/pkg/agent/sysadvisor/types" 28 "github.com/kubewharf/katalyst-core/pkg/config" 29 "github.com/kubewharf/katalyst-core/pkg/metaserver" 30 "github.com/kubewharf/katalyst-core/pkg/metrics" 31 metricspool "github.com/kubewharf/katalyst-core/pkg/metrics/metrics-pool" 32 ) 33 34 func NewNilModelResultFetcher(fetcherName string, conf *config.Configuration, extraConf interface{}, 35 emitterPool metricspool.MetricsEmitterPool, metaServer *metaserver.MetaServer, 36 metaCache metacache.MetaCache, 37 ) (modelresultfetcher.ModelResultFetcher, error) { 38 return nil, nil 39 } 40 41 func TestNewInferencePlugin(t *testing.T) { 42 t.Parallel() 43 type args struct { 44 pluginName string 45 conf *config.Configuration 46 extraConf interface{} 47 emitterPool metricspool.MetricsEmitterPool 48 metaServer *metaserver.MetaServer 49 metaCache metacache.MetaCache 50 } 51 conf := config.NewConfiguration() 52 conf.InferencePluginConfiguration.SyncPeriod = 5 * time.Second 53 tests := []struct { 54 name string 55 args args 56 wantErr bool 57 }{ 58 { 59 name: "test new inference plugin", 60 args: args{ 61 pluginName: types.AdvisorPluginNameInference, 62 conf: conf, 63 emitterPool: metricspool.DummyMetricsEmitterPool{}, 64 metaServer: &metaserver.MetaServer{}, 65 metaCache: &metacache.MetaCacheImp{}, 66 }, 67 wantErr: false, 68 }, 69 } 70 71 modelresultfetcher.RegisterModelResultFetcherInitFunc(borweinfetcher.BorweinModelResultFetcherName, 72 modelresultfetcher.NewDummyModelResultFetcher) 73 modelresultfetcher.RegisterModelResultFetcherInitFunc("test-nil-fetcher", 74 NewNilModelResultFetcher) 75 76 for _, tt := range tests { 77 tt := tt 78 t.Run(tt.name, func(t *testing.T) { 79 t.Parallel() 80 _, err := NewInferencePlugin(tt.args.pluginName, tt.args.conf, tt.args.extraConf, tt.args.emitterPool, tt.args.metaServer, tt.args.metaCache) 81 if (err != nil) != tt.wantErr { 82 t.Errorf("NewInferencePlugin() error = %v, wantErr %v", err, tt.wantErr) 83 return 84 } 85 }) 86 } 87 } 88 89 func TestInferencePlugin_Run(t *testing.T) { 90 t.Parallel() 91 type fields struct { 92 name string 93 period time.Duration 94 modelsResultFetchers map[string]modelresultfetcher.ModelResultFetcher 95 metaServer *metaserver.MetaServer 96 emitter metrics.MetricEmitter 97 metaReader metacache.MetaReader 98 metaWriter metacache.MetaWriter 99 } 100 type args struct { 101 ctx context.Context 102 } 103 tests := []struct { 104 name string 105 fields fields 106 args args 107 }{ 108 { 109 name: "test running inference plugin", 110 fields: fields{ 111 name: types.AdvisorPluginNameInference, 112 period: 5 * time.Second, 113 modelsResultFetchers: map[string]modelresultfetcher.ModelResultFetcher{ 114 "test": modelresultfetcher.DummyModelResultFetcher{}, 115 }, 116 metaServer: &metaserver.MetaServer{}, 117 emitter: metrics.DummyMetrics{}, 118 }, 119 }, 120 } 121 for _, tt := range tests { 122 tt := tt 123 t.Run(tt.name, func(t *testing.T) { 124 t.Parallel() 125 126 var cancel context.CancelFunc 127 tt.args.ctx, cancel = context.WithCancel(context.Background()) 128 infp := &InferencePlugin{ 129 name: tt.fields.name, 130 period: tt.fields.period, 131 modelsResultFetchers: tt.fields.modelsResultFetchers, 132 metaServer: tt.fields.metaServer, 133 metricEmitter: tt.fields.emitter, 134 metaReader: tt.fields.metaReader, 135 metaWriter: tt.fields.metaWriter, 136 } 137 go infp.Run(tt.args.ctx) 138 cancel() 139 }) 140 } 141 } 142 143 func TestInferencePlugin_Name(t *testing.T) { 144 t.Parallel() 145 type fields struct { 146 name string 147 period time.Duration 148 modelsResultFetchers map[string]modelresultfetcher.ModelResultFetcher 149 metaServer *metaserver.MetaServer 150 emitter metrics.MetricEmitter 151 metaReader metacache.MetaReader 152 metaWriter metacache.MetaWriter 153 } 154 tests := []struct { 155 name string 156 fields fields 157 want string 158 }{ 159 { 160 name: "test inference plugin name", 161 fields: fields{ 162 name: types.AdvisorPluginNameInference, 163 period: 5 * time.Second, 164 modelsResultFetchers: map[string]modelresultfetcher.ModelResultFetcher{ 165 "test": modelresultfetcher.DummyModelResultFetcher{}, 166 }, 167 metaServer: &metaserver.MetaServer{}, 168 emitter: metrics.DummyMetrics{}, 169 }, 170 want: types.AdvisorPluginNameInference, 171 }, 172 } 173 for _, tt := range tests { 174 tt := tt 175 t.Run(tt.name, func(t *testing.T) { 176 t.Parallel() 177 178 infp := &InferencePlugin{ 179 name: tt.fields.name, 180 period: tt.fields.period, 181 modelsResultFetchers: tt.fields.modelsResultFetchers, 182 metaServer: tt.fields.metaServer, 183 metricEmitter: tt.fields.emitter, 184 metaReader: tt.fields.metaReader, 185 metaWriter: tt.fields.metaWriter, 186 } 187 if got := infp.Name(); got != tt.want { 188 t.Errorf("InferencePlugin.Name() = %v, want %v", got, tt.want) 189 } 190 }) 191 } 192 } 193 194 func TestInferencePlugin_Init(t *testing.T) { 195 t.Parallel() 196 type fields struct { 197 name string 198 period time.Duration 199 modelsResultFetchers map[string]modelresultfetcher.ModelResultFetcher 200 metaServer *metaserver.MetaServer 201 emitter metrics.MetricEmitter 202 metaReader metacache.MetaReader 203 metaWriter metacache.MetaWriter 204 } 205 tests := []struct { 206 name string 207 fields fields 208 wantErr bool 209 }{ 210 { 211 name: "test initializing inference plugin", 212 fields: fields{ 213 name: types.AdvisorPluginNameInference, 214 period: 5 * time.Second, 215 modelsResultFetchers: map[string]modelresultfetcher.ModelResultFetcher{ 216 "test": modelresultfetcher.DummyModelResultFetcher{}, 217 }, 218 metaServer: &metaserver.MetaServer{}, 219 emitter: metrics.DummyMetrics{}, 220 }, 221 wantErr: false, 222 }, 223 } 224 for _, tt := range tests { 225 tt := tt 226 t.Run(tt.name, func(t *testing.T) { 227 t.Parallel() 228 229 infp := &InferencePlugin{ 230 name: tt.fields.name, 231 period: tt.fields.period, 232 modelsResultFetchers: tt.fields.modelsResultFetchers, 233 metaServer: tt.fields.metaServer, 234 metricEmitter: tt.fields.emitter, 235 metaReader: tt.fields.metaReader, 236 metaWriter: tt.fields.metaWriter, 237 } 238 if err := infp.Init(); (err != nil) != tt.wantErr { 239 t.Errorf("InferencePlugin.Init() error = %v, wantErr %v", err, tt.wantErr) 240 } 241 }) 242 } 243 } 244 245 func TestInferencePlugin_fetchModelResult(t *testing.T) { 246 t.Parallel() 247 type fields struct { 248 name string 249 period time.Duration 250 modelsResultFetchers map[string]modelresultfetcher.ModelResultFetcher 251 metaServer *metaserver.MetaServer 252 emitter metrics.MetricEmitter 253 metaReader metacache.MetaReader 254 metaWriter metacache.MetaWriter 255 } 256 type args struct { 257 ctx context.Context 258 } 259 tests := []struct { 260 name string 261 fields fields 262 args args 263 }{ 264 { 265 name: "test inference plugin fetching model result", 266 fields: fields{ 267 name: types.AdvisorPluginNameInference, 268 period: 5 * time.Second, 269 modelsResultFetchers: map[string]modelresultfetcher.ModelResultFetcher{ 270 "test": modelresultfetcher.DummyModelResultFetcher{}, 271 }, 272 metaServer: &metaserver.MetaServer{}, 273 emitter: metrics.DummyMetrics{}, 274 }, 275 }, 276 } 277 for _, tt := range tests { 278 tt := tt 279 t.Run(tt.name, func(t *testing.T) { 280 t.Parallel() 281 infp := &InferencePlugin{ 282 name: tt.fields.name, 283 period: tt.fields.period, 284 modelsResultFetchers: tt.fields.modelsResultFetchers, 285 metaServer: tt.fields.metaServer, 286 metricEmitter: tt.fields.emitter, 287 metaReader: tt.fields.metaReader, 288 metaWriter: tt.fields.metaWriter, 289 } 290 infp.fetchModelResult(tt.args.ctx) 291 }) 292 } 293 }