Change:
<!-- Please only use this template for submitting reports about failing tests in Kubernetes CI jobs --Which jobs are failing: Which test(s) are failing: Kubectl client [] Kubectl logs should be able to retrieve and filter logs [Conformance] Since when has it been failing: Testgrid link: Reason for failure: . . switched to using the docker official redis image and the test string was changed accordingly. On Windows, we still use the old image with the old string, and this caused the test to fail. /cc
Hmm, there doesn't seem to be a redis port for windows 3.2.100 : I guess we can modify the test to find "ready to accept connections" rather that "Ready ... ".
/cc

Discussion:
redisImage    = imageutils.GetE2EImage(imageutils.Redis) nginxImage    = imageutils.GetE2EImage(imageutils.Nginx) busyboxImage  = imageutils.GetE2EImage(imageutils.BusyBox) <ins> agnhostImage  = imageutils.GetE2EImage(imageutils.Agnhost) </ins> ) var (

framework.KubeDescribe("Kubectl logs", func() { var nsFlag string <del> var rc string containerName := "redis-master" </del> <ins> podName := "logs-generator" containerName := "logs-generator" </ins> ginkgo.BeforeEach(func() { <del> ginkgo.By("creating an rc") rc = commonutils.SubstituteImageName(string(readTestFileOrDie(redisControllerFilename))) </del> <ins> ginkgo.By("creating an pod") </ins> nsFlag = fmt.Sprintf("--namespace=%v", ns) <del> framework.RunKubectlOrDieInput(rc, "create", "-f", "-", nsFlag) </del> <ins> // Agnhost image generates logs for a total of 100 lines over 20s. framework.RunKubectlOrDie("run", podName, "--generator=run-pod/v1", "--image="+agnhostImage, nsFlag, "--", "logs-generator", "--log-lines-total", "100", "--run-duration", "20s") </ins> }) ginkgo.AfterEach(func() { <del> cleanupKubectlInputs(rc, ns, simplePodSelector) </del> <ins> framework.RunKubectlOrDie("delete", "pod", podName, nsFlag) </ins> }) /* Release : v1.9 Testname: Kubectl, logs Description: When a Pod is running then it MUST generate logs. <del> Starting a Pod should have a log line indicating the server is running and ready to accept connections. Also log command options MUST work as expected and described below. </del> <ins> Starting a Pod should have a expected log line. Also log command options MUST work as expected and described below. </ins> ‘kubectl log -tail=1’ should generate a output of one line, the last line in the log. ‘kubectl --limit-bytes=1’ should generate a single byte output. ‘kubectl --tail=1 --timestamp should generate one line with timestamp in RFC3339 format

return strings.Split(strings.TrimRight(out, "n"), "n") } <del> ginkgo.By("Waiting for Redis master to start.") waitForOrFailWithDebug(1) forEachPod(func(pod v1.Pod) { ginkgo.By("checking for a matching strings") _, err := framework.LookForStringInLog(ns, pod.Name, containerName, "Ready to accept connections", framework.PodStartTimeout) framework.ExpectNoError(err) </del> <ins> ginkgo.By("Waiting for log generator to start.") if !e2epod.CheckPodsRunningReadyOrSucceeded(c, ns, []string{podName}, framework.PodStartTimeout) { e2elog.Failf("Pod %s was not ready", podName) } </ins> <del> ginkgo.By("limiting log lines") out := framework.RunKubectlOrDie("log", pod.Name, containerName, nsFlag, "--tail=1") gomega.Expect(len(out)).NotTo(gomega.BeZero()) framework.ExpectEqual(len(lines(out)), 1) ginkgo.By("limiting log bytes") out = framework.RunKubectlOrDie("log", pod.Name, containerName, nsFlag, "--limit-bytes=1") framework.ExpectEqual(len(lines(out)), 1) framework.ExpectEqual(len(out), 1) ginkgo.By("exposing timestamps") out = framework.RunKubectlOrDie("log", pod.Name, containerName, nsFlag, "--tail=1", "--timestamps") l := lines(out) framework.ExpectEqual(len(l), 1) words := strings.Split(l[0], " ") gomega.Expect(len(words)).To(gomega.BeNumerically(">", 1)) if _, err := time.Parse(time.RFC3339Nano, words[0]); err != nil { if _, err := time.Parse(time.RFC3339, words[0]); err != nil { e2elog.Failf("expected %q to be RFC3339 or RFC3339Nano", words[0]) } </del> <ins> ginkgo.By("checking for a matching strings") _, err := framework.LookForStringInLog(ns, podName, containerName, "/api/v1/namespaces/kube-system", framework.PodStartTimeout) framework.ExpectNoError(err) ginkgo.By("limiting log lines") out := framework.RunKubectlOrDie("log", podName, containerName, nsFlag, "--tail=1") gomega.Expect(len(out)).NotTo(gomega.BeZero()) framework.ExpectEqual(len(lines(out)), 1) ginkgo.By("limiting log bytes") out = framework.RunKubectlOrDie("log", podName, containerName, nsFlag, "--limit-bytes=1") framework.ExpectEqual(len(lines(out)), 1) framework.ExpectEqual(len(out), 1) ginkgo.By("exposing timestamps") out = framework.RunKubectlOrDie("log", podName, containerName, nsFlag, "--tail=1", "--timestamps") l := lines(out) framework.ExpectEqual(len(l), 1) words := strings.Split(l[0], " ") gomega.Expect(len(words)).To(gomega.BeNumerically(">", 1)) if _, err := time.Parse(time.RFC3339Nano, words[0]); err != nil { if _, err := time.Parse(time.RFC3339, words[0]); err != nil { e2elog.Failf("expected %q to be RFC3339 or RFC3339Nano", words[0]) </ins> } <ins> } </ins> <del> ginkgo.By("restricting to a time range") // Note: we must wait at least two seconds, // because the granularity is only 1 second and // it could end up rounding the wrong way. time.Sleep(2500 * time.Millisecond) // ensure that startup logs on the node are seen as older than 1s recentOut := framework.RunKubectlOrDie("log", pod.Name, containerName, nsFlag, "--since=1s") recent := len(strings.Split(recentOut, "n")) olderOut := framework.RunKubectlOrDie("log", pod.Name, containerName, nsFlag, "--since=24h") older := len(strings.Split(olderOut, "n")) gomega.Expect(recent).To(gomega.BeNumerically("<", older), "expected recent(%v) to be less than older(%v)nrecent lines:n%vnolder lines:n%vn", recent, older, recentOut, olderOut) }) </del> <ins> ginkgo.By("restricting to a time range") // Note: we must wait at least two seconds, // because the granularity is only 1 second and // it could end up rounding the wrong way. time.Sleep(2500 * time.Millisecond) // ensure that startup logs on the node are seen as older than 1s recentOut := framework.RunKubectlOrDie("log", podName, containerName, nsFlag, "--since=1s") recent := len(strings.Split(recentOut, "n")) olderOut := framework.RunKubectlOrDie("log", podName, containerName, nsFlag, "--since=24h") older := len(strings.Split(olderOut, "n")) gomega.Expect(recent).To(gomega.BeNumerically("<", older), "expected recent(%v) to be less than older(%v)nrecent lines:n%vnolder lines:n%vn", recent, older, recentOut, olderOut) </ins> }) })