From e982e0a9a3ee9d1346a04eedbedd81297b349095 Mon Sep 17 00:00:00 2001 From: vinayada1 <28875764+vinayada1@users.noreply.github.com> Date: Thu, 30 Nov 2023 11:00:41 -0800 Subject: [PATCH] Check if application properties and properties.env are not specified --- .../application_conversion.go | 9 +++++++ .../application_conversion_test.go | 10 ++++++++ .../testdata/applicationresource-no-env.json | 24 +++++++++++++++++++ .../applicationresource-no-properties.json | 3 +++ .../converter/application_converter.go | 3 +++ 5 files changed, 49 insertions(+) create mode 100644 pkg/corerp/api/v20231001preview/testdata/applicationresource-no-env.json create mode 100644 pkg/corerp/api/v20231001preview/testdata/applicationresource-no-properties.json diff --git a/pkg/corerp/api/v20231001preview/application_conversion.go b/pkg/corerp/api/v20231001preview/application_conversion.go index 9c6a0be9a9c..578edfca91f 100644 --- a/pkg/corerp/api/v20231001preview/application_conversion.go +++ b/pkg/corerp/api/v20231001preview/application_conversion.go @@ -26,6 +26,15 @@ import ( // ConvertTo converts from the versioned Application resource to version-agnostic datamodel. func (src *ApplicationResource) ConvertTo() (v1.DataModelInterface, error) { // Note: SystemData conversion isn't required since this property comes ARM and datastore. + + if src.Properties == nil { + return nil, &v1.ErrModelConversion{PropertyName: "$.properties", ValidValue: "not nil"} + } + + if src.Properties.Environment == nil { + return nil, &v1.ErrModelConversion{PropertyName: "$.properties.environment", ValidValue: "not nil"} + } + converted := &datamodel.Application{ BaseResource: v1.BaseResource{ TrackedResource: v1.TrackedResource{ diff --git a/pkg/corerp/api/v20231001preview/application_conversion_test.go b/pkg/corerp/api/v20231001preview/application_conversion_test.go index 96e0fd60ebe..af94f2f9279 100644 --- a/pkg/corerp/api/v20231001preview/application_conversion_test.go +++ b/pkg/corerp/api/v20231001preview/application_conversion_test.go @@ -48,6 +48,16 @@ func TestApplicationConvertVersionedToDataModel(t *testing.T) { err: nil, emptyExt: true, }, + { + filename: "applicationresource-no-properties.json", + err: &v1.ErrModelConversion{PropertyName: "$.properties", ValidValue: "not nil"}, + emptyExt: true, + }, + { + filename: "applicationresource-no-env.json", + err: &v1.ErrModelConversion{PropertyName: "$.properties.environment", ValidValue: "not nil"}, + emptyExt: true, + }, } for _, tt := range conversionTests { diff --git a/pkg/corerp/api/v20231001preview/testdata/applicationresource-no-env.json b/pkg/corerp/api/v20231001preview/testdata/applicationresource-no-env.json new file mode 100644 index 00000000000..15a3a4f153d --- /dev/null +++ b/pkg/corerp/api/v20231001preview/testdata/applicationresource-no-env.json @@ -0,0 +1,24 @@ +{ + "id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/radius-test-rg/providers/Applications.Core/applications/app0", + "name": "app0", + "type": "Applications.Core/applications", + "properties": { + "extensions": [ + { + "kind": "kubernetesMetadata", + "annotations": { + "prometheus.io/scrape": "true", + "prometheus.io/port": "80" + }, + "labels": { + "foo/bar/team": "credit", + "foo/bar/contact": "radiususer" + } + }, + { + "kind": "kubernetesNamespace", + "namespace": "app0-ns" + } + ] + } +} \ No newline at end of file diff --git a/pkg/corerp/api/v20231001preview/testdata/applicationresource-no-properties.json b/pkg/corerp/api/v20231001preview/testdata/applicationresource-no-properties.json new file mode 100644 index 00000000000..d2ff104e934 --- /dev/null +++ b/pkg/corerp/api/v20231001preview/testdata/applicationresource-no-properties.json @@ -0,0 +1,3 @@ +{ + "name": "myapp" +} \ No newline at end of file diff --git a/pkg/corerp/datamodel/converter/application_converter.go b/pkg/corerp/datamodel/converter/application_converter.go index 759781e91ee..204f6027b99 100644 --- a/pkg/corerp/datamodel/converter/application_converter.go +++ b/pkg/corerp/datamodel/converter/application_converter.go @@ -46,6 +46,9 @@ func ApplicationDataModelFromVersioned(content []byte, version string) (*datamod return nil, err } dm, err := am.ConvertTo() + if err != nil { + return nil, err + } return dm.(*datamodel.Application), err default: