github.com/kubewharf/katalyst-core@v0.5.3/pkg/agent/qrm-plugins/io/staticpolicy/policy_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 staticpolicy 18 19 import ( 20 "context" 21 "fmt" 22 "reflect" 23 "testing" 24 25 "github.com/stretchr/testify/assert" 26 "github.com/stretchr/testify/require" 27 "k8s.io/apimachinery/pkg/runtime" 28 pluginapi "k8s.io/kubelet/pkg/apis/resourceplugin/v1alpha1" 29 30 katalystbase "github.com/kubewharf/katalyst-core/cmd/base" 31 "github.com/kubewharf/katalyst-core/cmd/katalyst-agent/app/agent" 32 "github.com/kubewharf/katalyst-core/cmd/katalyst-agent/app/agent/qrm" 33 "github.com/kubewharf/katalyst-core/cmd/katalyst-agent/app/options" 34 "github.com/kubewharf/katalyst-core/pkg/config" 35 "github.com/kubewharf/katalyst-core/pkg/metaserver" 36 metaserveragent "github.com/kubewharf/katalyst-core/pkg/metaserver/agent" 37 "github.com/kubewharf/katalyst-core/pkg/metaserver/agent/pod" 38 "github.com/kubewharf/katalyst-core/pkg/metaserver/external" 39 "github.com/kubewharf/katalyst-core/pkg/metrics" 40 "github.com/kubewharf/katalyst-core/pkg/util/machine" 41 ) 42 43 func generateTestConfiguration(t *testing.T) *config.Configuration { 44 testConfiguration, err := options.NewOptions().Config() 45 require.NoError(t, err) 46 require.NotNil(t, testConfiguration) 47 return testConfiguration 48 } 49 50 func makeMetaServer() *metaserver.MetaServer { 51 cpuTopology, _ := machine.GenerateDummyCPUTopology(16, 2, 4) 52 53 return &metaserver.MetaServer{ 54 MetaAgent: &metaserveragent.MetaAgent{ 55 KatalystMachineInfo: &machine.KatalystMachineInfo{ 56 CPUTopology: cpuTopology, 57 ExtraNetworkInfo: &machine.ExtraNetworkInfo{}, 58 }, 59 }, 60 ExternalManager: external.InitExternalManager(&pod.PodFetcherStub{}), 61 } 62 } 63 64 func makeTestGenericContext(t *testing.T) *agent.GenericContext { 65 genericCtx, err := katalystbase.GenerateFakeGenericContext([]runtime.Object{}) 66 assert.NoError(t, err) 67 68 return &agent.GenericContext{ 69 GenericContext: genericCtx, 70 MetaServer: makeMetaServer(), 71 PluginManager: nil, 72 } 73 } 74 75 func TestNewStaticPolicy(t *testing.T) { 76 t.Parallel() 77 78 agentCtx := makeTestGenericContext(t) 79 conf := generateTestConfiguration(t) 80 81 type args struct { 82 agentCtx *agent.GenericContext 83 conf *config.Configuration 84 in2 interface{} 85 agentName string 86 } 87 tests := []struct { 88 name string 89 args args 90 want bool 91 want1 agent.Component 92 wantErr bool 93 }{ 94 { 95 name: "new static policy", 96 args: args{ 97 agentCtx: agentCtx, 98 conf: conf, 99 agentName: qrm.QRMPluginNameIO, 100 }, 101 want: true, 102 wantErr: false, 103 }, 104 } 105 for _, tt := range tests { 106 tt := tt 107 t.Run(tt.name, func(t *testing.T) { 108 t.Parallel() 109 110 got, got1, err := NewStaticPolicy(tt.args.agentCtx, tt.args.conf, tt.args.in2, tt.args.agentName) 111 if (err != nil) != tt.wantErr { 112 t.Errorf("NewStaticPolicy() error = %v, wantErr %v", err, tt.wantErr) 113 return 114 } 115 116 if got != tt.want { 117 t.Errorf("NewStaticPolicy() got = %v, want %v", got, tt.want) 118 } 119 120 assert.NotNilf(t, got1, "got nil policy object") 121 }) 122 } 123 } 124 125 func TestStaticPolicy_Start(t *testing.T) { 126 t.Parallel() 127 128 type fields struct { 129 name string 130 stopCh chan struct{} 131 started bool 132 emitter metrics.MetricEmitter 133 metaServer *metaserver.MetaServer 134 agentCtx *agent.GenericContext 135 } 136 tests := []struct { 137 name string 138 fields fields 139 wantErr bool 140 }{ 141 { 142 name: "start static policy", 143 fields: fields{ 144 name: fmt.Sprintf("%s_%s", qrm.QRMPluginNameIO, IOResourcePluginPolicyNameStatic), 145 stopCh: make(chan struct{}), 146 started: false, 147 emitter: metrics.DummyMetrics{}, 148 metaServer: makeMetaServer(), 149 agentCtx: makeTestGenericContext(t), 150 }, 151 wantErr: false, 152 }, 153 } 154 for _, tt := range tests { 155 tt := tt 156 t.Run(tt.name, func(t *testing.T) { 157 t.Parallel() 158 159 p := &StaticPolicy{ 160 name: tt.fields.name, 161 stopCh: tt.fields.stopCh, 162 started: tt.fields.started, 163 emitter: tt.fields.emitter, 164 metaServer: tt.fields.metaServer, 165 agentCtx: tt.fields.agentCtx, 166 } 167 if err := p.Start(); (err != nil) != tt.wantErr { 168 t.Errorf("StaticPolicy.Start() error = %v, wantErr %v", err, tt.wantErr) 169 } 170 }) 171 } 172 } 173 174 func TestStaticPolicy_Stop(t *testing.T) { 175 t.Parallel() 176 177 type fields struct { 178 name string 179 stopCh chan struct{} 180 started bool 181 emitter metrics.MetricEmitter 182 metaServer *metaserver.MetaServer 183 agentCtx *agent.GenericContext 184 } 185 tests := []struct { 186 name string 187 fields fields 188 wantErr bool 189 }{ 190 { 191 name: "stop static policy", 192 fields: fields{ 193 name: fmt.Sprintf("%s_%s", qrm.QRMPluginNameIO, IOResourcePluginPolicyNameStatic), 194 stopCh: make(chan struct{}), 195 started: true, 196 emitter: metrics.DummyMetrics{}, 197 metaServer: makeMetaServer(), 198 agentCtx: makeTestGenericContext(t), 199 }, 200 wantErr: false, 201 }, 202 } 203 for _, tt := range tests { 204 tt := tt 205 t.Run(tt.name, func(t *testing.T) { 206 t.Parallel() 207 208 p := &StaticPolicy{ 209 name: tt.fields.name, 210 stopCh: tt.fields.stopCh, 211 started: tt.fields.started, 212 emitter: tt.fields.emitter, 213 metaServer: tt.fields.metaServer, 214 agentCtx: tt.fields.agentCtx, 215 } 216 if err := p.Stop(); (err != nil) != tt.wantErr { 217 t.Errorf("StaticPolicy.Stop() error = %v, wantErr %v", err, tt.wantErr) 218 } 219 }) 220 } 221 } 222 223 func TestStaticPolicy_Name(t *testing.T) { 224 t.Parallel() 225 226 type fields struct { 227 name string 228 stopCh chan struct{} 229 started bool 230 emitter metrics.MetricEmitter 231 metaServer *metaserver.MetaServer 232 agentCtx *agent.GenericContext 233 } 234 tests := []struct { 235 name string 236 fields fields 237 want string 238 }{ 239 { 240 name: "get policy name", 241 fields: fields{ 242 name: fmt.Sprintf("%s_%s", qrm.QRMPluginNameIO, IOResourcePluginPolicyNameStatic), 243 stopCh: make(chan struct{}), 244 started: true, 245 emitter: metrics.DummyMetrics{}, 246 metaServer: makeMetaServer(), 247 agentCtx: makeTestGenericContext(t), 248 }, 249 want: fmt.Sprintf("%s_%s", qrm.QRMPluginNameIO, IOResourcePluginPolicyNameStatic), 250 }, 251 } 252 for _, tt := range tests { 253 tt := tt 254 t.Run(tt.name, func(t *testing.T) { 255 t.Parallel() 256 257 p := &StaticPolicy{ 258 name: tt.fields.name, 259 stopCh: tt.fields.stopCh, 260 started: tt.fields.started, 261 emitter: tt.fields.emitter, 262 metaServer: tt.fields.metaServer, 263 agentCtx: tt.fields.agentCtx, 264 } 265 if got := p.Name(); got != tt.want { 266 t.Errorf("StaticPolicy.Name() = %v, want %v", got, tt.want) 267 } 268 }) 269 } 270 } 271 272 func TestStaticPolicy_ResourceName(t *testing.T) { 273 t.Parallel() 274 275 type fields struct { 276 name string 277 stopCh chan struct{} 278 started bool 279 emitter metrics.MetricEmitter 280 metaServer *metaserver.MetaServer 281 agentCtx *agent.GenericContext 282 } 283 tests := []struct { 284 name string 285 fields fields 286 want string 287 }{ 288 { 289 name: "get policy name", 290 fields: fields{ 291 name: fmt.Sprintf("%s_%s", qrm.QRMPluginNameIO, IOResourcePluginPolicyNameStatic), 292 stopCh: make(chan struct{}), 293 started: true, 294 emitter: metrics.DummyMetrics{}, 295 metaServer: makeMetaServer(), 296 agentCtx: makeTestGenericContext(t), 297 }, 298 want: "", 299 }, 300 } 301 for _, tt := range tests { 302 tt := tt 303 t.Run(tt.name, func(t *testing.T) { 304 t.Parallel() 305 p := &StaticPolicy{ 306 name: tt.fields.name, 307 stopCh: tt.fields.stopCh, 308 started: tt.fields.started, 309 emitter: tt.fields.emitter, 310 metaServer: tt.fields.metaServer, 311 agentCtx: tt.fields.agentCtx, 312 } 313 if got := p.ResourceName(); got != tt.want { 314 t.Errorf("StaticPolicy.ResourceName() = %v, want %v", got, tt.want) 315 } 316 }) 317 } 318 } 319 320 func TestStaticPolicy_GetTopologyHints(t *testing.T) { 321 t.Parallel() 322 323 type fields struct { 324 name string 325 stopCh chan struct{} 326 started bool 327 emitter metrics.MetricEmitter 328 metaServer *metaserver.MetaServer 329 agentCtx *agent.GenericContext 330 } 331 type args struct { 332 in0 context.Context 333 req *pluginapi.ResourceRequest 334 } 335 tests := []struct { 336 name string 337 fields fields 338 args args 339 wantResp *pluginapi.ResourceHintsResponse 340 wantErr bool 341 }{ 342 { 343 name: "get topology hints", 344 fields: fields{ 345 name: fmt.Sprintf("%s_%s", qrm.QRMPluginNameIO, IOResourcePluginPolicyNameStatic), 346 stopCh: make(chan struct{}), 347 started: true, 348 emitter: metrics.DummyMetrics{}, 349 metaServer: makeMetaServer(), 350 agentCtx: makeTestGenericContext(t), 351 }, 352 args: args{ 353 in0: context.Background(), 354 req: &pluginapi.ResourceRequest{}, 355 }, 356 wantResp: &pluginapi.ResourceHintsResponse{}, 357 wantErr: false, 358 }, 359 } 360 for _, tt := range tests { 361 tt := tt 362 t.Run(tt.name, func(t *testing.T) { 363 t.Parallel() 364 365 p := &StaticPolicy{ 366 name: tt.fields.name, 367 stopCh: tt.fields.stopCh, 368 started: tt.fields.started, 369 emitter: tt.fields.emitter, 370 metaServer: tt.fields.metaServer, 371 agentCtx: tt.fields.agentCtx, 372 } 373 gotResp, err := p.GetTopologyHints(tt.args.in0, tt.args.req) 374 if (err != nil) != tt.wantErr { 375 t.Errorf("StaticPolicy.GetTopologyHints() error = %v, wantErr %v", err, tt.wantErr) 376 return 377 } 378 if !reflect.DeepEqual(gotResp, tt.wantResp) { 379 t.Errorf("StaticPolicy.GetTopologyHints() = %v, want %v", gotResp, tt.wantResp) 380 } 381 }) 382 } 383 } 384 385 func TestStaticPolicy_RemovePod(t *testing.T) { 386 t.Parallel() 387 388 type fields struct { 389 name string 390 stopCh chan struct{} 391 started bool 392 emitter metrics.MetricEmitter 393 metaServer *metaserver.MetaServer 394 agentCtx *agent.GenericContext 395 } 396 type args struct { 397 in0 context.Context 398 req *pluginapi.RemovePodRequest 399 } 400 tests := []struct { 401 name string 402 fields fields 403 args args 404 want *pluginapi.RemovePodResponse 405 wantErr bool 406 }{ 407 { 408 name: "remove pod", 409 fields: fields{ 410 name: fmt.Sprintf("%s_%s", qrm.QRMPluginNameIO, IOResourcePluginPolicyNameStatic), 411 stopCh: make(chan struct{}), 412 started: true, 413 emitter: metrics.DummyMetrics{}, 414 metaServer: makeMetaServer(), 415 agentCtx: makeTestGenericContext(t), 416 }, 417 args: args{ 418 in0: context.Background(), 419 req: &pluginapi.RemovePodRequest{}, 420 }, 421 want: &pluginapi.RemovePodResponse{}, 422 wantErr: false, 423 }, 424 } 425 for _, tt := range tests { 426 tt := tt 427 t.Run(tt.name, func(t *testing.T) { 428 t.Parallel() 429 430 p := &StaticPolicy{ 431 name: tt.fields.name, 432 stopCh: tt.fields.stopCh, 433 started: tt.fields.started, 434 emitter: tt.fields.emitter, 435 metaServer: tt.fields.metaServer, 436 agentCtx: tt.fields.agentCtx, 437 } 438 got, err := p.RemovePod(tt.args.in0, tt.args.req) 439 if (err != nil) != tt.wantErr { 440 t.Errorf("StaticPolicy.RemovePod() error = %v, wantErr %v", err, tt.wantErr) 441 return 442 } 443 if !reflect.DeepEqual(got, tt.want) { 444 t.Errorf("StaticPolicy.RemovePod() = %v, want %v", got, tt.want) 445 } 446 }) 447 } 448 } 449 450 func TestStaticPolicy_GetResourcesAllocation(t *testing.T) { 451 t.Parallel() 452 453 type fields struct { 454 name string 455 stopCh chan struct{} 456 started bool 457 emitter metrics.MetricEmitter 458 metaServer *metaserver.MetaServer 459 agentCtx *agent.GenericContext 460 } 461 type args struct { 462 in0 context.Context 463 in1 *pluginapi.GetResourcesAllocationRequest 464 } 465 tests := []struct { 466 name string 467 fields fields 468 args args 469 want *pluginapi.GetResourcesAllocationResponse 470 wantErr bool 471 }{ 472 { 473 name: "get resources allocation", 474 fields: fields{ 475 name: fmt.Sprintf("%s_%s", qrm.QRMPluginNameIO, IOResourcePluginPolicyNameStatic), 476 stopCh: make(chan struct{}), 477 started: true, 478 emitter: metrics.DummyMetrics{}, 479 metaServer: makeMetaServer(), 480 agentCtx: makeTestGenericContext(t), 481 }, 482 args: args{ 483 in0: context.Background(), 484 in1: &pluginapi.GetResourcesAllocationRequest{}, 485 }, 486 want: &pluginapi.GetResourcesAllocationResponse{}, 487 wantErr: false, 488 }, 489 } 490 for _, tt := range tests { 491 tt := tt 492 t.Run(tt.name, func(t *testing.T) { 493 t.Parallel() 494 495 p := &StaticPolicy{ 496 name: tt.fields.name, 497 stopCh: tt.fields.stopCh, 498 started: tt.fields.started, 499 emitter: tt.fields.emitter, 500 metaServer: tt.fields.metaServer, 501 agentCtx: tt.fields.agentCtx, 502 } 503 got, err := p.GetResourcesAllocation(tt.args.in0, tt.args.in1) 504 if (err != nil) != tt.wantErr { 505 t.Errorf("StaticPolicy.GetResourcesAllocation() error = %v, wantErr %v", err, tt.wantErr) 506 return 507 } 508 if !reflect.DeepEqual(got, tt.want) { 509 t.Errorf("StaticPolicy.GetResourcesAllocation() = %v, want %v", got, tt.want) 510 } 511 }) 512 } 513 } 514 515 func TestStaticPolicy_GetTopologyAwareResources(t *testing.T) { 516 t.Parallel() 517 518 type fields struct { 519 name string 520 stopCh chan struct{} 521 started bool 522 emitter metrics.MetricEmitter 523 metaServer *metaserver.MetaServer 524 agentCtx *agent.GenericContext 525 } 526 type args struct { 527 in0 context.Context 528 in1 *pluginapi.GetTopologyAwareResourcesRequest 529 } 530 tests := []struct { 531 name string 532 fields fields 533 args args 534 want *pluginapi.GetTopologyAwareResourcesResponse 535 wantErr bool 536 }{ 537 { 538 name: "get topology-aware resources", 539 fields: fields{ 540 name: fmt.Sprintf("%s_%s", qrm.QRMPluginNameIO, IOResourcePluginPolicyNameStatic), 541 stopCh: make(chan struct{}), 542 started: true, 543 emitter: metrics.DummyMetrics{}, 544 metaServer: makeMetaServer(), 545 agentCtx: makeTestGenericContext(t), 546 }, 547 args: args{ 548 in0: context.Background(), 549 in1: &pluginapi.GetTopologyAwareResourcesRequest{}, 550 }, 551 want: &pluginapi.GetTopologyAwareResourcesResponse{}, 552 wantErr: false, 553 }, 554 } 555 for _, tt := range tests { 556 tt := tt 557 t.Run(tt.name, func(t *testing.T) { 558 t.Parallel() 559 560 p := &StaticPolicy{ 561 name: tt.fields.name, 562 stopCh: tt.fields.stopCh, 563 started: tt.fields.started, 564 emitter: tt.fields.emitter, 565 metaServer: tt.fields.metaServer, 566 agentCtx: tt.fields.agentCtx, 567 } 568 got, err := p.GetTopologyAwareResources(tt.args.in0, tt.args.in1) 569 if (err != nil) != tt.wantErr { 570 t.Errorf("StaticPolicy.GetTopologyAwareResources() error = %v, wantErr %v", err, tt.wantErr) 571 return 572 } 573 if !reflect.DeepEqual(got, tt.want) { 574 t.Errorf("StaticPolicy.GetTopologyAwareResources() = %v, want %v", got, tt.want) 575 } 576 }) 577 } 578 } 579 580 func TestStaticPolicy_GetTopologyAwareAllocatableResources(t *testing.T) { 581 t.Parallel() 582 583 type fields struct { 584 name string 585 stopCh chan struct{} 586 started bool 587 emitter metrics.MetricEmitter 588 metaServer *metaserver.MetaServer 589 agentCtx *agent.GenericContext 590 } 591 type args struct { 592 in0 context.Context 593 in1 *pluginapi.GetTopologyAwareAllocatableResourcesRequest 594 } 595 tests := []struct { 596 name string 597 fields fields 598 args args 599 want *pluginapi.GetTopologyAwareAllocatableResourcesResponse 600 wantErr bool 601 }{ 602 { 603 name: "get topology-aware allocatable resources", 604 fields: fields{ 605 name: fmt.Sprintf("%s_%s", qrm.QRMPluginNameIO, IOResourcePluginPolicyNameStatic), 606 stopCh: make(chan struct{}), 607 started: true, 608 emitter: metrics.DummyMetrics{}, 609 metaServer: makeMetaServer(), 610 agentCtx: makeTestGenericContext(t), 611 }, 612 args: args{ 613 in0: context.Background(), 614 in1: &pluginapi.GetTopologyAwareAllocatableResourcesRequest{}, 615 }, 616 want: &pluginapi.GetTopologyAwareAllocatableResourcesResponse{}, 617 wantErr: false, 618 }, 619 } 620 for _, tt := range tests { 621 tt := tt 622 t.Run(tt.name, func(t *testing.T) { 623 t.Parallel() 624 625 p := &StaticPolicy{ 626 name: tt.fields.name, 627 stopCh: tt.fields.stopCh, 628 started: tt.fields.started, 629 emitter: tt.fields.emitter, 630 metaServer: tt.fields.metaServer, 631 agentCtx: tt.fields.agentCtx, 632 } 633 got, err := p.GetTopologyAwareAllocatableResources(tt.args.in0, tt.args.in1) 634 if (err != nil) != tt.wantErr { 635 t.Errorf("StaticPolicy.GetTopologyAwareAllocatableResources() error = %v, wantErr %v", err, tt.wantErr) 636 return 637 } 638 if !reflect.DeepEqual(got, tt.want) { 639 t.Errorf("StaticPolicy.GetTopologyAwareAllocatableResources() = %v, want %v", got, tt.want) 640 } 641 }) 642 } 643 } 644 645 func TestStaticPolicy_GetResourcePluginOptions(t *testing.T) { 646 t.Parallel() 647 648 type fields struct { 649 name string 650 stopCh chan struct{} 651 started bool 652 emitter metrics.MetricEmitter 653 metaServer *metaserver.MetaServer 654 agentCtx *agent.GenericContext 655 } 656 type args struct { 657 in0 context.Context 658 in1 *pluginapi.Empty 659 } 660 tests := []struct { 661 name string 662 fields fields 663 args args 664 want *pluginapi.ResourcePluginOptions 665 wantErr bool 666 }{ 667 { 668 name: "test get resource plugin options", 669 fields: fields{ 670 name: fmt.Sprintf("%s_%s", qrm.QRMPluginNameIO, IOResourcePluginPolicyNameStatic), 671 stopCh: make(chan struct{}), 672 started: true, 673 emitter: metrics.DummyMetrics{}, 674 metaServer: makeMetaServer(), 675 agentCtx: makeTestGenericContext(t), 676 }, 677 args: args{ 678 in0: context.Background(), 679 in1: &pluginapi.Empty{}, 680 }, 681 want: &pluginapi.ResourcePluginOptions{ 682 PreStartRequired: false, 683 WithTopologyAlignment: false, 684 NeedReconcile: false, 685 }, 686 wantErr: false, 687 }, 688 } 689 for _, tt := range tests { 690 tt := tt 691 t.Run(tt.name, func(t *testing.T) { 692 t.Parallel() 693 694 p := &StaticPolicy{ 695 name: tt.fields.name, 696 stopCh: tt.fields.stopCh, 697 started: tt.fields.started, 698 emitter: tt.fields.emitter, 699 metaServer: tt.fields.metaServer, 700 agentCtx: tt.fields.agentCtx, 701 } 702 got, err := p.GetResourcePluginOptions(tt.args.in0, tt.args.in1) 703 if (err != nil) != tt.wantErr { 704 t.Errorf("StaticPolicy.GetResourcePluginOptions() error = %v, wantErr %v", err, tt.wantErr) 705 return 706 } 707 if !reflect.DeepEqual(got, tt.want) { 708 t.Errorf("StaticPolicy.GetResourcePluginOptions() = %v, want %v", got, tt.want) 709 } 710 }) 711 } 712 } 713 714 func TestStaticPolicy_Allocate(t *testing.T) { 715 t.Parallel() 716 717 type fields struct { 718 name string 719 stopCh chan struct{} 720 started bool 721 emitter metrics.MetricEmitter 722 metaServer *metaserver.MetaServer 723 agentCtx *agent.GenericContext 724 } 725 type args struct { 726 in0 context.Context 727 req *pluginapi.ResourceRequest 728 } 729 tests := []struct { 730 name string 731 fields fields 732 args args 733 wantResp *pluginapi.ResourceAllocationResponse 734 wantErr bool 735 }{ 736 { 737 name: "test allocate", 738 fields: fields{ 739 name: fmt.Sprintf("%s_%s", qrm.QRMPluginNameIO, IOResourcePluginPolicyNameStatic), 740 stopCh: make(chan struct{}), 741 started: true, 742 emitter: metrics.DummyMetrics{}, 743 metaServer: makeMetaServer(), 744 agentCtx: makeTestGenericContext(t), 745 }, 746 args: args{ 747 in0: context.Background(), 748 req: &pluginapi.ResourceRequest{ 749 PodNamespace: "test", 750 PodName: "test", 751 ContainerName: "test", 752 }, 753 }, 754 wantResp: &pluginapi.ResourceAllocationResponse{ 755 PodNamespace: "test", 756 PodName: "test", 757 ContainerName: "test", 758 }, 759 wantErr: false, 760 }, 761 } 762 for _, tt := range tests { 763 tt := tt 764 t.Run(tt.name, func(t *testing.T) { 765 t.Parallel() 766 767 p := &StaticPolicy{ 768 name: tt.fields.name, 769 stopCh: tt.fields.stopCh, 770 started: tt.fields.started, 771 emitter: tt.fields.emitter, 772 metaServer: tt.fields.metaServer, 773 agentCtx: tt.fields.agentCtx, 774 } 775 gotResp, err := p.Allocate(tt.args.in0, tt.args.req) 776 if (err != nil) != tt.wantErr { 777 t.Errorf("StaticPolicy.Allocate() error = %v, wantErr %v", err, tt.wantErr) 778 return 779 } 780 if !reflect.DeepEqual(gotResp, tt.wantResp) { 781 t.Errorf("StaticPolicy.Allocate() = %v, want %v", gotResp, tt.wantResp) 782 } 783 }) 784 } 785 } 786 787 func TestStaticPolicy_PreStartContainer(t *testing.T) { 788 t.Parallel() 789 790 type fields struct { 791 name string 792 stopCh chan struct{} 793 started bool 794 emitter metrics.MetricEmitter 795 metaServer *metaserver.MetaServer 796 agentCtx *agent.GenericContext 797 } 798 type args struct { 799 in0 context.Context 800 in1 *pluginapi.PreStartContainerRequest 801 } 802 tests := []struct { 803 name string 804 fields fields 805 args args 806 want *pluginapi.PreStartContainerResponse 807 wantErr bool 808 }{ 809 { 810 name: "test pre-start container", 811 fields: fields{ 812 name: fmt.Sprintf("%s_%s", qrm.QRMPluginNameIO, IOResourcePluginPolicyNameStatic), 813 stopCh: make(chan struct{}), 814 started: true, 815 emitter: metrics.DummyMetrics{}, 816 metaServer: makeMetaServer(), 817 agentCtx: makeTestGenericContext(t), 818 }, 819 args: args{ 820 in0: context.Background(), 821 in1: &pluginapi.PreStartContainerRequest{}, 822 }, 823 want: &pluginapi.PreStartContainerResponse{}, 824 wantErr: false, 825 }, 826 } 827 for _, tt := range tests { 828 tt := tt 829 t.Run(tt.name, func(t *testing.T) { 830 t.Parallel() 831 832 p := &StaticPolicy{ 833 name: tt.fields.name, 834 stopCh: tt.fields.stopCh, 835 started: tt.fields.started, 836 emitter: tt.fields.emitter, 837 metaServer: tt.fields.metaServer, 838 agentCtx: tt.fields.agentCtx, 839 } 840 got, err := p.PreStartContainer(tt.args.in0, tt.args.in1) 841 if (err != nil) != tt.wantErr { 842 t.Errorf("StaticPolicy.PreStartContainer() error = %v, wantErr %v", err, tt.wantErr) 843 return 844 } 845 if !reflect.DeepEqual(got, tt.want) { 846 t.Errorf("StaticPolicy.PreStartContainer() = %v, want %v", got, tt.want) 847 } 848 }) 849 } 850 }