mirror of
https://github.com/zitadel/zitadel.git
synced 2025-01-10 14:13:40 +00:00
cleanup
This commit is contained in:
parent
2d611c73d9
commit
ce899374c9
@ -1,3 +1,4 @@
|
|||||||
|
|
||||||
# Contributing to ZITADEL
|
# Contributing to ZITADEL
|
||||||
|
|
||||||
## Introduction
|
## Introduction
|
||||||
@ -34,7 +35,11 @@ Follow [@zitadel](https://twitter.com/zitadel) on twitter
|
|||||||
|
|
||||||
We strongly recommend to [talk to us](https://zitadel.com/contact) before you start contributing to streamline our and your work.
|
We strongly recommend to [talk to us](https://zitadel.com/contact) before you start contributing to streamline our and your work.
|
||||||
|
|
||||||
We accept contributions through pull requests. You need a github account for that. If you are unfamiliar with git have a look at Github's documentation on [creating forks](https://help.github.com/articles/fork-a-repo) and [creating pull requests](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/creating-a-pull-request-from-a-fork). Please draft the pull request as soon as possible. Go through the following checklist before you submit the final pull request:
|
We accept contributions through pull requests.
|
||||||
|
You need a github account for that.
|
||||||
|
If you are unfamiliar with git have a look at Github's documentation on [creating forks](https://help.github.com/articles/fork-a-repo) and [creating pull requests](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/creating-a-pull-request-from-a-fork).
|
||||||
|
Please draft the pull request as soon as possible.
|
||||||
|
Go through the following checklist before you submit the final pull request:
|
||||||
|
|
||||||
### Submit a pull request (PR)
|
### Submit a pull request (PR)
|
||||||
|
|
||||||
@ -61,7 +66,8 @@ We accept contributions through pull requests. You need a github account for tha
|
|||||||
|
|
||||||
### Review a pull request
|
### Review a pull request
|
||||||
|
|
||||||
The reviewers will provide you feedback and approve your changes as soon as they are satisfied. If we ask you for changes in the code, you can follow the [GitHub Guide](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/reviewing-changes-in-pull-requests/incorporating-feedback-in-your-pull-request) to incorporate feedback in your pull request.
|
The reviewers will provide you feedback and approve your changes as soon as they are satisfied.
|
||||||
|
If we ask you for changes in the code, you can follow the [GitHub Guide](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/reviewing-changes-in-pull-requests/incorporating-feedback-in-your-pull-request) to incorporate feedback in your pull request.
|
||||||
|
|
||||||
<!-- TODO: how to do this via git -->
|
<!-- TODO: how to do this via git -->
|
||||||
<!-- TODO: change commit message via git -->
|
<!-- TODO: change commit message via git -->
|
||||||
@ -88,6 +94,16 @@ This is optional to indicate which component is affected. In doubt, leave blank
|
|||||||
|
|
||||||
Provide a brief description of the change.
|
Provide a brief description of the change.
|
||||||
|
|
||||||
|
### Quality assurance
|
||||||
|
|
||||||
|
Please make sure you cover your changes with tests before marking a Pull Request as ready for review:
|
||||||
|
|
||||||
|
- [ ] Integration tests against the gRPC server ensure that one or multiple API calls that belong together return the expected results.
|
||||||
|
- [ ] Integration tests against the gRPC server ensure that probable good and bad read and write permissions are tested.
|
||||||
|
- [ ] Integration tests against the gRPC server ensure that the API is easily usable despite eventual consistency.
|
||||||
|
- [ ] Integration tests against the gRPC server ensure that all probable login and registration flows are covered."
|
||||||
|
- [ ] Integration tests ensure that certain commands send expected notifications.
|
||||||
|
|
||||||
## Contribute
|
## Contribute
|
||||||
|
|
||||||
The code consists of the following parts:
|
The code consists of the following parts:
|
||||||
|
@ -15,16 +15,16 @@ Tracing:
|
|||||||
MetricPrefix: zitadel
|
MetricPrefix: zitadel
|
||||||
|
|
||||||
Telemetry:
|
Telemetry:
|
||||||
# As long as Enabled is true, usage data that is marked as due is also tried to be sent to the configured Telemetry.Endpoints.
|
# As long as Enabled is true, ZITADEL tries to send usage data to the configured Telemetry.Endpoints.
|
||||||
# Data is marked as due, even if Enabled is false.
|
# Data is projected by ZITADEL even if Enabled is false.
|
||||||
# This means that switching this to true makes ZITADEL try to send past data that was marked to send.
|
# This means that switching this to true makes ZITADEL try to send past data.
|
||||||
Enabled: false
|
Enabled: false
|
||||||
# Push telemetry data to all these endpoints at least once.
|
# Push telemetry data to all these endpoints at least once using an HTTP POST request.
|
||||||
# If one endpoint returns an unsuccessful response code or times out,
|
# If one endpoint returns an unsuccessful response code or times out,
|
||||||
# ZITADEL retries to push the data point to all configured endpoints until it succeeds.
|
# ZITADEL retries to push the data point to all configured endpoints until it succeeds.
|
||||||
# Configure delivery guarantees and intervals in the section Projections.Customizations.Telemetry
|
# Configure delivery guarantees and intervals in the section Projections.Customizations.Telemetry
|
||||||
# The endpoints can be reconfigured at runtime.
|
# The endpoints can be reconfigured at runtime.
|
||||||
# Three redirects are followed.
|
# Ten redirects are followed.
|
||||||
# If you change this configuration at runtime, remaining data that is not successfully delivered to the old endpoints is sent to the new endpoints.
|
# If you change this configuration at runtime, remaining data that is not successfully delivered to the old endpoints is sent to the new endpoints.
|
||||||
Endpoints:
|
Endpoints:
|
||||||
# Include https://zitadel.com/usage if you want to help the ZITADEL maintainers improve the product's usability by giving them some insights.
|
# Include https://zitadel.com/usage if you want to help the ZITADEL maintainers improve the product's usability by giving them some insights.
|
||||||
@ -207,7 +207,7 @@ Projections:
|
|||||||
HandleActiveInstances: 360h
|
HandleActiveInstances: 360h
|
||||||
# As sending telemetry data doesn't result in database statements, retries don't have any effects
|
# As sending telemetry data doesn't result in database statements, retries don't have any effects
|
||||||
MaxFailureCount: 0
|
MaxFailureCount: 0
|
||||||
# Telemetry data synchronization is not time critical. Setting RequeueEvery every 55 minutes doesn't annoy the database too much.
|
# Telemetry data synchronization is not time critical. Setting RequeueEvery to 55 minutes doesn't annoy the database too much.
|
||||||
RequeueEvery: 3300s
|
RequeueEvery: 3300s
|
||||||
|
|
||||||
Auth:
|
Auth:
|
||||||
|
@ -16,22 +16,20 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
Tester *integration.Tester
|
CTX context.Context
|
||||||
SystemUserCTX context.Context
|
Tester *integration.Tester
|
||||||
SystemClient system.SystemServiceClient
|
SystemClient system.SystemServiceClient
|
||||||
PrimaryDomain, InstanceID string
|
MgmtClient management.ManagementServiceClient
|
||||||
IAMOwnerCtx context.Context
|
|
||||||
MgmtClient management.ManagementServiceClient
|
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestMain(m *testing.M) {
|
func TestMain(m *testing.M) {
|
||||||
os.Exit(func() int {
|
os.Exit(func() int {
|
||||||
ctx, _, cancel := integration.Contexts(5 * time.Minute)
|
ctx, _, cancel := integration.Contexts(5 * time.Minute)
|
||||||
|
CTX = ctx
|
||||||
defer cancel()
|
defer cancel()
|
||||||
os.Setenv("INTEGRATION_DB_FLAVOR", "postgres")
|
os.Setenv("INTEGRATION_DB_FLAVOR", "postgres")
|
||||||
os.Setenv("ZITADEL_MASTERKEY", "MasterkeyNeedsToHave32Characters")
|
os.Setenv("ZITADEL_MASTERKEY", "MasterkeyNeedsToHave32Characters")
|
||||||
Tester = integration.NewTester(ctx)
|
Tester = integration.NewTester(ctx)
|
||||||
PrimaryDomain, InstanceID, SystemUserCTX, IAMOwnerCtx = Tester.UseIsolatedInstance(ctx)
|
|
||||||
MgmtClient = Tester.Client.Mgmt
|
MgmtClient = Tester.Client.Mgmt
|
||||||
SystemClient = Tester.Client.System
|
SystemClient = Tester.Client.System
|
||||||
defer Tester.Done()
|
defer Tester.Done()
|
||||||
|
@ -16,9 +16,10 @@ import (
|
|||||||
"github.com/zitadel/zitadel/pkg/grpc/system"
|
"github.com/zitadel/zitadel/pkg/grpc/system"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestServer_TelemetryPusher(t *testing.T) {
|
func TestServer_TelemetryPushMilestones(t *testing.T) {
|
||||||
|
primaryDomain, instanceID, systemUserCTX, iamOwnerCtx := Tester.UseIsolatedInstance(CTX)
|
||||||
bodies := make(chan []byte, 0)
|
bodies := make(chan []byte, 0)
|
||||||
t.Log("testing against instance with primary domain", PrimaryDomain)
|
t.Log("testing against instance with primary domain", primaryDomain)
|
||||||
mockServer := httptest.NewUnstartedServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
mockServer := httptest.NewUnstartedServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||||
body, err := io.ReadAll(r.Body)
|
body, err := io.ReadAll(r.Body)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -34,26 +35,26 @@ func TestServer_TelemetryPusher(t *testing.T) {
|
|||||||
mockServer.Listener = listener
|
mockServer.Listener = listener
|
||||||
mockServer.Start()
|
mockServer.Start()
|
||||||
t.Cleanup(mockServer.Close)
|
t.Cleanup(mockServer.Close)
|
||||||
awaitMilestone(t, bodies, "InstanceCreated")
|
awaitMilestone(t, bodies, primaryDomain, "InstanceCreated")
|
||||||
project, err := MgmtClient.AddProject(IAMOwnerCtx, &management.AddProjectRequest{Name: "integration"})
|
project, err := MgmtClient.AddProject(iamOwnerCtx, &management.AddProjectRequest{Name: "integration"})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
awaitMilestone(t, bodies, "ProjectCreated")
|
awaitMilestone(t, bodies, primaryDomain, "ProjectCreated")
|
||||||
if _, err = MgmtClient.AddOIDCApp(IAMOwnerCtx, &management.AddOIDCAppRequest{
|
if _, err = MgmtClient.AddOIDCApp(iamOwnerCtx, &management.AddOIDCAppRequest{
|
||||||
ProjectId: project.GetId(),
|
ProjectId: project.GetId(),
|
||||||
Name: "integration",
|
Name: "integration",
|
||||||
}); err != nil {
|
}); err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
awaitMilestone(t, bodies, "ApplicationCreated")
|
awaitMilestone(t, bodies, primaryDomain, "ApplicationCreated")
|
||||||
if _, err = SystemClient.RemoveInstance(SystemUserCTX, &system.RemoveInstanceRequest{InstanceId: InstanceID}); err != nil {
|
if _, err = SystemClient.RemoveInstance(systemUserCTX, &system.RemoveInstanceRequest{InstanceId: instanceID}); err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
awaitMilestone(t, bodies, "InstanceDeleted")
|
awaitMilestone(t, bodies, primaryDomain, "InstanceDeleted")
|
||||||
}
|
}
|
||||||
|
|
||||||
func awaitMilestone(t *testing.T, bodies chan []byte, expectMilestoneType string) {
|
func awaitMilestone(t *testing.T, bodies chan []byte, primaryDomain, expectMilestoneType string) {
|
||||||
for {
|
for {
|
||||||
select {
|
select {
|
||||||
case body := <-bodies:
|
case body := <-bodies:
|
||||||
@ -69,11 +70,11 @@ func awaitMilestone(t *testing.T, bodies chan []byte, expectMilestoneType string
|
|||||||
if err := json.Unmarshal(body, &milestone); err != nil {
|
if err := json.Unmarshal(body, &milestone); err != nil {
|
||||||
t.Error(err)
|
t.Error(err)
|
||||||
}
|
}
|
||||||
if milestone.Type == expectMilestoneType && milestone.PrimaryDomain == PrimaryDomain {
|
if milestone.Type == expectMilestoneType && milestone.PrimaryDomain == primaryDomain {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
case <-time.After(60 * time.Second):
|
case <-time.After(60 * time.Second):
|
||||||
t.Fatalf("timed out waiting for milestone")
|
t.Fatalf("timed out waiting for milestone %s in domain %s", expectMilestoneType, primaryDomain)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user