github.com/wmuizelaar/kpt@v0.0.0-20221018115725-bd564717b2ed/internal/util/update/replace_test.go (about) 1 // Copyright 2021 Google LLC 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 15 //nolint:dupl 16 package update_test 17 18 import ( 19 "path/filepath" 20 "testing" 21 22 "github.com/GoogleContainerTools/kpt/internal/testutil" 23 "github.com/GoogleContainerTools/kpt/internal/testutil/pkgbuilder" 24 . "github.com/GoogleContainerTools/kpt/internal/util/update" 25 "github.com/stretchr/testify/assert" 26 ) 27 28 func TestUpdate_Replace(t *testing.T) { 29 testCases := map[string]struct { 30 origin *pkgbuilder.RootPkg 31 local *pkgbuilder.RootPkg 32 updated *pkgbuilder.RootPkg 33 relPackagePath string 34 isRoot bool 35 expected *pkgbuilder.RootPkg 36 }{ 37 "updates local subpackages": { 38 origin: pkgbuilder.NewRootPkg(). 39 WithResource(pkgbuilder.DeploymentResource). 40 WithSubPackages( 41 pkgbuilder.NewSubPkg("foo"). 42 WithKptfile(). 43 WithResource(pkgbuilder.DeploymentResource), 44 ), 45 local: pkgbuilder.NewRootPkg(). 46 WithKptfile( 47 pkgbuilder.NewKptfile(). 48 WithUpstream(kptRepo, "/", "master", "force-delete-replace"). 49 WithUpstreamLock(kptRepo, "/", "master", "abc123"), 50 ). 51 WithResource(pkgbuilder.DeploymentResource). 52 WithSubPackages( 53 pkgbuilder.NewSubPkg("foo"). 54 WithKptfile(). 55 WithResource(pkgbuilder.DeploymentResource), 56 ), 57 updated: pkgbuilder.NewRootPkg(). 58 WithResource(pkgbuilder.ConfigMapResource). 59 WithSubPackages( 60 pkgbuilder.NewSubPkg("foo"). 61 WithKptfile(). 62 WithResource(pkgbuilder.ConfigMapResource), 63 ), 64 relPackagePath: "/", 65 isRoot: true, 66 expected: pkgbuilder.NewRootPkg(). 67 WithKptfile( 68 pkgbuilder.NewKptfile(). 69 WithUpstream(kptRepo, "/", "master", "force-delete-replace"). 70 WithUpstreamLock(kptRepo, "/", "master", "abc123"), 71 ). 72 WithResource(pkgbuilder.ConfigMapResource). 73 WithSubPackages( 74 pkgbuilder.NewSubPkg("foo"). 75 WithKptfile(). 76 WithResource(pkgbuilder.ConfigMapResource), 77 ), 78 }, 79 "doesn't update remote subpackages": { 80 origin: pkgbuilder.NewRootPkg(). 81 WithResource(pkgbuilder.DeploymentResource). 82 WithSubPackages( 83 pkgbuilder.NewSubPkg("bar"). 84 WithKptfile( 85 pkgbuilder.NewKptfile(). 86 WithUpstream(kptRepo, "/", "main", "force-delete-replace"), 87 ). 88 WithResource(pkgbuilder.DeploymentResource), 89 ), 90 local: pkgbuilder.NewRootPkg(). 91 WithKptfile( 92 pkgbuilder.NewKptfile(). 93 WithUpstream(kptRepo, "/", "master", "force-delete-replace"). 94 WithUpstreamLock(kptRepo, "/", "master", "abc123"), 95 ). 96 WithResource(pkgbuilder.DeploymentResource). 97 WithSubPackages( 98 pkgbuilder.NewSubPkg("bar"). 99 WithKptfile( 100 pkgbuilder.NewKptfile(). 101 WithUpstream(kptRepo, "/", "main", "force-delete-replace"), 102 ). 103 WithResource(pkgbuilder.DeploymentResource), 104 ), 105 updated: pkgbuilder.NewRootPkg(). 106 WithResource(pkgbuilder.ConfigMapResource). 107 WithSubPackages( 108 pkgbuilder.NewSubPkg("bar"). 109 WithKptfile( 110 pkgbuilder.NewKptfile(). 111 WithUpstream(kptRepo, "/", "main", "force-delete-replace"), 112 ). 113 WithResource(pkgbuilder.ConfigMapResource), 114 ), 115 relPackagePath: "/", 116 isRoot: true, 117 expected: pkgbuilder.NewRootPkg(). 118 WithKptfile( 119 pkgbuilder.NewKptfile(). 120 WithUpstream(kptRepo, "/", "master", "force-delete-replace"). 121 WithUpstreamLock(kptRepo, "/", "master", "abc123"), 122 ). 123 WithResource(pkgbuilder.ConfigMapResource). 124 WithSubPackages( 125 pkgbuilder.NewSubPkg("bar"). 126 WithKptfile( 127 pkgbuilder.NewKptfile(). 128 WithUpstream(kptRepo, "/", "main", "force-delete-replace"), 129 ). 130 WithResource(pkgbuilder.DeploymentResource), 131 ), 132 }, 133 "doesn't update the Kptfile": { 134 origin: pkgbuilder.NewRootPkg(). 135 WithKptfile( 136 pkgbuilder.NewKptfile(). 137 WithUpstream(kptRepo, "/", "main", "force-delete-replace"), 138 ). 139 WithResource(pkgbuilder.DeploymentResource), 140 local: pkgbuilder.NewRootPkg(). 141 WithKptfile( 142 pkgbuilder.NewKptfile(). 143 WithUpstream(kptRepo, "/", "master", "force-delete-replace"). 144 WithUpstreamLock(kptRepo, "/", "master", "abc123"), 145 ). 146 WithResource(pkgbuilder.DeploymentResource), 147 updated: pkgbuilder.NewRootPkg(). 148 WithKptfile( 149 pkgbuilder.NewKptfile(). 150 WithUpstream(kptRepo, "/", "v1.0", "force-delete-replace"), 151 ). 152 WithResource(pkgbuilder.ConfigMapResource), 153 relPackagePath: "/", 154 isRoot: true, 155 expected: pkgbuilder.NewRootPkg(). 156 WithKptfile( 157 pkgbuilder.NewKptfile(). 158 WithUpstream(kptRepo, "/", "master", "force-delete-replace"). 159 WithUpstreamLock(kptRepo, "/", "master", "abc123"), 160 ). 161 WithResource(pkgbuilder.ConfigMapResource), 162 }, 163 } 164 165 for tn, tc := range testCases { 166 t.Run(tn, func(t *testing.T) { 167 repos := testutil.EmptyReposInfo 168 origin := tc.origin.ExpandPkg(t, repos) 169 local := tc.local.ExpandPkg(t, repos) 170 updated := tc.updated.ExpandPkg(t, repos) 171 expected := tc.expected.ExpandPkg(t, repos) 172 173 updater := &ReplaceUpdater{} 174 175 err := updater.Update(Options{ 176 RelPackagePath: tc.relPackagePath, 177 OriginPath: filepath.Join(origin, tc.relPackagePath), 178 LocalPath: filepath.Join(local, tc.relPackagePath), 179 UpdatedPath: filepath.Join(updated, tc.relPackagePath), 180 IsRoot: tc.isRoot, 181 }) 182 if !assert.NoError(t, err) { 183 t.FailNow() 184 } 185 186 testutil.KptfileAwarePkgEqual(t, local, expected, false) 187 }) 188 } 189 }