aa3067cbb7
This type would allow us to control behavior of clusterctl modules and choose components we want to install, if we put document of kind Clusterctl into Bundle. In near future we need to generate deepcopy methods for this object, so it can be used with kubernetes schema Relates-To: #170 Change-Id: I2f40a7e9b66e0f7f0bbc8b6874ec45f767416c69
145 lines
4.2 KiB
Go
145 lines
4.2 KiB
Go
/*
|
|
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
|
|
|
|
https://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 document_test
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
|
|
"opendev.org/airship/airshipctl/pkg/document"
|
|
"opendev.org/airship/airshipctl/testutil"
|
|
)
|
|
|
|
func TestSelectorsPositive(t *testing.T) {
|
|
bundle := testutil.NewTestBundle(t, "testdata/selectors/valid")
|
|
|
|
t.Run("TestEphemeralCloudDataSelector", func(t *testing.T) {
|
|
doc, err := bundle.Select(document.NewEphemeralCloudDataSelector())
|
|
require.NoError(t, err)
|
|
assert.Len(t, doc, 1)
|
|
})
|
|
|
|
t.Run("TestEphemeralNetworkDataSelector", func(t *testing.T) {
|
|
docs, err := bundle.Select(document.NewEphemeralBMHSelector())
|
|
require.NoError(t, err)
|
|
assert.Len(t, docs, 1)
|
|
bmhDoc := docs[0]
|
|
selector, err := document.NewNetworkDataSelector(bmhDoc)
|
|
require.NoError(t, err)
|
|
assert.Equal(t, "validName", selector.Name)
|
|
})
|
|
|
|
t.Run("TestEphemeralCloudDataSelector", func(t *testing.T) {
|
|
doc, err := bundle.Select(document.NewEphemeralCloudDataSelector())
|
|
require.NoError(t, err)
|
|
assert.Len(t, doc, 1)
|
|
})
|
|
|
|
t.Run("TestNewClusterctlMetadataSelector", func(t *testing.T) {
|
|
doc, err := bundle.Select(document.NewClusterctlMetadataSelector())
|
|
require.NoError(t, err)
|
|
assert.Len(t, doc, 1)
|
|
})
|
|
|
|
t.Run("TestNewClusterctlSelector", func(t *testing.T) {
|
|
docs, err := bundle.Select(document.NewClusterctlSelector())
|
|
require.NoError(t, err)
|
|
assert.Len(t, docs, 1)
|
|
})
|
|
}
|
|
|
|
func TestSelectorsNegative(t *testing.T) {
|
|
// These two tests take bundle with two malformed documents
|
|
// each of the documents will fail at different locations providing higher
|
|
// test coverage
|
|
bundle := testutil.NewTestBundle(t, "testdata/selectors/invalid")
|
|
|
|
t.Run("TestNewNetworkDataSelectorErr", func(t *testing.T) {
|
|
docs, err := bundle.Select(document.NewEphemeralBMHSelector())
|
|
require.NoError(t, err)
|
|
assert.Len(t, docs, 2)
|
|
bmhDoc := docs[0]
|
|
_, err = document.NewNetworkDataSelector(bmhDoc)
|
|
assert.Error(t, err)
|
|
})
|
|
|
|
t.Run("TestEphemeralNetworkDataSelectorErr", func(t *testing.T) {
|
|
docs, err := bundle.Select(document.NewEphemeralBMHSelector())
|
|
require.NoError(t, err)
|
|
assert.Len(t, docs, 2)
|
|
bmhDoc := docs[1]
|
|
_, err = document.NewNetworkDataSelector(bmhDoc)
|
|
assert.Error(t, err)
|
|
})
|
|
}
|
|
|
|
func TestSelectorsSkip(t *testing.T) {
|
|
// These two tests take bundle with two malformed documents
|
|
// each of the documents will fail at different locations providing higher
|
|
// test coverage
|
|
bundle := testutil.NewTestBundle(t, "testdata/selectors/exclude-from-k8s")
|
|
|
|
t.Run("TestNewNetworkDataSelectorErr", func(t *testing.T) {
|
|
selector := document.NewDeployToK8sSelector()
|
|
docs, err := bundle.Select(selector)
|
|
require.NoError(t, err)
|
|
assert.Len(t, docs, 5)
|
|
for _, doc := range docs {
|
|
assert.NotEqual(t, "ignore-namespace", doc.GetName())
|
|
assert.NotEqual(t, "ignore-bmh", doc.GetName())
|
|
}
|
|
})
|
|
}
|
|
|
|
func TestSelectorString(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
selector document.Selector
|
|
expected string
|
|
}{
|
|
{
|
|
name: "unconditional",
|
|
selector: document.Selector{},
|
|
expected: "No selection conditions specified",
|
|
},
|
|
{
|
|
name: "by-name",
|
|
selector: document.NewSelector().ByName("foo"),
|
|
expected: `[Name="foo"]`,
|
|
},
|
|
{
|
|
name: "by-all",
|
|
selector: document.NewSelector().
|
|
ByGvk("testGroup", "testVersion", "testKind").
|
|
ByNamespace("testNamespace").
|
|
ByName("testName").
|
|
ByAnnotation("testAnnotation=true").
|
|
ByLabel("testLabel=true"),
|
|
expected: `[Group="testGroup", Version="testVersion", Kind="testKind", ` +
|
|
`Namespace="testNamespace", Name="testName", ` +
|
|
`Annotations="testAnnotation=true", Labels="testLabel=true"]`,
|
|
},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
tt := tt
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
assert.Equal(t, tt.expected, tt.selector.String())
|
|
})
|
|
}
|
|
}
|