@ -19,9 +19,30 @@ import (
"github.com/stretchr/testify/require"
"opendev.org/airship/airshipctl/pkg/document"
)
type selectors struct {
userDataSelector document . Selector
userDataKey string
networkConfigSelector document . Selector
networkConfigKey string
}
"sigs.k8s.io/kustomize/api/resid"
"sigs.k8s.io/kustomize/api/types"
var (
emptySelectors = selectors {
userDataSelector : document . NewSelector ( ) ,
networkConfigSelector : document . NewSelector ( ) ,
}
validSelectors = selectors {
userDataSelector : document . NewSelector ( ) .
ByKind ( "Secret" ) .
ByLabel ( "airshipit.org/ephemeral-user-data in (True, true)" ) ,
userDataKey : defaultUserDataKey ,
networkConfigSelector : document . NewSelector ( ) .
ByKind ( "BareMetalHost" ) .
ByLabel ( "airshipit.org/ephemeral-node in (True, true)" ) ,
networkConfigKey : defaultNetworkConfigKey ,
}
)
func TestGetCloudData ( t * testing . T ) {
@ -29,35 +50,25 @@ func TestGetCloudData(t *testing.T) {
require . NoError ( t , err , "Building Bundle Failed" )
tests := [ ] struct {
labelFilter string
userDataSelector types . Selector
userDataKey string
networkConfigSelector types . Selector
networkConfigKey string
expectedUserData [ ] byte
expectedNetData [ ] byte
expectedErr error
name string
selectors
labelFilter string
expectedUserData [ ] byte
expectedNetData [ ] byte
expectedErr error
} {
{
labelFilter: "test=validdocset ",
userDataSelector: types . Selector { } ,
networkConfigSelector: types . Selector { } ,
expectedUserData : [ ] byte ( "cloud-init" ) ,
expectedNetData : [ ] byte ( "net-config" ) ,
expectedErr : nil ,
name: "Default selectors ",
labelFilter: "test=validdocset" ,
selectors: emptySelectors ,
expectedUserData : [ ] byte ( "cloud-init" ) ,
expectedNetData : [ ] byte ( "net-config" ) ,
expectedErr : nil ,
} ,
{
labelFilter : "test=ephemeralmissing" ,
userDataSelector : types . Selector {
Gvk : resid . Gvk { Kind : "Secret" } ,
LabelSelector : "airshipit.org/ephemeral-user-data in (True, true)" ,
} ,
userDataKey : "userData" ,
networkConfigSelector : types . Selector {
Gvk : resid . Gvk { Kind : "BareMetalHost" } ,
LabelSelector : "airshipit.org/ephemeral-node in (True, true)" ,
} ,
networkConfigKey : "networkData" ,
name : "BareMetalHost document not found" ,
labelFilter : "test=ephemeralmissing" ,
selectors : validSelectors ,
expectedUserData : nil ,
expectedNetData : nil ,
expectedErr : document . ErrDocNotFound {
@ -67,17 +78,9 @@ func TestGetCloudData(t *testing.T) {
} ,
} ,
{
labelFilter : "test=ephemeralduplicate" ,
userDataSelector : types . Selector {
Gvk : resid . Gvk { Kind : "Secret" } ,
LabelSelector : "airshipit.org/ephemeral-user-data in (True, true)" ,
} ,
userDataKey : "userData" ,
networkConfigSelector : types . Selector {
Gvk : resid . Gvk { Kind : "BareMetalHost" } ,
LabelSelector : "airshipit.org/ephemeral-node in (True, true)" ,
} ,
networkConfigKey : "networkData" ,
name : "BareMetalHost document duplication" ,
labelFilter : "test=ephemeralduplicate" ,
selectors : validSelectors ,
expectedUserData : nil ,
expectedNetData : nil ,
expectedErr : document . ErrMultiDocsFound {
@ -87,17 +90,9 @@ func TestGetCloudData(t *testing.T) {
} ,
} ,
{
labelFilter : "test=networkdatabadpointer" ,
userDataSelector : types . Selector {
Gvk : resid . Gvk { Kind : "Secret" } ,
LabelSelector : "airshipit.org/ephemeral-user-data in (True, true)" ,
} ,
userDataKey : "userData" ,
networkConfigSelector : types . Selector {
Gvk : resid . Gvk { Kind : "BareMetalHost" } ,
LabelSelector : "airshipit.org/ephemeral-node in (True, true)" ,
} ,
networkConfigKey : "networkData" ,
name : "Bad network data document reference" ,
labelFilter : "test=networkdatabadpointer" ,
selectors : validSelectors ,
expectedUserData : nil ,
expectedNetData : nil ,
expectedErr : document . ErrDocNotFound {
@ -108,55 +103,31 @@ func TestGetCloudData(t *testing.T) {
} ,
} ,
{
labelFilter : "test=networkdatamalformed" ,
userDataSelector : types . Selector {
Gvk : resid . Gvk { Kind : "Secret" } ,
LabelSelector : "airshipit.org/ephemeral-user-data in (True, true)" ,
} ,
userDataKey : "userData" ,
networkConfigSelector : types . Selector {
Gvk : resid . Gvk { Kind : "BareMetalHost" } ,
LabelSelector : "airshipit.org/ephemeral-node in (True, true)" ,
} ,
networkConfigKey : "networkData" ,
name : "Bad network data document structure" ,
labelFilter : "test=networkdatamalformed" ,
selectors : validSelectors ,
expectedUserData : nil ,
expectedNetData : nil ,
expectedErr : document . ErrD ataNotSupplie d{
expectedErr : document . ErrDocumentDataKeyNotFound {
DocName : "networkdatamalformed-malformed" ,
Key : networkConfigKeyDefault ,
Key : defaultNetworkConfigKey ,
} ,
} ,
{
labelFilter : "test=userdatamalformed" ,
userDataSelector : types . Selector {
Gvk : resid . Gvk { Kind : "Secret" } ,
LabelSelector : "airshipit.org/ephemeral-user-data in (True, true)" ,
} ,
userDataKey : "userData" ,
networkConfigSelector : types . Selector {
Gvk : resid . Gvk { Kind : "BareMetalHost" } ,
LabelSelector : "airshipit.org/ephemeral-node in (True, true)" ,
} ,
networkConfigKey : "networkData" ,
name : "Bad user data document structure" ,
labelFilter : "test=userdatamalformed" ,
selectors : validSelectors ,
expectedUserData : nil ,
expectedNetData : nil ,
expectedErr : document . ErrD ataNotSupplie d{
expectedErr : document . ErrDocumentDataKeyNotFound {
DocName : "userdatamalformed-somesecret" ,
Key : userDataKeyDefault ,
Key : defaultUserDataKey ,
} ,
} ,
{
labelFilter : "test=userdatamissing" ,
userDataSelector : types . Selector {
Gvk : resid . Gvk { Kind : "Secret" } ,
LabelSelector : "airshipit.org/ephemeral-user-data in (True, true)" ,
} ,
userDataKey : "userData" ,
networkConfigSelector : types . Selector {
Gvk : resid . Gvk { Kind : "BareMetalHost" } ,
LabelSelector : "airshipit.org/ephemeral-node in (True, true)" ,
} ,
networkConfigKey : "networkData" ,
name : "User data document not found" ,
labelFilter : "test=userdatamissing" ,
selectors : validSelectors ,
expectedUserData : nil ,
expectedNetData : nil ,
expectedErr : document . ErrDocNotFound {
@ -168,26 +139,28 @@ func TestGetCloudData(t *testing.T) {
}
for _ , tt := range tests {
// prune the bundle down using the label filter for the specific test
selector := document . NewSelector ( ) . ByLabel ( tt . labelFilter )
filteredBundle , err := bundle . SelectBundle ( selector )
require . NoError ( t , err , "Building filtered bundle for %s failed" , tt . labelFilter )
t . Run ( tt . name , func ( t * testing . T ) {
// prune the bundle down using the label filter for the specific test
selector := document . NewSelector ( ) . ByLabel ( tt . labelFilter )
filteredBundle , err := bundle . SelectBundle ( selector )
require . NoError ( t , err , "Building filtered bundle for %s failed" , tt . labelFilter )
// ensure each test case filter has at least one document
docs , err := filteredBundle . GetAllDocuments ( )
require . NoError ( t , err , "GetAllDocuments failed" )
require . NotZero ( t , docs )
// ensure each test case filter has at least one document
docs , err := filteredBundle . GetAllDocuments ( )
require . NoError ( t , err , "GetAllDocuments failed" )
require . NotZero ( t , docs )
actualUserData , actualNetData , actualErr := GetCloudData (
filteredBundle ,
tt . userDataSelector ,
tt . userDataKey ,
tt . networkConfigSelector ,
tt . networkConfigKey ,
)
actualUserData , actualNetData , actualErr := GetCloudData (
filteredBundle ,
tt . userDataSelector ,
tt . userDataKey ,
tt . networkConfigSelector ,
tt . networkConfigKey ,
)
assert . Equal ( t , tt . expectedUserData , actualUserData )
assert . Equal ( t , tt . expectedNetData , actualNetData )
assert . Equal ( t , tt . expectedErr , actualErr )
assert . Equal ( t , tt . expectedUserData , actualUserData )
assert . Equal ( t , tt . expectedNetData , actualNetData )
assert . Equal ( t , tt . expectedErr , actualErr )
} )
}
}