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)
}