From 7929f9fe09d15e0a996791e291570fc12d98d1ca Mon Sep 17 00:00:00 2001 From: yangsoon Date: Wed, 19 May 2021 20:08:51 +0800 Subject: [PATCH] fix store openapi (#1689) --- pkg/controller/utils/capability.go | 6 +- pkg/controller/utils/capability_test.go | 76 ++++++++++++++----- .../utils/testdata/definition/workload1.cue | 7 -- .../definition/workloadNoParameter.cue | 7 -- 4 files changed, 61 insertions(+), 35 deletions(-) delete mode 100644 pkg/controller/utils/testdata/definition/workload1.cue delete mode 100644 pkg/controller/utils/testdata/definition/workloadNoParameter.cue diff --git a/pkg/controller/utils/capability.go b/pkg/controller/utils/capability.go index 2c408688a..5bde4b2c8 100644 --- a/pkg/controller/utils/capability.go +++ b/pkg/controller/utils/capability.go @@ -359,12 +359,14 @@ func GenerateOpenAPISchemaFromDefinition(definitionName, cueTemplate string) ([] func prepareParameterCue(capabilityName, capabilityTemplate string) (string, error) { var template string var withParameterFlag bool - r := regexp.MustCompile("[[:space:]]*parameter:[[:space:]]*{.*") + r := regexp.MustCompile(`[[:space:]]*parameter:[[:space:]]*`) + trimRe := regexp.MustCompile(`\s+`) for _, text := range strings.Split(capabilityTemplate, "\n") { if r.MatchString(text) { // a variable has to be refined as a definition which starts with "#" - text = fmt.Sprintf("parameter: #parameter\n#%s", text) + // text may be start with space or tab, we should clean up text + text = fmt.Sprintf("parameter: #parameter\n#%s", trimRe.ReplaceAllString(text, "")) withParameterFlag = true } template += fmt.Sprintf("%s\n", text) diff --git a/pkg/controller/utils/capability_test.go b/pkg/controller/utils/capability_test.go index b1b31581a..97ba91185 100644 --- a/pkg/controller/utils/capability_test.go +++ b/pkg/controller/utils/capability_test.go @@ -44,34 +44,72 @@ func TestGetOpenAPISchema(t *testing.T) { err error } cases := map[string]struct { - reason string - name string - fileDir string - fileName string - want want + reason string + name string + data string + want want }{ - "PrepareANormalParameterCueFile": { - reason: "Prepare a normal parameter cue file", - name: "workload1", - fileDir: TestDir, - fileName: "workload1.cue", - want: want{data: "{\"properties\":{\"min\":{\"title\":\"min\",\"type\":\"integer\"}},\"required\":[\"min\"],\"type\":\"object\"}", err: nil}, + "parameter in cue is a structure type,": { + reason: "Prepare a normal parameter cue file", + name: "workload1", + data: ` +project: { + name: string +} + + parameter: { + min: int +} +`, + want: want{data: "{\"properties\":{\"min\":{\"title\":\"min\",\"type\":\"integer\"}},\"required\":[\"min\"],\"type\":\"object\"}", err: nil}, }, - "CueFileNotContainParameter": { - reason: "Prepare a cue file which doesn't contain `parameter` section", - name: "invalidWorkload", - fileDir: TestDir, - fileName: "workloadNoParameter.cue", - want: want{data: "", err: fmt.Errorf("capability invalidWorkload doesn't contain section `parameter`")}, + "parameter in cue is a dict type,": { + reason: "Prepare a normal parameter cue file", + name: "workload2", + data: ` +annotations: { + for k, v in parameter { + "\(k)": v + } +} + +parameter: [string]: string +`, + want: want{data: "{\"additionalProperties\":{\"type\":\"string\"},\"type\":\"object\"}", err: nil}, + }, + "parameter in cue is a string type,": { + reason: "Prepare a normal parameter cue file", + name: "workload3", + data: ` +annotations: { + "test":parameter +} + + parameter:string +`, + want: want{data: "{\"type\":\"string\"}", err: nil}, + }, + "cue doesn't contain parameter section": { + reason: "Prepare a cue file which doesn't contain `parameter` section", + name: "invalidWorkload", + data: ` +project: { + name: string +} + +noParameter: { + min: int +} +`, + want: want{data: "", err: fmt.Errorf("capability invalidWorkload doesn't contain section `parameter`")}, }, } for name, tc := range cases { t.Run(name, func(t *testing.T) { - data, _ := ioutil.ReadFile(filepath.Join(tc.fileDir, tc.fileName)) schematic := &common.Schematic{ CUE: &common.CUE{ - Template: string(data), + Template: tc.data, }, } capability, _ := appfile.ConvertTemplateJSON2Object(tc.name, nil, schematic) diff --git a/pkg/controller/utils/testdata/definition/workload1.cue b/pkg/controller/utils/testdata/definition/workload1.cue deleted file mode 100644 index 79d2ca229..000000000 --- a/pkg/controller/utils/testdata/definition/workload1.cue +++ /dev/null @@ -1,7 +0,0 @@ -project: { - name: string -} - -parameter: { - min: int -} diff --git a/pkg/controller/utils/testdata/definition/workloadNoParameter.cue b/pkg/controller/utils/testdata/definition/workloadNoParameter.cue deleted file mode 100644 index 61c565f6a..000000000 --- a/pkg/controller/utils/testdata/definition/workloadNoParameter.cue +++ /dev/null @@ -1,7 +0,0 @@ -project: { - name: string -} - -noParameter: { - min: int -}