Merge "Use bundle mock for document tests"

This commit is contained in:
Zuul 2021-10-13 16:42:26 +00:00 committed by Gerrit Code Review
commit 4bce04c86b
7 changed files with 125 additions and 98 deletions

View File

@ -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) {

View File

@ -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

View File

@ -1,3 +0,0 @@
resources:
- baremetalhost.yaml
- secret.yaml

View File

@ -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

View File

@ -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

View File

@ -1,3 +0,0 @@
resources:
- baremetalhost.yaml
- secret.yaml

View File

@ -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