Go to file
Tim Möhlmann d2e0ac07f1
chore(tests): use a coverage server binary (#8407)
# Which Problems Are Solved

Use a single server instance for API integration tests. This optimizes
the time taken for the integration test pipeline,
because it allows running tests on multiple packages in parallel. Also,
it saves time by not start and stopping a zitadel server for every
package.

# How the Problems Are Solved

- Build a binary with `go build -race -cover ....`
- Integration tests only construct clients. The server remains running
in the background.
- The integration package and tested packages now fully utilize the API.
No more direct database access trough `query` and `command` packages.
- Use Makefile recipes to setup, start and stop the server in the
background.
- The binary has the race detector enabled
- Init and setup jobs are configured to halt immediately on race
condition
- Because the server runs in the background, races are only logged. When
the server is stopped and race logs exist, the Makefile recipe will
throw an error and print the logs.
- Makefile recipes include logic to print logs and convert coverage
reports after the server is stopped.
- Some tests need a downstream HTTP server to make requests, like quota
and milestones. A new `integration/sink` package creates an HTTP server
and uses websockets to forward HTTP request back to the test packages.
The package API uses Go channels for abstraction and easy usage.

# Additional Changes

- Integration test files already used the `//go:build integration`
directive. In order to properly split integration from unit tests,
integration test files need to be in a `integration_test` subdirectory
of their package.
- `UseIsolatedInstance` used to overwrite the `Tester.Client` for each
instance. Now a `Instance` object is returned with a gRPC client that is
connected to the isolated instance's hostname.
- The `Tester` type is now `Instance`. The object is created for the
first instance, used by default in any test. Isolated instances are also
`Instance` objects and therefore benefit from the same methods and
values. The first instance and any other us capable of creating an
isolated instance over the system API.
- All test packages run in an Isolated instance by calling
`NewInstance()`
- Individual tests that use an isolated instance use `t.Parallel()`

# Additional Context

- Closes #6684
- https://go.dev/doc/articles/race_detector
- https://go.dev/doc/build-cover

---------

Co-authored-by: Stefan Benz <46600784+stebenz@users.noreply.github.com>
2024-09-06 14:47:57 +02:00
.codecov
.devcontainer docs: add developing with dev containers (#8095) 2024-06-18 08:29:02 +00:00
.github chore(tests): use a coverage server binary (#8407) 2024-09-06 14:47:57 +02:00
build chore(deps): bump node from 18-buster to 20-buster in /build (#6258) 2023-10-12 16:51:50 +00:00
cmd chore(tests): use a coverage server binary (#8407) 2024-09-06 14:47:57 +02:00
console feat(oidc): end session by id_token_hint and without cookie (#8542) 2024-09-04 10:14:50 +00:00
deploy/knative docs: fix knative docs (#7752) 2024-04-18 13:45:15 +00:00
docs docs(oidc): web keys (#8508) 2024-09-06 08:58:06 +02:00
e2e fix(console): remove navigation flakiness (#8439) 2024-08-22 09:48:36 +02:00
internal chore(tests): use a coverage server binary (#8407) 2024-09-06 14:47:57 +02:00
load-test fix(eventstore): precise decimal (#8527) 2024-09-06 12:19:19 +03:00
openapi ci: improve performance (#5953) 2023-07-17 10:08:20 +02:00
pkg/grpc feat: idp v2 api GetIDPByID (#8425) 2024-08-14 18:18:29 +00:00
proto fix(api): pass trusted domain in body instead of param (#8544) 2024-09-04 11:34:26 +00:00
statik feat: api v2beta to api v2 (#8283) 2024-07-26 22:39:55 +02:00
.dockerignore ci: improve performance (#5953) 2023-07-17 10:08:20 +02:00
.gitattributes chore(devcontainer): improve devcontainer to work on windows and linux (#8194) 2024-06-25 14:40:34 +00:00
.gitignore test(load): machine jwt profile grant (#8482) 2024-08-27 13:06:03 +00:00
.golangci.yaml chore(deps): update all go deps (#7773) 2024-04-15 09:17:36 +00:00
.releaserc.js chore: avoid latest on maintenance releases (#7702) 2024-04-10 11:56:05 +00:00
buf.gen.yaml ci: improve performance (#5953) 2023-07-17 10:08:20 +02:00
buf.work.yaml chore(console): buf stub build (#5215) 2023-02-17 14:09:11 +00:00
changelog.config.js
CODE_OF_CONDUCT.md chore: rename docs links (#3668) 2022-05-20 14:32:06 +00:00
CONTRIBUTING.md chore(tests): use a coverage server binary (#8407) 2024-09-06 14:47:57 +02:00
go.mod chore(tests): use a coverage server binary (#8407) 2024-09-06 14:47:57 +02:00
go.sum chore(tests): use a coverage server binary (#8407) 2024-09-06 14:47:57 +02:00
LICENSE
main.go chore: test server for direct resource access 2023-04-24 20:40:31 +03:00
Makefile chore(tests): use a coverage server binary (#8407) 2024-09-06 14:47:57 +02:00
MEETING_SCHEDULE.md docs: add office hour #4 (#8398) 2024-08-08 08:05:48 +00:00
README.md docs: add office hours (#7999) 2024-05-29 07:34:37 +00:00
release-channels.yaml chore(stable): update to v2.54.8 (#8457) 2024-08-19 11:31:28 +02:00
SECURITY.md docs: rename instance settings to default settings (#7484) 2024-03-06 10:36:04 +00:00

Zitadel Logo Zitadel Logo

GitHub Workflow Status (with event) Dynamic YAML Badge GitHub contributors

Community Meeting
ZITADEL holds bi-weekly community calls. To join the community calls or to watch previous meeting notes and recordings, please visit the meeting schedule.

Are you searching for a user management tool that is quickly set up like Auth0 and open source like Keycloak?

Do you have a project that requires multi-tenant user management with self-service for your customers?

Look no further — ZITADEL is the identity infrastructure, simplified for you.

We provide you with a wide range of out-of-the-box features to accelerate your project, including:

Multi-tenancy with team management
Secure login
Self-service
OpenID Connect
OAuth2.x
SAML2
LDAP
Passkeys / FIDO2
OTP
and an unlimited audit trail is there for you, ready to use.

With ZITADEL, you are assured of a robust and customizable turnkey solution for all your authentication and authorization needs.


🏡 Website 💬 Chat 📋 Docs 🧑‍💻 Blog 📞 Contact

Get started

👉 Quick Start Guide

Deploy ZITADEL (Self-Hosted)

Deploying ZITADEL locally takes less than 3 minutes. Go ahead and give it a try!

See all guides here

If you are interested to get professional support for your self-hosted ZITADEL please reach out to us!

Setup ZITADEL Cloud (SaaS)

If you want to experience a hands-free ZITADEL, you should use ZITADEL Cloud.

ZITADEL Cloud comes with a free tier, providing you with all the same features as the open-source version. Learn more about the pay-as-you-go pricing.

Example applications

Clone one of our example applications or deploy them directly to Vercel.

SDKs

Use our SDKs for your favorite language and framework.

Why choose ZITADEL

We built ZITADEL with a complex multi-tenancy architecture in mind and provide the best solution to handle B2B customers and partners. Yet it offers everything you need for a customer identity (CIAM) use case.

Features

Authentication

Multi-Tenancy

Integration

Self-Service

Deployment

Track upcoming features on our roadmap.

How To Contribute

Find details about how you can contribute in our Contribution Guide

Contributors

Made with contrib.rocks.

Showcase

Quick Start Guide

Secure a React Application using OpenID Connect Authorization Code with PKCE

Quick Start Guide

Login with Passkeys

Use our login widget to allow easy and secure access to your applications and enjoy all the benefits of Passkeys (FIDO 2 / WebAuthN):

Passkeys

Admin Console

Use Console or our APIs to setup organizations, projects and applications.

Console Showcase

Security

You can find our security policy here.

Technical Advisories are published regarding major issues with the ZITADEL platform that could potentially impact security or stability in production environments.

License

here are our exact licensing terms.

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See our license for detailed information governing permissions and limitations on use.