Skip to content

Commit

Permalink
chore: use a license during e2e tests
Browse files Browse the repository at this point in the history
in order to capture problems with the embedded license we need to use a
version of the embedded cluster binary with an embedded kots license.
  • Loading branch information
ricardomaraschini committed Nov 8, 2023
1 parent cd77654 commit 21b415f
Show file tree
Hide file tree
Showing 7 changed files with 69 additions and 11 deletions.
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -3,4 +3,5 @@ bundle
pkg/goods/bins
pkg/goods/images
*tgz
license.yaml
release.tar.gz
release.o
18 changes: 11 additions & 7 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -92,12 +92,16 @@ pkg/goods/bins/embedded-cluster/kubectl-preflight:
tar -xzf output/tmp/preflight/preflight.tar.gz -C output/tmp/preflight
mv output/tmp/preflight/preflight pkg/goods/bins/embedded-cluster/kubectl-preflight

.PHONY: embed-license
embed-license: embedded-cluster-linux-amd64 license.yaml
release.tar.gz:
mkdir -p output/tmp
tar -czvf output/tmp/license.tar.gz license.yaml
objcopy --input-target binary --output-target binary --rename-section .data=sec_bundle output/tmp/license.tar.gz output/tmp/license.tar.gz.o
objcopy --add-section sec_bundle=output/tmp/license.tar.gz.o output/bin/embedded-cluster
tar -czf release.tar.gz -C e2e/kots-release .

.PHONY: embedded-release
embedded-release: embedded-cluster-linux-amd64 release.tar.gz
objcopy --input-target binary --output-target binary --rename-section .data=sec_bundle release.tar.gz release.o
@if ! objcopy --update-section sec_bundle=release.o output/bin/embedded-cluster ; then \
objcopy --add-section sec_bundle=release.o output/bin/embedded-cluster ; \
fi

.PHONY: static
static: pkg/goods/bins/embedded-cluster/kubectl-preflight \
Expand Down Expand Up @@ -133,14 +137,14 @@ vet: static-linux-amd64 static
go vet ./...

.PHONY: e2e-tests
e2e-tests: embedded-cluster-linux-amd64
e2e-tests: embedded-release
mkdir -p output/tmp
rm -rf output/tmp/id_rsa*
ssh-keygen -t rsa -N "" -C "Integration Test Key" -f output/tmp/id_rsa
go test -timeout 45m -parallel 1 -failfast -v ./e2e

.PHONY: e2e-test
e2e-test: embedded-cluster-linux-amd64
e2e-test: embedded-release
mkdir -p output/tmp
rm -rf output/tmp/id_rsa*
ssh-keygen -t rsa -N "" -C "Integration Test Key" -f output/tmp/id_rsa
Expand Down
11 changes: 11 additions & 0 deletions e2e/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -54,3 +54,14 @@ TestSomething is the name of the test function you want to run.

To add more tests you just need to create one inside this directory
and then add it to the `.github/workflows/e2e.yaml` file.


### Kots test application

During end to end tests we embed a license for a smoke test kots app,
this app can be found in:

https://vendor.replicated.com/apps/embedded-cluster-smoke-test-app

Make sure to update the application yaml files under kots-release
directory if you create a new release of the remote application.
15 changes: 15 additions & 0 deletions e2e/kots-release/kots-app.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
---
apiVersion: kots.io/v1beta1
kind: Application
metadata:
name: nginx
spec:
title: Embedded Cluster Smoke Test App
icon: https://raw.githubusercontent.com/cncf/artwork/master/projects/kubernetes/icon/color/kubernetes-icon-color.png
statusInformers:
- deployment/nginx
ports:
- serviceName: "nginx"
servicePort: 80
localPort: 8888
applicationUrl: "http://nginx"
27 changes: 27 additions & 0 deletions e2e/kots-release/license.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
apiVersion: kots.io/v1beta1
kind: License
metadata:
name: embeddedclusterintegrationtests
spec:
appSlug: embedded-cluster-smoke-test-app
channelID: 2Xt5IoImUY2W8eo5DWZEdtA5Yr1
channelName: Stable
customerName: Embedded Cluster Integration Tests
endpoint: https://replicated.app
entitlements:
expires_at:
description: License Expiration
signature: {}
title: Expiration
value: ""
valueType: String
isGitOpsSupported: true
isHelmVmDownloadEnabled: true
isKotsInstallEnabled: true
isNewKotsUiEnabled: true
isSemverRequired: true
isSnapshotSupported: true
licenseID: 2Xt5q15MDpLvaO15UZ5XhKxBqB1
licenseSequence: 1
licenseType: prod
signature: eyJsaWNlbnNlRGF0YSI6ImV5SmhjR2xXWlhKemFXOXVJam9pYTI5MGN5NXBieTkyTVdKbGRHRXhJaXdpYTJsdVpDSTZJa3hwWTJWdWMyVWlMQ0p0WlhSaFpHRjBZU0k2ZXlKdVlXMWxJam9pWlcxaVpXUmtaV1JqYkhWemRHVnlhVzUwWldkeVlYUnBiMjUwWlhOMGN5SjlMQ0p6Y0dWaklqcDdJbXhwWTJWdWMyVkpSQ0k2SWpKWWREVnhNVFZOUkhCTWRtRlBNVFZWV2pWWWFFdDRRbkZDTVNJc0lteHBZMlZ1YzJWVWVYQmxJam9pY0hKdlpDSXNJbU4xYzNSdmJXVnlUbUZ0WlNJNklrVnRZbVZrWkdWa0lFTnNkWE4wWlhJZ1NXNTBaV2R5WVhScGIyNGdWR1Z6ZEhNaUxDSmhjSEJUYkhWbklqb2laVzFpWldSa1pXUXRZMngxYzNSbGNpMXpiVzlyWlMxMFpYTjBMV0Z3Y0NJc0ltTm9ZVzV1Wld4SlJDSTZJakpZZERWSmIwbHRWVmt5VnpobGJ6VkVWMXBGWkhSQk5WbHlNU0lzSW1Ob1lXNXVaV3hPWVcxbElqb2lVM1JoWW14bElpd2liR2xqWlc1elpWTmxjWFZsYm1ObElqb3hMQ0psYm1Sd2IybHVkQ0k2SW1oMGRIQnpPaTh2Y21Wd2JHbGpZWFJsWkM1aGNIQWlMQ0psYm5ScGRHeGxiV1Z1ZEhNaU9uc2laWGh3YVhKbGMxOWhkQ0k2ZXlKMGFYUnNaU0k2SWtWNGNHbHlZWFJwYjI0aUxDSmtaWE5qY21sd2RHbHZiaUk2SWt4cFkyVnVjMlVnUlhod2FYSmhkR2x2YmlJc0luWmhiSFZsSWpvaUlpd2lkbUZzZFdWVWVYQmxJam9pVTNSeWFXNW5JaXdpYzJsbmJtRjBkWEpsSWpwN2ZYMTlMQ0pwYzBkcGRFOXdjMU4xY0hCdmNuUmxaQ0k2ZEhKMVpTd2lhWE5UYm1Gd2MyaHZkRk4xY0hCdmNuUmxaQ0k2ZEhKMVpTd2lhWE5PWlhkTGIzUnpWV2xGYm1GaWJHVmtJanAwY25WbExDSnBjMGhsYkcxV2JVUnZkMjVzYjJGa1JXNWhZbXhsWkNJNmRISjFaU3dpYVhOTGIzUnpTVzV6ZEdGc2JFVnVZV0pzWldRaU9uUnlkV1VzSW1selUyVnRkbVZ5VW1WeGRXbHlaV1FpT25SeWRXVjlmUT09IiwiaW5uZXJTaWduYXR1cmUiOiJleUpzYVdObGJuTmxVMmxuYm1GMGRYSmxJam9pVTNGNWJHbHBUM1YyZUhGSWNIRjJOMVl5YkV4eGNFUkhOMnB0VWtwbVZVbDJaR016Wld0RFNuTjZSeXRLTWxSdVdXSjFZMUoyV0UxTmRHMXBTR1J1WlU1NGRFSldaMHB5U0dKMEsxVTFPRXc1TTJZME1XRjBRbnBKWW1KVGIwWkpPR0ZzVUhadFYwYzRVa1JyU1VOVFlWTmxNSGRpWWpKaFR6Um9kMlp1UkZKaFVHRTJaRFJEVEZRclJISXhSazl2Y21SaGIwbGhSVlZLUjBkME9Xd3ZXVlZFWWpKcFlXSkdiVzVYTWxnclNrWXJNVm93U0dJM1EwSndhSEUzVDNSTGIwTlBNRzFWYVc0eWVtdE1ZbFk1ZUV0cmFUSmlUemxIZVhRNU4xRjRiMDVKWlhwRGVqWm1ZWGt3YkZsWkwwRkZVMjV3YWl0aUsxbEtNelJCWTFWSVkxTlZRbFIwVmpKMFVtTjJhQ3RxTDBWTUsxUlRPVkF4WjNkaVZFMHdlbnA1UmxSWlNtNVhZbFZpZFRkbWJtNTBUV2N5VlVsRlZFUmliMFV5U0VaM1ozUk9MMmN5VVNzNFVrYzVhVmwyV0c0eVVUUlhNMUZCUFQwaUxDSndkV0pzYVdOTFpYa2lPaUl0TFMwdExVSkZSMGxPSUZCVlFreEpReUJMUlZrdExTMHRMVnh1VFVsSlFrbHFRVTVDWjJ0eGFHdHBSemwzTUVKQlVVVkdRVUZQUTBGUk9FRk5TVWxDUTJkTFEwRlJSVUY2UVdGNGRWZDNjREF2UVdkd05VOTZjVzUzVTF4dVVUWXlSVE5sZFhVclVWVmpXRk1yYTFOTVZDOHhLMjU1TUdGMU9FRXhVVVZWUkV3eFMzWmlkV0l5TVZGaFZqaFNhbWhyTUVGS1QyaERPRkF5TjNJdlJGeHVXSGh4V25oWWRVbDNhRUZyTVUxMWNIVmhWSEpzYldKMFduVkpjV1ZCYUZsbmFqbGhOM0JHTTFFd1VreEVWbWhJYVdkWmFXeHZjRlpNY2pGeVVIUXJjRnh1WVhsdFdYYzRaVFp5YjFGaFUyVTBTbHB1VWxWdlNEVkVNVWh2ZEhobFUwNUZiQzlaYWxoNFdXZDFNVWhrV1ZsaGNHSldObFp4VjBaSlZXSnpOMk5PYlZ4dU1VOXBPSHB2ZHpCdFVqQnlMM0JGUkdsd1VHVndabVJLU3paa2VGbzNUazUzY1VoWVQxVmFiRkZuWjFoRFVYSklTVWRzZDBwd1ZIQlNjbU5pWm0wNFdGeHVRVGxyY1hGeFZEbHNSWEVyUkVaUVJrdFBaMVJEV25OM2RFNVlZbFJ5UkhkcU5uTnRNV2RpVlhsS2IyNXJVVk5GVm5CcmFUQlhNblpQVDBOWlpESXllRnh1VEZGSlJFRlJRVUpjYmkwdExTMHRSVTVFSUZCVlFreEpReUJMUlZrdExTMHRMVnh1SWl3aWEyVjVVMmxuYm1GMGRYSmxJam9pWlhsS2VtRlhaSFZaV0ZJeFkyMVZhVTlwU2sxVWJFWk9ZMVpzVTAxdFVrNWpNbFkxVDFkME1XRlVVa1JPVmxaUFlqSnNZVTVVUWs1aU1YQjJXakpLUjJWdGNHRk5SRUp3VERCT1YyUllSa1JOYVhSS1dsaGtiVkZXYTNoTU1qaDVWa1pvY1ZWSVVrZFRSbFp4VGpOc1VsWXpRakJaZWxKMVZXMDFWR1ZyVmtaWlZscFdZVlV4VEU5SWNHaGxSM2d4Vmxac2FXVkdUVFJqVlZaTFVUSndjVnBIVm5SYVJXaHpVVlZrYkZOWGQzWmliV3h6WkdwS2VGUlVaSEZhYWxKVVYxaHNiMVl4YkROTlNGcFJaVlYzY21GcldubFBSa3BKVTBNNWEySkhjRkJQVTNSclRtdGFiRlJJVGxsVmJXeElUVVprYUZWc1JtMVBXRW8xVkc1U05sbHVaREJPTTNCRFZubDBkRTFIVGtWVFIwNHdZMGh3TTJKdFNteFZla3BKV1ROa2JXUkZhSFpWVm1zelYxUlpNRlpFVmxCTlJuQlFUMVpTYm1OcGRHdGFTRXBQVGxaa1JVOVhOVnBoVjFaSlltNUdSR05zVmxOV2JrSm9aREJvVjAxcGRFUlJhMFp0VDBSQmVWb3dXbFJPU0ZKR1V6SlNTbUpHVWtkU1ZrWnZWbFpTUkdOclJscFZNbEp4WkRKS1IxSXdZekJQUnpGb1RXNUdNbVJyZEhoVFIwNXdWakZ3Y2xORk1IaE9NVlpLVEROYWRrNHlTbkZYVkZwUlV6SldjRll5ZUZKU1ZuQnVXakpaTVZkSVVraFpWMHBaVWtSTmNsUkhZemxRVTBselNXMWtjMkl5U21oaVJYUnNaVlZzYTBscWIybFpiVkpzV2xSVk1rNVVXWGRaTWxwcFRrUk9hazlYU1hsUFIwcHRUMVJvYkZsWFRtaGFiVVV5VGtSWmFXWlJQVDBpZlE9PSJ9
2 changes: 1 addition & 1 deletion e2e/scripts/embedded-preflight.sh
Original file line number Diff line number Diff line change
Expand Up @@ -121,7 +121,7 @@ embed_preflight() {
objcopy --input-target binary --output-target binary --rename-section .data=sec_bundle /root/preflight.tar.gz /root/preflight.o
rm -rf /usr/local/bin/embedded-cluster
cp -Rfp /usr/local/bin/embedded-cluster-copy /usr/local/bin/embedded-cluster
objcopy --add-section sec_bundle=/root/preflight.o /usr/local/bin/embedded-cluster
objcopy --update-section sec_bundle=/root/preflight.o /usr/local/bin/embedded-cluster
}

has_applied_host_preflight() {
Expand Down
4 changes: 2 additions & 2 deletions pkg/kubeutils/kubeutils.go
Original file line number Diff line number Diff line change
Expand Up @@ -29,12 +29,12 @@ func WaitForDeployment(ctx context.Context, cli client.Client, ns, name string)
if err := wait.ExponentialBackoff(backoff, func() (bool, error) {
ready, err := IsDeploymentReady(ctx, cli, ns, name)
if err != nil {
lasterr = fmt.Errorf("error checking status of kotsadm: %v", err)
lasterr = fmt.Errorf("unable to get deploy %s status: %v", name, err)
return false, nil
}
return ready, nil
}); err != nil {
return fmt.Errorf("timed out waiting for admin console: %v", lasterr)
return fmt.Errorf("timed out waiting for deploy %s: %v", name, lasterr)
}
return nil
}
Expand Down

0 comments on commit 21b415f

Please sign in to comment.