From c1508815b5d9e587b993da792e49968f08837d1f Mon Sep 17 00:00:00 2001 From: "Herrera, Josh (jh813b)" Date: Tue, 17 Aug 2021 16:10:27 -0700 Subject: [PATCH] Use bundle mock for document tests Removed unnecessary test bundle files and instead mocked the usage of all workflows related to bundles in these lines of code. Relates-To: #464 Relates-To: #465 Change-Id: I8f95e81e95b3215bf3994ae446fa66a9f818ebed --- pkg/document/dochelper_test.go | 132 +++++++++++++++++- .../dochelper/invalid/baremetalhost.yaml | 15 -- .../dochelper/invalid/kustomization.yaml | 3 - .../testdata/dochelper/invalid/secret.yaml | 26 ---- .../dochelper/valid/baremetalhost.yaml | 16 --- .../dochelper/valid/kustomization.yaml | 3 - .../testdata/dochelper/valid/secret.yaml | 28 ---- 7 files changed, 125 insertions(+), 98 deletions(-) delete mode 100644 pkg/document/testdata/dochelper/invalid/baremetalhost.yaml delete mode 100644 pkg/document/testdata/dochelper/invalid/kustomization.yaml delete mode 100644 pkg/document/testdata/dochelper/invalid/secret.yaml delete mode 100644 pkg/document/testdata/dochelper/valid/baremetalhost.yaml delete mode 100644 pkg/document/testdata/dochelper/valid/kustomization.yaml delete mode 100644 pkg/document/testdata/dochelper/valid/secret.yaml diff --git a/pkg/document/dochelper_test.go b/pkg/document/dochelper_test.go index e03844894..b2ba68315 100644 --- a/pkg/document/dochelper_test.go +++ b/pkg/document/dochelper_test.go @@ -15,22 +15,142 @@ package document_test import ( + "errors" "testing" "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/mock" "github.com/stretchr/testify/require" "opendev.org/airship/airshipctl/pkg/document" - "opendev.org/airship/airshipctl/testutil" + testdoc "opendev.org/airship/airshipctl/testutil/document" ) +const ( + bmhConfig = `apiVersion: metal3.io/v1alpha1 +kind: BareMetalHost +metadata: + labels: + airshipit.org/ephemeral-node: "true" + name: master-0 +spec: + online: true + bootMACAddress: 00:3b:8b:0c:ec:8b + bmc: + address: redfish+https://192.168.111.1/v1/Redfish/Foo/Bar + credentialsName: master-0-bmc + networkData: + name: master-0-networkdata + namespace: metal3 +` + networkConfig = `apiVersion: v1 +kind: Secret +metadata: + name: master-0-networkdata + namespace: metal3 +type: Opaque +data: + networkData: c29tZSBuZXR3b3JrIGRhdGEK +` + credsConfig = `apiVersion: v1 +kind: Secret +metadata: + name: master-0-bmc + namespace: metal3 +type: Opaque +stringData: + username: username + password: password +` + bmhConfigInvalid = `apiVersion: metal3.io/v1alpha1 +kind: BareMetalHost +metadata: + labels: + airshipit.org/ephemeral-node: "true" + name: master-0 +spec: + online: true + bootMACAddress: 00:3b:8b:0c:ec:8b + bmc: + credentialsName: master-0-bmc + networkData: + name: master-0-networkdata + namespace: metal3 +` + networkConfigInvalid = `apiVersion: v1 +kind: Secret +metadata: + name: master-0-networkdata + namespace: metal3 +type: Opaque +` + credsConfigInvalid = `apiVersion: v1 +kind: Secret +metadata: + name: master-0-bmc-invalid + namespace: metal3 +type: Opaque +stringData: + username: username + password: password +` +) + +func testBMHValidBundle(t *testing.T) document.Bundle { + bundle := &testdoc.MockBundle{} + bmhConfigDoc, err := document.NewDocumentFromBytes([]byte(bmhConfig)) + require.NoError(t, err) + networkSecretDoc, err := document.NewDocumentFromBytes([]byte(networkConfig)) + require.NoError(t, err) + credsSecretDoc, err := document.NewDocumentFromBytes([]byte(credsConfig)) + require.NoError(t, err) + + bundle.On("SelectOne", mock.MatchedBy(func(selector document.Selector) bool { + return selector.Kind == "BareMetalHost" + })). + Return(bmhConfigDoc, nil) + bundle.On("SelectOne", mock.MatchedBy(func(selector document.Selector) bool { + return selector.Kind == "Secret" && selector.Name == "master-0-networkdata" + })). + Return(networkSecretDoc, nil) + bundle.On("SelectOne", mock.MatchedBy(func(selector document.Selector) bool { + return selector.Kind == "Secret" && selector.Name == "master-0-bmc" + })). + Return(credsSecretDoc, nil) + + return bundle +} + +func testBMHInvalidBundle(t *testing.T) document.Bundle { + bundle := &testdoc.MockBundle{} + bmhConfigDocInvalid, err := document.NewDocumentFromBytes([]byte(bmhConfigInvalid)) + require.NoError(t, err) + networkSecretDocInvalid, err := document.NewDocumentFromBytes([]byte(networkConfigInvalid)) + require.NoError(t, err) + credsSecretDocInvalid, err := document.NewDocumentFromBytes([]byte(credsConfigInvalid)) + require.NoError(t, err) + + bundle.On("SelectOne", mock.MatchedBy(func(selector document.Selector) bool { + return selector.Kind == "BareMetalHost" + })). + Return(bmhConfigDocInvalid, nil) + bundle.On("SelectOne", mock.MatchedBy(func(selector document.Selector) bool { + return selector.Kind == "Secret" && selector.Name == "master-0-networkdata" + })). + Return(networkSecretDocInvalid, nil) + bundle.On("SelectOne", mock.MatchedBy(func(selector document.Selector) bool { + return selector.Kind == "Secret" && selector.Name == "master-0-bmc" + })). + Return(credsSecretDocInvalid, errors.New("error")) + + return bundle +} + func TestDocHelpers(t *testing.T) { require := require.New(t) assert := assert.New(t) - fSys := testutil.SetupTestFs(t, "testdata/dochelper/valid/") - bundle, err := document.NewBundle(fSys, "/") - require.NoError(err, "Building Bundle Failed") + bundle := testBMHValidBundle(t) require.NotNil(bundle) t.Run("GetBMHNetworkData", func(t *testing.T) { @@ -71,9 +191,7 @@ func TestDocHelpers(t *testing.T) { func TestDocHelpersNegativeCases(t *testing.T) { require := require.New(t) - fSys := testutil.SetupTestFs(t, "testdata/dochelper/invalid/") - bundle, err := document.NewBundle(fSys, "/") - require.NoError(err, "Building Bundle Failed") + bundle := testBMHInvalidBundle(t) require.NotNil(bundle) t.Run("GetBMHNetworkData", func(t *testing.T) { diff --git a/pkg/document/testdata/dochelper/invalid/baremetalhost.yaml b/pkg/document/testdata/dochelper/invalid/baremetalhost.yaml deleted file mode 100644 index 17af0c21b..000000000 --- a/pkg/document/testdata/dochelper/invalid/baremetalhost.yaml +++ /dev/null @@ -1,15 +0,0 @@ ---- -apiVersion: metal3.io/v1alpha1 -kind: BareMetalHost -metadata: - labels: - airshipit.org/ephemeral-node: "true" - name: master-0 -spec: - online: true - bootMACAddress: 00:3b:8b:0c:ec:8b - bmc: - credentialsName: master-0-bmc - networkData: - name: master-0-networkdata - namespace: metal3 diff --git a/pkg/document/testdata/dochelper/invalid/kustomization.yaml b/pkg/document/testdata/dochelper/invalid/kustomization.yaml deleted file mode 100644 index fe18b33ef..000000000 --- a/pkg/document/testdata/dochelper/invalid/kustomization.yaml +++ /dev/null @@ -1,3 +0,0 @@ -resources: - - baremetalhost.yaml - - secret.yaml diff --git a/pkg/document/testdata/dochelper/invalid/secret.yaml b/pkg/document/testdata/dochelper/invalid/secret.yaml deleted file mode 100644 index b81f2628e..000000000 --- a/pkg/document/testdata/dochelper/invalid/secret.yaml +++ /dev/null @@ -1,26 +0,0 @@ -apiVersion: v1 -kind: Secret -metadata: - labels: - airshipit.org/ephemeral-user-data: "true" - name: ephemeral-user-data -type: Opaque -stringData: - userData: cloud-init ---- -apiVersion: v1 -kind: Secret -metadata: - name: master-0-bmc-invalid - namespace: metal3 -type: Opaque -stringData: - username: username - password: password ---- -apiVersion: v1 -kind: Secret -metadata: - name: master-0-networkdata - namespace: metal3 -type: Opaque diff --git a/pkg/document/testdata/dochelper/valid/baremetalhost.yaml b/pkg/document/testdata/dochelper/valid/baremetalhost.yaml deleted file mode 100644 index f20e8c0da..000000000 --- a/pkg/document/testdata/dochelper/valid/baremetalhost.yaml +++ /dev/null @@ -1,16 +0,0 @@ ---- -apiVersion: metal3.io/v1alpha1 -kind: BareMetalHost -metadata: - labels: - airshipit.org/ephemeral-node: "true" - name: master-0 -spec: - online: true - bootMACAddress: 00:3b:8b:0c:ec:8b - bmc: - address: redfish+https://192.168.111.1/v1/Redfish/Foo/Bar - credentialsName: master-0-bmc - networkData: - name: master-0-networkdata - namespace: metal3 diff --git a/pkg/document/testdata/dochelper/valid/kustomization.yaml b/pkg/document/testdata/dochelper/valid/kustomization.yaml deleted file mode 100644 index 3935bdb09..000000000 --- a/pkg/document/testdata/dochelper/valid/kustomization.yaml +++ /dev/null @@ -1,3 +0,0 @@ -resources: - - baremetalhost.yaml - - secret.yaml \ No newline at end of file diff --git a/pkg/document/testdata/dochelper/valid/secret.yaml b/pkg/document/testdata/dochelper/valid/secret.yaml deleted file mode 100644 index a218442ec..000000000 --- a/pkg/document/testdata/dochelper/valid/secret.yaml +++ /dev/null @@ -1,28 +0,0 @@ -apiVersion: v1 -kind: Secret -metadata: - labels: - airshipit.org/ephemeral-user-data: "true" - name: ephemeral-user-data -type: Opaque -stringData: - userData: cloud-init ---- -apiVersion: v1 -kind: Secret -metadata: - name: master-0-bmc - namespace: metal3 -type: Opaque -stringData: - username: username - password: password ---- -apiVersion: v1 -kind: Secret -metadata: - name: master-0-networkdata - namespace: metal3 -type: Opaque -data: - networkData: c29tZSBuZXR3b3JrIGRhdGEK