sigs.k8s.io/cluster-api@v1.7.1/cmd/clusterctl/client/repository/repository_memory_test.go (about) 1 /* 2 Copyright 2021 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 repository 18 19 import ( 20 "context" 21 "testing" 22 23 . "github.com/onsi/gomega" 24 ) 25 26 func Test_memoryRepository(t *testing.T) { 27 metadata := ` 28 apiVersion: clusterctl.cluster.x-k8s.io/v1alpha3 29 kind: Metadata 30 releaseSeries: 31 - major: 1 32 minor: 0 33 contract: v1alpha1 34 - major: 2 35 minor: 0 36 contract: v1alpha3` 37 38 type want struct { 39 versions []string 40 defaultVersion []byte 41 latestVersion []byte 42 } 43 tests := []struct { 44 name string 45 repo *MemoryRepository 46 fileVersion string 47 want want 48 }{ 49 { 50 name: "Get the only release available from release directory", 51 repo: NewMemoryRepository(). 52 WithFile("v1.0.0", "metadata.yaml", []byte(metadata)). 53 WithFile("v1.0.0", "components.yaml", []byte("v1.0.0")). 54 WithPaths("", "components.yaml"), 55 want: want{ 56 versions: []string{"v1.0.0"}, 57 defaultVersion: []byte("v1.0.0"), 58 latestVersion: []byte("v1.0.0"), 59 }, 60 }, 61 { 62 name: "WithDefaultVersion overrides initial version", 63 repo: NewMemoryRepository(). 64 WithFile("v1.0.0", "metadata.yaml", []byte(metadata)). 65 WithFile("v1.0.0", "components.yaml", []byte("v1.0.0")). 66 WithFile("v2.0.0", "metadata.yaml", []byte(metadata)). 67 WithFile("v2.0.0", "components.yaml", []byte("v2.0.0")). 68 WithPaths("", "components.yaml"). 69 WithDefaultVersion("v2.0.0"), 70 want: want{ 71 versions: []string{"v1.0.0", "v2.0.0"}, 72 defaultVersion: []byte("v2.0.0"), 73 latestVersion: []byte("v2.0.0"), 74 }, 75 }, 76 { 77 name: "GetFile can use latest as default", 78 repo: NewMemoryRepository(). 79 WithFile("v1.0.0", "metadata.yaml", []byte(metadata)). 80 WithFile("v1.0.0", "components.yaml", []byte("v1.0.0")). 81 WithFile("v2.0.0", "metadata.yaml", []byte(metadata)). 82 WithFile("v2.0.0", "components.yaml", []byte("v2.0.0")). 83 WithPaths("", "components.yaml"). 84 WithDefaultVersion("latest"), 85 want: want{ 86 versions: []string{"v1.0.0", "v2.0.0"}, 87 defaultVersion: []byte("v2.0.0"), 88 latestVersion: []byte("v2.0.0"), 89 }, 90 }, 91 { 92 name: "Get all valid releases available from release directory", 93 repo: NewMemoryRepository(). 94 WithFile("v1.0.0", "components.yaml", []byte("v1.0.0")). 95 WithFile("v1.0.0", "metadata.yaml", []byte(metadata)). 96 WithFile("v1.0.1", "components.yaml", []byte("v1.0.1")). 97 WithFile("v1.0.1", "metadata.yaml", []byte(metadata)). 98 WithFile("v2.0.1", "components.yaml", []byte("v2.0.1")). 99 WithFile("v2.0.1", "metadata.yaml", []byte(metadata)). 100 WithFile("v2.0.2+exp.sha.5114f85", "components.yaml", []byte("v2.0.2+exp.sha.5114f85")). 101 WithFile("v2.0.2+exp.sha.5114f85", "metadata.yaml", []byte(metadata)). 102 WithFile("v2.0.3-alpha", "components.yaml", []byte("v2.0.3-alpha")). 103 WithFile("v2.0.3-alpha", "metadata.yaml", []byte(metadata)). 104 WithPaths("", "components.yaml"), 105 want: want{ 106 versions: []string{"v1.0.0", "v1.0.1", "v2.0.1", "v2.0.2+exp.sha.5114f85", "v2.0.3-alpha"}, 107 defaultVersion: []byte("v1.0.0"), 108 latestVersion: []byte("v2.0.2+exp.sha.5114f85"), 109 }, 110 }, 111 { 112 name: "Get pre-release", 113 repo: NewMemoryRepository(). 114 WithFile("v2.0.3-alpha", "components.yaml", []byte("v2.0.3-alpha")). 115 WithFile("v2.0.3-alpha", "metadata.yaml", []byte(metadata)). 116 WithPaths("", "components.yaml"), 117 want: want{ 118 versions: []string{"v2.0.3-alpha"}, 119 defaultVersion: []byte("v2.0.3-alpha"), 120 latestVersion: []byte("v2.0.3-alpha"), 121 }, 122 }, 123 } 124 for _, tt := range tests { 125 t.Run(tt.name, func(t *testing.T) { 126 g := NewWithT(t) 127 128 ctx := context.Background() 129 130 r := tt.repo 131 g.Expect(r.RootPath()).To(Equal("")) 132 133 g.Expect(r.GetFile(ctx, r.DefaultVersion(), r.ComponentsPath())).To(Equal(tt.want.defaultVersion)) 134 g.Expect(r.GetFile(ctx, "", r.ComponentsPath())).To(Equal(tt.want.defaultVersion)) 135 g.Expect(r.GetFile(ctx, "latest", r.ComponentsPath())).To(Equal(tt.want.latestVersion)) 136 137 got, err := r.GetVersions(ctx) 138 g.Expect(err).ToNot(HaveOccurred()) 139 g.Expect(got).To(ConsistOf(tt.want.versions)) 140 }) 141 } 142 }