Skip to content

Commit 57b1aef

Browse files
committed
tests: add pull secrets test
1 parent 192c20a commit 57b1aef

7 files changed

Lines changed: 121 additions & 11 deletions

File tree

e2e/e2e_suite_test.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import (
1818
_ "github.com/loft-sh/devspace/e2e/tests/hooks"
1919
_ "github.com/loft-sh/devspace/e2e/tests/imports"
2020
_ "github.com/loft-sh/devspace/e2e/tests/init"
21+
_ "github.com/loft-sh/devspace/e2e/tests/pullsecret"
2122
_ "github.com/loft-sh/devspace/e2e/tests/render"
2223
_ "github.com/loft-sh/devspace/e2e/tests/replacepods"
2324
_ "github.com/loft-sh/devspace/e2e/tests/sync"
Lines changed: 90 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,99 @@
11
package pullsecret
22

3-
import "github.com/onsi/ginkgo"
3+
import (
4+
"context"
5+
"encoding/base64"
6+
"github.com/loft-sh/devspace/cmd"
7+
"github.com/loft-sh/devspace/cmd/flags"
8+
"github.com/loft-sh/devspace/e2e/framework"
9+
"github.com/loft-sh/devspace/e2e/kube"
10+
"github.com/loft-sh/devspace/pkg/util/factory"
11+
"github.com/onsi/ginkgo"
12+
k8sv1 "k8s.io/api/core/v1"
13+
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
14+
"os"
15+
"sort"
16+
)
417

518
var _ = DevSpaceDescribe("pullsecret", func() {
6-
ginkgo.It("should create pullsecret with user & password", func() {
7-
// TODO
8-
})
19+
initialDir, err := os.Getwd()
20+
if err != nil {
21+
panic(err)
22+
}
23+
24+
// create a new factory
25+
var (
26+
f factory.Factory
27+
kubeClient *kube.KubeHelper
28+
)
929

10-
ginkgo.It("should add pull secret to service account", func() {
11-
// TODO
30+
ginkgo.BeforeEach(func() {
31+
f = framework.NewDefaultFactory()
32+
33+
kubeClient, err = kube.NewKubeHelper()
34+
framework.ExpectNoError(err)
1235
})
1336

14-
ginkgo.It("should create pullsecret from dockercache", func() {
15-
// TODO
37+
ginkgo.It("should create pullsecret with user & password", func() {
38+
tempDir, err := framework.CopyToTempDir("tests/pullsecret/testdata/simple")
39+
framework.ExpectNoError(err)
40+
defer framework.CleanupTempDir(initialDir, tempDir)
41+
42+
ns, err := kubeClient.CreateNamespace("pullsecret")
43+
framework.ExpectNoError(err)
44+
defer func() {
45+
err := kubeClient.DeleteNamespace(ns)
46+
framework.ExpectNoError(err)
47+
}()
48+
49+
// create a new dev command
50+
deployCmd := &cmd.DeployCmd{
51+
GlobalFlags: &flags.GlobalFlags{
52+
NoWarn: true,
53+
Namespace: ns,
54+
},
55+
}
56+
57+
// run the command
58+
err = deployCmd.Run(f)
59+
framework.ExpectNoError(err)
60+
61+
// check if secrets are created
62+
pullSecret, err := kubeClient.RawClient().CoreV1().Secrets(ns).Get(context.TODO(), "test-secret", metav1.GetOptions{})
63+
framework.ExpectNoError(err)
64+
framework.ExpectEqual(len(pullSecret.Data), 1)
65+
registryAuthEncoded := base64.StdEncoding.EncodeToString([]byte("my-user:my-password"))
66+
pullSecretDataValue := []byte(`{
67+
"auths": {
68+
"ghcr.io": {
69+
"auth": "` + registryAuthEncoded + `",
70+
"email": "noreply@devspace.sh"
71+
}
72+
}
73+
}`)
74+
framework.ExpectEqual(string(pullSecret.Data[k8sv1.DockerConfigJsonKey]), string(pullSecretDataValue))
75+
76+
pullSecret, err = kubeClient.RawClient().CoreV1().Secrets(ns).Get(context.TODO(), "devspace-auth-ghcr2-io", metav1.GetOptions{})
77+
framework.ExpectNoError(err)
78+
framework.ExpectEqual(len(pullSecret.Data), 1)
79+
registryAuthEncoded = base64.StdEncoding.EncodeToString([]byte("my-user2:my-password2"))
80+
pullSecretDataValue = []byte(`{
81+
"auths": {
82+
"ghcr2.io": {
83+
"auth": "` + registryAuthEncoded + `",
84+
"email": "noreply@devspace.sh"
85+
}
86+
}
87+
}`)
88+
framework.ExpectEqual(string(pullSecret.Data[k8sv1.DockerConfigJsonKey]), string(pullSecretDataValue))
89+
90+
serviceAccount, err := kubeClient.RawClient().CoreV1().ServiceAccounts(ns).Get(context.TODO(), "default", metav1.GetOptions{})
91+
framework.ExpectNoError(err)
92+
framework.ExpectEqual(len(serviceAccount.ImagePullSecrets), 2)
93+
sort.Slice(serviceAccount.ImagePullSecrets, func(i, j int) bool {
94+
return serviceAccount.ImagePullSecrets[i].Name < serviceAccount.ImagePullSecrets[j].Name
95+
})
96+
framework.ExpectEqual(serviceAccount.ImagePullSecrets[0].Name, "devspace-auth-ghcr2-io")
97+
framework.ExpectEqual(serviceAccount.ImagePullSecrets[1].Name, "test-secret")
1698
})
1799
})
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
version: v2beta1
2+
name: pullsecrets
3+
pullSecrets:
4+
test2:
5+
registry: ghcr2.io
6+
username: my-user2
7+
password: my-password2
8+
serviceAccounts: ["default"]
9+
test:
10+
registry: ghcr.io
11+
username: my-user
12+
password: my-password
13+
secret: test-secret

pkg/devspace/pipeline/pipeline.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -197,7 +197,7 @@ func (p *pipeline) startNewDependency(ctx *devspacecontext.Context, dependency t
197197
p.dependencies[dependency.Name()] = pip
198198
p.m.Unlock()
199199

200-
if _, ok := ctx.Log.(*log.StreamLogger); !ok {
200+
if streamLogger, ok := ctx.Log.(*log.StreamLogger); !ok || streamLogger.GetFormat() != log.RawFormat {
201201
ctx = ctx.WithLogger(log.NewDefaultPrefixLogger(dependency.Name()+" ", ctx.Log))
202202
}
203203
return pip.Run(ctx.AsDependency(dependency))

pkg/devspace/pullsecrets/init.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package pullsecrets
33
import (
44
devspacecontext "github.com/loft-sh/devspace/pkg/devspace/context"
55
"github.com/loft-sh/devspace/pkg/devspace/docker"
6+
"github.com/loft-sh/devspace/pkg/util/log"
67
"github.com/loft-sh/devspace/pkg/util/stringutil"
78
"time"
89

@@ -94,6 +95,7 @@ func (r *client) EnsurePullSecrets(ctx *devspacecontext.Context, dockerClient do
9495
continue
9596
}
9697

98+
ctx := ctx.WithLogger(log.NewDefaultPrefixLogger("pullsecret:"+pullSecretConf.Name+" ", ctx.Log))
9799
err = r.ensurePullSecret(ctx, dockerClient, ctx.KubeClient.Namespace(), pullSecretConf)
98100
if err != nil {
99101
return err
@@ -170,7 +172,7 @@ func (r *client) createPullSecret(ctx *devspacecontext.Context, dockerClient doc
170172

171173
email := pullSecret.Email
172174
if email == "" {
173-
email = "noreply@devspace.cloud"
175+
email = "noreply@devspace.sh"
174176
}
175177

176178
if username != "" && password != "" {

pkg/devspace/pullsecrets/registry.go

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,12 +48,17 @@ func (r *client) CreatePullSecret(ctx *devspacecontext.Context, options *PullSec
4848
authToken = options.Username + ":" + authToken
4949
}
5050

51+
email := options.Email
52+
if email == "" {
53+
email = "noreply@devspace.sh"
54+
}
55+
5156
registryAuthEncoded := base64.StdEncoding.EncodeToString([]byte(authToken))
5257
pullSecretDataValue := []byte(`{
5358
"auths": {
5459
"` + options.RegistryURL + `": {
5560
"auth": "` + registryAuthEncoded + `",
56-
"email": "` + options.Email + `"
61+
"email": "` + email + `"
5762
}
5863
}
5964
}`)

pkg/util/log/stream_logger.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,13 @@ func formatInt(i int) string {
137137
return formatted
138138
}
139139

140+
func (s *StreamLogger) GetFormat() Format {
141+
s.m.Lock()
142+
defer s.m.Unlock()
143+
144+
return s.format
145+
}
146+
140147
func (s *StreamLogger) WithLevel(level logrus.Level) Logger {
141148
s.m.Lock()
142149
defer s.m.Unlock()

0 commit comments

Comments
 (0)