v.io/jiri@v0.0.0-20160715023856-abfb8b131290/jenkins/jenkins_test.go (about)

     1  // Copyright 2015 The Vanadium Authors. All rights reserved.
     2  // Use of this source code is governed by a BSD-style
     3  // license that can be found in the LICENSE file.
     4  
     5  package jenkins
     6  
     7  import (
     8  	"reflect"
     9  	"testing"
    10  )
    11  
    12  var buildInfo = BuildInfo{
    13  	Actions: []BuildInfoAction{
    14  		BuildInfoAction{
    15  			Parameters: []BuildInfoParameter{
    16  				BuildInfoParameter{
    17  					Name:  "TESTS",
    18  					Value: "example-test another-example-test",
    19  				},
    20  				BuildInfoParameter{
    21  					Name:  "PROJECTS",
    22  					Value: "test-project",
    23  				},
    24  				BuildInfoParameter{
    25  					Name:  "REFS",
    26  					Value: "refs/changes/92/4392/2",
    27  				},
    28  			},
    29  		},
    30  	},
    31  	Building: true,
    32  	Result:   "UNSTABLE",
    33  	Number:   1234,
    34  }
    35  
    36  func TestQueuedBuildParseRefs(t *testing.T) {
    37  	testCases := []struct {
    38  		queuedBuild  QueuedBuild
    39  		expectedRefs string
    40  	}{
    41  		{
    42  			queuedBuild: QueuedBuild{
    43  				Params: "\nREFS=ref/changes/12/3412/2\nPROJECTS=test",
    44  			},
    45  			expectedRefs: "ref/changes/12/3412/2",
    46  		},
    47  		{
    48  			queuedBuild: QueuedBuild{
    49  				Params: "\nPROJECTS=test\nREFS=ref/changes/12/3412/2",
    50  			},
    51  			expectedRefs: "ref/changes/12/3412/2",
    52  		},
    53  		{
    54  			queuedBuild: QueuedBuild{
    55  				Params: "\nPROJECTS=test1:test2\nREFS=ref/changes/12/3412/2:ref/changes/13/3413/1",
    56  			},
    57  			expectedRefs: "ref/changes/12/3412/2:ref/changes/13/3413/1",
    58  		},
    59  	}
    60  	for _, test := range testCases {
    61  		if got, want := test.queuedBuild.ParseRefs(), test.expectedRefs; got != want {
    62  			t.Fatalf("want %q, got %q", want, got)
    63  		}
    64  	}
    65  }
    66  
    67  func TestQueuedBuilds(t *testing.T) {
    68  	response := `
    69  {
    70  	"items" : [
    71  		{
    72  			"id": 10,
    73  			"params": "\nPROJECTS=test-project test-project\nREFS=refs/changes/78/4778/1:refs/changes/50/4750/2",
    74  			"task" : {
    75  				"name": "example-test"
    76  			}
    77  		},
    78  		{
    79  			"id": 20,
    80  			"params": "\nPROJECTS=test-project\nREFS=refs/changes/99/4799/2",
    81  			"task" : {
    82  				"name": "example-test"
    83  			}
    84  		},
    85  		{
    86  			"id": 30,
    87  			"task" : {
    88  				"name": "another-example-test"
    89  			}
    90  		}
    91  	]
    92  }
    93  	`
    94  	jenkins := NewForTesting()
    95  	jenkins.MockAPI("queue/api/json", response)
    96  	got, err := jenkins.QueuedBuilds("example-test")
    97  	if err != nil {
    98  		t.Fatalf("want no errors, got: %v", err)
    99  	}
   100  	want := []QueuedBuild{
   101  		QueuedBuild{
   102  			Id:     10,
   103  			Params: "\nPROJECTS=test-project test-project\nREFS=refs/changes/78/4778/1:refs/changes/50/4750/2",
   104  			Task: QueuedBuildTask{
   105  				Name: "example-test",
   106  			},
   107  		},
   108  		QueuedBuild{
   109  			Id:     20,
   110  			Params: "\nPROJECTS=test-project\nREFS=refs/changes/99/4799/2",
   111  			Task: QueuedBuildTask{
   112  				Name: "example-test",
   113  			},
   114  		},
   115  	}
   116  	if !reflect.DeepEqual(got, want) {
   117  		t.Fatalf("want %v, got %v", want, got)
   118  	}
   119  }
   120  
   121  func TestBuildInfoParseRef(t *testing.T) {
   122  	if got, want := buildInfo.ParseRefs(), "refs/changes/92/4392/2"; got != want {
   123  		t.Fatalf("want %q, got %q", want, got)
   124  	}
   125  }
   126  
   127  func TestOngoingBuilds(t *testing.T) {
   128  	ongoingBuildsResponse := `{
   129  	"computer": [
   130  		{
   131  			"executors": [
   132  				{
   133  					"currentExecutable": {
   134  						"url": "https://example.com/jenkins/job/presubmit-poll/13415/"
   135  					}
   136  				},
   137  				{
   138  					"currentExecutable": {
   139  						"url": "https://example.com/jenkins/job/example-test/OS=linux,TEST=presubmit-test/1234/"
   140  					}
   141  				}
   142  			],
   143  			"oneOffExecutors": [ ]
   144  		},
   145  		{
   146  			"executors": [ ],
   147  			"oneOffExecutors": [
   148  				{
   149  					"currentExecutable": {
   150  						"url": "https://example.com/jenkins/job/presubmit-test/1234/"
   151  					}
   152  				}
   153  			]
   154  		}
   155  	]
   156  }`
   157  	buildInfoResponse := `{
   158  	"actions": [
   159  		{
   160  			"parameters": [
   161  			  {
   162  					"name": "TESTS",
   163  					"value": "example-test another-example-test"
   164  				},
   165  				{
   166  					"name": "PROJECTS",
   167  					"value": "test-project"
   168  				},
   169  				{
   170  					"name": "REFS",
   171  					"value": "refs/changes/92/4392/2"
   172  				}
   173  			]
   174  		}
   175  	],
   176  	"building": true,
   177  	"result": "UNSTABLE",
   178  	"number": 1234
   179  }`
   180  	jenkins := NewForTesting()
   181  	jenkins.MockAPI("computer/api/json", ongoingBuildsResponse)
   182  	jenkins.MockAPI("job/presubmit-test/1234/api/json", buildInfoResponse)
   183  	got, err := jenkins.OngoingBuilds("presubmit-test")
   184  	if err != nil {
   185  		t.Fatalf("want no errors, got: %v", err)
   186  	}
   187  	if want := []BuildInfo{buildInfo}; !reflect.DeepEqual(got, want) {
   188  		t.Fatalf("want:\n%#v\n, got:\n%#v\n", want, got)
   189  	}
   190  }
   191  
   192  func TestFailedTestCasesForBuildSpec(t *testing.T) {
   193  	response := `{
   194  	"suites": [
   195  		{
   196  			"cases": [
   197  				{
   198  					"className": "c1",
   199  					"name": "n1",
   200  					"status": "PASSED"
   201  				},
   202  				{
   203  					"className": "c2",
   204  					"name": "n2",
   205  					"status": "FAILED"
   206  				}
   207  			]
   208  		},
   209  		{
   210  			"cases": [
   211  				{
   212  					"className": "c3",
   213  					"name": "n3",
   214  					"status": "REGRESSION"
   215  				}
   216  			]
   217  		}
   218  	]
   219  }`
   220  
   221  	jenkins := NewForTesting()
   222  	jenkins.MockAPI("job/example-test/1234/testReport/api/json", response)
   223  	got, err := jenkins.FailedTestCasesForBuildSpec("example-test/1234")
   224  	if err != nil {
   225  		t.Fatalf("want no errors, got: %v", err)
   226  	}
   227  	want := []TestCase{
   228  		TestCase{
   229  			ClassName: "c2",
   230  			Name:      "n2",
   231  			Status:    "FAILED",
   232  		},
   233  		TestCase{
   234  			ClassName: "c3",
   235  			Name:      "n3",
   236  			Status:    "REGRESSION",
   237  		},
   238  	}
   239  	if !reflect.DeepEqual(want, got) {
   240  		t.Fatalf("want:\n%#v\n, got:\n%#v\n", want, got)
   241  	}
   242  }
   243  
   244  func TestIsNodeIdle(t *testing.T) {
   245  	response := `{
   246  	"computer": [
   247  		{
   248  			"displayName": "jenkins-node01",
   249  			"idle": false
   250  		},
   251  		{
   252  			"displayName": "jenkins-node02",
   253  			"idle": true
   254  		}
   255  	]
   256  }`
   257  	jenkins := NewForTesting()
   258  	jenkins.MockAPI("computer/api/json", response)
   259  	got, err := jenkins.IsNodeIdle("jenkins-node01")
   260  	if err != nil {
   261  		t.Fatalf("want no errors, got: %v", err)
   262  	}
   263  	if want := false; got != want {
   264  		t.Fatalf("want %v, got %v", want, got)
   265  	}
   266  }