diff --git a/pkg/kubelet/apis/stats/v1alpha1/types.go b/pkg/kubelet/apis/stats/v1alpha1/types.go index 1a09fe4ffcc..afec6d0cf9f 100644 --- a/pkg/kubelet/apis/stats/v1alpha1/types.go +++ b/pkg/kubelet/apis/stats/v1alpha1/types.go @@ -146,7 +146,7 @@ type ContainerStats struct { // User defined metrics that are exposed by containers in the pod. Typically, we expect only one container in the pod to be exposing user defined metrics. In the event of multiple containers exposing metrics, they will be combined here. // +patchMergeKey=name // +patchStrategy=merge - UserDefinedMetrics []UserDefinedMetric `json:"userDefinedMetrics,omitmepty" patchStrategy:"merge" patchMergeKey:"name"` + UserDefinedMetrics []UserDefinedMetric `json:"userDefinedMetrics,omitempty" patchStrategy:"merge" patchMergeKey:"name"` } // PodReference contains enough information to locate the referenced pod. diff --git a/pkg/kubelet/checkpoint/checkpoint.go b/pkg/kubelet/checkpoint/checkpoint.go index f3a4315ed63..17036e3b765 100644 --- a/pkg/kubelet/checkpoint/checkpoint.go +++ b/pkg/kubelet/checkpoint/checkpoint.go @@ -91,9 +91,7 @@ func getPodKey(pod *v1.Pod) string { func LoadPods(cpm checkpointmanager.CheckpointManager) ([]*v1.Pod, error) { pods := make([]*v1.Pod, 0) - var err error - checkpointKeys := []string{} - checkpointKeys, err = cpm.ListCheckpoints() + checkpointKeys, err := cpm.ListCheckpoints() if err != nil { klog.Errorf("Failed to list checkpoints: %v", err) } diff --git a/pkg/kubelet/cm/cpumanager/state/BUILD b/pkg/kubelet/cm/cpumanager/state/BUILD index 6a95d1af163..d670c795b42 100644 --- a/pkg/kubelet/cm/cpumanager/state/BUILD +++ b/pkg/kubelet/cm/cpumanager/state/BUILD @@ -32,6 +32,7 @@ go_test( "//pkg/kubelet/checkpointmanager:go_default_library", "//pkg/kubelet/cm/cpumanager/state/testing:go_default_library", "//pkg/kubelet/cm/cpuset:go_default_library", + "//vendor/github.com/stretchr/testify/require:go_default_library", ], ) diff --git a/pkg/kubelet/cm/cpumanager/state/state_compatibility_test.go b/pkg/kubelet/cm/cpumanager/state/state_compatibility_test.go index 228fe0274f4..e15406f0914 100644 --- a/pkg/kubelet/cm/cpumanager/state/state_compatibility_test.go +++ b/pkg/kubelet/cm/cpumanager/state/state_compatibility_test.go @@ -21,6 +21,7 @@ import ( "path" "testing" + "github.com/stretchr/testify/require" "k8s.io/kubernetes/pkg/kubelet/checkpointmanager" "k8s.io/kubernetes/pkg/kubelet/cm/cpuset" ) @@ -68,6 +69,7 @@ func TestCheckpointToFileCompatibility(t *testing.T) { defer cpm.RemoveCheckpoint(compatibilityTestingCheckpoint) checkpointState, err := NewCheckpointState(testingDir, compatibilityTestingCheckpoint, "none") + require.NoError(t, err) checkpointState.SetDefaultCPUSet(state.defaultCPUSet) checkpointState.SetCPUAssignments(state.assignments) diff --git a/pkg/kubelet/cm/devicemanager/manager_test.go b/pkg/kubelet/cm/devicemanager/manager_test.go index 68ed9a5c78c..dc62a2302ba 100644 --- a/pkg/kubelet/cm/devicemanager/manager_test.go +++ b/pkg/kubelet/cm/devicemanager/manager_test.go @@ -373,17 +373,14 @@ func TestUpdateCapacityAllocatable(t *testing.T) { e1.setStopTime(time.Now().Add(-1*endpointStopGracePeriod - time.Duration(10)*time.Second)) capacity, allocatable, removed := testManager.GetCapacity() as.Equal([]string{resourceName1}, removed) - _, ok = capacity[v1.ResourceName(resourceName1)] - as.False(ok) + as.NotContains(capacity, v1.ResourceName(resourceName1)) + as.NotContains(allocatable, v1.ResourceName(resourceName1)) val, ok := capacity[v1.ResourceName(resourceName2)] as.True(ok) as.Equal(int64(3), val.Value()) - _, ok = testManager.healthyDevices[resourceName1] - as.False(ok) - _, ok = testManager.unhealthyDevices[resourceName1] - as.False(ok) - _, ok = testManager.endpoints[resourceName1] - as.False(ok) + as.NotContains(testManager.healthyDevices, resourceName1) + as.NotContains(testManager.unhealthyDevices, resourceName1) + as.NotContains(testManager.endpoints, resourceName1) as.Equal(1, len(testManager.endpoints)) // Stops resourceName2 endpoint. Verifies its stopTime is set, allocate and @@ -417,12 +414,14 @@ func TestUpdateCapacityAllocatable(t *testing.T) { err = testManager.readCheckpoint() as.Nil(err) as.Equal(1, len(testManager.endpoints)) - _, ok = testManager.endpoints[resourceName2] - as.True(ok) + as.Contains(testManager.endpoints, resourceName2) capacity, allocatable, removed = testManager.GetCapacity() val, ok = capacity[v1.ResourceName(resourceName2)] as.True(ok) as.Equal(int64(0), val.Value()) + val, ok = allocatable[v1.ResourceName(resourceName2)] + as.True(ok) + as.Equal(int64(0), val.Value()) as.Empty(removed) as.True(testManager.isDevicePluginResource(resourceName2)) } diff --git a/pkg/kubelet/container/testing/fake_runtime.go b/pkg/kubelet/container/testing/fake_runtime.go index 7a3fc463c42..9141ad48c1d 100644 --- a/pkg/kubelet/container/testing/fake_runtime.go +++ b/pkg/kubelet/container/testing/fake_runtime.go @@ -271,14 +271,6 @@ func (f *FakeRuntime) KillContainerInPod(container v1.Container, pod *v1.Pod) er f.CalledFunctions = append(f.CalledFunctions, "KillContainerInPod") f.KilledContainers = append(f.KilledContainers, container.Name) - - var containers []v1.Container - for _, c := range pod.Spec.Containers { - if c.Name == container.Name { - continue - } - containers = append(containers, c) - } return f.Err } diff --git a/pkg/kubelet/dockershim/network/cni/BUILD b/pkg/kubelet/dockershim/network/cni/BUILD index 782f856eb72..ddc0d00514e 100644 --- a/pkg/kubelet/dockershim/network/cni/BUILD +++ b/pkg/kubelet/dockershim/network/cni/BUILD @@ -52,6 +52,7 @@ go_test( "//staging/src/k8s.io/client-go/util/testing:go_default_library", "//vendor/github.com/containernetworking/cni/pkg/types/020:go_default_library", "//vendor/github.com/stretchr/testify/mock:go_default_library", + "//vendor/github.com/stretchr/testify/require:go_default_library", "//vendor/k8s.io/utils/exec:go_default_library", "//vendor/k8s.io/utils/exec/testing:go_default_library", ], diff --git a/pkg/kubelet/dockershim/network/cni/cni_test.go b/pkg/kubelet/dockershim/network/cni/cni_test.go index dab866bbbf9..3a9a367b950 100644 --- a/pkg/kubelet/dockershim/network/cni/cni_test.go +++ b/pkg/kubelet/dockershim/network/cni/cni_test.go @@ -34,6 +34,7 @@ import ( types020 "github.com/containernetworking/cni/pkg/types/020" "github.com/stretchr/testify/mock" + "github.com/stretchr/testify/require" "k8s.io/api/core/v1" clientset "k8s.io/client-go/kubernetes" utiltesting "k8s.io/client-go/util/testing" @@ -73,6 +74,7 @@ func installPluginUnderTest(t *testing.T, testBinDir, testConfDir, testDataDir, pluginExec := path.Join(testBinDir, binName) f, err = os.Create(pluginExec) + require.NoError(t, err) const execScriptTempl = `#!/usr/bin/env bash cat > {{.InputFile}} @@ -329,6 +331,7 @@ func TestCNIPlugin(t *testing.T) { t.Errorf("Expected nil: %v", err) } output, err = ioutil.ReadFile(outputFile) + require.NoError(t, err) expectedOutput = "DEL /proc/12345/ns/net podNamespace podName test_infra_container" if string(output) != expectedOutput { t.Errorf("Mismatch in expected output for setup hook. Expected '%s', got '%s'", expectedOutput, string(output)) diff --git a/pkg/kubelet/eviction/eviction_manager.go b/pkg/kubelet/eviction/eviction_manager.go index ef9e85fe568..4ef2a89dce6 100644 --- a/pkg/kubelet/eviction/eviction_manager.go +++ b/pkg/kubelet/eviction/eviction_manager.go @@ -497,7 +497,7 @@ func (m *managerImpl) podEphemeralStorageLimitEviction(podStats statsapi.PodStat } podEphemeralStorageTotalUsage := &resource.Quantity{} - fsStatsSet := []fsStatsType{} + var fsStatsSet []fsStatsType if *m.dedicatedImageFs { fsStatsSet = []fsStatsType{fsStatsLogs, fsStatsLocalVolumeSource} } else { diff --git a/pkg/kubelet/kubelet_node_status_test.go b/pkg/kubelet/kubelet_node_status_test.go index 4da2316ce9a..bfd0b5ba56c 100644 --- a/pkg/kubelet/kubelet_node_status_test.go +++ b/pkg/kubelet/kubelet_node_status_test.go @@ -538,6 +538,7 @@ func TestUpdateExistingNodeStatusTimeout(t *testing.T) { kubelet := testKubelet.kubelet kubelet.kubeClient = nil // ensure only the heartbeat client is used kubelet.heartbeatClient, err = clientset.NewForConfig(config) + require.NoError(t, err) kubelet.onRepeatedHeartbeatFailure = func() { atomic.AddInt64(&failureCallbacks, 1) } diff --git a/pkg/kubelet/kuberuntime/kuberuntime_container_test.go b/pkg/kubelet/kuberuntime/kuberuntime_container_test.go index 2441904e5fb..621b1e4cd35 100644 --- a/pkg/kubelet/kuberuntime/kuberuntime_container_test.go +++ b/pkg/kubelet/kuberuntime/kuberuntime_container_test.go @@ -23,6 +23,7 @@ import ( "time" "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/api/core/v1" @@ -35,6 +36,7 @@ import ( // TestRemoveContainer tests removing the container and its corresponding container logs. func TestRemoveContainer(t *testing.T) { fakeRuntime, _, m, err := createTestRuntimeManager() + require.NoError(t, err) pod := &v1.Pod{ ObjectMeta: metav1.ObjectMeta{ UID: "12345678", diff --git a/pkg/kubelet/network/dns/dns.go b/pkg/kubelet/network/dns/dns.go index e4648ab886a..a3f20b7be10 100644 --- a/pkg/kubelet/network/dns/dns.go +++ b/pkg/kubelet/network/dns/dns.go @@ -396,10 +396,10 @@ func (c *Configurer) SetupDNSinContainerizedMounter(mounterPath string) { } if c.ResolverConfig != "" { f, err := os.Open(c.ResolverConfig) - defer f.Close() if err != nil { klog.Error("Could not open resolverConf file") } else { + defer f.Close() _, hostSearch, _, err := parseResolvConf(f) if err != nil { klog.Errorf("Error for parsing the resolv.conf file: %v", err) diff --git a/pkg/kubelet/pluginmanager/BUILD b/pkg/kubelet/pluginmanager/BUILD index 2cd53f6b706..e4bab30cc03 100644 --- a/pkg/kubelet/pluginmanager/BUILD +++ b/pkg/kubelet/pluginmanager/BUILD @@ -46,7 +46,6 @@ go_test( deps = [ "//pkg/kubelet/apis/pluginregistration/v1:go_default_library", "//pkg/kubelet/config:go_default_library", - "//pkg/kubelet/pluginmanager/cache:go_default_library", "//pkg/kubelet/pluginmanager/pluginwatcher:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/sets:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/wait:go_default_library", diff --git a/pkg/kubelet/pluginmanager/pluginwatcher/example_plugin.go b/pkg/kubelet/pluginmanager/pluginwatcher/example_plugin.go index f5268fa496b..be7582d5bbe 100644 --- a/pkg/kubelet/pluginmanager/pluginwatcher/example_plugin.go +++ b/pkg/kubelet/pluginmanager/pluginwatcher/example_plugin.go @@ -134,11 +134,9 @@ func (e *examplePlugin) Serve(services ...string) error { case "v1beta1": v1beta1 := &pluginServiceV1Beta1{server: e} v1beta1.RegisterService() - break case "v1beta2": v1beta2 := &pluginServiceV1Beta2{server: e} v1beta2.RegisterService() - break default: return fmt.Errorf("Unsupported service: '%s'", service) } diff --git a/pkg/kubelet/remote/fake/fake_runtime.go b/pkg/kubelet/remote/fake/fake_runtime.go index 8cae6af3bc4..af77239ed11 100644 --- a/pkg/kubelet/remote/fake/fake_runtime.go +++ b/pkg/kubelet/remote/fake/fake_runtime.go @@ -208,8 +208,6 @@ func (f *RemoteRuntime) ExecSync(ctx context.Context, req *kubeapi.ExecSyncReque return nil, err } exitCode = int32(exitError.ExitStatus()) - - return nil, err } return &kubeapi.ExecSyncResponse{ diff --git a/pkg/kubelet/stats/cri_stats_provider.go b/pkg/kubelet/stats/cri_stats_provider.go index bf65f63d25a..492c16bbd77 100644 --- a/pkg/kubelet/stats/cri_stats_provider.go +++ b/pkg/kubelet/stats/cri_stats_provider.go @@ -316,29 +316,29 @@ func (p *criStatsProvider) ImageFsStats() (*statsapi.FsStats, error) { // return the first one. // // TODO(yguo0905): Support returning stats of multiple image filesystems. - for _, fs := range resp { - s := &statsapi.FsStats{ - Time: metav1.NewTime(time.Unix(0, fs.Timestamp)), - UsedBytes: &fs.UsedBytes.Value, - } - if fs.InodesUsed != nil { - s.InodesUsed = &fs.InodesUsed.Value - } - imageFsInfo := p.getFsInfo(fs.GetFsId()) - if imageFsInfo != nil { - // The image filesystem id is unknown to the local node or there's - // an error on retrieving the stats. In these cases, we omit those - // stats and return the best-effort partial result. See - // https://github.com/kubernetes/heapster/issues/1793. - s.AvailableBytes = &imageFsInfo.Available - s.CapacityBytes = &imageFsInfo.Capacity - s.InodesFree = imageFsInfo.InodesFree - s.Inodes = imageFsInfo.Inodes - } - return s, nil + if len(resp) == 0 { + return nil, fmt.Errorf("imageFs information is unavailable") } - - return nil, fmt.Errorf("imageFs information is unavailable") + fs := resp[0] + s := &statsapi.FsStats{ + Time: metav1.NewTime(time.Unix(0, fs.Timestamp)), + UsedBytes: &fs.UsedBytes.Value, + } + if fs.InodesUsed != nil { + s.InodesUsed = &fs.InodesUsed.Value + } + imageFsInfo := p.getFsInfo(fs.GetFsId()) + if imageFsInfo != nil { + // The image filesystem id is unknown to the local node or there's + // an error on retrieving the stats. In these cases, we omit those + // stats and return the best-effort partial result. See + // https://github.com/kubernetes/heapster/issues/1793. + s.AvailableBytes = &imageFsInfo.Available + s.CapacityBytes = &imageFsInfo.Capacity + s.InodesFree = imageFsInfo.InodesFree + s.Inodes = imageFsInfo.Inodes + } + return s, nil } // ImageFsDevice returns name of the device where the image filesystem locates, diff --git a/pkg/kubelet/status/status_manager.go b/pkg/kubelet/status/status_manager.go index e4d56b94925..380c7827b20 100644 --- a/pkg/kubelet/status/status_manager.go +++ b/pkg/kubelet/status/status_manager.go @@ -150,6 +150,7 @@ func (m *manager) Start() { } klog.Info("Starting to sync pod status with apiserver") + //lint:ignore SA1015 Ticker can link since this is only called once and doesn't handle termination. syncTicker := time.Tick(syncPeriod) // syncPod and syncBatch share the same go routine to avoid sync races. go wait.Forever(func() { diff --git a/pkg/kubelet/types/pod_update.go b/pkg/kubelet/types/pod_update.go index 95c81f0a518..f2f4d93e541 100644 --- a/pkg/kubelet/types/pod_update.go +++ b/pkg/kubelet/types/pod_update.go @@ -88,9 +88,8 @@ func GetValidatedSources(sources []string) ([]string, error) { return []string{FileSource, HTTPSource, ApiserverSource}, nil case FileSource, HTTPSource, ApiserverSource: validated = append(validated, source) - break case "": - break + // Skip default: return []string{}, fmt.Errorf("unknown pod source %q", source) } diff --git a/pkg/kubelet/types/pod_update_test.go b/pkg/kubelet/types/pod_update_test.go index 85796b1cd75..faf27a38439 100644 --- a/pkg/kubelet/types/pod_update_test.go +++ b/pkg/kubelet/types/pod_update_test.go @@ -42,7 +42,7 @@ func TestGetValidatedSources(t *testing.T) { require.Len(t, sources, 3) // Unknown source. - sources, err = GetValidatedSources([]string{"taco"}) + _, err = GetValidatedSources([]string{"taco"}) require.Error(t, err) } diff --git a/pkg/kubelet/util/format/pod.go b/pkg/kubelet/util/format/pod.go index 070fd099bdf..6fc278b164c 100644 --- a/pkg/kubelet/util/format/pod.go +++ b/pkg/kubelet/util/format/pod.go @@ -68,5 +68,5 @@ func aggregatePods(pods []*v1.Pod, handler podHandler) string { for _, pod := range pods { podStrings = append(podStrings, handler(pod)) } - return fmt.Sprintf(strings.Join(podStrings, ", ")) + return strings.Join(podStrings, ", ") } diff --git a/pkg/kubelet/volumemanager/cache/BUILD b/pkg/kubelet/volumemanager/cache/BUILD index 688209d6e13..76a34e9f614 100644 --- a/pkg/kubelet/volumemanager/cache/BUILD +++ b/pkg/kubelet/volumemanager/cache/BUILD @@ -43,6 +43,7 @@ go_test( "//pkg/volume/util/types:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", + "//vendor/github.com/stretchr/testify/require:go_default_library", ], ) diff --git a/pkg/kubelet/volumemanager/cache/actual_state_of_world_test.go b/pkg/kubelet/volumemanager/cache/actual_state_of_world_test.go index 9ae03e5cf77..fd703f8d3df 100644 --- a/pkg/kubelet/volumemanager/cache/actual_state_of_world_test.go +++ b/pkg/kubelet/volumemanager/cache/actual_state_of_world_test.go @@ -19,6 +19,7 @@ package cache import ( "testing" + "github.com/stretchr/testify/require" "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/kubernetes/pkg/volume" @@ -359,8 +360,10 @@ func Test_AddTwoPodsToVolume_Positive(t *testing.T) { volumeSpec2 := &volume.Spec{Volume: &pod2.Spec.Volumes[0]} generatedVolumeName1, err := util.GetUniqueVolumeNameFromSpec( plugin, volumeSpec1) + require.NoError(t, err) generatedVolumeName2, err := util.GetUniqueVolumeNameFromSpec( plugin, volumeSpec2) + require.NoError(t, err) if generatedVolumeName1 != generatedVolumeName2 { t.Fatalf( @@ -466,6 +469,7 @@ func Test_AddPodToVolume_Negative_VolumeDoesntExist(t *testing.T) { volumeName, err := util.GetUniqueVolumeNameFromSpec( plugin, volumeSpec) + require.NoError(t, err) podName := util.GetUniquePodName(pod)