Skip to content

Commit 22942cb

Browse files
committed
refactoring and fix tests
Signed-off-by: Soule BA <[email protected]>
1 parent 441aad2 commit 22942cb

17 files changed

+384
-159
lines changed

api/v1/zz_generated.deepcopy.go

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

api/v1beta1/zz_generated.deepcopy.go

Lines changed: 7 additions & 7 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

api/v1beta2/zz_generated.deepcopy.go

Lines changed: 11 additions & 8 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

docs/spec/v1beta2/helmrepositories.md

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -459,10 +459,16 @@ a deprecation warning will be logged.
459459

460460
### Cert secret reference
461461

462+
<<<<<<< HEAD
462463
**Note:** TLS authentication is not yet supported by OCI Helm repositories.
463464

464465
`.spec.certSecretRef.name` is an optional field to specify a secret containing TLS
465466
certificate data. The secret can contain the following keys:
467+
=======
468+
To provide TLS credentials to use while connecting with the Helm repository,
469+
the referenced Secret is expected to contain `.data.certFile` and
470+
`.data.keyFile`, and/or `.data.caFile` values.
471+
>>>>>>> 3df4c49 (refactoring and fix tests)
466472

467473
* `certFile` and `keyFile`, to specify the client certificate and private key used for
468474
TLS client authentication. These must be used in conjunction, i.e. specifying one without
@@ -509,6 +515,28 @@ data:
509515
caFile: <BASE64>
510516
```
511517

518+
#### Provide TLS credentials in a secret of type kubernetes.io/dockerconfigjson
519+
520+
For OCI Helm repositories, Kubernetes secrets of type [kubernetes.io/dockerconfigjson](https://kubernetes.io/docs/concepts/configuration/secret/#secret-types)
521+
are also supported. It is possible to append TLS credentials to the secret data.
522+
523+
For example:
524+
525+
```yaml
526+
apiVersion: v1
527+
kind: Secret
528+
metadata:
529+
name: example-tls
530+
namespace: default
531+
type: kubernetes.io/dockerconfigjson
532+
data:
533+
.dockerconfigjson: <BASE64>
534+
certFile: <BASE64>
535+
keyFile: <BASE64>
536+
# NOTE: Can be supplied without the above values
537+
caFile: <BASE64>
538+
```
539+
512540
### Pass credentials
513541

514542
`.spec.passCredentials` is an optional field to allow the credentials from the

internal/controller/helmchart_controller_test.go

Lines changed: 58 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -1109,7 +1109,7 @@ func TestHelmChartReconciler_buildFromOCIHelmRepository(t *testing.T) {
11091109
g.Expect(err).NotTo(HaveOccurred())
11101110

11111111
// Upload the test chart
1112-
metadata, err := loadTestChartToOCI(chartData, chartPath, testRegistryServer)
1112+
metadata, err := loadTestChartToOCI(chartData, testRegistryServer, "", "", "")
11131113
g.Expect(err).NotTo(HaveOccurred())
11141114

11151115
storage, err := NewStorage(tmpDir, "example.com", retentionTTL, retentionRecords)
@@ -2237,14 +2237,15 @@ func TestHelmChartReconciler_reconcileSourceFromOCI_authStrategy(t *testing.T) {
22372237
type secretOptions struct {
22382238
username string
22392239
password string
2240-
ca []byte
22412240
}
22422241

22432242
tests := []struct {
22442243
name string
22452244
url string
22462245
registryOpts registryOptions
22472246
secretOpts secretOptions
2247+
secret *corev1.Secret
2248+
withTLS bool
22482249
provider string
22492250
providerImg string
22502251
want sreconcile.Result
@@ -2269,6 +2270,13 @@ func TestHelmChartReconciler_reconcileSourceFromOCI_authStrategy(t *testing.T) {
22692270
username: testRegistryUsername,
22702271
password: testRegistryPassword,
22712272
},
2273+
secret: &corev1.Secret{
2274+
ObjectMeta: metav1.ObjectMeta{
2275+
Name: "auth-secretref",
2276+
},
2277+
Type: corev1.SecretTypeDockerConfigJson,
2278+
Data: map[string][]byte{},
2279+
},
22722280
assertConditions: []metav1.Condition{
22732281
*conditions.TrueCondition(meta.ReconcilingCondition, meta.ProgressingReason, "building artifact: pulled 'helmchart' chart with version '0.1.0'"),
22742282
*conditions.UnknownCondition(meta.ReadyCondition, meta.ProgressingReason, "building artifact: pulled 'helmchart' chart with version '0.1.0'"),
@@ -2285,6 +2293,13 @@ func TestHelmChartReconciler_reconcileSourceFromOCI_authStrategy(t *testing.T) {
22852293
username: "wrong-pass",
22862294
password: "wrong-pass",
22872295
},
2296+
secret: &corev1.Secret{
2297+
ObjectMeta: metav1.ObjectMeta{
2298+
Name: "auth-secretref",
2299+
},
2300+
Type: corev1.SecretTypeDockerConfigJson,
2301+
Data: map[string][]byte{},
2302+
},
22882303
assertConditions: []metav1.Condition{
22892304
*conditions.TrueCondition(sourcev1.FetchFailedCondition, "Unknown", "unknown build error: failed to login to OCI registry"),
22902305
},
@@ -2308,6 +2323,13 @@ func TestHelmChartReconciler_reconcileSourceFromOCI_authStrategy(t *testing.T) {
23082323
username: testRegistryUsername,
23092324
password: testRegistryPassword,
23102325
},
2326+
secret: &corev1.Secret{
2327+
ObjectMeta: metav1.ObjectMeta{
2328+
Name: "auth-secretref",
2329+
},
2330+
Type: corev1.SecretTypeDockerConfigJson,
2331+
Data: map[string][]byte{},
2332+
},
23112333
provider: "azure",
23122334
assertConditions: []metav1.Condition{
23132335
*conditions.TrueCondition(meta.ReconcilingCondition, meta.ProgressingReason, "building artifact: pulled 'helmchart' chart with version '0.1.0'"),
@@ -2318,27 +2340,47 @@ func TestHelmChartReconciler_reconcileSourceFromOCI_authStrategy(t *testing.T) {
23182340
name: "HTTPS With invalid CA cert",
23192341
wantErr: true,
23202342
registryOpts: registryOptions{
2321-
withBasicAuth: true,
2343+
withTLS: true,
23222344
},
2345+
withTLS: true,
23232346
secretOpts: secretOptions{
23242347
username: testRegistryUsername,
23252348
password: testRegistryPassword,
2326-
ca: []byte("invalid-ca"),
2349+
},
2350+
secret: &corev1.Secret{
2351+
ObjectMeta: metav1.ObjectMeta{
2352+
Name: "auth-secretref",
2353+
},
2354+
Type: corev1.SecretTypeDockerConfigJson,
2355+
Data: map[string][]byte{
2356+
"caFile": []byte("invalid caFile"),
2357+
},
23272358
},
23282359
assertConditions: []metav1.Condition{
2329-
*conditions.TrueCondition(sourcev1.FetchFailedCondition, "Unknown", "unknown build error: failed to login to OCI registry"),
2360+
*conditions.TrueCondition(sourcev1.FetchFailedCondition, "Unknown", "unknown build error: failed to create TLS client config with secret data: cannot append certificate into certificate pool: invalid caFile"),
23302361
},
23312362
},
23322363
{
23332364
name: "HTTPS With CA cert",
23342365
want: sreconcile.ResultSuccess,
23352366
registryOpts: registryOptions{
2336-
withBasicAuth: true,
2367+
withTLS: true,
23372368
},
2369+
withTLS: true,
23382370
secretOpts: secretOptions{
23392371
username: testRegistryUsername,
23402372
password: testRegistryPassword,
2341-
ca: []byte(tlsCA),
2373+
},
2374+
secret: &corev1.Secret{
2375+
ObjectMeta: metav1.ObjectMeta{
2376+
Name: "auth-secretref",
2377+
},
2378+
Type: corev1.SecretTypeDockerConfigJson,
2379+
Data: map[string][]byte{
2380+
"caFile": tlsCA,
2381+
"certFile": tlsPublicKey,
2382+
"keyFile": tlsPrivateKey,
2383+
},
23422384
},
23432385
assertConditions: []metav1.Condition{
23442386
*conditions.TrueCondition(meta.ReconcilingCondition, meta.ProgressingReason, "building artifact: pulled 'helmchart' chart with version '0.1.0'"),
@@ -2369,7 +2411,7 @@ func TestHelmChartReconciler_reconcileSourceFromOCI_authStrategy(t *testing.T) {
23692411
g.Expect(err).ToNot(HaveOccurred())
23702412

23712413
// Upload the test chart
2372-
metadata, err := loadTestChartToOCI(chartData, chartPath, server)
2414+
metadata, err := loadTestChartToOCI(chartData, server, "testdata/certs/server.pem", "testdata/certs/server-key.pem", "testdata/certs/ca.pem")
23732415
g.Expect(err).ToNot(HaveOccurred())
23742416

23752417
repo := &helmv1.HelmRepository{
@@ -2395,40 +2437,16 @@ func TestHelmChartReconciler_reconcileSourceFromOCI_authStrategy(t *testing.T) {
23952437
repo.Spec.URL = tt.providerImg
23962438
}
23972439

2398-
var secret *corev1.Secret
23992440
if tt.secretOpts.username != "" && tt.secretOpts.password != "" {
2400-
secret = &corev1.Secret{
2401-
ObjectMeta: metav1.ObjectMeta{
2402-
Name: "auth-secretref",
2403-
},
2404-
Type: corev1.SecretTypeDockerConfigJson,
2405-
Data: map[string][]byte{
2406-
".dockerconfigjson": []byte(fmt.Sprintf(`{"auths": {%q: {"username": %q, "password": %q}}}`,
2407-
server.registryHost, tt.secretOpts.username, tt.secretOpts.password)),
2408-
},
2409-
}
2410-
}
2411-
2412-
if tt.secretOpts.ca != nil {
2413-
if secret == nil {
2414-
secret = &corev1.Secret{
2415-
ObjectMeta: metav1.ObjectMeta{
2416-
Name: "auth-secretref",
2417-
},
2418-
Data: map[string][]byte{
2419-
"caFile": tt.secretOpts.ca,
2420-
},
2421-
}
2422-
} else {
2423-
secret.Data["caFile"] = tt.secretOpts.ca
2424-
}
2441+
tt.secret.Data[".dockerconfigjson"] = []byte(fmt.Sprintf(`{"auths": {%q: {"username": %q, "password": %q}}}`,
2442+
server.registryHost, tt.secretOpts.username, tt.secretOpts.password))
24252443
}
24262444

2427-
if secret != nil {
2445+
if tt.secret != nil {
24282446
repo.Spec.SecretRef = &meta.LocalObjectReference{
2429-
Name: secret.Name,
2447+
Name: tt.secret.Name,
24302448
}
2431-
clientBuilder.WithObjects(secret, repo)
2449+
clientBuilder.WithObjects(tt.secret, repo)
24322450
} else {
24332451
clientBuilder.WithObjects(repo)
24342452
}
@@ -2506,7 +2524,7 @@ func TestHelmChartReconciler_reconcileSourceFromOCI_verifySignature(t *testing.T
25062524
g.Expect(err).ToNot(HaveOccurred())
25072525

25082526
// Upload the test chart
2509-
metadata, err := loadTestChartToOCI(chartData, chartPath, server)
2527+
metadata, err := loadTestChartToOCI(chartData, server, "", "", "")
25102528
g.Expect(err).NotTo(HaveOccurred())
25112529

25122530
storage, err := NewStorage(tmpDir, "example.com", retentionTTL, retentionRecords)
@@ -2737,17 +2755,11 @@ func extractChartMeta(chartData []byte) (*hchart.Metadata, error) {
27372755
return ch.Metadata, nil
27382756
}
27392757

2740-
func loadTestChartToOCI(chartData []byte, chartPath string, server *registryClientTestServer) (*hchart.Metadata, error) {
2758+
func loadTestChartToOCI(chartData []byte, server *registryClientTestServer, certFile, keyFile, cafile string) (*hchart.Metadata, error) {
27412759
// Login to the registry
27422760
err := server.registryClient.Login(server.registryHost,
27432761
helmreg.LoginOptBasicAuth(testRegistryUsername, testRegistryPassword),
2744-
helmreg.LoginOptInsecure(true))
2745-
if err != nil {
2746-
return nil, err
2747-
}
2748-
2749-
// Load a test chart
2750-
chartData, err = os.ReadFile(chartPath)
2762+
helmreg.LoginOptTLSClientConfig(certFile, keyFile, cafile))
27512763
if err != nil {
27522764
return nil, err
27532765
}

0 commit comments

Comments
 (0)