You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by lb...@apache.org on 2020/04/06 09:06:50 UTC

[camel-k] branch master updated: Fix YAML rest-dsl inspections

This is an automated email from the ASF dual-hosted git repository.

lburgazzoli pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/camel-k.git


The following commit(s) were added to refs/heads/master by this push:
     new 30e1d9f  Fix YAML rest-dsl inspections
30e1d9f is described below

commit 30e1d9f8313494e349c9b1a8c2c3ba1ed84c4328
Author: lburgazzoli <lb...@gmail.com>
AuthorDate: Sat Apr 4 15:47:23 2020 +0200

    Fix YAML rest-dsl inspections
---
 pkg/util/source/inspector_yaml.go      |  54 +++++++++--------
 pkg/util/source/inspector_yaml_test.go | 106 +++++++++++++++++++++++++++++++++
 2 files changed, 135 insertions(+), 25 deletions(-)

diff --git a/pkg/util/source/inspector_yaml.go b/pkg/util/source/inspector_yaml.go
index 8ddf8c3..d05b2e8 100644
--- a/pkg/util/source/inspector_yaml.go
+++ b/pkg/util/source/inspector_yaml.go
@@ -70,31 +70,11 @@ func (inspector YAMLInspector) parseStep(key string, content interface{}, meta *
 	case string:
 		maybeURI = t
 	case map[interface{}]interface{}:
-		if u, ok := t["uri"]; ok {
-			maybeURI = u.(string)
-		}
-
-		if _, ok := t["language"]; ok {
-			if s, ok := t["language"].(string); ok {
-				if dependency, ok := inspector.catalog.GetLanguageDependency(s); ok {
-					inspector.addDependency(dependency, meta)
-				}
-			} else if m, ok := t["language"].(map[interface{}]interface{}); ok {
-				if err := inspector.parseStep("language", m, meta); err != nil {
-					return err
-				}
-			}
-		}
-
-		for k := range t {
-			if s, ok := k.(string); ok {
-				if dependency, ok := inspector.catalog.GetLanguageDependency(s); ok {
-					inspector.addDependency(dependency, meta)
-				}
-			}
-		}
-
-		if u, ok := t["steps"]; ok {
+		if u, ok := t["rest"]; ok {
+			return inspector.parseStep("rest", u, meta)
+		} else if u, ok := t["from"]; ok {
+			return inspector.parseStep("from", u, meta)
+		} else if u, ok := t["steps"]; ok {
 			steps := u.([]interface{})
 
 			for i := range steps {
@@ -120,6 +100,30 @@ func (inspector YAMLInspector) parseStep(key string, content interface{}, meta *
 				}
 			}
 		}
+
+		if u, ok := t["uri"]; ok {
+			maybeURI = u.(string)
+		}
+
+		if _, ok := t["language"]; ok {
+			if s, ok := t["language"].(string); ok {
+				if dependency, ok := inspector.catalog.GetLanguageDependency(s); ok {
+					inspector.addDependency(dependency, meta)
+				}
+			} else if m, ok := t["language"].(map[interface{}]interface{}); ok {
+				if err := inspector.parseStep("language", m, meta); err != nil {
+					return err
+				}
+			}
+		}
+
+		for k := range t {
+			if s, ok := k.(string); ok {
+				if dependency, ok := inspector.catalog.GetLanguageDependency(s); ok {
+					inspector.addDependency(dependency, meta)
+				}
+			}
+		}
 	}
 
 	if maybeURI != "" {
diff --git a/pkg/util/source/inspector_yaml_test.go b/pkg/util/source/inspector_yaml_test.go
new file mode 100644
index 0000000..2d5db00
--- /dev/null
+++ b/pkg/util/source/inspector_yaml_test.go
@@ -0,0 +1,106 @@
+/*
+Licensed to the Apache Software Foundation (ASF) under one or more
+contributor license agreements.  See the NOTICE file distributed with
+this work for additional information regarding copyright ownership.
+The ASF licenses this file to You 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
+
+   http://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 source
+
+import (
+	"testing"
+
+	v1 "github.com/apache/camel-k/pkg/apis/camel/v1"
+	"github.com/apache/camel-k/pkg/util/camel"
+	"github.com/stretchr/testify/assert"
+)
+
+func NewtestYAMLInspector(t *testing.T) YAMLInspector {
+	catalog, err := camel.DefaultCatalog()
+	assert.Nil(t, err)
+
+	return YAMLInspector{
+		baseInspector: baseInspector{
+			catalog: catalog,
+		},
+	}
+}
+
+const YAMLRestDSL = `
+- rest:
+    verb: "post"
+    uri: "/api/flow"
+    accepts: "text/plain"
+    binding-mode: "off"
+    steps:
+      - convert-body:
+          type: "java.lang.String"
+      - to:
+          uri: "log:in"
+      - filter:
+          simple: "${body.contains(\",\")}"
+      - split:
+          tokenize: ";"
+      - set-body:
+          simple: "${body.toLowerCase()}"
+      - to:
+          uri: "log:out"
+`
+
+const YAMLRestDSLWithRoute = `
+- route:
+    id: "flow"
+    group: "routes"
+    rest:
+      verb: "post"
+      uri: "/api/flow"
+      accepts: "text/plain"
+      binding-mode: "off"
+      steps:
+        - convert-body:
+            type: "java.lang.String"
+        - to:
+            uri: "log:in"
+        - filter:
+            simple: "${body.contains(\",\")}"
+        - split:
+            tokenize: ";"
+        - set-body:
+            simple: "${body.toLowerCase()}"
+        - to:
+            uri: "log:out"
+`
+
+func TestYAMLRestDSL(t *testing.T) {
+	for name, content := range map[string]string{"YAMLRestDSL": YAMLRestDSL, "YAMLRestDSLWithRoute": YAMLRestDSLWithRoute} {
+		sourceContent := content
+		t.Run(name, func(t *testing.T) {
+			code := v1.SourceSpec{
+				DataSpec: v1.DataSpec{
+					Name:    "route.yaml",
+					Content: sourceContent,
+				},
+				Language: v1.LanguageYaml,
+			}
+
+			meta := NewMetadata()
+			inspector := NewtestYAMLInspector(t)
+
+			err := inspector.Extract(code, &meta)
+			assert.Nil(t, err)
+			assert.True(t, meta.RequiredCapabilities.Has(v1.CapabilityRest))
+			assert.True(t, meta.Dependencies.Has("camel:log"))
+			assert.True(t, meta.ExposesHTTPServices)
+		})
+	}
+}