istio
1// Copyright 2017 Istio Authors
2//
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
6//
7// http://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS,
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12// See the License for the specific language governing permissions and
13// limitations under the License.
14
15package version16
17import (18"fmt"19"runtime"20"testing"21)
22
23func TestNewBuildInfoFromOldString(t *testing.T) {24cases := []struct {25name string26in string27expectFail bool28want BuildInfo
29}{30{31"Correct input 1",32`Version: 1.0.033GitRevision: 3a136c90ec5e308f236e0d7ebb5c4c5e405217f4
34GolangVersion: go1.10.1
35BuildStatus: Clean
36GitTag: tag
37`,38false,39BuildInfo{40Version: "1.0.0",41GitRevision: "3a136c90ec5e308f236e0d7ebb5c4c5e405217f4",42GolangVersion: "go1.10.1",43BuildStatus: "Clean",44GitTag: "tag",45},46},47{48"Legacy input 1",49`Version: 1.0.050GitRevision: 3a136c90ec5e308f236e0d7ebb5c4c5e405217f4
51User: root@71a9470ea93c
52Host: foo
53Hub: docker.io/istio
54GolangVersion: go1.10.1
55BuildStatus: Clean
56GitTag: tag
57`,58false,59BuildInfo{60Version: "1.0.0",61GitRevision: "3a136c90ec5e308f236e0d7ebb5c4c5e405217f4",62GolangVersion: "go1.10.1",63BuildStatus: "Clean",64GitTag: "tag",65},66},67{68"Invalid input 1",69"Xuxa",70true,71BuildInfo{},72},73{74"Invalid input 2",75"Xuxa:Xuxo",76false,77BuildInfo{},78},79}80
81for _, v := range cases {82t.Run(v.name, func(t *testing.T) {83got, err := NewBuildInfoFromOldString(v.in)84if v.expectFail && err == nil {85t.Errorf("Expected failure, got success")86}87if !v.expectFail && err != nil {88t.Errorf("Got %v, expected success", err)89}90
91if got != v.want {92t.Errorf("Got %v, expected %v", got, v.want)93}94})95}96}
97
98func TestBuildInfo(t *testing.T) {99versionedString := fmt.Sprintf(`version.BuildInfo{Version:"unknown", GitRevision:"unknown", `+100`GolangVersion:"%s", BuildStatus:"unknown", GitTag:"unknown"}`,101runtime.Version())102
103cases := []struct {104name string105in BuildInfo
106want string107longWant string108}{109{110"all specified",111BuildInfo{112Version: "VER",113GitRevision: "GITREV",114GolangVersion: "GOLANGVER",115BuildStatus: "STATUS",116GitTag: "TAG",117},118"VER-GITREV-STATUS",119`version.BuildInfo{Version:"VER", GitRevision:"GITREV", GolangVersion:"GOLANGVER", ` +120`BuildStatus:"STATUS", GitTag:"TAG"}`,121},122
123{"init", Info, "unknown-unknown-unknown", versionedString},124}125
126for _, v := range cases {127t.Run(v.name, func(t *testing.T) {128if v.in.String() != v.want {129t.Errorf("got %s; want %s", v.in.String(), v.want)130}131
132if v.in.LongForm() != v.longWant {133t.Errorf("got\n%s\nwant\n%s", v.in.LongForm(), v.longWant)134}135})136}137}
138