|
| 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 | +} |
0 commit comments