Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

test: Increase moduletemplateinfolookup testcoverage #2273

Merged
Original file line number Diff line number Diff line change
Expand Up @@ -46,9 +46,7 @@ func Test_ByChannelStrategy_Lookup_ReturnsModuleTemplateInfo(t *testing.T) {
kyma := builder.NewKymaBuilder().Build()
var moduleReleaseMeta *v1beta2.ModuleReleaseMeta = nil
moduleTemplate := builder.NewModuleTemplateBuilder().
WithName("test-module-regular").
WithModuleName("test-module").
WithVersion("").
WithChannel("regular").
Build()
byChannelStrategy := moduletemplateinfolookup.NewByChannelStrategy(fakeClient(
Expand All @@ -67,3 +65,163 @@ func Test_ByChannelStrategy_Lookup_ReturnsModuleTemplateInfo(t *testing.T) {
assert.Equal(t, moduleTemplate.Spec.Version, moduleTemplateInfo.ModuleTemplate.Spec.Version)
assert.Equal(t, moduleTemplate.Spec.Channel, moduleTemplateInfo.ModuleTemplate.Spec.Channel)
}

func Test_ByChannelStrategy_Lookup_ReturnsModuleTemplateInfo_UsingGlobalChannel(t *testing.T) {
moduleInfo := newModuleInfoBuilder().WithName("test-module").Enabled().Build()
kyma := builder.NewKymaBuilder().WithChannel("fast").Build()
var moduleReleaseMeta *v1beta2.ModuleReleaseMeta = nil
moduleTemplate := builder.NewModuleTemplateBuilder().
WithModuleName("test-module").
WithChannel("fast").
Build()
byChannelStrategy := moduletemplateinfolookup.NewByChannelStrategy(fakeClient(
&v1beta2.ModuleTemplateList{
Items: []v1beta2.ModuleTemplate{
*moduleTemplate,
},
},
))

moduleTemplateInfo := byChannelStrategy.Lookup(context.Background(), moduleInfo, kyma, moduleReleaseMeta)

assert.NotNil(t, moduleTemplateInfo)
assert.Equal(t, moduleTemplate.Name, moduleTemplateInfo.ModuleTemplate.Name)
assert.Equal(t, moduleTemplate.Spec.ModuleName, moduleTemplateInfo.ModuleTemplate.Spec.ModuleName)
assert.Equal(t, moduleTemplate.Spec.Version, moduleTemplateInfo.ModuleTemplate.Spec.Version)
assert.Equal(t, moduleTemplate.Spec.Channel, moduleTemplateInfo.ModuleTemplate.Spec.Channel)
}

func Test_ByChannelStrategy_Lookup_ReturnsModuleTemplateInfo_UsingDefaultChannel(t *testing.T) {
moduleInfo := newModuleInfoBuilder().WithName("test-module").Enabled().Build()
kyma := builder.NewKymaBuilder().Build()
var moduleReleaseMeta *v1beta2.ModuleReleaseMeta = nil
moduleTemplate := builder.NewModuleTemplateBuilder().
WithModuleName("test-module").
WithChannel("regular").
Build()
byChannelStrategy := moduletemplateinfolookup.NewByChannelStrategy(fakeClient(
&v1beta2.ModuleTemplateList{
Items: []v1beta2.ModuleTemplate{
*moduleTemplate,
},
},
))

moduleTemplateInfo := byChannelStrategy.Lookup(context.Background(), moduleInfo, kyma, moduleReleaseMeta)

assert.NotNil(t, moduleTemplateInfo)
assert.Equal(t, moduleTemplate.Name, moduleTemplateInfo.ModuleTemplate.Name)
assert.Equal(t, moduleTemplate.Spec.ModuleName, moduleTemplateInfo.ModuleTemplate.Spec.ModuleName)
assert.Equal(t, moduleTemplate.Spec.Version, moduleTemplateInfo.ModuleTemplate.Spec.Version)
assert.Equal(t, moduleTemplate.Spec.Channel, moduleTemplateInfo.ModuleTemplate.Spec.Channel)
}

func Test_ByChannelStrategy_Lookup_WhenNoModuleTemplateFound(t *testing.T) {
moduleInfo := newModuleInfoBuilder().WithName("test-module").WithChannel("regular").Enabled().Build()
kyma := builder.NewKymaBuilder().Build()
var moduleReleaseMeta *v1beta2.ModuleReleaseMeta = nil
byChannelStrategy := moduletemplateinfolookup.NewByChannelStrategy(fakeClient(&v1beta2.ModuleTemplateList{
Items: []v1beta2.ModuleTemplate{},
}))

moduleTemplateInfo := byChannelStrategy.Lookup(context.Background(), moduleInfo, kyma, moduleReleaseMeta)

assert.NotNil(t, moduleTemplateInfo)
assert.Nil(t, moduleTemplateInfo.ModuleTemplate)
assert.ErrorContains(t, moduleTemplateInfo.Err,
"no templates were found: for module test-module in channel regular")
}

func Test_ByChannelStrateg_Lookup_WhenFailedToListModuleTemplates(t *testing.T) {
moduleInfo := newModuleInfoBuilder().WithName("test-module").WithChannel("regular").Enabled().Build()
kyma := builder.NewKymaBuilder().Build()
var moduleReleaseMeta *v1beta2.ModuleReleaseMeta = nil

byChannelStrategy := moduletemplateinfolookup.NewByChannelStrategy(&failedClientStub{})

moduleTemplateInfo := byChannelStrategy.Lookup(context.Background(), moduleInfo, kyma, moduleReleaseMeta)

assert.NotNil(t, moduleTemplateInfo)
assert.Nil(t, moduleTemplateInfo.ModuleTemplate)
assert.ErrorContains(t, moduleTemplateInfo.Err,
"failed to list module templates on lookup")
}

func Test_ByChannelStrategy_Lookup_WhenMoreThanOneModuleTemplateFound(t *testing.T) {
moduleInfo := newModuleInfoBuilder().WithName("test-module").WithChannel("regular").Enabled().Build()
kyma := builder.NewKymaBuilder().Build()
var moduleReleaseMeta *v1beta2.ModuleReleaseMeta = nil
firstModuleTemplate := builder.NewModuleTemplateBuilder().
WithName("test-module-regular").
WithModuleName("test-module").
WithChannel("regular").
Build()
secondModuleTemplate := builder.NewModuleTemplateBuilder().
WithName("test-module-regular-2").
WithModuleName("test-module").
WithChannel("regular").
Build()
byChannelStrategy := moduletemplateinfolookup.NewByChannelStrategy(fakeClient(
&v1beta2.ModuleTemplateList{
Items: []v1beta2.ModuleTemplate{
*firstModuleTemplate,
*secondModuleTemplate,
},
},
))

moduleTemplateInfo := byChannelStrategy.Lookup(context.Background(), moduleInfo, kyma, moduleReleaseMeta)

assert.NotNil(t, moduleTemplateInfo)
assert.Nil(t, moduleTemplateInfo.ModuleTemplate)
assert.ErrorContains(t, moduleTemplateInfo.Err,
"no unique template could be identified: more than one module template found for module: test-module, candidates: [test-module-regular test-module-regular-2]")
}

func Test_ByChannelStrategy_Lookup_WhenModuleTemplateHasNoChannel(t *testing.T) {
moduleInfo := newModuleInfoBuilder().WithName("test-module").WithChannel("regular").Enabled().Build()
kyma := builder.NewKymaBuilder().Build()
var moduleReleaseMeta *v1beta2.ModuleReleaseMeta = nil
moduleTemplate := builder.NewModuleTemplateBuilder().
WithModuleName("test-module").
Build()
byChannelStrategy := moduletemplateinfolookup.NewByChannelStrategy(fakeClient(
&v1beta2.ModuleTemplateList{
Items: []v1beta2.ModuleTemplate{
*moduleTemplate,
},
},
))

moduleTemplateInfo := byChannelStrategy.Lookup(context.Background(), moduleInfo, kyma, moduleReleaseMeta)

assert.NotNil(t, moduleTemplateInfo)
assert.Nil(t, moduleTemplateInfo.ModuleTemplate)
assert.ErrorContains(t, moduleTemplateInfo.Err,
"no templates were found: for module test-module in channel regular")
}

func Test_ByChannelStrategy_Lookup_WhenModuleTemplateIsMandatory(t *testing.T) {
moduleInfo := newModuleInfoBuilder().WithName("test-module").WithChannel("regular").Enabled().Build()
kyma := builder.NewKymaBuilder().Build()
var moduleReleaseMeta *v1beta2.ModuleReleaseMeta = nil
moduleTemplate := builder.NewModuleTemplateBuilder().
WithModuleName("test-module").
WithChannel("regular").
WithMandatory(true).
Build()
byChannelStrategy := moduletemplateinfolookup.NewByChannelStrategy(fakeClient(
&v1beta2.ModuleTemplateList{
Items: []v1beta2.ModuleTemplate{
*moduleTemplate,
},
},
))

moduleTemplateInfo := byChannelStrategy.Lookup(context.Background(), moduleInfo, kyma, moduleReleaseMeta)

assert.NotNil(t, moduleTemplateInfo)
assert.Nil(t, moduleTemplateInfo.ModuleTemplate)
assert.ErrorContains(t, moduleTemplateInfo.Err,
"template marked as mandatory: for module test-module in channel regular")
}
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,6 @@ func Test_ByModuleReleaseMeta_Strategy_Lookup_ReturnsModuleTemplateInfo(t *testi
WithName("test-module-1.0.0").
WithModuleName("test-module").
WithVersion("1.0.0").
WithChannel("none").
Build()
byMRMStrategy := moduletemplateinfolookup.NewByModuleReleaseMetaStrategy(fakeClient(
&v1beta2.ModuleTemplateList{
Expand All @@ -72,6 +71,67 @@ func Test_ByModuleReleaseMeta_Strategy_Lookup_ReturnsModuleTemplateInfo(t *testi
assert.Equal(t, moduleTemplate.Spec.Channel, moduleTemplateInfo.ModuleTemplate.Spec.Channel)
}

func Test_ByModuleReleaseMeta_Strategy_Lookup_WhenGetChannelVersionForModuleReturnsError(t *testing.T) {
moduleInfo := newModuleInfoBuilder().WithName("test-module").WithChannel("regular").Enabled().Build()
kyma := builder.NewKymaBuilder().Build()
moduleReleaseMeta := builder.NewModuleReleaseMetaBuilder().
WithModuleName("test-module").
WithName("test-module").
WithModuleChannelAndVersions([]v1beta2.ChannelVersionAssignment{
{
Channel: "regular",
Version: "1.0.0",
},
}).
Build()
moduleTemplate := builder.NewModuleTemplateBuilder().
WithName("test-module").
WithModuleName("test-module").
WithVersion("1.0.0").
Build()
byMRMStrategy := moduletemplateinfolookup.NewByModuleReleaseMetaStrategy(fakeClient(
&v1beta2.ModuleTemplateList{
Items: []v1beta2.ModuleTemplate{
*moduleTemplate,
},
},
))

moduleTemplateInfo := byMRMStrategy.Lookup(context.Background(), moduleInfo, kyma, moduleReleaseMeta)

assert.NotNil(t, moduleTemplateInfo)
assert.Nil(t, moduleTemplateInfo.ModuleTemplate)
assert.ErrorContains(t, moduleTemplateInfo.Err,
"failed to get module template: moduletemplates.operator.kyma-project.io \"test-module-1.0.0\" not found")
}

func Test_ByModuleReleaseMeta_Strategy_Lookup_WhenGetTemplateByVersionReturnsError(t *testing.T) {
moduleInfo := newModuleInfoBuilder().WithName("test-module").WithChannel("regular").Enabled().Build()
kyma := builder.NewKymaBuilder().Build()
moduleReleaseMeta := builder.NewModuleReleaseMetaBuilder().
WithModuleName("test-module").
WithName("test-module").
Build()
moduleTemplate := builder.NewModuleTemplateBuilder().
WithName("test-module-1.0.0").
WithModuleName("test-module").
WithVersion("1.0.0").
Build()
byMRMStrategy := moduletemplateinfolookup.NewByModuleReleaseMetaStrategy(fakeClient(
&v1beta2.ModuleTemplateList{
Items: []v1beta2.ModuleTemplate{
*moduleTemplate,
},
},
))

moduleTemplateInfo := byMRMStrategy.Lookup(context.Background(), moduleInfo, kyma, moduleReleaseMeta)

assert.NotNil(t, moduleTemplateInfo)
assert.Nil(t, moduleTemplateInfo.ModuleTemplate)
assert.ErrorContains(t, moduleTemplateInfo.Err, "no channels found for module: test-module")
}

func fakeClient(mts *v1beta2.ModuleTemplateList) client.Client {
scheme := machineryruntime.NewScheme()
machineryutilruntime.Must(api.AddToScheme(scheme))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,11 @@ package moduletemplateinfolookup_test

import (
"context"
"errors"
"testing"

"github.com/stretchr/testify/assert"
"sigs.k8s.io/controller-runtime/pkg/client"

"github.com/kyma-project/lifecycle-manager/api/v1beta2"
"github.com/kyma-project/lifecycle-manager/pkg/templatelookup"
Expand Down Expand Up @@ -69,6 +71,102 @@ func Test_ByVersion_Strategy_Lookup_ReturnsModuleTemplateInfo(t *testing.T) {
assert.Equal(t, moduleTemplate.Spec.Channel, moduleTemplateInfo.ModuleTemplate.Spec.Channel)
}

func Test_ByVersion_Strategy_Lookup_WhenMoreThanOneModuleTemplateFound(t *testing.T) {
moduleInfo := newModuleInfoBuilder().WithName("test-module").WithVersion("1.0.0").Enabled().Build()
var kyma *v1beta2.Kyma = nil
var moduleReleaseMeta *v1beta2.ModuleReleaseMeta = nil
firstModuleTemplate := builder.NewModuleTemplateBuilder().
WithName("test-module-1.0.0").
WithModuleName("test-module").
WithVersion("1.0.0").
WithChannel("none").
Build()
secondModuleTemplate := builder.NewModuleTemplateBuilder().
WithName("test-module-1.0.0-duplicate").
WithModuleName("test-module").
WithVersion("1.0.0").
WithChannel("none").
Build()

byVersionStrategy := moduletemplateinfolookup.NewByVersionStrategy(fakeClient(
&v1beta2.ModuleTemplateList{
Items: []v1beta2.ModuleTemplate{
*firstModuleTemplate,
*secondModuleTemplate,
},
},
))

moduleTemplateInfo := byVersionStrategy.Lookup(context.Background(), moduleInfo, kyma, moduleReleaseMeta)

assert.NotNil(t, moduleTemplateInfo)
assert.Nil(t, moduleTemplateInfo.ModuleTemplate)
assert.ErrorContains(t, moduleTemplateInfo.Err,
"no unique template could be identified: more than one module template found for module: test-module, candidates: [test-module-1.0.0 test-module-1.0.0-duplicate]")
}

func Test_ByVersion_Strategy_Lookup_WhenFailedToListModuleTemplates(t *testing.T) {
moduleInfo := newModuleInfoBuilder().WithName("test-module").WithVersion("1.0.0").Enabled().Build()
var kyma *v1beta2.Kyma = nil
var moduleReleaseMeta *v1beta2.ModuleReleaseMeta = nil

byVersionStrategy := moduletemplateinfolookup.NewByVersionStrategy(&failedClientStub{})

moduleTemplateInfo := byVersionStrategy.Lookup(context.Background(), moduleInfo, kyma, moduleReleaseMeta)

assert.NotNil(t, moduleTemplateInfo)
assert.Nil(t, moduleTemplateInfo.ModuleTemplate)
assert.ErrorContains(t, moduleTemplateInfo.Err,
"failed to list module templates on lookup")
}

func Test_ByVersion_Strategy_Lookup_WhenNoModuleTemplateFound(t *testing.T) {
moduleInfo := newModuleInfoBuilder().WithName("test-module").WithVersion("1.0.0").Enabled().Build()
var kyma *v1beta2.Kyma = nil
var moduleReleaseMeta *v1beta2.ModuleReleaseMeta = nil

byVersionStrategy := moduletemplateinfolookup.NewByVersionStrategy(fakeClient(
&v1beta2.ModuleTemplateList{
Items: []v1beta2.ModuleTemplate{},
},
))

moduleTemplateInfo := byVersionStrategy.Lookup(context.Background(), moduleInfo, kyma, moduleReleaseMeta)

assert.NotNil(t, moduleTemplateInfo)
assert.Nil(t, moduleTemplateInfo.ModuleTemplate)
assert.ErrorContains(t, moduleTemplateInfo.Err,
"no templates were found: for module test-module in version 1.0.0")
}

func Test_ByVersion_Strategy_Lookup_WhenModuleTemplateIsMandatory(t *testing.T) {
moduleInfo := newModuleInfoBuilder().WithName("test-module").WithVersion("1.0.0").Enabled().Build()
var kyma *v1beta2.Kyma = nil
var moduleReleaseMeta *v1beta2.ModuleReleaseMeta = nil
moduleTemplate := builder.NewModuleTemplateBuilder().
WithName("test-module-1.0.0").
WithModuleName("test-module").
WithVersion("1.0.0").
WithChannel("none").
WithMandatory(true).
Build()

byVersionStrategy := moduletemplateinfolookup.NewByVersionStrategy(fakeClient(
&v1beta2.ModuleTemplateList{
Items: []v1beta2.ModuleTemplate{
*moduleTemplate,
},
},
))

moduleTemplateInfo := byVersionStrategy.Lookup(context.Background(), moduleInfo, kyma, moduleReleaseMeta)

assert.NotNil(t, moduleTemplateInfo)
assert.Nil(t, moduleTemplateInfo.ModuleTemplate)
assert.ErrorContains(t, moduleTemplateInfo.Err,
"template marked as mandatory: for module test-module in version 1.0.0")
}

type moduleInfoBuilder struct {
moduleInfo *templatelookup.ModuleInfo
}
Expand Down Expand Up @@ -104,3 +202,11 @@ func (b moduleInfoBuilder) Enabled() moduleInfoBuilder {
func (b moduleInfoBuilder) Build() *templatelookup.ModuleInfo {
return b.moduleInfo
}

type failedClientStub struct {
client.Client
}

func (c *failedClientStub) List(ctx context.Context, list client.ObjectList, opts ...client.ListOption) error {
return errors.New("failed to list module templates")
}
Loading
Loading