@@ -8,11 +8,13 @@ import (
8
8
"fmt"
9
9
"reflect"
10
10
"testing"
11
+ "time"
11
12
12
13
"github.com/stretchr/testify/assert"
13
14
"github.com/stretchr/testify/require"
14
15
"sigs.k8s.io/kustomize/api/ifc"
15
16
. "sigs.k8s.io/kustomize/api/internal/target"
17
+ "sigs.k8s.io/kustomize/api/internal/utils"
16
18
"sigs.k8s.io/kustomize/api/pkg/loader"
17
19
"sigs.k8s.io/kustomize/api/provider"
18
20
"sigs.k8s.io/kustomize/api/resmap"
@@ -457,3 +459,80 @@ func TestDuplicateExternalTransformersForbidden(t *testing.T) {
457
459
require .Error (t , err )
458
460
assert .Contains (t , err .Error (), "may not add resource with an already registered id: ValueAnnotator.v1.transformers.example.co/notImportantHere" )
459
461
}
462
+
463
+ func TestErrorMessageForMalformedYAML (t * testing.T ) {
464
+ // These testcases verify behavior for the scenario described in
465
+ // https://github.com/kubernetes-sigs/kustomize/issues/5540 .
466
+
467
+ testcases := map [string ]struct {
468
+ loaderNewReturnsError error
469
+ shouldShowLoadError bool
470
+ }{
471
+ "shouldShowLoadError" : {
472
+ loaderNewReturnsError : utils .NewErrTimeOut (time .Second , "git init" ),
473
+ shouldShowLoadError : true ,
474
+ },
475
+ "shouldNotShowLoadError" : {
476
+ loaderNewReturnsError : NewErrMissingKustomization ("/should-fail/resources.yaml" ),
477
+ shouldShowLoadError : false ,
478
+ },
479
+ }
480
+
481
+ th := kusttest_test .MakeHarness (t )
482
+ th .WriteF ("/should-fail/kustomization.yaml" , `resources:
483
+ - resources.yaml
484
+ ` )
485
+ th .WriteF ("/should-fail/resources.yaml" , `<!DOCTYPE html>
486
+ <html class="html-devise-layout ui-light-gray" lang="en">
487
+ <head prefix="og: http://ogp.me/ns#">
488
+ <meta charset="utf-8">
489
+ ` )
490
+
491
+ for name , tc := range testcases {
492
+ t .Run (name , func (subT * testing.T ) {
493
+ ldrWrapper := func (baseLoader ifc.Loader ) ifc.Loader {
494
+ return loaderNewThrowsError {
495
+ baseLoader : baseLoader ,
496
+ newReturnsError : tc .loaderNewReturnsError ,
497
+ }
498
+ }
499
+ _ , err := makeAndLoadKustTargetWithLoaderOverride (t , th .GetFSys (), "/should-fail" , ldrWrapper ).AccumulateTarget ()
500
+ require .Error (t , err )
501
+ errString := err .Error ()
502
+ assert .Contains (t , errString , "accumulating resources from 'resources.yaml'" )
503
+ assert .Contains (t , errString , "MalformedYAMLError: yaml: line 3: mapping values are not allowed in this context" )
504
+ if tc .shouldShowLoadError {
505
+ assert .Regexp (t , `hit \w+ timeout running '` , errString )
506
+ } else {
507
+ assert .NotRegexp (t , `hit \w+ timeout running '` , errString )
508
+ }
509
+ })
510
+ }
511
+ }
512
+
513
+ // loaderNewReturnsError duplicates baseLoader's behavior except
514
+ // that New() returns the specified error.
515
+ type loaderNewThrowsError struct {
516
+ baseLoader ifc.Loader
517
+ newReturnsError error
518
+ }
519
+
520
+ func (l loaderNewThrowsError ) Repo () string {
521
+ return l .baseLoader .Repo ()
522
+ }
523
+
524
+ func (l loaderNewThrowsError ) Root () string {
525
+ return l .baseLoader .Root ()
526
+ }
527
+
528
+ func (l loaderNewThrowsError ) New (_ string ) (ifc.Loader , error ) {
529
+ return nil , l .newReturnsError
530
+ }
531
+
532
+ func (l loaderNewThrowsError ) Load (location string ) ([]byte , error ) {
533
+ return l .baseLoader .Load (location ) //nolint:wrapcheck // baseLoader's error is sufficient
534
+ }
535
+
536
+ func (l loaderNewThrowsError ) Cleanup () error {
537
+ return l .baseLoader .Cleanup () //nolint:wrapcheck // baseLoader's error is sufficient
538
+ }
0 commit comments