@@ -20,6 +20,7 @@ import (
20
20
"errors"
21
21
"fmt"
22
22
"io/ioutil"
23
+ kubetypes "k8s.io/kubernetes/pkg/kubelet/types"
23
24
"os"
24
25
"path/filepath"
25
26
"sort"
@@ -42,6 +43,8 @@ import (
42
43
// api.Registry.GroupOrDie(v1.GroupName).GroupVersions[0].String() is changed
43
44
// to "v1"?
44
45
46
+ runtimeapi "k8s.io/cri-api/pkg/apis/runtime/v1alpha2"
47
+ apitest "k8s.io/cri-api/pkg/apis/testing"
45
48
_ "k8s.io/kubernetes/pkg/apis/core/install"
46
49
"k8s.io/kubernetes/pkg/features"
47
50
kubecontainer "k8s.io/kubernetes/pkg/kubelet/container"
@@ -2385,3 +2388,81 @@ func TestTruncatePodHostname(t *testing.T) {
2385
2388
assert .Equal (t , test .output , output )
2386
2389
}
2387
2390
}
2391
+
2392
+ func TestKubelet_PodResourcesAreReclaimed (t * testing.T ) {
2393
+
2394
+ type args struct {
2395
+ pod * v1.Pod
2396
+ status v1.PodStatus
2397
+ runtimeStatus kubecontainer.PodStatus
2398
+ }
2399
+ tests := []struct {
2400
+ name string
2401
+ args args
2402
+ want bool
2403
+ }{
2404
+ {
2405
+ "pod with running containers" ,
2406
+ args {
2407
+ pod : & v1.Pod {},
2408
+ status : v1.PodStatus {
2409
+ ContainerStatuses : []v1.ContainerStatus {
2410
+ runningState ("containerA" ),
2411
+ runningState ("containerB" ),
2412
+ },
2413
+ },
2414
+ },
2415
+ false ,
2416
+ },
2417
+ {
2418
+ "pod with containers in runtime cache" ,
2419
+ args {
2420
+ pod : & v1.Pod {},
2421
+ status : v1.PodStatus {},
2422
+ runtimeStatus : kubecontainer.PodStatus {
2423
+ ContainerStatuses : []* kubecontainer.ContainerStatus {
2424
+ {},
2425
+ },
2426
+ },
2427
+ },
2428
+ false ,
2429
+ },
2430
+ {
2431
+ "pod with sandbox present" ,
2432
+ args {
2433
+ pod : & v1.Pod {
2434
+ ObjectMeta : metav1.ObjectMeta {
2435
+ UID : types .UID ("fakesandbox" ),
2436
+ },
2437
+ },
2438
+ status : v1.PodStatus {},
2439
+ },
2440
+ false ,
2441
+ },
2442
+ }
2443
+
2444
+ testKubelet := newTestKubelet (t , false )
2445
+ defer testKubelet .Cleanup ()
2446
+ kl := testKubelet .kubelet
2447
+
2448
+ runtimeService := apitest .NewFakeRuntimeService ()
2449
+ runtimeService .SetFakeSandboxes ([]* apitest.FakePodSandbox {
2450
+ {
2451
+ PodSandboxStatus : runtimeapi.PodSandboxStatus {
2452
+ Id : "fakesandbox" ,
2453
+ Labels : map [string ]string {
2454
+ kubetypes .KubernetesPodUIDLabel : "fakesandbox" ,
2455
+ },
2456
+ },
2457
+ },
2458
+ })
2459
+ kl .runtimeService = runtimeService
2460
+ for _ , tt := range tests {
2461
+ t .Run (tt .name , func (t * testing.T ) {
2462
+ testKubelet .fakeRuntime .PodStatus = tt .args .runtimeStatus
2463
+ if got := kl .PodResourcesAreReclaimed (tt .args .pod , tt .args .status ); got != tt .want {
2464
+ t .Errorf ("PodResourcesAreReclaimed() = %v, want %v" , got , tt .want )
2465
+ }
2466
+ })
2467
+ }
2468
+ }
0 commit comments