diff --git a/cmd/flux/create_source_oci_test.go b/cmd/flux/create_source_oci_test.go new file mode 100644 index 00000000..027c1789 --- /dev/null +++ b/cmd/flux/create_source_oci_test.go @@ -0,0 +1,61 @@ +/* +Copyright 2022 The Flux authors + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package main + +import ( + "testing" +) + +func TestCreateSourceOCI(t *testing.T) { + tests := []struct { + name string + args string + assertFunc assertFunc + }{ + { + name: "NoArgs", + args: "create source oci", + assertFunc: assertError("name is required"), + }, + { + name: "NoURL", + args: "create source oci podinfo", + assertFunc: assertError("url is required"), + }, + { + name: "export manifest", + args: "create source oci podinfo --url=ghcr.io/stefanprodan/manifests/podinfo --tag=6.1.6 --interval 10m --export", + assertFunc: assertGoldenFile("./testdata/oci/export.golden"), + }, + { + name: "export manifest with secret", + args: "create source oci podinfo --url=ghcr.io/stefanprodan/manifests/podinfo --tag=6.1.6 --interval 10m --secret-ref=creds --export", + assertFunc: assertGoldenFile("./testdata/oci/export_with_secret.golden"), + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + cmd := cmdTestCase{ + args: tt.args, + assert: tt.assertFunc, + } + + cmd.runTestCmd(t) + }) + } +} diff --git a/cmd/flux/image_test.go b/cmd/flux/image_test.go index a0e0b257..155326fa 100644 --- a/cmd/flux/image_test.go +++ b/cmd/flux/image_test.go @@ -1,6 +1,22 @@ //go:build e2e // +build e2e +/* +Copyright 2022 The Flux authors + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + package main import "testing" diff --git a/cmd/flux/main_test.go b/cmd/flux/main_test.go index 50127de7..59568dee 100644 --- a/cmd/flux/main_test.go +++ b/cmd/flux/main_test.go @@ -388,6 +388,7 @@ func resetCmdArgs() { getArgs = GetFlags{} sourceHelmArgs = sourceHelmFlags{} secretGitArgs = NewSecretGitFlags() + *kubeconfigArgs.Namespace = rootArgs.defaults.Namespace } func isChangeError(err error) bool { diff --git a/cmd/flux/source_oci_test.go b/cmd/flux/source_oci_test.go new file mode 100644 index 00000000..568ac73e --- /dev/null +++ b/cmd/flux/source_oci_test.go @@ -0,0 +1,71 @@ +//go:build e2e +// +build e2e + +/* +Copyright 2022 The Flux authors + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package main + +import ( + "testing" +) + +func TestSourceOCI(t *testing.T) { + cases := []struct { + args string + goldenFile string + }{ + { + "create source oci thrfg --url=ghcr.io/stefanprodan/manifests/podinfo --tag=6.1.6 --interval 10m", + "testdata/oci/create_source_oci.golden", + }, + { + "get source oci thrfg", + "testdata/oci/get_oci.golden", + }, + { + "reconcile source oci thrfg", + "testdata/oci/reconcile_oci.golden", + }, + { + "suspend source oci thrfg", + "testdata/oci/suspend_oci.golden", + }, + { + "resume source oci thrfg", + "testdata/oci/resume_oci.golden", + }, + { + "delete source oci thrfg --silent", + "testdata/oci/delete_oci.golden", + }, + } + + namespace := allocateNamespace("oci-test") + del, err := setupTestNamespace(namespace) + if err != nil { + t.Fatal(err) + } + defer del() + + for _, tc := range cases { + cmd := cmdTestCase{ + args: tc.args + " -n=" + namespace, + assert: assertGoldenTemplateFile(tc.goldenFile, map[string]string{"ns": namespace}), + } + cmd.runTestCmd(t) + } +} diff --git a/cmd/flux/testdata/oci/create_source_oci.golden b/cmd/flux/testdata/oci/create_source_oci.golden new file mode 100644 index 00000000..9cca4138 --- /dev/null +++ b/cmd/flux/testdata/oci/create_source_oci.golden @@ -0,0 +1,5 @@ +► applying OCIRepository +✔ OCIRepository created +◎ waiting for OCIRepository reconciliation +✔ OCIRepository reconciliation completed +✔ fetched revision: 3b6cdcc7adcc9a84d3214ee1c029543789d90b5ae69debe9efa3f66e982875de diff --git a/cmd/flux/testdata/oci/delete_oci.golden b/cmd/flux/testdata/oci/delete_oci.golden new file mode 100644 index 00000000..8e8599fa --- /dev/null +++ b/cmd/flux/testdata/oci/delete_oci.golden @@ -0,0 +1,2 @@ +► deleting source oci thrfg in {{ .ns }} namespace +✔ source oci deleted diff --git a/cmd/flux/testdata/oci/export.golden b/cmd/flux/testdata/oci/export.golden new file mode 100644 index 00000000..82d5fa19 --- /dev/null +++ b/cmd/flux/testdata/oci/export.golden @@ -0,0 +1,12 @@ +--- +apiVersion: source.toolkit.fluxcd.io/v1beta2 +kind: OCIRepository +metadata: + name: podinfo + namespace: flux-system +spec: + interval: 10m0s + ref: + tag: 6.1.6 + url: ghcr.io/stefanprodan/manifests/podinfo + diff --git a/cmd/flux/testdata/oci/export_with_secret.golden b/cmd/flux/testdata/oci/export_with_secret.golden new file mode 100644 index 00000000..79fd98a5 --- /dev/null +++ b/cmd/flux/testdata/oci/export_with_secret.golden @@ -0,0 +1,14 @@ +--- +apiVersion: source.toolkit.fluxcd.io/v1beta2 +kind: OCIRepository +metadata: + name: podinfo + namespace: flux-system +spec: + interval: 10m0s + ref: + tag: 6.1.6 + secretRef: + name: creds + url: ghcr.io/stefanprodan/manifests/podinfo + diff --git a/cmd/flux/testdata/oci/get_oci.golden b/cmd/flux/testdata/oci/get_oci.golden new file mode 100644 index 00000000..f4fa8333 --- /dev/null +++ b/cmd/flux/testdata/oci/get_oci.golden @@ -0,0 +1,2 @@ +NAME REVISION SUSPENDED READY MESSAGE +thrfg 3b6cdcc7adcc9a84d3214ee1c029543789d90b5ae69debe9efa3f66e982875de False True stored artifact for revision '3b6cdcc7adcc9a84d3214ee1c029543789d90b5ae69debe9efa3f66e982875de' diff --git a/cmd/flux/testdata/oci/reconcile_oci.golden b/cmd/flux/testdata/oci/reconcile_oci.golden new file mode 100644 index 00000000..0c258819 --- /dev/null +++ b/cmd/flux/testdata/oci/reconcile_oci.golden @@ -0,0 +1,4 @@ +► annotating OCIRepository thrfg in {{ .ns }} namespace +✔ OCIRepository annotated +◎ waiting for OCIRepository reconciliation +✔ fetched revision 3b6cdcc7adcc9a84d3214ee1c029543789d90b5ae69debe9efa3f66e982875de diff --git a/cmd/flux/testdata/oci/resume_oci.golden b/cmd/flux/testdata/oci/resume_oci.golden new file mode 100644 index 00000000..467514e7 --- /dev/null +++ b/cmd/flux/testdata/oci/resume_oci.golden @@ -0,0 +1,5 @@ +► resuming source oci thrfg in {{ .ns }} namespace +✔ source oci resumed +◎ waiting for OCIRepository reconciliation +✔ OCIRepository reconciliation completed +✔ fetched revision 3b6cdcc7adcc9a84d3214ee1c029543789d90b5ae69debe9efa3f66e982875de diff --git a/cmd/flux/testdata/oci/suspend_oci.golden b/cmd/flux/testdata/oci/suspend_oci.golden new file mode 100644 index 00000000..40a0420e --- /dev/null +++ b/cmd/flux/testdata/oci/suspend_oci.golden @@ -0,0 +1,2 @@ +► suspending source oci thrfg in {{ .ns }} namespace +✔ source oci suspended diff --git a/go.sum b/go.sum index c6f2a982..05ddba2a 100644 --- a/go.sum +++ b/go.sum @@ -264,8 +264,8 @@ github.com/fluxcd/image-automation-controller/api v0.23.4 h1:MR7TKGxTaFBObyul7ww github.com/fluxcd/image-automation-controller/api v0.23.4/go.mod h1:wTxI65xywGEULsKR+eCw0H9uNHqSlISYYeozYIRPPx8= github.com/fluxcd/image-reflector-controller/api v0.19.2 h1:ZWM+v05M/f01Q/MHuasQWYY2EtD9B/q4CsewK01ROrU= github.com/fluxcd/image-reflector-controller/api v0.19.2/go.mod h1:WvPujFOXzWttkETUxkCgP9BesCTAfVYzgCeZXu43nY4= -github.com/fluxcd/kustomize-controller/api v0.26.2 h1:ll54Lhc/8mWQmyveLZvlo/aMgBrdctO3dL/EivT5Qik= -github.com/fluxcd/kustomize-controller/api v0.26.2/go.mod h1:f16v3IErWGQJ0WXtpOW3ATjFukz/KhbkanqS9ZTM8ks= +github.com/fluxcd/kustomize-controller/api v0.26.2-0.20220621190919-7681bda98076 h1:rsvWmqJTWRYb/DJvKA5QH6P8ctNZaH5TCg7rM/8qmec= +github.com/fluxcd/kustomize-controller/api v0.26.2-0.20220621190919-7681bda98076/go.mod h1:f16v3IErWGQJ0WXtpOW3ATjFukz/KhbkanqS9ZTM8ks= github.com/fluxcd/notification-controller/api v0.24.0 h1:pvLcCD1HT+x0Hup8VLfDrVGFDK33oJKNC7WX6mtEEh0= github.com/fluxcd/notification-controller/api v0.24.0/go.mod h1:pld1fyodxqdWPBr+Ez+kTixmtmO2o3o0I5Zf5wQDHGM= github.com/fluxcd/pkg/apis/acl v0.0.3 h1:Lw0ZHdpnO4G7Zy9KjrzwwBmDZQuy4qEjaU/RvA6k1lc=