You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by pc...@apache.org on 2023/03/24 10:42:40 UTC

[camel-k] 01/03: Chore: docker unit tests

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

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

commit 457f8352de007a6ea8005b9e91b92a1aa61ee32b
Author: Martin Olsiak <ma...@gmail.com>
AuthorDate: Thu Mar 23 11:33:20 2023 +0100

    Chore: docker unit tests
    
    * docker test
    * comprss test
    * keystore test
    * camel util test
---
 pkg/util/camel/camel_util_test.go                  |  53 ++++++++
 pkg/util/docker/docker_base_test.go                |  95 ++++++++++++++
 pkg/util/docker/docker_test.go                     | 144 +++++++++++++++++++++
 pkg/util/gzip/compress_test.go                     |  12 ++
 .../compress_test.go => jvm/keystore_test.go}      |  24 +++-
 5 files changed, 321 insertions(+), 7 deletions(-)

diff --git a/pkg/util/camel/camel_util_test.go b/pkg/util/camel/camel_util_test.go
index 945631ba0..d696dab95 100644
--- a/pkg/util/camel/camel_util_test.go
+++ b/pkg/util/camel/camel_util_test.go
@@ -18,8 +18,10 @@ limitations under the License.
 package camel
 
 import (
+	"sort"
 	"testing"
 
+	"github.com/Masterminds/semver"
 	"github.com/stretchr/testify/assert"
 
 	v1 "github.com/apache/camel-k/v2/pkg/apis/camel/v1"
@@ -64,3 +66,54 @@ func TestFindRangeMatch(t *testing.T) {
 	assert.Equal(t, "1.0.2", c.Runtime.Version)
 	assert.Equal(t, v1.RuntimeProviderQuarkus, c.Runtime.Provider)
 }
+
+func TestMissingMatch(t *testing.T) {
+	catalogs := []v1.CamelCatalog{
+		{Spec: v1.CamelCatalogSpec{Runtime: v1.RuntimeSpec{Version: "1.0.0", Provider: v1.RuntimeProviderQuarkus}}},
+	}
+
+	c, err := findBestMatch(catalogs, v1.RuntimeSpec{Version: "1.0.1", Provider: v1.RuntimeProviderQuarkus})
+	assert.Nil(t, err)
+	assert.Nil(t, c)
+}
+
+func TestNewCatalogVersionCollection(t *testing.T) {
+	catalogs := []v1.CamelCatalog{
+		{Spec: v1.CamelCatalogSpec{Runtime: v1.RuntimeSpec{Version: "1.0.0", Provider: v1.RuntimeProviderQuarkus}}},
+	}
+
+	versions := make([]CatalogVersion, 0, len(catalogs))
+	rv, _ := semver.NewVersion(catalogs[0].Spec.Runtime.Version)
+	versions = append(versions, CatalogVersion{
+		RuntimeVersion: rv,
+		Catalog:        &catalogs[0],
+	})
+	expected := CatalogVersionCollection(versions)
+	sort.Sort(sort.Reverse(expected))
+
+	c := newCatalogVersionCollection(catalogs)
+
+	assert.Equal(t, expected, c)
+
+}
+func TestIncorrectConstraint(t *testing.T) {
+	rc := newSemVerConstraint("1.A.0")
+	assert.Nil(t, rc)
+
+	catalogs := []v1.CamelCatalog{
+		{Spec: v1.CamelCatalogSpec{Runtime: v1.RuntimeSpec{Version: "1.A.0", Provider: v1.RuntimeProviderQuarkus}}},
+	}
+	c, err := findBestMatch(catalogs, v1.RuntimeSpec{Version: "1.0.0", Provider: v1.RuntimeProviderQuarkus})
+	assert.Nil(t, err)
+	assert.Nil(t, c)
+}
+
+func TestGetDependency(t *testing.T) {
+	artifact := v1.CamelArtifact{}
+	artifact.ArtifactID = "camel-quarkus-"
+	provider := v1.RuntimeProviderQuarkus
+	assert.Equal(t, "camel:", getDependency(artifact, provider))
+	provider = v1.RuntimeProvider("notquarkus")
+	artifact.ArtifactID = "camel-"
+	assert.Equal(t, "camel:", getDependency(artifact, provider))
+}
diff --git a/pkg/util/docker/docker_base_test.go b/pkg/util/docker/docker_base_test.go
new file mode 100644
index 000000000..4456aebdf
--- /dev/null
+++ b/pkg/util/docker/docker_base_test.go
@@ -0,0 +1,95 @@
+/*
+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 docker
+
+import (
+	"testing"
+
+	"github.com/stretchr/testify/assert"
+)
+
+func TestBuildImageArgs(t *testing.T) {
+
+	args := BuildImageArgs("dockerfileDirectory", "imageName", "sourceDirectory")
+	assert.Equal(t, "build", args[0])
+	assert.Equal(t, "-f", args[1])
+	assert.Equal(t, "dockerfileDirectory/Dockerfile", args[2])
+	assert.Equal(t, "-t", args[3])
+	assert.Equal(t, "imageName", args[4])
+	assert.Equal(t, "sourceDirectory", args[5])
+}
+
+func TestRunImageArgs(t *testing.T) {
+
+	args, err := RunImageArgs("imagePath", "tag")
+	assert.Nil(t, err)
+	assert.Equal(t, "run", args[0])
+	assert.Equal(t, "--network="+NetworkName, args[1])
+	assert.Equal(t, "-t", args[2])
+	assert.Equal(t, "imagePath:tag", args[3])
+}
+
+func TestDockerfilePathArg(t *testing.T) {
+	args := DockerfilePathArg("path/docker")
+	assert.Equal(t, "-f", args[0])
+	assert.Equal(t, "path/docker", args[1])
+}
+
+func TestImageArg(t *testing.T) {
+	args := ImageArg("imageName", "tag")
+	assert.Equal(t, "-t", args[0])
+	assert.Equal(t, "imageName:tag", args[1])
+}
+
+func TestLatestImageArg(t *testing.T) {
+	args := LatestImageArg("imageName")
+	assert.Equal(t, "-t", args[0])
+	assert.Equal(t, "imageName:latest", args[1])
+}
+
+func TestFullImageArg(t *testing.T) {
+	args := FullImageArg("dir/imageName:tag")
+	assert.Equal(t, "-t", args[0])
+	assert.Equal(t, "dir/imageName:tag", args[1])
+
+	args = FullImageArg("imageName:tag")
+	assert.Equal(t, "-t", args[0])
+	assert.Equal(t, "imageName:tag", args[1])
+
+	args = FullImageArg("imageName")
+	assert.Equal(t, "-t", args[0])
+	assert.Equal(t, "imageName:latest", args[1])
+}
+
+func TestGetImage(t *testing.T) {
+	image := GetImage("imageName", "tag")
+	assert.Equal(t, "imageName:tag", image)
+	assert.Equal(t, GetImage("imageName", "latest"), GetLatestImage("imageName"))
+}
+
+func TestGetFullDockerImage(t *testing.T) {
+	image := GetFullDockerImage("dir/dir/imageName", "tag")
+	assert.Equal(t, "dir/dir/imageName:tag", image)
+	image = GetFullDockerImage("imageName", "tag")
+	assert.Equal(t, "imageName:tag", image)
+}
+
+func TestJoinPath(t *testing.T) {
+	path := JoinPath("path1", "dir/path2")
+	assert.Equal(t, "path1/dir/path2", path)
+}
diff --git a/pkg/util/docker/docker_test.go b/pkg/util/docker/docker_test.go
new file mode 100644
index 000000000..f14ec3a5a
--- /dev/null
+++ b/pkg/util/docker/docker_test.go
@@ -0,0 +1,144 @@
+/*
+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 docker
+
+import (
+	"os"
+	"os/exec"
+	"path/filepath"
+	"strings"
+	"testing"
+
+	"github.com/apache/camel-k/v2/pkg/util"
+	"github.com/apache/camel-k/v2/pkg/util/defaults"
+	"github.com/stretchr/testify/assert"
+)
+
+func TestCreateBaseImageDockerFile(t *testing.T) {
+
+	dockerfileExists, _ := util.FileExists("Dockerfile")
+	if dockerfileExists {
+		os.Remove("Dockerfile")
+	}
+
+	dockerFile := []string{}
+	dockerFile = append(dockerFile, FROM(defaults.BaseImage()))
+	dockerFile = append(dockerFile, RUNMavenInstall())
+	expected := strings.Join(dockerFile, "\n")
+
+	BaseWorkingDirectory = ""
+
+	err := CreateBaseImageDockerFile()
+	assert.Nil(t, err)
+	baseDockerFilePath := filepath.Join(BaseWorkingDirectory, "Dockerfile")
+
+	c, err := util.ReadFile(baseDockerFilePath)
+
+	assert.Nil(t, err)
+	assert.Equal(t, expected, string(c))
+
+}
+
+func TestCreateIntegrationImageDockerFile(t *testing.T) {
+	dockerfileExists, _ := util.FileExists("Dockerfile")
+	if dockerfileExists {
+		os.Remove("Dockerfile")
+	}
+
+	var cmd exec.Cmd
+	cmd.Path = "test"
+	cmd.Env = []string{"key=value"}
+	cmd.Args = []string{"-t"}
+	dockerFile1 := []string{}
+	dockerFile1 = append(dockerFile1, FROM(GetFullDockerImage(GetBaseImagePath(), latestTag)))
+	dockerFile1 = append(dockerFile1, RUNMakeDir(GetContainerWorkspaceDir()))
+	dockerFile1 = append(dockerFile1, COPY(util.DefaultRoutesDirectoryName, GetContainerRoutesDir()))
+	dockerFile1 = append(dockerFile1, COPY(util.DefaultPropertiesDirectoryName, GetContainerPropertiesDir()))
+	dockerFile1 = append(dockerFile1, COPY(util.DefaultDependenciesDirectoryName, GetContainerDependenciesDir()))
+
+	dockerFile2 := dockerFile1
+	dockerFile2 = append(dockerFile2, RUNMakeDir(util.ContainerQuarkusDirectoryName))
+	dockerFile2 = append(dockerFile2, RUNMakeDir(util.ContainerLibDirectoryName))
+	dockerFile2 = append(dockerFile2, RUNMakeDir(util.ContainerAppDirectoryName))
+	dockerFile2 = append(dockerFile2, COPY(util.CustomQuarkusDirectoryName, util.ContainerQuarkusDirectoryName))
+	dockerFile2 = append(dockerFile2, COPY(util.CustomLibDirectoryName, util.ContainerLibDirectoryName))
+	dockerFile2 = append(dockerFile2, COPY(util.CustomAppDirectoryName, util.ContainerAppDirectoryName))
+
+	for _, keyValue := range cmd.Env {
+		values := strings.Split(keyValue, "=")
+		dockerFile1 = append(dockerFile1, ENV(values[0], strings.Join(values[1:], "=")))
+		dockerFile2 = append(dockerFile2, ENV(values[0], strings.Join(values[1:], "=")))
+	}
+	dockerFile1 = append(dockerFile1, CMDShellWrap(strings.Join(cmd.Args, " ")))
+	dockerFile2 = append(dockerFile2, CMDShellWrap(strings.Join(cmd.Args, " ")))
+
+	expected := strings.Join(dockerFile1, "\n")
+
+	err := CreateIntegrationImageDockerFile(&cmd, false)
+	assert.Nil(t, err)
+
+	c, err := util.ReadFile("Dockerfile")
+	assert.Nil(t, err)
+	assert.Equal(t, expected, string(c))
+
+	os.Remove("Dockerfile")
+
+	expected = strings.Join(dockerFile2, "\n")
+
+	err = CreateIntegrationImageDockerFile(&cmd, true)
+	assert.Nil(t, err)
+
+	c, err = util.ReadFile("Dockerfile")
+	assert.Nil(t, err)
+	assert.Equal(t, expected, string(c))
+
+	os.Remove("Dockerfile")
+
+	CreateBaseImageDockerFile()
+}
+
+func TestContainerizeFilePaths(t *testing.T) {
+	expected := []string{"home/quarkus-app"}
+
+	dependencyPaths := []string{"test1/quarkus-app"}
+	newDir := "home"
+	result := ContainerizeFilePaths(dependencyPaths, newDir)
+
+	assert.Equal(t, expected, result)
+}
+
+func TestContainerizeDependencyPaths(t *testing.T) {
+	expected := []string{"home/quarkus-app", "home/not-quarkus-app"}
+
+	dependencyPaths := []string{"test1/quarkus-app", "not-quarkus-app"}
+	newDir := "home"
+	result := ContainerizeDependencyPaths(dependencyPaths, newDir)
+
+	assert.Equal(t, expected, result)
+}
+
+func TestExtractRegistryName(t *testing.T) {
+	expected := "localhost:5000"
+
+	result, err := ExtractRegistryName("localhost:5000/imageName")
+	assert.Nil(t, err)
+	assert.Equal(t, expected, result)
+
+	_, err = ExtractRegistryName("imageName")
+	assert.NotNil(t, err)
+}
diff --git a/pkg/util/gzip/compress_test.go b/pkg/util/gzip/compress_test.go
index 97cc19580..2ea281b4c 100644
--- a/pkg/util/gzip/compress_test.go
+++ b/pkg/util/gzip/compress_test.go
@@ -18,12 +18,24 @@ limitations under the License.
 package gzip
 
 import (
+	"bytes"
 	"testing"
 
 	"github.com/stretchr/testify/assert"
 )
 
 func TestCompression(t *testing.T) {
+	source := "this is a script"
+	var compressed bytes.Buffer
+	err := Compress(&compressed, []byte(source))
+	assert.Nil(t, err)
+	var uncompressed bytes.Buffer
+	err = Uncompress(&uncompressed, compressed.Bytes())
+	assert.Nil(t, err)
+	assert.Equal(t, source, uncompressed.String())
+}
+
+func TestCompression64(t *testing.T) {
 	source := "this is a script"
 	compressed, err := CompressBase64([]byte(source))
 	assert.Nil(t, err)
diff --git a/pkg/util/gzip/compress_test.go b/pkg/util/jvm/keystore_test.go
similarity index 66%
copy from pkg/util/gzip/compress_test.go
copy to pkg/util/jvm/keystore_test.go
index 97cc19580..251923dbf 100644
--- a/pkg/util/gzip/compress_test.go
+++ b/pkg/util/jvm/keystore_test.go
@@ -15,19 +15,29 @@ See the License for the specific language governing permissions and
 limitations under the License.
 */
 
-package gzip
+package jvm
 
 import (
+	"context"
 	"testing"
 
 	"github.com/stretchr/testify/assert"
 )
 
-func TestCompression(t *testing.T) {
-	source := "this is a script"
-	compressed, err := CompressBase64([]byte(source))
-	assert.Nil(t, err)
-	uncompressed, err := UncompressBase64(compressed)
+func TestGenerateKeystore(t *testing.T) {
+
+	//No Data
+	var data [][]byte
+	ctx := context.Background()
+	err := GenerateKeystore(ctx, "", "name", NewKeystorePassword(), data)
 	assert.Nil(t, err)
-	assert.Equal(t, source, string(uncompressed))
+
+	//Correct input
+	data = [][]byte{{0}, {1}}
+	err = GenerateKeystore(ctx, "", "name", NewKeystorePassword(), data)
+	assert.NotNil(t, err)
+
+	//Incorrect input format
+	err = GenerateKeystore(ctx, "", "name", "", data)
+	assert.NotNil(t, err)
 }