...

Source file src/sigs.k8s.io/kustomize/api/provenance/provenance_test.go

Documentation: sigs.k8s.io/kustomize/api/provenance

     1  // Copyright 2022 The Kubernetes Authors.
     2  // SPDX-License-Identifier: Apache-2.0
     3  
     4  package provenance_test
     5  
     6  import (
     7  	"fmt"
     8  	"runtime/debug"
     9  	"testing"
    10  
    11  	"github.com/stretchr/testify/assert"
    12  	"sigs.k8s.io/kustomize/api/provenance"
    13  )
    14  
    15  const expectedBuildDateFromLdFlag = "2023-01-31T23:38:41Z"
    16  const expectedVersionFromLdFlag = "(test)"
    17  
    18  func TestGetProvenance(t *testing.T) {
    19  	p := provenance.GetProvenance()
    20  	// These are set by ldflags in our Makefile
    21  	assert.Equal(t, expectedVersionFromLdFlag, p.Version)
    22  	assert.Equal(t, expectedBuildDateFromLdFlag, p.BuildDate)
    23  	// This comes from BuildInfo, which is not set during go test: https://github.com/golang/go/issues/33976
    24  	assert.Equal(t, "unknown", p.GitCommit)
    25  
    26  	// These are set properly during go test
    27  	assert.NotEmpty(t, p.GoArch)
    28  	assert.NotEmpty(t, p.GoOs)
    29  	assert.Contains(t, p.GoVersion, "go1.")
    30  }
    31  
    32  func TestProvenance_Short(t *testing.T) {
    33  	p := provenance.GetProvenance()
    34  	// The version not set during go test, so this comes from an ldflag: https://github.com/golang/go/issues/33976
    35  	assert.Equal(t, fmt.Sprintf("{%s  %s   }", expectedVersionFromLdFlag, expectedBuildDateFromLdFlag), p.Short())
    36  
    37  	p.Version = "kustomize/v4.11.12"
    38  	assert.Equal(t, fmt.Sprintf("{kustomize/v4.11.12  %s   }", expectedBuildDateFromLdFlag), p.Short())
    39  }
    40  
    41  func TestProvenance_Semver(t *testing.T) {
    42  	p := provenance.GetProvenance()
    43  	// The version not set during go test
    44  	assert.Equal(t, "(test)", p.Semver())
    45  
    46  	p.Version = "kustomize/v4.11.12"
    47  	assert.Equal(t, "v4.11.12", p.Semver())
    48  }
    49  
    50  func mockModule(version string) debug.Module {
    51  	return debug.Module{
    52  		Path:    "sigs.k8s.io/kustomize/kustomize/v5",
    53  		Version: version,
    54  		Replace: nil,
    55  	}
    56  }
    57  
    58  func TestGetMostRecentTag(t *testing.T) {
    59  	tests := []struct {
    60  		name        string
    61  		module      debug.Module
    62  		isError     bool
    63  		expectedTag string
    64  	}{
    65  		{
    66  			name:        "Standard version",
    67  			module:      mockModule("v1.2.3"),
    68  			expectedTag: "v1.2.3",
    69  		},
    70  		{
    71  			name:        "Pseudo-version with patch increment",
    72  			module:      mockModule("v0.0.0-20210101010101-abcdefabcdef"),
    73  			expectedTag: "v0.0.0",
    74  		},
    75  		{
    76  			name:    "Invalid semver string",
    77  			module:  mockModule("invalid-version"),
    78  			isError: true,
    79  		},
    80  		{
    81  			name:        "Valid semver with patch increment and pre-release info",
    82  			module:      mockModule("v1.2.3-0.20210101010101-abcdefabcdef"),
    83  			expectedTag: "v1.2.2",
    84  		},
    85  		{
    86  			name:        "Valid semver no patch increment",
    87  			module:      mockModule("v1.2.0"),
    88  			expectedTag: "v1.2.0",
    89  		},
    90  	}
    91  
    92  	for _, tt := range tests {
    93  		t.Run(tt.name, func(t *testing.T) {
    94  			tag, err := provenance.GetMostRecentTag(tt.module)
    95  			if err != nil {
    96  				if !tt.isError {
    97  					assert.NoError(t, err)
    98  				}
    99  			} else {
   100  				assert.Equal(t, tt.expectedTag, tag)
   101  			}
   102  		})
   103  	}
   104  }
   105  

View as plain text