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  }