|
14 | 14 | package v1
|
15 | 15 |
|
16 | 16 | import (
|
| 17 | + "io/ioutil" |
| 18 | + "path/filepath" |
17 | 19 | "testing"
|
18 | 20 |
|
| 21 | + "github.com/GoogleContainerTools/kpt/internal/types" |
| 22 | + "github.com/stretchr/testify/assert" |
19 | 23 | "sigs.k8s.io/kustomize/kyaml/yaml"
|
20 | 24 | )
|
21 | 25 |
|
@@ -397,3 +401,123 @@ kind: Kustomization
|
397 | 401 | })
|
398 | 402 | }
|
399 | 403 | }
|
| 404 | + |
| 405 | +func TestGetValidatedFnConfigFromPath(t *testing.T) { |
| 406 | + testcases := []struct { |
| 407 | + name string |
| 408 | + input string |
| 409 | + exp string |
| 410 | + errMsg string |
| 411 | + }{ |
| 412 | + { |
| 413 | + name: "normal resource", |
| 414 | + input: ` |
| 415 | +apiVersion: v1 |
| 416 | +kind: Service |
| 417 | +metadata: |
| 418 | + name: myService |
| 419 | +spec: |
| 420 | + selector: |
| 421 | + app: bar |
| 422 | +`, |
| 423 | + exp: `apiVersion: v1 |
| 424 | +kind: Service |
| 425 | +metadata: |
| 426 | + name: myService |
| 427 | + annotations: |
| 428 | + config.kubernetes.io/index: '0' |
| 429 | + internal.config.kubernetes.io/index: '0' |
| 430 | + internal.config.kubernetes.io/seqindent: 'compact' |
| 431 | +spec: |
| 432 | + selector: |
| 433 | + app: bar |
| 434 | +`, |
| 435 | + }, |
| 436 | + { |
| 437 | + name: "multiple resources wrapped in List", |
| 438 | + input: ` |
| 439 | +apiVersion: v1 |
| 440 | +kind: List |
| 441 | +metadata: |
| 442 | + name: upsert-multiple-resources-config |
| 443 | +items: |
| 444 | +- apiVersion: v1 |
| 445 | + kind: Service |
| 446 | + metadata: |
| 447 | + name: myService |
| 448 | + namespace: mySpace |
| 449 | + spec: |
| 450 | + selector: |
| 451 | + app: bar |
| 452 | +- apiVersion: apps/v1 |
| 453 | + kind: Deployment |
| 454 | + metadata: |
| 455 | + name: myDeployment2 |
| 456 | + namespace: mySpace |
| 457 | + spec: |
| 458 | + replicas: 10 |
| 459 | +`, |
| 460 | + exp: `apiVersion: v1 |
| 461 | +kind: List |
| 462 | +metadata: |
| 463 | + name: upsert-multiple-resources-config |
| 464 | + annotations: |
| 465 | + config.kubernetes.io/index: '0' |
| 466 | + internal.config.kubernetes.io/index: '0' |
| 467 | + internal.config.kubernetes.io/seqindent: 'compact' |
| 468 | +items: |
| 469 | +- apiVersion: v1 |
| 470 | + kind: Service |
| 471 | + metadata: |
| 472 | + name: myService |
| 473 | + namespace: mySpace |
| 474 | + spec: |
| 475 | + selector: |
| 476 | + app: bar |
| 477 | +- apiVersion: apps/v1 |
| 478 | + kind: Deployment |
| 479 | + metadata: |
| 480 | + name: myDeployment2 |
| 481 | + namespace: mySpace |
| 482 | + spec: |
| 483 | + replicas: 10 |
| 484 | +`, |
| 485 | + }, |
| 486 | + { |
| 487 | + name: "error for multiple resources", |
| 488 | + input: ` |
| 489 | +apiVersion: v1 |
| 490 | +kind: Service |
| 491 | +metadata: |
| 492 | + name: myService |
| 493 | + namespace: mySpace |
| 494 | +--- |
| 495 | +apiVersion: v1 |
| 496 | +kind: Service |
| 497 | +metadata: |
| 498 | + name: myService2 |
| 499 | + namespace: mySpace |
| 500 | +`, |
| 501 | + errMsg: `functionConfig "f1.yaml" must not contain more than one config, got 2`, |
| 502 | + }, |
| 503 | + } |
| 504 | + for _, tc := range testcases { |
| 505 | + tc := tc |
| 506 | + t.Run(tc.name, func(t *testing.T) { |
| 507 | + d, err := ioutil.TempDir("", "") |
| 508 | + assert.NoError(t, err) |
| 509 | + err = ioutil.WriteFile(filepath.Join(d, "f1.yaml"), []byte(tc.input), 0700) |
| 510 | + assert.NoError(t, err) |
| 511 | + got, err := GetValidatedFnConfigFromPath(types.UniquePath(d), "f1.yaml") |
| 512 | + if tc.errMsg != "" { |
| 513 | + assert.Error(t, err) |
| 514 | + assert.Equal(t, tc.errMsg, err.Error()) |
| 515 | + return |
| 516 | + } |
| 517 | + assert.NoError(t, err) |
| 518 | + actual, err := got.String() |
| 519 | + assert.NoError(t, err) |
| 520 | + assert.Equal(t, tc.exp, actual) |
| 521 | + }) |
| 522 | + } |
| 523 | +} |
0 commit comments