Skip to content

Commit 301d2b7

Browse files
committed
add tests
1 parent b616fab commit 301d2b7

File tree

6 files changed

+291
-0
lines changed

6 files changed

+291
-0
lines changed
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
package deploymentrepo_test
2+
3+
import (
4+
"path/filepath"
5+
"testing"
6+
7+
"github.com/go-git/go-git/v5"
8+
deploymentrepo "github.com/openmcp-project/bootstrapper/internal/deployment-repo"
9+
gitconfig "github.com/openmcp-project/bootstrapper/internal/git-config"
10+
testutils "github.com/openmcp-project/bootstrapper/test/utils"
11+
"github.com/stretchr/testify/assert"
12+
)
13+
14+
func Test_Repo(t *testing.T) {
15+
originDir := t.TempDir()
16+
targetDir := t.TempDir()
17+
18+
origin, err := git.PlainInit(originDir, false)
19+
assert.NoError(t, err)
20+
21+
originWorkTree, err := origin.Worktree()
22+
assert.NoError(t, err)
23+
assert.NotNil(t, originWorkTree)
24+
25+
dummyFilePath := filepath.Join(originDir, "dummy.txt")
26+
testutils.WriteToFile(t, dummyFilePath, "This is a dummy file.")
27+
testutils.AddFileToWorkTree(t, originWorkTree, "dummy.txt")
28+
testutils.WorkTreeCommit(t, originWorkTree, "Initial commit")
29+
30+
gitConfig := &gitconfig.Config{}
31+
32+
repo, err := deploymentrepo.CloneRepo(originDir, targetDir, gitConfig)
33+
assert.NoError(t, err)
34+
assert.NotNil(t, repo)
35+
36+
repoWorkTree, err := repo.Worktree()
37+
assert.NoError(t, err)
38+
assert.NotNil(t, repoWorkTree)
39+
40+
err = deploymentrepo.CheckoutAndCreateBranchIfNotExists(repo, "test", gitConfig)
41+
assert.NoError(t, err)
42+
43+
testFilePath := filepath.Join(targetDir, "test.txt")
44+
testutils.WriteToFile(t, testFilePath, "This is a test file.")
45+
testutils.AddFileToWorkTree(t, repoWorkTree, "test.txt")
46+
47+
err = deploymentrepo.CommitChanges(repo, "Add test.txt", "Test User", "noreply@test")
48+
assert.NoError(t, err)
49+
50+
err = deploymentrepo.PushRepo(repo, "test", gitConfig)
51+
assert.NoError(t, err)
52+
53+
hasTestBranch := false
54+
branchIter, err := origin.Branches()
55+
assert.NoError(t, err)
56+
for {
57+
branch, err := branchIter.Next()
58+
if err != nil {
59+
break
60+
}
61+
t.Logf("Branch: %s", branch.Name().String())
62+
if branch.Name().Short() == "test" {
63+
hasTestBranch = true
64+
break
65+
}
66+
}
67+
68+
assert.True(t, hasTestBranch, "Origin repository should have 'test' branch")
69+
}
Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,101 @@
1+
package deploymentrepo_test
2+
3+
import (
4+
"path/filepath"
5+
"testing"
6+
7+
"github.com/go-git/go-git/v5"
8+
deploymentrepo "github.com/openmcp-project/bootstrapper/internal/deployment-repo"
9+
ocmcli "github.com/openmcp-project/bootstrapper/internal/ocm-cli"
10+
testutils "github.com/openmcp-project/bootstrapper/test/utils"
11+
"github.com/stretchr/testify/assert"
12+
"sigs.k8s.io/yaml"
13+
)
14+
15+
func TestTemplateDir(t *testing.T) {
16+
templateDir := t.TempDir()
17+
repoDir := t.TempDir()
18+
19+
templateFilePath := filepath.Join(templateDir, "template.txt")
20+
templateContent := "Hello, {{.values.name}}!"
21+
testutils.WriteToFile(t, templateFilePath, templateContent)
22+
23+
repo, err := git.PlainInit(repoDir, false)
24+
assert.NoError(t, err)
25+
assert.NotNil(t, repo)
26+
27+
templateInput := map[string]interface{}{
28+
"name": "World",
29+
}
30+
31+
err = deploymentrepo.TemplateDir(templateDir, templateInput, repo)
32+
assert.NoError(t, err)
33+
34+
templateResult := testutils.ReadFromFile(t, filepath.Join(repoDir, "template.txt"))
35+
assert.Equal(t, "Hello, World!", templateResult)
36+
37+
workTree, err := repo.Worktree()
38+
workTreeStatus, err := workTree.Status()
39+
assert.NoError(t, err)
40+
assert.False(t, workTreeStatus.IsClean())
41+
workTreeStatus.File("template.txt").Staging = git.Added
42+
}
43+
44+
func TestTemplateProviders(t *testing.T) {
45+
testutils.DownloadOCMAndAddToPath(t)
46+
47+
ctfIn := testutils.BuildComponent("./testdata/01/component-constructor.yaml", t)
48+
49+
compGetter := ocmcli.NewComponentGetter(ctfIn+"//github.com/openmcp-project/openmcp", "deployment-templates/templates", ocmcli.NoOcmConfig)
50+
assert.NotNil(t, compGetter)
51+
52+
err := compGetter.InitializeComponents(t.Context())
53+
assert.NoError(t, err)
54+
55+
repoDir := t.TempDir()
56+
repo, err := git.PlainInit(repoDir, false)
57+
assert.NoError(t, err)
58+
59+
clusterProviders := []string{"test"}
60+
serviceProviders := []string{"test"}
61+
platformServices := []string{"test"}
62+
imagePullSecrets := []string{"imgpull-a", "imgpull-b"}
63+
64+
err = deploymentrepo.TemplateProviders(t.Context(), clusterProviders, serviceProviders, platformServices, imagePullSecrets, compGetter, repo)
65+
assert.NoError(t, err)
66+
67+
clusterProviderTestRaw := testutils.ReadFromFile(t, filepath.Join(repoDir, "cluster-providers", "test.yaml"))
68+
var clusterProviderTest map[string]interface{}
69+
err = yaml.Unmarshal([]byte(clusterProviderTestRaw), &clusterProviderTest)
70+
assert.NoError(t, err)
71+
validateProvider(t, clusterProviderTest, "test", "ghcr.io/openmcp-project/images/cluster-provider-test:v0.1.0", []string{"imgpull-a", "imgpull-b"})
72+
73+
serviceProviderTestRaw := testutils.ReadFromFile(t, filepath.Join(repoDir, "service-providers", "test.yaml"))
74+
var serviceProviderTest map[string]interface{}
75+
err = yaml.Unmarshal([]byte(serviceProviderTestRaw), &serviceProviderTest)
76+
assert.NoError(t, err)
77+
validateProvider(t, serviceProviderTest, "test", "ghcr.io/openmcp-project/images/service-provider-test:v0.2.0", []string{"imgpull-a", "imgpull-b"})
78+
79+
platformServiceTestRaw := testutils.ReadFromFile(t, filepath.Join(repoDir, "platform-services", "test.yaml"))
80+
var platformServiceTest map[string]interface{}
81+
err = yaml.Unmarshal([]byte(platformServiceTestRaw), &platformServiceTest)
82+
assert.NoError(t, err)
83+
validateProvider(t, platformServiceTest, "test", "ghcr.io/openmcp-project/images/platform-service-test:v0.3.0", []string{"imgpull-a", "imgpull-b"})
84+
}
85+
86+
func validateProvider(t *testing.T, provider map[string]interface{}, name, image string, imagePullSecrets []string) {
87+
assert.Contains(t, provider, "metadata")
88+
assert.Contains(t, provider["metadata"], "name")
89+
assert.Equal(t, name, provider["metadata"].(map[string]interface{})["name"])
90+
91+
assert.Contains(t, provider, "spec")
92+
assert.Contains(t, provider["spec"], "image")
93+
assert.Equal(t, image, provider["spec"].(map[string]interface{})["image"])
94+
assert.Contains(t, provider["spec"], "imagePullSecrets")
95+
96+
imagePullSecretsList := provider["spec"].(map[string]interface{})["imagePullSecrets"].([]interface{})
97+
assert.Len(t, imagePullSecretsList, len(imagePullSecrets))
98+
for _, ips := range imagePullSecrets {
99+
assert.Contains(t, imagePullSecretsList, map[string]interface{}{"name": ips})
100+
}
101+
}
Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
components:
2+
- name: github.com/openmcp-project/openmcp
3+
version: v0.0.1
4+
provider:
5+
name: openmcp-project
6+
7+
componentReferences:
8+
- componentName: github.com/openmcp-project/cluster-provider-test
9+
name: cluster-provider-test
10+
version: v0.1.0
11+
12+
- componentName: github.com/openmcp-project/service-provider-test
13+
name: service-provider-test
14+
version: v0.2.0
15+
16+
- componentName: github.com/openmcp-project/platform-service-test
17+
name: platform-service-test
18+
version: v0.3.0
19+
20+
- componentName: github.com/openmcp-project/deployment-templates
21+
name: deployment-templates
22+
version: v0.1.1
23+
24+
- name: github.com/openmcp-project/cluster-provider-test
25+
version: v0.1.0
26+
provider:
27+
name: openmcp-project
28+
29+
resources:
30+
- name: cluster-provider-test-image
31+
type: ociImage
32+
version: v0.1.0
33+
access:
34+
type: ociArtifact
35+
imageReference: ghcr.io/openmcp-project/images/cluster-provider-test:v0.1.0
36+
37+
- name: github.com/openmcp-project/service-provider-test
38+
version: v0.2.0
39+
provider:
40+
name: openmcp-project
41+
42+
resources:
43+
- name: service-provider-test-image
44+
type: ociImage
45+
version: v0.2.0
46+
access:
47+
type: ociArtifact
48+
imageReference: ghcr.io/openmcp-project/images/service-provider-test:v0.2.0
49+
50+
- name: github.com/openmcp-project/platform-service-test
51+
version: v0.3.0
52+
provider:
53+
name: openmcp-project
54+
55+
resources:
56+
- name: service-provider-test-image
57+
type: ociImage
58+
version: v0.3.0
59+
access:
60+
type: ociArtifact
61+
imageReference: ghcr.io/openmcp-project/images/platform-service-test:v0.3.0
62+
63+
- name: github.com/openmcp-project/deployment-templates
64+
version: v0.1.1
65+
provider:
66+
name: openmcp-project
67+
68+
resources:
69+
- name: templates
70+
type: fileSystem
71+
version: v0.1.1
72+
input:
73+
type: dir
74+
path: ./templates
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
root

test/utils/git.go

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
package utils
2+
3+
import (
4+
"os"
5+
"testing"
6+
"time"
7+
8+
"github.com/go-git/go-git/v5"
9+
"github.com/go-git/go-git/v5/plumbing/object"
10+
)
11+
12+
func WriteToFile(t *testing.T, filePath, content string) {
13+
err := os.WriteFile(filePath, []byte(content), 0644)
14+
if err != nil {
15+
t.Fatalf("failed to write to file %s: %v", filePath, err)
16+
}
17+
}
18+
19+
func ReadFromFile(t *testing.T, filePath string) string {
20+
data, err := os.ReadFile(filePath)
21+
if err != nil {
22+
t.Fatalf("failed to read from file %s: %v", filePath, err)
23+
}
24+
return string(data)
25+
}
26+
27+
func AddFileToWorkTree(t *testing.T, workTree *git.Worktree, filePath string) {
28+
_, err := workTree.Add(filePath)
29+
if err != nil {
30+
t.Fatalf("failed to add file %s to worktree: %v", filePath, err)
31+
}
32+
}
33+
34+
func WorkTreeCommit(t *testing.T, workTree *git.Worktree, message string) {
35+
_, err := workTree.Commit(message, &git.CommitOptions{
36+
Author: &object.Signature{
37+
Name: "Test User",
38+
Email: "noreply@test",
39+
When: time.Now(),
40+
},
41+
})
42+
if err != nil {
43+
t.Fatalf("failed to commit changes: %v", err)
44+
}
45+
}

test/utils/ocm.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,7 @@ func BuildComponent(componentConstructorLocation string, t *testing.T) string {
118118
"add",
119119
"componentversions",
120120
"--create",
121+
"--skip-digest-generation",
121122
"--file",
122123
ctfDir,
123124
componentConstructorLocation}...)

0 commit comments

Comments
 (0)