1*333d2b36SAndroid Build Coastguard Worker// Copyright 2018 Google Inc. All rights reserved. 2*333d2b36SAndroid Build Coastguard Worker// 3*333d2b36SAndroid Build Coastguard Worker// Licensed under the Apache License, Version 2.0 (the "License"); 4*333d2b36SAndroid Build Coastguard Worker// you may not use this file except in compliance with the License. 5*333d2b36SAndroid Build Coastguard Worker// You may obtain a copy of the License at 6*333d2b36SAndroid Build Coastguard Worker// 7*333d2b36SAndroid Build Coastguard Worker// http://www.apache.org/licenses/LICENSE-2.0 8*333d2b36SAndroid Build Coastguard Worker// 9*333d2b36SAndroid Build Coastguard Worker// Unless required by applicable law or agreed to in writing, software 10*333d2b36SAndroid Build Coastguard Worker// distributed under the License is distributed on an "AS IS" BASIS, 11*333d2b36SAndroid Build Coastguard Worker// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12*333d2b36SAndroid Build Coastguard Worker// See the License for the specific language governing permissions and 13*333d2b36SAndroid Build Coastguard Worker// limitations under the License. 14*333d2b36SAndroid Build Coastguard Worker 15*333d2b36SAndroid Build Coastguard Workerpackage status 16*333d2b36SAndroid Build Coastguard Worker 17*333d2b36SAndroid Build Coastguard Workerimport "testing" 18*333d2b36SAndroid Build Coastguard Worker 19*333d2b36SAndroid Build Coastguard Workertype counterOutput Counts 20*333d2b36SAndroid Build Coastguard Worker 21*333d2b36SAndroid Build Coastguard Workerfunc (c *counterOutput) StartAction(action *Action, counts Counts) { 22*333d2b36SAndroid Build Coastguard Worker *c = counterOutput(counts) 23*333d2b36SAndroid Build Coastguard Worker} 24*333d2b36SAndroid Build Coastguard Workerfunc (c *counterOutput) FinishAction(result ActionResult, counts Counts) { 25*333d2b36SAndroid Build Coastguard Worker *c = counterOutput(counts) 26*333d2b36SAndroid Build Coastguard Worker} 27*333d2b36SAndroid Build Coastguard Workerfunc (c counterOutput) Message(level MsgLevel, msg string) {} 28*333d2b36SAndroid Build Coastguard Workerfunc (c counterOutput) Flush() {} 29*333d2b36SAndroid Build Coastguard Worker 30*333d2b36SAndroid Build Coastguard Workerfunc (c counterOutput) Write(p []byte) (int, error) { 31*333d2b36SAndroid Build Coastguard Worker // Discard writes 32*333d2b36SAndroid Build Coastguard Worker return len(p), nil 33*333d2b36SAndroid Build Coastguard Worker} 34*333d2b36SAndroid Build Coastguard Worker 35*333d2b36SAndroid Build Coastguard Workerfunc (c counterOutput) Expect(t *testing.T, counts Counts) { 36*333d2b36SAndroid Build Coastguard Worker if Counts(c) == counts { 37*333d2b36SAndroid Build Coastguard Worker return 38*333d2b36SAndroid Build Coastguard Worker } 39*333d2b36SAndroid Build Coastguard Worker t.Helper() 40*333d2b36SAndroid Build Coastguard Worker 41*333d2b36SAndroid Build Coastguard Worker if c.TotalActions != counts.TotalActions { 42*333d2b36SAndroid Build Coastguard Worker t.Errorf("Expected %d total edges, but got %d", counts.TotalActions, c.TotalActions) 43*333d2b36SAndroid Build Coastguard Worker } 44*333d2b36SAndroid Build Coastguard Worker if c.RunningActions != counts.RunningActions { 45*333d2b36SAndroid Build Coastguard Worker t.Errorf("Expected %d running edges, but got %d", counts.RunningActions, c.RunningActions) 46*333d2b36SAndroid Build Coastguard Worker } 47*333d2b36SAndroid Build Coastguard Worker if c.StartedActions != counts.StartedActions { 48*333d2b36SAndroid Build Coastguard Worker t.Errorf("Expected %d started edges, but got %d", counts.StartedActions, c.StartedActions) 49*333d2b36SAndroid Build Coastguard Worker } 50*333d2b36SAndroid Build Coastguard Worker if c.FinishedActions != counts.FinishedActions { 51*333d2b36SAndroid Build Coastguard Worker t.Errorf("Expected %d finished edges, but got %d", counts.FinishedActions, c.FinishedActions) 52*333d2b36SAndroid Build Coastguard Worker } 53*333d2b36SAndroid Build Coastguard Worker} 54*333d2b36SAndroid Build Coastguard Worker 55*333d2b36SAndroid Build Coastguard Workerfunc TestBasicUse(t *testing.T) { 56*333d2b36SAndroid Build Coastguard Worker status := &Status{} 57*333d2b36SAndroid Build Coastguard Worker counts := &counterOutput{} 58*333d2b36SAndroid Build Coastguard Worker status.AddOutput(counts) 59*333d2b36SAndroid Build Coastguard Worker s := status.StartTool() 60*333d2b36SAndroid Build Coastguard Worker 61*333d2b36SAndroid Build Coastguard Worker s.SetTotalActions(2) 62*333d2b36SAndroid Build Coastguard Worker 63*333d2b36SAndroid Build Coastguard Worker a := &Action{} 64*333d2b36SAndroid Build Coastguard Worker s.StartAction(a) 65*333d2b36SAndroid Build Coastguard Worker 66*333d2b36SAndroid Build Coastguard Worker counts.Expect(t, Counts{ 67*333d2b36SAndroid Build Coastguard Worker TotalActions: 2, 68*333d2b36SAndroid Build Coastguard Worker RunningActions: 1, 69*333d2b36SAndroid Build Coastguard Worker StartedActions: 1, 70*333d2b36SAndroid Build Coastguard Worker FinishedActions: 0, 71*333d2b36SAndroid Build Coastguard Worker }) 72*333d2b36SAndroid Build Coastguard Worker 73*333d2b36SAndroid Build Coastguard Worker s.FinishAction(ActionResult{Action: a}) 74*333d2b36SAndroid Build Coastguard Worker 75*333d2b36SAndroid Build Coastguard Worker counts.Expect(t, Counts{ 76*333d2b36SAndroid Build Coastguard Worker TotalActions: 2, 77*333d2b36SAndroid Build Coastguard Worker RunningActions: 0, 78*333d2b36SAndroid Build Coastguard Worker StartedActions: 1, 79*333d2b36SAndroid Build Coastguard Worker FinishedActions: 1, 80*333d2b36SAndroid Build Coastguard Worker }) 81*333d2b36SAndroid Build Coastguard Worker 82*333d2b36SAndroid Build Coastguard Worker a = &Action{} 83*333d2b36SAndroid Build Coastguard Worker s.StartAction(a) 84*333d2b36SAndroid Build Coastguard Worker 85*333d2b36SAndroid Build Coastguard Worker counts.Expect(t, Counts{ 86*333d2b36SAndroid Build Coastguard Worker TotalActions: 2, 87*333d2b36SAndroid Build Coastguard Worker RunningActions: 1, 88*333d2b36SAndroid Build Coastguard Worker StartedActions: 2, 89*333d2b36SAndroid Build Coastguard Worker FinishedActions: 1, 90*333d2b36SAndroid Build Coastguard Worker }) 91*333d2b36SAndroid Build Coastguard Worker 92*333d2b36SAndroid Build Coastguard Worker s.FinishAction(ActionResult{Action: a}) 93*333d2b36SAndroid Build Coastguard Worker 94*333d2b36SAndroid Build Coastguard Worker counts.Expect(t, Counts{ 95*333d2b36SAndroid Build Coastguard Worker TotalActions: 2, 96*333d2b36SAndroid Build Coastguard Worker RunningActions: 0, 97*333d2b36SAndroid Build Coastguard Worker StartedActions: 2, 98*333d2b36SAndroid Build Coastguard Worker FinishedActions: 2, 99*333d2b36SAndroid Build Coastguard Worker }) 100*333d2b36SAndroid Build Coastguard Worker} 101*333d2b36SAndroid Build Coastguard Worker 102*333d2b36SAndroid Build Coastguard Worker// For when a tool claims to have 2 actions, but finishes after one. 103*333d2b36SAndroid Build Coastguard Workerfunc TestFinishEarly(t *testing.T) { 104*333d2b36SAndroid Build Coastguard Worker status := &Status{} 105*333d2b36SAndroid Build Coastguard Worker counts := &counterOutput{} 106*333d2b36SAndroid Build Coastguard Worker status.AddOutput(counts) 107*333d2b36SAndroid Build Coastguard Worker s := status.StartTool() 108*333d2b36SAndroid Build Coastguard Worker 109*333d2b36SAndroid Build Coastguard Worker s.SetTotalActions(2) 110*333d2b36SAndroid Build Coastguard Worker 111*333d2b36SAndroid Build Coastguard Worker a := &Action{} 112*333d2b36SAndroid Build Coastguard Worker s.StartAction(a) 113*333d2b36SAndroid Build Coastguard Worker s.FinishAction(ActionResult{Action: a}) 114*333d2b36SAndroid Build Coastguard Worker s.Finish() 115*333d2b36SAndroid Build Coastguard Worker 116*333d2b36SAndroid Build Coastguard Worker s = status.StartTool() 117*333d2b36SAndroid Build Coastguard Worker s.SetTotalActions(2) 118*333d2b36SAndroid Build Coastguard Worker 119*333d2b36SAndroid Build Coastguard Worker a = &Action{} 120*333d2b36SAndroid Build Coastguard Worker s.StartAction(a) 121*333d2b36SAndroid Build Coastguard Worker 122*333d2b36SAndroid Build Coastguard Worker counts.Expect(t, Counts{ 123*333d2b36SAndroid Build Coastguard Worker TotalActions: 3, 124*333d2b36SAndroid Build Coastguard Worker RunningActions: 1, 125*333d2b36SAndroid Build Coastguard Worker StartedActions: 2, 126*333d2b36SAndroid Build Coastguard Worker FinishedActions: 1, 127*333d2b36SAndroid Build Coastguard Worker }) 128*333d2b36SAndroid Build Coastguard Worker} 129*333d2b36SAndroid Build Coastguard Worker 130*333d2b36SAndroid Build Coastguard Worker// For when a tool claims to have 1 action, but starts two. 131*333d2b36SAndroid Build Coastguard Workerfunc TestExtraActions(t *testing.T) { 132*333d2b36SAndroid Build Coastguard Worker status := &Status{} 133*333d2b36SAndroid Build Coastguard Worker counts := &counterOutput{} 134*333d2b36SAndroid Build Coastguard Worker status.AddOutput(counts) 135*333d2b36SAndroid Build Coastguard Worker s := status.StartTool() 136*333d2b36SAndroid Build Coastguard Worker 137*333d2b36SAndroid Build Coastguard Worker s.SetTotalActions(1) 138*333d2b36SAndroid Build Coastguard Worker 139*333d2b36SAndroid Build Coastguard Worker s.StartAction(&Action{}) 140*333d2b36SAndroid Build Coastguard Worker s.StartAction(&Action{}) 141*333d2b36SAndroid Build Coastguard Worker 142*333d2b36SAndroid Build Coastguard Worker counts.Expect(t, Counts{ 143*333d2b36SAndroid Build Coastguard Worker TotalActions: 2, 144*333d2b36SAndroid Build Coastguard Worker RunningActions: 2, 145*333d2b36SAndroid Build Coastguard Worker StartedActions: 2, 146*333d2b36SAndroid Build Coastguard Worker FinishedActions: 0, 147*333d2b36SAndroid Build Coastguard Worker }) 148*333d2b36SAndroid Build Coastguard Worker} 149*333d2b36SAndroid Build Coastguard Worker 150*333d2b36SAndroid Build Coastguard Worker// When a tool calls Finish() with a running Action 151*333d2b36SAndroid Build Coastguard Workerfunc TestRunningWhenFinished(t *testing.T) { 152*333d2b36SAndroid Build Coastguard Worker status := &Status{} 153*333d2b36SAndroid Build Coastguard Worker counts := &counterOutput{} 154*333d2b36SAndroid Build Coastguard Worker status.AddOutput(counts) 155*333d2b36SAndroid Build Coastguard Worker 156*333d2b36SAndroid Build Coastguard Worker s := status.StartTool() 157*333d2b36SAndroid Build Coastguard Worker s.SetTotalActions(1) 158*333d2b36SAndroid Build Coastguard Worker s.StartAction(&Action{}) 159*333d2b36SAndroid Build Coastguard Worker s.Finish() 160*333d2b36SAndroid Build Coastguard Worker 161*333d2b36SAndroid Build Coastguard Worker s = status.StartTool() 162*333d2b36SAndroid Build Coastguard Worker s.SetTotalActions(1) 163*333d2b36SAndroid Build Coastguard Worker s.StartAction(&Action{}) 164*333d2b36SAndroid Build Coastguard Worker 165*333d2b36SAndroid Build Coastguard Worker counts.Expect(t, Counts{ 166*333d2b36SAndroid Build Coastguard Worker TotalActions: 2, 167*333d2b36SAndroid Build Coastguard Worker RunningActions: 2, 168*333d2b36SAndroid Build Coastguard Worker StartedActions: 2, 169*333d2b36SAndroid Build Coastguard Worker FinishedActions: 0, 170*333d2b36SAndroid Build Coastguard Worker }) 171*333d2b36SAndroid Build Coastguard Worker} 172