github.com/munnerz/test-infra@v0.0.0-20190108210205-ce3d181dc989/prow/deck/jobs/jobs_test.go (about) 1 /* 2 Copyright 2016 The Kubernetes 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 jobs 18 19 import ( 20 "fmt" 21 "testing" 22 23 "k8s.io/test-infra/prow/kube" 24 ) 25 26 type fkc []kube.ProwJob 27 28 func (f fkc) GetLog(pod string) ([]byte, error) { 29 return nil, nil 30 } 31 32 func (f fkc) ListPods(selector string) ([]kube.Pod, error) { 33 return nil, nil 34 } 35 36 func (f fkc) ListProwJobs(s string) ([]kube.ProwJob, error) { 37 return f, nil 38 } 39 40 type fpkc string 41 42 func (f fpkc) GetContainerLog(pod, container string) ([]byte, error) { 43 if container != kube.TestContainerName { 44 return nil, fmt.Errorf("wrong container: %s", container) 45 } 46 if pod == "wowowow" || pod == "powowow" { 47 return []byte(f), nil 48 } 49 return nil, fmt.Errorf("pod not found: %s", pod) 50 } 51 52 func (f fpkc) GetLogTail(pod, container string, n int64) ([]byte, error) { 53 log, err := f.GetContainerLog(pod, container) 54 if err != nil { 55 return nil, err 56 } 57 logLen := int64(len(log)) 58 if n >= logLen { 59 return log, nil 60 } 61 return log[logLen-n:], nil 62 } 63 64 func TestGetLogTail(t *testing.T) { 65 kc := fkc{ 66 kube.ProwJob{ 67 Spec: kube.ProwJobSpec{ 68 Agent: kube.KubernetesAgent, 69 Job: "job", 70 }, 71 Status: kube.ProwJobStatus{ 72 PodName: "wowowow", 73 BuildID: "123", 74 }, 75 }, 76 kube.ProwJob{ 77 Spec: kube.ProwJobSpec{ 78 Agent: kube.KubernetesAgent, 79 Job: "jib", 80 Cluster: "trusted", 81 }, 82 Status: kube.ProwJobStatus{ 83 PodName: "powowow", 84 BuildID: "123", 85 }, 86 }, 87 } 88 ja := &JobAgent{ 89 kc: kc, 90 pkcs: map[string]PodLogClient{kube.DefaultClusterAlias: fpkc("clusterA"), "trusted": fpkc("clusterB")}, 91 } 92 if err := ja.update(); err != nil { 93 t.Fatalf("Updating: %v", err) 94 } 95 if res, err := ja.GetJobLogTail("job", "123", 5); err != nil { 96 t.Fatalf("Failed to get log: %v", err) 97 } else if got, expect := string(res), "sterA"; got != expect { 98 t.Errorf("Unexpected result getting logs tail for job 'job'. Expected %q, but got %q.", expect, got) 99 } 100 101 if res, err := ja.GetJobLogTail("jib", "123", 40); err != nil { 102 t.Fatalf("Failed to get log: %v", err) 103 } else if got, expect := string(res), "clusterB"; got != expect { 104 t.Errorf("Unexpected result getting logs tail for job 'job'. Expected %q, but got %q.", expect, got) 105 } 106 } 107 108 func TestGetLog(t *testing.T) { 109 kc := fkc{ 110 kube.ProwJob{ 111 Spec: kube.ProwJobSpec{ 112 Agent: kube.KubernetesAgent, 113 Job: "job", 114 }, 115 Status: kube.ProwJobStatus{ 116 PodName: "wowowow", 117 BuildID: "123", 118 }, 119 }, 120 kube.ProwJob{ 121 Spec: kube.ProwJobSpec{ 122 Agent: kube.KubernetesAgent, 123 Job: "jib", 124 Cluster: "trusted", 125 }, 126 Status: kube.ProwJobStatus{ 127 PodName: "powowow", 128 BuildID: "123", 129 }, 130 }, 131 } 132 ja := &JobAgent{ 133 kc: kc, 134 pkcs: map[string]PodLogClient{kube.DefaultClusterAlias: fpkc("clusterA"), "trusted": fpkc("clusterB")}, 135 } 136 if err := ja.update(); err != nil { 137 t.Fatalf("Updating: %v", err) 138 } 139 if res, err := ja.GetJobLog("job", "123"); err != nil { 140 t.Fatalf("Failed to get log: %v", err) 141 } else if got, expect := string(res), "clusterA"; got != expect { 142 t.Errorf("Unexpected result getting logs for job 'job'. Expected %q, but got %q.", expect, got) 143 } 144 145 if res, err := ja.GetJobLog("jib", "123"); err != nil { 146 t.Fatalf("Failed to get log: %v", err) 147 } else if got, expect := string(res), "clusterB"; got != expect { 148 t.Errorf("Unexpected result getting logs for job 'job'. Expected %q, but got %q.", expect, got) 149 } 150 } 151 152 func TestProwJobs(t *testing.T) { 153 kc := fkc{ 154 kube.ProwJob{ 155 Spec: kube.ProwJobSpec{ 156 Agent: kube.KubernetesAgent, 157 Job: "job", 158 Refs: &kube.Refs{ 159 Org: "kubernetes", 160 Repo: "test-infra", 161 }, 162 }, 163 Status: kube.ProwJobStatus{ 164 PodName: "wowowow", 165 BuildID: "123", 166 }, 167 }, 168 } 169 ja := &JobAgent{ 170 kc: kc, 171 pkcs: map[string]PodLogClient{kube.DefaultClusterAlias: fpkc("")}, 172 } 173 if err := ja.update(); err != nil { 174 t.Fatalf("Updating: %v", err) 175 } 176 pjs := ja.ProwJobs() 177 if expect, got := 1, len(pjs); expect != got { 178 t.Fatalf("Expected %d prowjobs, but got %d.", expect, got) 179 } 180 if expect, got := "kubernetes", pjs[0].Spec.Refs.Org; expect != got { 181 t.Errorf("Expected prowjob to have org %q, but got %q.", expect, got) 182 } 183 }