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  }