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

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

commit c4f37cf7ae4f7e81ccc1ae0e45410eb691674adc
Author: Antonin Stefanutti <[email protected]>
AuthorDate: Wed Oct 23 10:41:12 2019 +0200

    fix(quarkus): Catalog exact matching logic should take runtime provider 
into account
---
 pkg/apis/camel/v1alpha1/camelcatalog_types.go |  2 +-
 pkg/apis/camel/v1alpha1/common_types.go       |  4 ++--
 pkg/metadata/metadata_dependencies_test.go    | 26 ++++++++++++++++++++++++++
 pkg/util/camel/camel_util.go                  | 10 ++++++++--
 pkg/util/camel/catalog.go                     | 14 +++++++++++++-
 5 files changed, 50 insertions(+), 6 deletions(-)

diff --git a/pkg/apis/camel/v1alpha1/camelcatalog_types.go 
b/pkg/apis/camel/v1alpha1/camelcatalog_types.go
index 65a1d65..3ae6999 100644
--- a/pkg/apis/camel/v1alpha1/camelcatalog_types.go
+++ b/pkg/apis/camel/v1alpha1/camelcatalog_types.go
@@ -55,7 +55,7 @@ type CamelArtifact struct {
 type CamelCatalogSpec struct {
        Version         string                   `json:"version" yaml:"version"`
        RuntimeVersion  string                   `json:"runtimeVersion" 
yaml:"runtimeVersion"`
-       RuntimeProvider *RuntimeProvider         
`json:"runtimeProvider,omitempty"`
+       RuntimeProvider *RuntimeProvider         
`json:"runtimeProvider,omitempty" yaml:"runtimeProvider"`
        Artifacts       map[string]CamelArtifact `json:"artifacts" 
yaml:"artifacts"`
 }
 
diff --git a/pkg/apis/camel/v1alpha1/common_types.go 
b/pkg/apis/camel/v1alpha1/common_types.go
index abf366f..2833890 100644
--- a/pkg/apis/camel/v1alpha1/common_types.go
+++ b/pkg/apis/camel/v1alpha1/common_types.go
@@ -29,8 +29,8 @@ type RuntimeProvider struct {
 
 // QuarkusRuntimeProvider --
 type QuarkusRuntimeProvider struct {
-       CamelQuarkusVersion string `json:"camelQuarkusVersion,omitempty"`
-       QuarkusVersion      string `json:"quarkusVersion,omitempty"`
+       CamelQuarkusVersion string `json:"camelQuarkusVersion,omitempty" 
yaml:"camelQuarkusVersion"`
+       QuarkusVersion      string `json:"quarkusVersion,omitempty" 
yaml:"quarkusVersion"`
 }
 
 // ConfigurationSpec --
diff --git a/pkg/metadata/metadata_dependencies_test.go 
b/pkg/metadata/metadata_dependencies_test.go
index d0919b5..bd1ceea 100644
--- a/pkg/metadata/metadata_dependencies_test.go
+++ b/pkg/metadata/metadata_dependencies_test.go
@@ -116,6 +116,32 @@ func TestDependencies(t *testing.T) {
        assert.ElementsMatch(t, []string{"camel:http", "camel:log", 
"camel:mock", "camel:twitter"}, meta.Dependencies.List())
 }
 
+func TestDependenciesQuarkus(t *testing.T) {
+       code := v1alpha1.SourceSpec{
+               DataSpec: v1alpha1.DataSpec{
+                       Name: "Request.java",
+                       Content: `
+                           from("http:test").to("log:end");
+                           from("https4:test").to("log:end");
+                           from("twitter-timeline:test").to("mock:end");
+                   `,
+               },
+               Language: v1alpha1.LanguageJavaSource,
+       }
+
+       catalog, err := camel.QuarkusCatalog()
+       assert.Nil(t, err)
+
+       meta := Extract(catalog, code)
+
+       assert.ElementsMatch(t,
+               []string{
+                       "mvn:org.apache.camel.quarkus:camel-quarkus-log:",
+                       "mvn:org.apache.camel.quarkus:camel-quarkus-twitter:",
+               },
+               meta.Dependencies.List())
+}
+
 func TestJacksonDependency(t *testing.T) {
        code := v1alpha1.SourceSpec{
                DataSpec: v1alpha1.DataSpec{
diff --git a/pkg/util/camel/camel_util.go b/pkg/util/camel/camel_util.go
index 6aecdfe..a368284 100644
--- a/pkg/util/camel/camel_util.go
+++ b/pkg/util/camel/camel_util.go
@@ -27,10 +27,16 @@ import (
 )
 
 func findBestMatch(catalogs []v1alpha1.CamelCatalog, camelVersion string, 
runtimeVersion string, provider interface{}) (*RuntimeCatalog, error) {
-       // FIXME: take the provider into account for exact match
+       // TODO: generic exact matching logic independent of the runtime 
provider
        for _, catalog := range catalogs {
                if catalog.Spec.Version == camelVersion && 
catalog.Spec.RuntimeVersion == runtimeVersion {
-                       return NewRuntimeCatalog(catalog.Spec), nil
+                       if provider == nil && catalog.Spec.RuntimeProvider == 
nil {
+                               return NewRuntimeCatalog(catalog.Spec), nil
+                       } else if provider, ok := 
provider.(v1alpha1.QuarkusRuntimeProvider); ok &&
+                               catalog.Spec.RuntimeProvider != nil && 
catalog.Spec.RuntimeProvider.Quarkus != nil &&
+                               provider == 
*catalog.Spec.RuntimeProvider.Quarkus {
+                               return NewRuntimeCatalog(catalog.Spec), nil
+                       }
                }
        }
 
diff --git a/pkg/util/camel/catalog.go b/pkg/util/camel/catalog.go
index a5a6d1e..e4442c9 100644
--- a/pkg/util/camel/catalog.go
+++ b/pkg/util/camel/catalog.go
@@ -29,6 +29,18 @@ import (
 
 // DefaultCatalog --
 func DefaultCatalog() (*RuntimeCatalog, error) {
+       return catalogForRuntimeProvider(nil)
+}
+
+// QuarkusCatalog --
+func QuarkusCatalog() (*RuntimeCatalog, error) {
+       return catalogForRuntimeProvider(v1alpha1.QuarkusRuntimeProvider{
+               CamelQuarkusVersion: "0.2.0",
+               QuarkusVersion:      "0.21.2",
+       })
+}
+
+func catalogForRuntimeProvider(provider interface{}) (*RuntimeCatalog, error) {
        catalogs := make([]v1alpha1.CamelCatalog, 0)
 
        for name, content := range deploy.Resources {
@@ -42,5 +54,5 @@ func DefaultCatalog() (*RuntimeCatalog, error) {
                }
        }
 
-       return findBestMatch(catalogs, defaults.DefaultCamelVersion, 
defaults.DefaultRuntimeVersion, nil)
+       return findBestMatch(catalogs, defaults.DefaultCamelVersion, 
defaults.DefaultRuntimeVersion, provider)
 }

Reply via email to