-
Notifications
You must be signed in to change notification settings - Fork 98
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
e2e tests for Agones integration #510
Comments
Starting work on this - starting with creating a simple terraform script for creating a agones powered GKE cluster, and creating a module that will create some kind of simple test we can expand on. Will probably add some of the tooling (terraform, helm, gcloud etc) into the build image as well for convenience if they are not installed locally. @XAMPPRocky it would handy if you could split out the Agones k8s client work in https://github.com/googleforgames/quilkin/blob/edf6d0d4fba93d5771b993af48f670563724cb6a/src/xds/provider/agones.rs into its own PR? Then I should be able to start building out more e2e tests. No rush though, I'll get a PR with a Pod created first, and swing back around. |
Got this in a happy place locally:
Splitting out into PR's and submitting shortly 👍🏻 Just wanted to give you a headsup, since I know you've been waiting on this for xDS testing. |
Provides a suite of tools for setting up and running e2e integration tests of Quilkin on Agones. This includes: * `agones` module with setup functionality and a simple e2e test * Convenience terraform script for Agones GKE cluster * Documentation of setup and usage * Update build image to include convenience tooling (which is also eventually needed for integration with CI) * Make target for running Agones integration tests through the build image. Work on googleforgames#510
Provides a suite of tools for setting up and running e2e integration tests of Quilkin on Agones. This includes: * `agones` module with setup functionality and a simple e2e test * Convenience terraform script for Agones GKE cluster * Documentation of setup and usage * Update build image to include convenience tooling (which is also eventually needed for integration with CI) * Make target for running Agones integration tests through the build image. Work on googleforgames#510
Provides a suite of tools for setting up and running e2e integration tests of Quilkin on Agones. This includes: * `agones` module with setup functionality and a simple e2e test * Convenience terraform script for Agones GKE cluster * Documentation of setup and usage * Update build image to include convenience tooling (which is also eventually needed for integration with CI) * Make target for running Agones integration tests through the build image. Work on googleforgames#510
Writing this down, so I remember (and commentary welcome) what to work on once #545 is merged:
Once xDS PRs have been merged:
I think at that point, we can close this ticket! |
I can write the xDS test once merged, I want to get more familiar with agones. |
* Tools for Agones e2e testing Provides a suite of tools for setting up and running e2e integration tests of Quilkin on Agones. This includes: * `agones` module with setup functionality and a simple e2e test * Convenience terraform script for Agones GKE cluster * Documentation of setup and usage * Update build image to include convenience tooling (which is also eventually needed for integration with CI) * Make target for running Agones integration tests through the build image. Work on #510 * Review updates.
Just adding a note I'm starting on "Write tooling to manage build, push and test (probably make targets, since that is the easiest) flow", and will move into "Do the same thing, but for minukube (likely do this in conjunction with above)" as well. |
This builds out the `build/Makefile` tooling such that you can build, push and test the Quilkin Agones integration against either Minikube or a hosted Kubernetes cluster (tested against GKE + Artifact Registry) in one operation. Also includes: * Refactoring such that variable naming across `cargo test` and `make` targets all lined to up to be consistent. * If `IMAGE_TAG` is not present in `cargo test`, panic. * Upgrade Agones version in Terraform script. * Update release cloudbuild.yaml - include an update to changelog generator, as I found a bug in the version we were using. * More aggressive .dockerignore. Got the build context down from >3GB to ~900M, which was a big improvement in image creation speed. Work on googleforgames#510
* Dev: Build, Push and Test Agones Integrations This builds out the `build/Makefile` tooling such that you can build, push and test the Quilkin Agones integration against either Minikube or a hosted Kubernetes cluster (tested against GKE + Artifact Registry) in one operation. Also includes: * Refactoring such that variable naming across `cargo test` and `make` targets all lined to up to be consistent. * If `IMAGE_TAG` is not present in `cargo test`, panic. * Upgrade Agones version in Terraform script. * Update release cloudbuild.yaml - include an update to changelog generator, as I found a bug in the version we were using. * More aggressive .dockerignore. Got the build context down from >3GB to ~900M, which was a big improvement in image creation speed. Work on #510 * Allow "Unicode-DFS-2016" licence.
😅 took some documentation hunting, but locally I've got the Agones integration tests working with the Cloud Build setup. Going to optimise it to remove some duplication of work that is happening, but hoping to have this in before you all return back from vacation. |
This makes it such that on each PR, the Agones integration tests are run against the GKE + Agones cluster specified in ./agones/main.tf This includes: * Fix for main.tf to align release branch with Agones version. * Configure how long to wait before cleaning up past test namespaces. * Cleanup and optimisation of cloudbuild.yaml. Work on googleforgames#510
This makes it such that on each PR, the Agones integration tests are run against the GKE + Agones cluster specified in ./agones/main.tf This includes: * Fix for main.tf to align release branch with Agones version. * Configure how long to wait before cleaning up past test namespaces. * Cleanup and optimisation of cloudbuild.yaml. Work on googleforgames#510
This makes it such that on each PR, the Agones integration tests are run against the GKE + Agones cluster specified in ./agones/main.tf This includes: * Fix for main.tf to align release branch with Agones version. * Configure how long to wait before cleaning up past test namespaces. * Cleanup and optimisation of cloudbuild.yaml. Work on googleforgames#510
This makes it such that on each PR, the Agones integration tests are run against the GKE + Agones cluster specified in ./agones/main.tf This includes: * Fix for main.tf to align release branch with Agones version. * Configure how long to wait before cleaning up past test namespaces. * Cleanup and optimisation of cloudbuild.yaml. Work on googleforgames#510
* Run Agones tests in CI This makes it such that on each PR, the Agones integration tests are run against the GKE + Agones cluster specified in ./agones/main.tf This includes: * Fix for main.tf to align release branch with Agones version. * Configure how long to wait before cleaning up past test namespaces. * Cleanup and optimisation of cloudbuild.yaml. Work on #510 * Review updates. * Fix issue with long build times.
Working on an integration test to spin up a single Agones GameServer and connect to it. Most of the way there, PR incoming shortly. |
This integration test only tests that we can create a GameServer in an Agones cluster and connect to it, providing baseline functionality for further integration tests. This includes making the Agones CRD values public such that they can be accessed from the integration tests. Work on googleforgames#510
This integration test only tests that we can create a GameServer in an Agones cluster and connect to it, providing baseline functionality for further integration tests. This includes making the Agones CRD values public such that they can be accessed from the integration tests. Work on googleforgames#510
This integration test only tests that we can create a GameServer in an Agones cluster and connect to it, providing baseline functionality for further integration tests. This includes making the Agones CRD values public such that they can be accessed from the integration tests. Work on googleforgames#510
This integration test only tests that we can create a GameServer in an Agones cluster and connect to it, providing baseline functionality for further integration tests. This includes making the Agones CRD values public such that they can be accessed from the integration tests. Work on #510
Implements an integration test wherein we use Quilkin as a sidecar to an Agones GameServer container. Also includes some updates to the test harnesses: * Function to create a common Quilkin container * Fixed odd (?) bug where k8s client would sometimes close at the end of tests, failing subsequent other tests. * Convenience function for grabbing the address of a GameServer so you can send packets to it. Work on googleforgames#510
Implements an integration test wherein we use Quilkin as a sidecar to an Agones GameServer container. Also includes some updates to the test harnesses: * Function to create a common Quilkin container * Fixed odd (?) bug where k8s client would sometimes close at the end of tests, failing subsequent other tests. * Convenience function for grabbing the address of a GameServer so you can send packets to it. Work on googleforgames#510
Assuming #582 is merged 😄 I'd love to get started on setting up the some preliminary xDS integration tests. Also will give me an opportunity to get hands on with the feature, which will help doing some examples, probably a quickstart and other onboarding improvements I'd like to do. |
Implements an integration test wherein we use Quilkin as a sidecar to an Agones GameServer container. Also includes some updates to the test harnesses: * Function to create a common Quilkin container * Fixed odd (?) bug where k8s client would sometimes close at the end of tests, failing subsequent other tests. * Convenience function for grabbing the address of a GameServer so you can send packets to it. Work on googleforgames#510
Work in progress on xDS tests: https://github.com/markmandel/quilkin/blob/agones/xds-test/agones/src/xds.rs |
Implements an integration test wherein we use Quilkin as a sidecar to an Agones GameServer container. Also includes some updates to the test harnesses: * Function to create a common Quilkin container * Fixed odd (?) bug where k8s client would sometimes close at the end of tests, failing subsequent other tests. * Convenience function for grabbing the address of a GameServer so you can send packets to it. Work on #510
* Fleet implementation, and updated to GameServer CRD * xDS + Agones integration test. * General API reuse/cleanup Work on googleforgames#510
This tests Quilkin running in an Agones provider as a xDS server, and a Quilkin proxy connecting to it. This test includes routing udp packets via a token specified on a GameServer and a filter configuration applied through a ConfigMap. To implement this, it also includes: * Fleet implementation, and updated to GameServer CRD * Some general API reuse/cleanup Work on googleforgames#510
This tests Quilkin running in an Agones provider as a xDS server, and a Quilkin proxy connecting to it. This test includes routing udp packets via a token specified on a GameServer and a filter configuration applied through a ConfigMap. To implement this, it also includes: * Fleet implementation, and updated to GameServer CRD * Some general API reuse/cleanup Work on googleforgames#510
This tests Quilkin running in an Agones provider as a xDS server, and a Quilkin proxy connecting to it. This test includes routing udp packets via a token specified on a GameServer and a filter configuration applied through a ConfigMap. To implement this, it also includes: * Fleet implementation, and updated to GameServer CRD * Some general API reuse/cleanup Work on #510
Closing as complete, we can open up new issues for specific tests. |
This tests Quilkin running in an Agones provider as a xDS server, and a Quilkin proxy connecting to it. This test includes routing udp packets via a token specified on a GameServer and a filter configuration applied through a ConfigMap. To implement this, it also includes: * Fleet implementation, and updated to GameServer CRD * Some general API reuse/cleanup Work on #510
This tests Quilkin running in an Agones provider as a xDS server, and a Quilkin proxy connecting to it. This test includes routing udp packets via a token specified on a GameServer and a filter configuration applied through a ConfigMap. To implement this, it also includes: * Fleet implementation, and updated to GameServer CRD * Some general API reuse/cleanup Work on #510
Is your feature request related to a problem? Please describe.
Once we have the Agones integration from #506, we don't currently have a way to automatically test the integration end to end (which is not a good thing).
Describe the solution you'd like
So we need a way to run the e2e tests both locally and also in Cloud Build CI. We can probably break this down into a few steps/built in tools into our Makefile.
The only tricky part with local testing is that connectivity to something like Minikube on Agones can be tricky, because of the layers of virtualisation (see guide)
I believe we can mimic what we did in Agones to do a similar thing in Rust as we did with Go (sacrificial draft):
make
target to install the latest version of Agones on the current authorised cluster (it's ahelm install
- pretty easy). (be good to have a terraform script that sets up the cluster too)..kube
credentials to run. It looks like Rust'skube
client will happily do the same. This has two benefits - you can run individual tests in your IDE, and also run the whole suite with standard Rust tooling.Describe alternatives you've considered
None. We'll need automated testing for this.
Additional context
I would probably suggest starting with getting tests running locally in a Rust context, and then build out the CI platform from there.
The text was updated successfully, but these errors were encountered: