github.com/abayer/test-infra@v0.0.5/prow/pod-utils/downwardapi/jobspec_test.go (about)

     1  /*
     2  Copyright 2017 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 downwardapi
    18  
    19  import (
    20  	"reflect"
    21  	"testing"
    22  
    23  	"k8s.io/test-infra/prow/kube"
    24  )
    25  
    26  func TestEnvironmentForSpec(t *testing.T) {
    27  	var tests = []struct {
    28  		name     string
    29  		spec     JobSpec
    30  		expected map[string]string
    31  	}{
    32  		{
    33  			name: "periodic job",
    34  			spec: JobSpec{
    35  				Type:      kube.PeriodicJob,
    36  				Job:       "job-name",
    37  				BuildID:   "0",
    38  				ProwJobID: "prowjob",
    39  			},
    40  			expected: map[string]string{
    41  				"JOB_NAME":    "job-name",
    42  				"BUILD_ID":    "0",
    43  				"PROW_JOB_ID": "prowjob",
    44  				"JOB_TYPE":    "periodic",
    45  				"JOB_SPEC":    `{"type":"periodic","job":"job-name","buildid":"0","prowjobid":"prowjob","refs":{}}`,
    46  			},
    47  		},
    48  		{
    49  			name: "postsubmit job",
    50  			spec: JobSpec{
    51  				Type:      kube.PostsubmitJob,
    52  				Job:       "job-name",
    53  				BuildID:   "0",
    54  				ProwJobID: "prowjob",
    55  				Refs: kube.Refs{
    56  					Org:     "org-name",
    57  					Repo:    "repo-name",
    58  					BaseRef: "base-ref",
    59  					BaseSHA: "base-sha",
    60  				},
    61  			},
    62  			expected: map[string]string{
    63  				"JOB_NAME":      "job-name",
    64  				"BUILD_ID":      "0",
    65  				"PROW_JOB_ID":   "prowjob",
    66  				"JOB_TYPE":      "postsubmit",
    67  				"JOB_SPEC":      `{"type":"postsubmit","job":"job-name","buildid":"0","prowjobid":"prowjob","refs":{"org":"org-name","repo":"repo-name","base_ref":"base-ref","base_sha":"base-sha"}}`,
    68  				"REPO_OWNER":    "org-name",
    69  				"REPO_NAME":     "repo-name",
    70  				"PULL_BASE_REF": "base-ref",
    71  				"PULL_BASE_SHA": "base-sha",
    72  				"PULL_REFS":     "base-ref:base-sha",
    73  			},
    74  		},
    75  		{
    76  			name: "batch job",
    77  			spec: JobSpec{
    78  				Type:      kube.BatchJob,
    79  				Job:       "job-name",
    80  				BuildID:   "0",
    81  				ProwJobID: "prowjob",
    82  				Refs: kube.Refs{
    83  					Org:     "org-name",
    84  					Repo:    "repo-name",
    85  					BaseRef: "base-ref",
    86  					BaseSHA: "base-sha",
    87  					Pulls: []kube.Pull{{
    88  						Number: 1,
    89  						Author: "author-name",
    90  						SHA:    "pull-sha",
    91  					}, {
    92  						Number: 2,
    93  						Author: "other-author-name",
    94  						SHA:    "second-pull-sha",
    95  					}},
    96  				},
    97  			},
    98  			expected: map[string]string{
    99  				"JOB_NAME":      "job-name",
   100  				"BUILD_ID":      "0",
   101  				"PROW_JOB_ID":   "prowjob",
   102  				"JOB_TYPE":      "batch",
   103  				"JOB_SPEC":      `{"type":"batch","job":"job-name","buildid":"0","prowjobid":"prowjob","refs":{"org":"org-name","repo":"repo-name","base_ref":"base-ref","base_sha":"base-sha","pulls":[{"number":1,"author":"author-name","sha":"pull-sha"},{"number":2,"author":"other-author-name","sha":"second-pull-sha"}]}}`,
   104  				"REPO_OWNER":    "org-name",
   105  				"REPO_NAME":     "repo-name",
   106  				"PULL_BASE_REF": "base-ref",
   107  				"PULL_BASE_SHA": "base-sha",
   108  				"PULL_REFS":     "base-ref:base-sha,1:pull-sha,2:second-pull-sha",
   109  			},
   110  		},
   111  		{
   112  			name: "presubmit job",
   113  			spec: JobSpec{
   114  				Type:      kube.PresubmitJob,
   115  				Job:       "job-name",
   116  				BuildID:   "0",
   117  				ProwJobID: "prowjob",
   118  				Refs: kube.Refs{
   119  					Org:     "org-name",
   120  					Repo:    "repo-name",
   121  					BaseRef: "base-ref",
   122  					BaseSHA: "base-sha",
   123  					Pulls: []kube.Pull{{
   124  						Number: 1,
   125  						Author: "author-name",
   126  						SHA:    "pull-sha",
   127  					}},
   128  				},
   129  			},
   130  			expected: map[string]string{
   131  				"JOB_NAME":      "job-name",
   132  				"BUILD_ID":      "0",
   133  				"PROW_JOB_ID":   "prowjob",
   134  				"JOB_TYPE":      "presubmit",
   135  				"JOB_SPEC":      `{"type":"presubmit","job":"job-name","buildid":"0","prowjobid":"prowjob","refs":{"org":"org-name","repo":"repo-name","base_ref":"base-ref","base_sha":"base-sha","pulls":[{"number":1,"author":"author-name","sha":"pull-sha"}]}}`,
   136  				"REPO_OWNER":    "org-name",
   137  				"REPO_NAME":     "repo-name",
   138  				"PULL_BASE_REF": "base-ref",
   139  				"PULL_BASE_SHA": "base-sha",
   140  				"PULL_REFS":     "base-ref:base-sha,1:pull-sha",
   141  				"PULL_NUMBER":   "1",
   142  				"PULL_PULL_SHA": "pull-sha",
   143  			},
   144  		},
   145  		{
   146  			name: "kubernetes agent",
   147  			spec: JobSpec{
   148  				Type:      kube.PeriodicJob,
   149  				Job:       "job-name",
   150  				BuildID:   "0",
   151  				ProwJobID: "prowjob",
   152  				agent:     kube.KubernetesAgent,
   153  			},
   154  			expected: map[string]string{
   155  				"JOB_NAME":     "job-name",
   156  				"BUILD_ID":     "0",
   157  				"PROW_JOB_ID":  "prowjob",
   158  				"BUILD_NUMBER": "0",
   159  				"JOB_TYPE":     "periodic",
   160  				"JOB_SPEC":     `{"type":"periodic","job":"job-name","buildid":"0","prowjobid":"prowjob","refs":{}}`,
   161  			},
   162  		},
   163  		{
   164  			name: "jenkins agent",
   165  			spec: JobSpec{
   166  				Type:      kube.PeriodicJob,
   167  				Job:       "job-name",
   168  				BuildID:   "0",
   169  				ProwJobID: "prowjob",
   170  				agent:     kube.JenkinsAgent,
   171  			},
   172  			expected: map[string]string{
   173  				"JOB_NAME":    "job-name",
   174  				"BUILD_ID":    "0",
   175  				"PROW_JOB_ID": "prowjob",
   176  				"buildId":     "0",
   177  				"JOB_TYPE":    "periodic",
   178  				"JOB_SPEC":    `{"type":"periodic","job":"job-name","buildid":"0","prowjobid":"prowjob","refs":{}}`,
   179  			},
   180  		},
   181  	}
   182  
   183  	for _, test := range tests {
   184  		env, err := EnvForSpec(test.spec)
   185  		if err != nil {
   186  			t.Errorf("%s: unexpected error: %v", test.name, err)
   187  		}
   188  		if actual, expected := env, test.expected; !reflect.DeepEqual(actual, expected) {
   189  			t.Errorf("%s: got environment:\n\t%v\n\tbut expected:\n\t%v", test.name, actual, expected)
   190  		}
   191  	}
   192  }