diff --git a/go/.gitignore b/go/.gitignore new file mode 100644 index 0000000000..77d5e7bf02 --- /dev/null +++ b/go/.gitignore @@ -0,0 +1 @@ +unkey diff --git a/go/Taskfile.yml b/go/Taskfile.yml index 1231d2f6d9..a5c6ebd995 100644 --- a/go/Taskfile.yml +++ b/go/Taskfile.yml @@ -33,7 +33,7 @@ tasks: test-unit: cmds: - - go test -json -race -failfast ./... -skip "^TestIntegration_" -timeout=30m -p=10 | tparse -all -progress -smallscreen + - go test -json -race -failfast -timeout=30m -p=10 ./... | tparse -all -progress -smallscreen build: cmds: diff --git a/go/apps/api/integration/multi_node_ratelimiting/generate_tests/main.go b/go/apps/api/integration/multi_node_ratelimiting/generate_tests/main.go index a05283bdef..481ed9d2a9 100644 --- a/go/apps/api/integration/multi_node_ratelimiting/generate_tests/main.go +++ b/go/apps/api/integration/multi_node_ratelimiting/generate_tests/main.go @@ -45,10 +45,10 @@ func (tc TestCase) TestName() string { // Define test matrix parameters var ( nodeCounts = []int{1, 3, 9} - limits = []int64{5, 100, 1000} + limits = []int64{5, 100} durations = []time.Duration{time.Second, time.Minute, time.Hour} loadFactors = []float64{0.9, 2.0, 10.0} - windowCounts = []int{10, 100} + windowCounts = []int{10} ) const testTemplate = `// Code generated by go generate; DO NOT EDIT. diff --git a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes1_limit1000_duration1000_load0_90_windows10/generated_test.go b/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes1_limit1000_duration1000_load0_90_windows10/generated_test.go deleted file mode 100644 index d2a9569e8f..0000000000 --- a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes1_limit1000_duration1000_load0_90_windows10/generated_test.go +++ /dev/null @@ -1,28 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -package ratelimit_nodes1_limit1000_duration1000_load0_90_windows10 - -import ( - "testing" - - "github.com/unkeyed/unkey/go/apps/api/integration" - run "github.com/unkeyed/unkey/go/apps/api/integration/multi_node_ratelimiting" - "github.com/unkeyed/unkey/go/pkg/testutil" -) - -func TestIntegration_RateLimit_Nodes1_Limit1000_Duration1000_Load0_90_Windows10(t *testing.T) { - testutil.SkipUnlessIntegration(t) - - h := integration.New(t, integration.Config{ - NumNodes: 1, - }) - - run.RunRateLimitTest( - t, - h, - 1000, // limit - 1000, // duration - 10, // window count - 0.9, // load factor - 1, // node count - ) -} diff --git a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes1_limit1000_duration1000_load0_90_windows100/generated_test.go b/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes1_limit1000_duration1000_load0_90_windows100/generated_test.go deleted file mode 100644 index c4f3bf6f8b..0000000000 --- a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes1_limit1000_duration1000_load0_90_windows100/generated_test.go +++ /dev/null @@ -1,28 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -package ratelimit_nodes1_limit1000_duration1000_load0_90_windows100 - -import ( - "testing" - - "github.com/unkeyed/unkey/go/apps/api/integration" - run "github.com/unkeyed/unkey/go/apps/api/integration/multi_node_ratelimiting" - "github.com/unkeyed/unkey/go/pkg/testutil" -) - -func TestIntegration_RateLimit_Nodes1_Limit1000_Duration1000_Load0_90_Windows100(t *testing.T) { - testutil.SkipUnlessIntegration(t) - - h := integration.New(t, integration.Config{ - NumNodes: 1, - }) - - run.RunRateLimitTest( - t, - h, - 1000, // limit - 1000, // duration - 100, // window count - 0.9, // load factor - 1, // node count - ) -} diff --git a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes1_limit1000_duration1000_load10_00_windows10/generated_test.go b/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes1_limit1000_duration1000_load10_00_windows10/generated_test.go deleted file mode 100644 index 32e754fb6b..0000000000 --- a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes1_limit1000_duration1000_load10_00_windows10/generated_test.go +++ /dev/null @@ -1,28 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -package ratelimit_nodes1_limit1000_duration1000_load10_00_windows10 - -import ( - "testing" - - "github.com/unkeyed/unkey/go/apps/api/integration" - run "github.com/unkeyed/unkey/go/apps/api/integration/multi_node_ratelimiting" - "github.com/unkeyed/unkey/go/pkg/testutil" -) - -func TestIntegration_RateLimit_Nodes1_Limit1000_Duration1000_Load10_00_Windows10(t *testing.T) { - testutil.SkipUnlessIntegration(t) - - h := integration.New(t, integration.Config{ - NumNodes: 1, - }) - - run.RunRateLimitTest( - t, - h, - 1000, // limit - 1000, // duration - 10, // window count - 10, // load factor - 1, // node count - ) -} diff --git a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes1_limit1000_duration1000_load10_00_windows100/generated_test.go b/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes1_limit1000_duration1000_load10_00_windows100/generated_test.go deleted file mode 100644 index 0983a98cb8..0000000000 --- a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes1_limit1000_duration1000_load10_00_windows100/generated_test.go +++ /dev/null @@ -1,28 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -package ratelimit_nodes1_limit1000_duration1000_load10_00_windows100 - -import ( - "testing" - - "github.com/unkeyed/unkey/go/apps/api/integration" - run "github.com/unkeyed/unkey/go/apps/api/integration/multi_node_ratelimiting" - "github.com/unkeyed/unkey/go/pkg/testutil" -) - -func TestIntegration_RateLimit_Nodes1_Limit1000_Duration1000_Load10_00_Windows100(t *testing.T) { - testutil.SkipUnlessIntegration(t) - - h := integration.New(t, integration.Config{ - NumNodes: 1, - }) - - run.RunRateLimitTest( - t, - h, - 1000, // limit - 1000, // duration - 100, // window count - 10, // load factor - 1, // node count - ) -} diff --git a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes1_limit1000_duration1000_load2_00_windows10/generated_test.go b/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes1_limit1000_duration1000_load2_00_windows10/generated_test.go deleted file mode 100644 index fc4b203c0d..0000000000 --- a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes1_limit1000_duration1000_load2_00_windows10/generated_test.go +++ /dev/null @@ -1,28 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -package ratelimit_nodes1_limit1000_duration1000_load2_00_windows10 - -import ( - "testing" - - "github.com/unkeyed/unkey/go/apps/api/integration" - run "github.com/unkeyed/unkey/go/apps/api/integration/multi_node_ratelimiting" - "github.com/unkeyed/unkey/go/pkg/testutil" -) - -func TestIntegration_RateLimit_Nodes1_Limit1000_Duration1000_Load2_00_Windows10(t *testing.T) { - testutil.SkipUnlessIntegration(t) - - h := integration.New(t, integration.Config{ - NumNodes: 1, - }) - - run.RunRateLimitTest( - t, - h, - 1000, // limit - 1000, // duration - 10, // window count - 2, // load factor - 1, // node count - ) -} diff --git a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes1_limit1000_duration1000_load2_00_windows100/generated_test.go b/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes1_limit1000_duration1000_load2_00_windows100/generated_test.go deleted file mode 100644 index 9a060d307d..0000000000 --- a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes1_limit1000_duration1000_load2_00_windows100/generated_test.go +++ /dev/null @@ -1,28 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -package ratelimit_nodes1_limit1000_duration1000_load2_00_windows100 - -import ( - "testing" - - "github.com/unkeyed/unkey/go/apps/api/integration" - run "github.com/unkeyed/unkey/go/apps/api/integration/multi_node_ratelimiting" - "github.com/unkeyed/unkey/go/pkg/testutil" -) - -func TestIntegration_RateLimit_Nodes1_Limit1000_Duration1000_Load2_00_Windows100(t *testing.T) { - testutil.SkipUnlessIntegration(t) - - h := integration.New(t, integration.Config{ - NumNodes: 1, - }) - - run.RunRateLimitTest( - t, - h, - 1000, // limit - 1000, // duration - 100, // window count - 2, // load factor - 1, // node count - ) -} diff --git a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes1_limit1000_duration3600000_load0_90_windows10/generated_test.go b/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes1_limit1000_duration3600000_load0_90_windows10/generated_test.go deleted file mode 100644 index 597afc4b75..0000000000 --- a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes1_limit1000_duration3600000_load0_90_windows10/generated_test.go +++ /dev/null @@ -1,28 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -package ratelimit_nodes1_limit1000_duration3600000_load0_90_windows10 - -import ( - "testing" - - "github.com/unkeyed/unkey/go/apps/api/integration" - run "github.com/unkeyed/unkey/go/apps/api/integration/multi_node_ratelimiting" - "github.com/unkeyed/unkey/go/pkg/testutil" -) - -func TestIntegration_RateLimit_Nodes1_Limit1000_Duration3600000_Load0_90_Windows10(t *testing.T) { - testutil.SkipUnlessIntegration(t) - - h := integration.New(t, integration.Config{ - NumNodes: 1, - }) - - run.RunRateLimitTest( - t, - h, - 1000, // limit - 3600000, // duration - 10, // window count - 0.9, // load factor - 1, // node count - ) -} diff --git a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes1_limit1000_duration3600000_load0_90_windows100/generated_test.go b/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes1_limit1000_duration3600000_load0_90_windows100/generated_test.go deleted file mode 100644 index 00dee7e180..0000000000 --- a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes1_limit1000_duration3600000_load0_90_windows100/generated_test.go +++ /dev/null @@ -1,28 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -package ratelimit_nodes1_limit1000_duration3600000_load0_90_windows100 - -import ( - "testing" - - "github.com/unkeyed/unkey/go/apps/api/integration" - run "github.com/unkeyed/unkey/go/apps/api/integration/multi_node_ratelimiting" - "github.com/unkeyed/unkey/go/pkg/testutil" -) - -func TestIntegration_RateLimit_Nodes1_Limit1000_Duration3600000_Load0_90_Windows100(t *testing.T) { - testutil.SkipUnlessIntegration(t) - - h := integration.New(t, integration.Config{ - NumNodes: 1, - }) - - run.RunRateLimitTest( - t, - h, - 1000, // limit - 3600000, // duration - 100, // window count - 0.9, // load factor - 1, // node count - ) -} diff --git a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes1_limit1000_duration3600000_load10_00_windows10/generated_test.go b/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes1_limit1000_duration3600000_load10_00_windows10/generated_test.go deleted file mode 100644 index ef0cddf01d..0000000000 --- a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes1_limit1000_duration3600000_load10_00_windows10/generated_test.go +++ /dev/null @@ -1,28 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -package ratelimit_nodes1_limit1000_duration3600000_load10_00_windows10 - -import ( - "testing" - - "github.com/unkeyed/unkey/go/apps/api/integration" - run "github.com/unkeyed/unkey/go/apps/api/integration/multi_node_ratelimiting" - "github.com/unkeyed/unkey/go/pkg/testutil" -) - -func TestIntegration_RateLimit_Nodes1_Limit1000_Duration3600000_Load10_00_Windows10(t *testing.T) { - testutil.SkipUnlessIntegration(t) - - h := integration.New(t, integration.Config{ - NumNodes: 1, - }) - - run.RunRateLimitTest( - t, - h, - 1000, // limit - 3600000, // duration - 10, // window count - 10, // load factor - 1, // node count - ) -} diff --git a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes1_limit1000_duration3600000_load10_00_windows100/generated_test.go b/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes1_limit1000_duration3600000_load10_00_windows100/generated_test.go deleted file mode 100644 index 398b908e9d..0000000000 --- a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes1_limit1000_duration3600000_load10_00_windows100/generated_test.go +++ /dev/null @@ -1,28 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -package ratelimit_nodes1_limit1000_duration3600000_load10_00_windows100 - -import ( - "testing" - - "github.com/unkeyed/unkey/go/apps/api/integration" - run "github.com/unkeyed/unkey/go/apps/api/integration/multi_node_ratelimiting" - "github.com/unkeyed/unkey/go/pkg/testutil" -) - -func TestIntegration_RateLimit_Nodes1_Limit1000_Duration3600000_Load10_00_Windows100(t *testing.T) { - testutil.SkipUnlessIntegration(t) - - h := integration.New(t, integration.Config{ - NumNodes: 1, - }) - - run.RunRateLimitTest( - t, - h, - 1000, // limit - 3600000, // duration - 100, // window count - 10, // load factor - 1, // node count - ) -} diff --git a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes1_limit1000_duration3600000_load2_00_windows10/generated_test.go b/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes1_limit1000_duration3600000_load2_00_windows10/generated_test.go deleted file mode 100644 index fc02dde998..0000000000 --- a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes1_limit1000_duration3600000_load2_00_windows10/generated_test.go +++ /dev/null @@ -1,28 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -package ratelimit_nodes1_limit1000_duration3600000_load2_00_windows10 - -import ( - "testing" - - "github.com/unkeyed/unkey/go/apps/api/integration" - run "github.com/unkeyed/unkey/go/apps/api/integration/multi_node_ratelimiting" - "github.com/unkeyed/unkey/go/pkg/testutil" -) - -func TestIntegration_RateLimit_Nodes1_Limit1000_Duration3600000_Load2_00_Windows10(t *testing.T) { - testutil.SkipUnlessIntegration(t) - - h := integration.New(t, integration.Config{ - NumNodes: 1, - }) - - run.RunRateLimitTest( - t, - h, - 1000, // limit - 3600000, // duration - 10, // window count - 2, // load factor - 1, // node count - ) -} diff --git a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes1_limit1000_duration3600000_load2_00_windows100/generated_test.go b/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes1_limit1000_duration3600000_load2_00_windows100/generated_test.go deleted file mode 100644 index 2da41e4be1..0000000000 --- a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes1_limit1000_duration3600000_load2_00_windows100/generated_test.go +++ /dev/null @@ -1,28 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -package ratelimit_nodes1_limit1000_duration3600000_load2_00_windows100 - -import ( - "testing" - - "github.com/unkeyed/unkey/go/apps/api/integration" - run "github.com/unkeyed/unkey/go/apps/api/integration/multi_node_ratelimiting" - "github.com/unkeyed/unkey/go/pkg/testutil" -) - -func TestIntegration_RateLimit_Nodes1_Limit1000_Duration3600000_Load2_00_Windows100(t *testing.T) { - testutil.SkipUnlessIntegration(t) - - h := integration.New(t, integration.Config{ - NumNodes: 1, - }) - - run.RunRateLimitTest( - t, - h, - 1000, // limit - 3600000, // duration - 100, // window count - 2, // load factor - 1, // node count - ) -} diff --git a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes1_limit1000_duration60000_load0_90_windows10/generated_test.go b/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes1_limit1000_duration60000_load0_90_windows10/generated_test.go deleted file mode 100644 index c9c587d9cc..0000000000 --- a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes1_limit1000_duration60000_load0_90_windows10/generated_test.go +++ /dev/null @@ -1,28 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -package ratelimit_nodes1_limit1000_duration60000_load0_90_windows10 - -import ( - "testing" - - "github.com/unkeyed/unkey/go/apps/api/integration" - run "github.com/unkeyed/unkey/go/apps/api/integration/multi_node_ratelimiting" - "github.com/unkeyed/unkey/go/pkg/testutil" -) - -func TestIntegration_RateLimit_Nodes1_Limit1000_Duration60000_Load0_90_Windows10(t *testing.T) { - testutil.SkipUnlessIntegration(t) - - h := integration.New(t, integration.Config{ - NumNodes: 1, - }) - - run.RunRateLimitTest( - t, - h, - 1000, // limit - 60000, // duration - 10, // window count - 0.9, // load factor - 1, // node count - ) -} diff --git a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes1_limit1000_duration60000_load0_90_windows100/generated_test.go b/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes1_limit1000_duration60000_load0_90_windows100/generated_test.go deleted file mode 100644 index 059f94ce2d..0000000000 --- a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes1_limit1000_duration60000_load0_90_windows100/generated_test.go +++ /dev/null @@ -1,28 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -package ratelimit_nodes1_limit1000_duration60000_load0_90_windows100 - -import ( - "testing" - - "github.com/unkeyed/unkey/go/apps/api/integration" - run "github.com/unkeyed/unkey/go/apps/api/integration/multi_node_ratelimiting" - "github.com/unkeyed/unkey/go/pkg/testutil" -) - -func TestIntegration_RateLimit_Nodes1_Limit1000_Duration60000_Load0_90_Windows100(t *testing.T) { - testutil.SkipUnlessIntegration(t) - - h := integration.New(t, integration.Config{ - NumNodes: 1, - }) - - run.RunRateLimitTest( - t, - h, - 1000, // limit - 60000, // duration - 100, // window count - 0.9, // load factor - 1, // node count - ) -} diff --git a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes1_limit1000_duration60000_load10_00_windows10/generated_test.go b/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes1_limit1000_duration60000_load10_00_windows10/generated_test.go deleted file mode 100644 index 2311a2616f..0000000000 --- a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes1_limit1000_duration60000_load10_00_windows10/generated_test.go +++ /dev/null @@ -1,28 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -package ratelimit_nodes1_limit1000_duration60000_load10_00_windows10 - -import ( - "testing" - - "github.com/unkeyed/unkey/go/apps/api/integration" - run "github.com/unkeyed/unkey/go/apps/api/integration/multi_node_ratelimiting" - "github.com/unkeyed/unkey/go/pkg/testutil" -) - -func TestIntegration_RateLimit_Nodes1_Limit1000_Duration60000_Load10_00_Windows10(t *testing.T) { - testutil.SkipUnlessIntegration(t) - - h := integration.New(t, integration.Config{ - NumNodes: 1, - }) - - run.RunRateLimitTest( - t, - h, - 1000, // limit - 60000, // duration - 10, // window count - 10, // load factor - 1, // node count - ) -} diff --git a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes1_limit1000_duration60000_load10_00_windows100/generated_test.go b/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes1_limit1000_duration60000_load10_00_windows100/generated_test.go deleted file mode 100644 index 02d3c37a2c..0000000000 --- a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes1_limit1000_duration60000_load10_00_windows100/generated_test.go +++ /dev/null @@ -1,28 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -package ratelimit_nodes1_limit1000_duration60000_load10_00_windows100 - -import ( - "testing" - - "github.com/unkeyed/unkey/go/apps/api/integration" - run "github.com/unkeyed/unkey/go/apps/api/integration/multi_node_ratelimiting" - "github.com/unkeyed/unkey/go/pkg/testutil" -) - -func TestIntegration_RateLimit_Nodes1_Limit1000_Duration60000_Load10_00_Windows100(t *testing.T) { - testutil.SkipUnlessIntegration(t) - - h := integration.New(t, integration.Config{ - NumNodes: 1, - }) - - run.RunRateLimitTest( - t, - h, - 1000, // limit - 60000, // duration - 100, // window count - 10, // load factor - 1, // node count - ) -} diff --git a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes1_limit1000_duration60000_load2_00_windows10/generated_test.go b/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes1_limit1000_duration60000_load2_00_windows10/generated_test.go deleted file mode 100644 index bd16a6df5c..0000000000 --- a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes1_limit1000_duration60000_load2_00_windows10/generated_test.go +++ /dev/null @@ -1,28 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -package ratelimit_nodes1_limit1000_duration60000_load2_00_windows10 - -import ( - "testing" - - "github.com/unkeyed/unkey/go/apps/api/integration" - run "github.com/unkeyed/unkey/go/apps/api/integration/multi_node_ratelimiting" - "github.com/unkeyed/unkey/go/pkg/testutil" -) - -func TestIntegration_RateLimit_Nodes1_Limit1000_Duration60000_Load2_00_Windows10(t *testing.T) { - testutil.SkipUnlessIntegration(t) - - h := integration.New(t, integration.Config{ - NumNodes: 1, - }) - - run.RunRateLimitTest( - t, - h, - 1000, // limit - 60000, // duration - 10, // window count - 2, // load factor - 1, // node count - ) -} diff --git a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes1_limit1000_duration60000_load2_00_windows100/generated_test.go b/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes1_limit1000_duration60000_load2_00_windows100/generated_test.go deleted file mode 100644 index 1f942921ee..0000000000 --- a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes1_limit1000_duration60000_load2_00_windows100/generated_test.go +++ /dev/null @@ -1,28 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -package ratelimit_nodes1_limit1000_duration60000_load2_00_windows100 - -import ( - "testing" - - "github.com/unkeyed/unkey/go/apps/api/integration" - run "github.com/unkeyed/unkey/go/apps/api/integration/multi_node_ratelimiting" - "github.com/unkeyed/unkey/go/pkg/testutil" -) - -func TestIntegration_RateLimit_Nodes1_Limit1000_Duration60000_Load2_00_Windows100(t *testing.T) { - testutil.SkipUnlessIntegration(t) - - h := integration.New(t, integration.Config{ - NumNodes: 1, - }) - - run.RunRateLimitTest( - t, - h, - 1000, // limit - 60000, // duration - 100, // window count - 2, // load factor - 1, // node count - ) -} diff --git a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes1_limit1000_duration86400000_load0_90_windows10/generated_test.go b/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes1_limit1000_duration86400000_load0_90_windows10/generated_test.go deleted file mode 100644 index 6a78f62594..0000000000 --- a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes1_limit1000_duration86400000_load0_90_windows10/generated_test.go +++ /dev/null @@ -1,28 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -package ratelimit_nodes1_limit1000_duration86400000_load0_90_windows10 - -import ( - "testing" - - "github.com/unkeyed/unkey/go/apps/api/integration" - run "github.com/unkeyed/unkey/go/apps/api/integration/multi_node_ratelimiting" - "github.com/unkeyed/unkey/go/pkg/testutil" -) - -func TestIntegration_RateLimit_Nodes1_Limit1000_Duration86400000_Load0_90_Windows10(t *testing.T) { - testutil.SkipUnlessIntegration(t) - - h := integration.New(t, integration.Config{ - NumNodes: 1, - }) - - run.RunRateLimitTest( - t, - h, - 1000, // limit - 86400000, // duration - 10, // window count - 0.9, // load factor - 1, // node count - ) -} diff --git a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes1_limit1000_duration86400000_load0_90_windows100/generated_test.go b/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes1_limit1000_duration86400000_load0_90_windows100/generated_test.go deleted file mode 100644 index 7fdd0b7cb7..0000000000 --- a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes1_limit1000_duration86400000_load0_90_windows100/generated_test.go +++ /dev/null @@ -1,28 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -package ratelimit_nodes1_limit1000_duration86400000_load0_90_windows100 - -import ( - "testing" - - "github.com/unkeyed/unkey/go/apps/api/integration" - run "github.com/unkeyed/unkey/go/apps/api/integration/multi_node_ratelimiting" - "github.com/unkeyed/unkey/go/pkg/testutil" -) - -func TestIntegration_RateLimit_Nodes1_Limit1000_Duration86400000_Load0_90_Windows100(t *testing.T) { - testutil.SkipUnlessIntegration(t) - - h := integration.New(t, integration.Config{ - NumNodes: 1, - }) - - run.RunRateLimitTest( - t, - h, - 1000, // limit - 86400000, // duration - 100, // window count - 0.9, // load factor - 1, // node count - ) -} diff --git a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes1_limit1000_duration86400000_load10_00_windows10/generated_test.go b/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes1_limit1000_duration86400000_load10_00_windows10/generated_test.go deleted file mode 100644 index 2a01ed7dd2..0000000000 --- a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes1_limit1000_duration86400000_load10_00_windows10/generated_test.go +++ /dev/null @@ -1,28 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -package ratelimit_nodes1_limit1000_duration86400000_load10_00_windows10 - -import ( - "testing" - - "github.com/unkeyed/unkey/go/apps/api/integration" - run "github.com/unkeyed/unkey/go/apps/api/integration/multi_node_ratelimiting" - "github.com/unkeyed/unkey/go/pkg/testutil" -) - -func TestIntegration_RateLimit_Nodes1_Limit1000_Duration86400000_Load10_00_Windows10(t *testing.T) { - testutil.SkipUnlessIntegration(t) - - h := integration.New(t, integration.Config{ - NumNodes: 1, - }) - - run.RunRateLimitTest( - t, - h, - 1000, // limit - 86400000, // duration - 10, // window count - 10, // load factor - 1, // node count - ) -} diff --git a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes1_limit1000_duration86400000_load10_00_windows100/generated_test.go b/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes1_limit1000_duration86400000_load10_00_windows100/generated_test.go deleted file mode 100644 index f8f24e8323..0000000000 --- a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes1_limit1000_duration86400000_load10_00_windows100/generated_test.go +++ /dev/null @@ -1,28 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -package ratelimit_nodes1_limit1000_duration86400000_load10_00_windows100 - -import ( - "testing" - - "github.com/unkeyed/unkey/go/apps/api/integration" - run "github.com/unkeyed/unkey/go/apps/api/integration/multi_node_ratelimiting" - "github.com/unkeyed/unkey/go/pkg/testutil" -) - -func TestIntegration_RateLimit_Nodes1_Limit1000_Duration86400000_Load10_00_Windows100(t *testing.T) { - testutil.SkipUnlessIntegration(t) - - h := integration.New(t, integration.Config{ - NumNodes: 1, - }) - - run.RunRateLimitTest( - t, - h, - 1000, // limit - 86400000, // duration - 100, // window count - 10, // load factor - 1, // node count - ) -} diff --git a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes1_limit1000_duration86400000_load2_00_windows10/generated_test.go b/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes1_limit1000_duration86400000_load2_00_windows10/generated_test.go deleted file mode 100644 index 83f3bf9311..0000000000 --- a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes1_limit1000_duration86400000_load2_00_windows10/generated_test.go +++ /dev/null @@ -1,28 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -package ratelimit_nodes1_limit1000_duration86400000_load2_00_windows10 - -import ( - "testing" - - "github.com/unkeyed/unkey/go/apps/api/integration" - run "github.com/unkeyed/unkey/go/apps/api/integration/multi_node_ratelimiting" - "github.com/unkeyed/unkey/go/pkg/testutil" -) - -func TestIntegration_RateLimit_Nodes1_Limit1000_Duration86400000_Load2_00_Windows10(t *testing.T) { - testutil.SkipUnlessIntegration(t) - - h := integration.New(t, integration.Config{ - NumNodes: 1, - }) - - run.RunRateLimitTest( - t, - h, - 1000, // limit - 86400000, // duration - 10, // window count - 2, // load factor - 1, // node count - ) -} diff --git a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes1_limit1000_duration86400000_load2_00_windows100/generated_test.go b/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes1_limit1000_duration86400000_load2_00_windows100/generated_test.go deleted file mode 100644 index 1f6621265d..0000000000 --- a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes1_limit1000_duration86400000_load2_00_windows100/generated_test.go +++ /dev/null @@ -1,28 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -package ratelimit_nodes1_limit1000_duration86400000_load2_00_windows100 - -import ( - "testing" - - "github.com/unkeyed/unkey/go/apps/api/integration" - run "github.com/unkeyed/unkey/go/apps/api/integration/multi_node_ratelimiting" - "github.com/unkeyed/unkey/go/pkg/testutil" -) - -func TestIntegration_RateLimit_Nodes1_Limit1000_Duration86400000_Load2_00_Windows100(t *testing.T) { - testutil.SkipUnlessIntegration(t) - - h := integration.New(t, integration.Config{ - NumNodes: 1, - }) - - run.RunRateLimitTest( - t, - h, - 1000, // limit - 86400000, // duration - 100, // window count - 2, // load factor - 1, // node count - ) -} diff --git a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes1_limit100_duration1000_load0_90_windows100/generated_test.go b/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes1_limit100_duration1000_load0_90_windows100/generated_test.go deleted file mode 100644 index 25391c969c..0000000000 --- a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes1_limit100_duration1000_load0_90_windows100/generated_test.go +++ /dev/null @@ -1,28 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -package ratelimit_nodes1_limit100_duration1000_load0_90_windows100 - -import ( - "testing" - - "github.com/unkeyed/unkey/go/apps/api/integration" - run "github.com/unkeyed/unkey/go/apps/api/integration/multi_node_ratelimiting" - "github.com/unkeyed/unkey/go/pkg/testutil" -) - -func TestIntegration_RateLimit_Nodes1_Limit100_Duration1000_Load0_90_Windows100(t *testing.T) { - testutil.SkipUnlessIntegration(t) - - h := integration.New(t, integration.Config{ - NumNodes: 1, - }) - - run.RunRateLimitTest( - t, - h, - 100, // limit - 1000, // duration - 100, // window count - 0.9, // load factor - 1, // node count - ) -} diff --git a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes1_limit100_duration1000_load10_00_windows100/generated_test.go b/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes1_limit100_duration1000_load10_00_windows100/generated_test.go deleted file mode 100644 index d2b2876774..0000000000 --- a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes1_limit100_duration1000_load10_00_windows100/generated_test.go +++ /dev/null @@ -1,28 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -package ratelimit_nodes1_limit100_duration1000_load10_00_windows100 - -import ( - "testing" - - "github.com/unkeyed/unkey/go/apps/api/integration" - run "github.com/unkeyed/unkey/go/apps/api/integration/multi_node_ratelimiting" - "github.com/unkeyed/unkey/go/pkg/testutil" -) - -func TestIntegration_RateLimit_Nodes1_Limit100_Duration1000_Load10_00_Windows100(t *testing.T) { - testutil.SkipUnlessIntegration(t) - - h := integration.New(t, integration.Config{ - NumNodes: 1, - }) - - run.RunRateLimitTest( - t, - h, - 100, // limit - 1000, // duration - 100, // window count - 10, // load factor - 1, // node count - ) -} diff --git a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes1_limit100_duration1000_load2_00_windows100/generated_test.go b/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes1_limit100_duration1000_load2_00_windows100/generated_test.go deleted file mode 100644 index a61af600e3..0000000000 --- a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes1_limit100_duration1000_load2_00_windows100/generated_test.go +++ /dev/null @@ -1,28 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -package ratelimit_nodes1_limit100_duration1000_load2_00_windows100 - -import ( - "testing" - - "github.com/unkeyed/unkey/go/apps/api/integration" - run "github.com/unkeyed/unkey/go/apps/api/integration/multi_node_ratelimiting" - "github.com/unkeyed/unkey/go/pkg/testutil" -) - -func TestIntegration_RateLimit_Nodes1_Limit100_Duration1000_Load2_00_Windows100(t *testing.T) { - testutil.SkipUnlessIntegration(t) - - h := integration.New(t, integration.Config{ - NumNodes: 1, - }) - - run.RunRateLimitTest( - t, - h, - 100, // limit - 1000, // duration - 100, // window count - 2, // load factor - 1, // node count - ) -} diff --git a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes1_limit100_duration3600000_load0_90_windows100/generated_test.go b/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes1_limit100_duration3600000_load0_90_windows100/generated_test.go deleted file mode 100644 index b669b1f468..0000000000 --- a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes1_limit100_duration3600000_load0_90_windows100/generated_test.go +++ /dev/null @@ -1,28 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -package ratelimit_nodes1_limit100_duration3600000_load0_90_windows100 - -import ( - "testing" - - "github.com/unkeyed/unkey/go/apps/api/integration" - run "github.com/unkeyed/unkey/go/apps/api/integration/multi_node_ratelimiting" - "github.com/unkeyed/unkey/go/pkg/testutil" -) - -func TestIntegration_RateLimit_Nodes1_Limit100_Duration3600000_Load0_90_Windows100(t *testing.T) { - testutil.SkipUnlessIntegration(t) - - h := integration.New(t, integration.Config{ - NumNodes: 1, - }) - - run.RunRateLimitTest( - t, - h, - 100, // limit - 3600000, // duration - 100, // window count - 0.9, // load factor - 1, // node count - ) -} diff --git a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes1_limit100_duration3600000_load10_00_windows100/generated_test.go b/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes1_limit100_duration3600000_load10_00_windows100/generated_test.go deleted file mode 100644 index 1da57a65cd..0000000000 --- a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes1_limit100_duration3600000_load10_00_windows100/generated_test.go +++ /dev/null @@ -1,28 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -package ratelimit_nodes1_limit100_duration3600000_load10_00_windows100 - -import ( - "testing" - - "github.com/unkeyed/unkey/go/apps/api/integration" - run "github.com/unkeyed/unkey/go/apps/api/integration/multi_node_ratelimiting" - "github.com/unkeyed/unkey/go/pkg/testutil" -) - -func TestIntegration_RateLimit_Nodes1_Limit100_Duration3600000_Load10_00_Windows100(t *testing.T) { - testutil.SkipUnlessIntegration(t) - - h := integration.New(t, integration.Config{ - NumNodes: 1, - }) - - run.RunRateLimitTest( - t, - h, - 100, // limit - 3600000, // duration - 100, // window count - 10, // load factor - 1, // node count - ) -} diff --git a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes1_limit100_duration3600000_load2_00_windows100/generated_test.go b/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes1_limit100_duration3600000_load2_00_windows100/generated_test.go deleted file mode 100644 index 385dc0b36e..0000000000 --- a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes1_limit100_duration3600000_load2_00_windows100/generated_test.go +++ /dev/null @@ -1,28 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -package ratelimit_nodes1_limit100_duration3600000_load2_00_windows100 - -import ( - "testing" - - "github.com/unkeyed/unkey/go/apps/api/integration" - run "github.com/unkeyed/unkey/go/apps/api/integration/multi_node_ratelimiting" - "github.com/unkeyed/unkey/go/pkg/testutil" -) - -func TestIntegration_RateLimit_Nodes1_Limit100_Duration3600000_Load2_00_Windows100(t *testing.T) { - testutil.SkipUnlessIntegration(t) - - h := integration.New(t, integration.Config{ - NumNodes: 1, - }) - - run.RunRateLimitTest( - t, - h, - 100, // limit - 3600000, // duration - 100, // window count - 2, // load factor - 1, // node count - ) -} diff --git a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes1_limit100_duration60000_load0_90_windows100/generated_test.go b/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes1_limit100_duration60000_load0_90_windows100/generated_test.go deleted file mode 100644 index d03e5f0ca0..0000000000 --- a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes1_limit100_duration60000_load0_90_windows100/generated_test.go +++ /dev/null @@ -1,28 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -package ratelimit_nodes1_limit100_duration60000_load0_90_windows100 - -import ( - "testing" - - "github.com/unkeyed/unkey/go/apps/api/integration" - run "github.com/unkeyed/unkey/go/apps/api/integration/multi_node_ratelimiting" - "github.com/unkeyed/unkey/go/pkg/testutil" -) - -func TestIntegration_RateLimit_Nodes1_Limit100_Duration60000_Load0_90_Windows100(t *testing.T) { - testutil.SkipUnlessIntegration(t) - - h := integration.New(t, integration.Config{ - NumNodes: 1, - }) - - run.RunRateLimitTest( - t, - h, - 100, // limit - 60000, // duration - 100, // window count - 0.9, // load factor - 1, // node count - ) -} diff --git a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes1_limit100_duration60000_load10_00_windows100/generated_test.go b/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes1_limit100_duration60000_load10_00_windows100/generated_test.go deleted file mode 100644 index b3891d84a9..0000000000 --- a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes1_limit100_duration60000_load10_00_windows100/generated_test.go +++ /dev/null @@ -1,28 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -package ratelimit_nodes1_limit100_duration60000_load10_00_windows100 - -import ( - "testing" - - "github.com/unkeyed/unkey/go/apps/api/integration" - run "github.com/unkeyed/unkey/go/apps/api/integration/multi_node_ratelimiting" - "github.com/unkeyed/unkey/go/pkg/testutil" -) - -func TestIntegration_RateLimit_Nodes1_Limit100_Duration60000_Load10_00_Windows100(t *testing.T) { - testutil.SkipUnlessIntegration(t) - - h := integration.New(t, integration.Config{ - NumNodes: 1, - }) - - run.RunRateLimitTest( - t, - h, - 100, // limit - 60000, // duration - 100, // window count - 10, // load factor - 1, // node count - ) -} diff --git a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes1_limit100_duration60000_load2_00_windows100/generated_test.go b/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes1_limit100_duration60000_load2_00_windows100/generated_test.go deleted file mode 100644 index 645ad026aa..0000000000 --- a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes1_limit100_duration60000_load2_00_windows100/generated_test.go +++ /dev/null @@ -1,28 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -package ratelimit_nodes1_limit100_duration60000_load2_00_windows100 - -import ( - "testing" - - "github.com/unkeyed/unkey/go/apps/api/integration" - run "github.com/unkeyed/unkey/go/apps/api/integration/multi_node_ratelimiting" - "github.com/unkeyed/unkey/go/pkg/testutil" -) - -func TestIntegration_RateLimit_Nodes1_Limit100_Duration60000_Load2_00_Windows100(t *testing.T) { - testutil.SkipUnlessIntegration(t) - - h := integration.New(t, integration.Config{ - NumNodes: 1, - }) - - run.RunRateLimitTest( - t, - h, - 100, // limit - 60000, // duration - 100, // window count - 2, // load factor - 1, // node count - ) -} diff --git a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes1_limit100_duration86400000_load0_90_windows10/generated_test.go b/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes1_limit100_duration86400000_load0_90_windows10/generated_test.go deleted file mode 100644 index a37a418cb7..0000000000 --- a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes1_limit100_duration86400000_load0_90_windows10/generated_test.go +++ /dev/null @@ -1,28 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -package ratelimit_nodes1_limit100_duration86400000_load0_90_windows10 - -import ( - "testing" - - "github.com/unkeyed/unkey/go/apps/api/integration" - run "github.com/unkeyed/unkey/go/apps/api/integration/multi_node_ratelimiting" - "github.com/unkeyed/unkey/go/pkg/testutil" -) - -func TestIntegration_RateLimit_Nodes1_Limit100_Duration86400000_Load0_90_Windows10(t *testing.T) { - testutil.SkipUnlessIntegration(t) - - h := integration.New(t, integration.Config{ - NumNodes: 1, - }) - - run.RunRateLimitTest( - t, - h, - 100, // limit - 86400000, // duration - 10, // window count - 0.9, // load factor - 1, // node count - ) -} diff --git a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes1_limit100_duration86400000_load0_90_windows100/generated_test.go b/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes1_limit100_duration86400000_load0_90_windows100/generated_test.go deleted file mode 100644 index 2d4c9a702a..0000000000 --- a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes1_limit100_duration86400000_load0_90_windows100/generated_test.go +++ /dev/null @@ -1,28 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -package ratelimit_nodes1_limit100_duration86400000_load0_90_windows100 - -import ( - "testing" - - "github.com/unkeyed/unkey/go/apps/api/integration" - run "github.com/unkeyed/unkey/go/apps/api/integration/multi_node_ratelimiting" - "github.com/unkeyed/unkey/go/pkg/testutil" -) - -func TestIntegration_RateLimit_Nodes1_Limit100_Duration86400000_Load0_90_Windows100(t *testing.T) { - testutil.SkipUnlessIntegration(t) - - h := integration.New(t, integration.Config{ - NumNodes: 1, - }) - - run.RunRateLimitTest( - t, - h, - 100, // limit - 86400000, // duration - 100, // window count - 0.9, // load factor - 1, // node count - ) -} diff --git a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes1_limit100_duration86400000_load10_00_windows10/generated_test.go b/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes1_limit100_duration86400000_load10_00_windows10/generated_test.go deleted file mode 100644 index bb0e92c4f7..0000000000 --- a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes1_limit100_duration86400000_load10_00_windows10/generated_test.go +++ /dev/null @@ -1,28 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -package ratelimit_nodes1_limit100_duration86400000_load10_00_windows10 - -import ( - "testing" - - "github.com/unkeyed/unkey/go/apps/api/integration" - run "github.com/unkeyed/unkey/go/apps/api/integration/multi_node_ratelimiting" - "github.com/unkeyed/unkey/go/pkg/testutil" -) - -func TestIntegration_RateLimit_Nodes1_Limit100_Duration86400000_Load10_00_Windows10(t *testing.T) { - testutil.SkipUnlessIntegration(t) - - h := integration.New(t, integration.Config{ - NumNodes: 1, - }) - - run.RunRateLimitTest( - t, - h, - 100, // limit - 86400000, // duration - 10, // window count - 10, // load factor - 1, // node count - ) -} diff --git a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes1_limit100_duration86400000_load10_00_windows100/generated_test.go b/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes1_limit100_duration86400000_load10_00_windows100/generated_test.go deleted file mode 100644 index 29d819c7a1..0000000000 --- a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes1_limit100_duration86400000_load10_00_windows100/generated_test.go +++ /dev/null @@ -1,28 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -package ratelimit_nodes1_limit100_duration86400000_load10_00_windows100 - -import ( - "testing" - - "github.com/unkeyed/unkey/go/apps/api/integration" - run "github.com/unkeyed/unkey/go/apps/api/integration/multi_node_ratelimiting" - "github.com/unkeyed/unkey/go/pkg/testutil" -) - -func TestIntegration_RateLimit_Nodes1_Limit100_Duration86400000_Load10_00_Windows100(t *testing.T) { - testutil.SkipUnlessIntegration(t) - - h := integration.New(t, integration.Config{ - NumNodes: 1, - }) - - run.RunRateLimitTest( - t, - h, - 100, // limit - 86400000, // duration - 100, // window count - 10, // load factor - 1, // node count - ) -} diff --git a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes1_limit100_duration86400000_load2_00_windows10/generated_test.go b/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes1_limit100_duration86400000_load2_00_windows10/generated_test.go deleted file mode 100644 index baebcc0b0a..0000000000 --- a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes1_limit100_duration86400000_load2_00_windows10/generated_test.go +++ /dev/null @@ -1,28 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -package ratelimit_nodes1_limit100_duration86400000_load2_00_windows10 - -import ( - "testing" - - "github.com/unkeyed/unkey/go/apps/api/integration" - run "github.com/unkeyed/unkey/go/apps/api/integration/multi_node_ratelimiting" - "github.com/unkeyed/unkey/go/pkg/testutil" -) - -func TestIntegration_RateLimit_Nodes1_Limit100_Duration86400000_Load2_00_Windows10(t *testing.T) { - testutil.SkipUnlessIntegration(t) - - h := integration.New(t, integration.Config{ - NumNodes: 1, - }) - - run.RunRateLimitTest( - t, - h, - 100, // limit - 86400000, // duration - 10, // window count - 2, // load factor - 1, // node count - ) -} diff --git a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes1_limit100_duration86400000_load2_00_windows100/generated_test.go b/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes1_limit100_duration86400000_load2_00_windows100/generated_test.go deleted file mode 100644 index 9857f4733d..0000000000 --- a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes1_limit100_duration86400000_load2_00_windows100/generated_test.go +++ /dev/null @@ -1,28 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -package ratelimit_nodes1_limit100_duration86400000_load2_00_windows100 - -import ( - "testing" - - "github.com/unkeyed/unkey/go/apps/api/integration" - run "github.com/unkeyed/unkey/go/apps/api/integration/multi_node_ratelimiting" - "github.com/unkeyed/unkey/go/pkg/testutil" -) - -func TestIntegration_RateLimit_Nodes1_Limit100_Duration86400000_Load2_00_Windows100(t *testing.T) { - testutil.SkipUnlessIntegration(t) - - h := integration.New(t, integration.Config{ - NumNodes: 1, - }) - - run.RunRateLimitTest( - t, - h, - 100, // limit - 86400000, // duration - 100, // window count - 2, // load factor - 1, // node count - ) -} diff --git a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes1_limit5_duration1000_load0_90_windows100/generated_test.go b/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes1_limit5_duration1000_load0_90_windows100/generated_test.go deleted file mode 100644 index 435d669be2..0000000000 --- a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes1_limit5_duration1000_load0_90_windows100/generated_test.go +++ /dev/null @@ -1,28 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -package ratelimit_nodes1_limit5_duration1000_load0_90_windows100 - -import ( - "testing" - - "github.com/unkeyed/unkey/go/apps/api/integration" - run "github.com/unkeyed/unkey/go/apps/api/integration/multi_node_ratelimiting" - "github.com/unkeyed/unkey/go/pkg/testutil" -) - -func TestIntegration_RateLimit_Nodes1_Limit5_Duration1000_Load0_90_Windows100(t *testing.T) { - testutil.SkipUnlessIntegration(t) - - h := integration.New(t, integration.Config{ - NumNodes: 1, - }) - - run.RunRateLimitTest( - t, - h, - 5, // limit - 1000, // duration - 100, // window count - 0.9, // load factor - 1, // node count - ) -} diff --git a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes1_limit5_duration1000_load10_00_windows100/generated_test.go b/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes1_limit5_duration1000_load10_00_windows100/generated_test.go deleted file mode 100644 index b170a97efe..0000000000 --- a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes1_limit5_duration1000_load10_00_windows100/generated_test.go +++ /dev/null @@ -1,28 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -package ratelimit_nodes1_limit5_duration1000_load10_00_windows100 - -import ( - "testing" - - "github.com/unkeyed/unkey/go/apps/api/integration" - run "github.com/unkeyed/unkey/go/apps/api/integration/multi_node_ratelimiting" - "github.com/unkeyed/unkey/go/pkg/testutil" -) - -func TestIntegration_RateLimit_Nodes1_Limit5_Duration1000_Load10_00_Windows100(t *testing.T) { - testutil.SkipUnlessIntegration(t) - - h := integration.New(t, integration.Config{ - NumNodes: 1, - }) - - run.RunRateLimitTest( - t, - h, - 5, // limit - 1000, // duration - 100, // window count - 10, // load factor - 1, // node count - ) -} diff --git a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes1_limit5_duration1000_load2_00_windows100/generated_test.go b/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes1_limit5_duration1000_load2_00_windows100/generated_test.go deleted file mode 100644 index dc7af8aef5..0000000000 --- a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes1_limit5_duration1000_load2_00_windows100/generated_test.go +++ /dev/null @@ -1,28 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -package ratelimit_nodes1_limit5_duration1000_load2_00_windows100 - -import ( - "testing" - - "github.com/unkeyed/unkey/go/apps/api/integration" - run "github.com/unkeyed/unkey/go/apps/api/integration/multi_node_ratelimiting" - "github.com/unkeyed/unkey/go/pkg/testutil" -) - -func TestIntegration_RateLimit_Nodes1_Limit5_Duration1000_Load2_00_Windows100(t *testing.T) { - testutil.SkipUnlessIntegration(t) - - h := integration.New(t, integration.Config{ - NumNodes: 1, - }) - - run.RunRateLimitTest( - t, - h, - 5, // limit - 1000, // duration - 100, // window count - 2, // load factor - 1, // node count - ) -} diff --git a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes1_limit5_duration3600000_load0_90_windows100/generated_test.go b/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes1_limit5_duration3600000_load0_90_windows100/generated_test.go deleted file mode 100644 index 67cbb1d9d6..0000000000 --- a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes1_limit5_duration3600000_load0_90_windows100/generated_test.go +++ /dev/null @@ -1,28 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -package ratelimit_nodes1_limit5_duration3600000_load0_90_windows100 - -import ( - "testing" - - "github.com/unkeyed/unkey/go/apps/api/integration" - run "github.com/unkeyed/unkey/go/apps/api/integration/multi_node_ratelimiting" - "github.com/unkeyed/unkey/go/pkg/testutil" -) - -func TestIntegration_RateLimit_Nodes1_Limit5_Duration3600000_Load0_90_Windows100(t *testing.T) { - testutil.SkipUnlessIntegration(t) - - h := integration.New(t, integration.Config{ - NumNodes: 1, - }) - - run.RunRateLimitTest( - t, - h, - 5, // limit - 3600000, // duration - 100, // window count - 0.9, // load factor - 1, // node count - ) -} diff --git a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes1_limit5_duration3600000_load10_00_windows100/generated_test.go b/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes1_limit5_duration3600000_load10_00_windows100/generated_test.go deleted file mode 100644 index a61a4c131d..0000000000 --- a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes1_limit5_duration3600000_load10_00_windows100/generated_test.go +++ /dev/null @@ -1,28 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -package ratelimit_nodes1_limit5_duration3600000_load10_00_windows100 - -import ( - "testing" - - "github.com/unkeyed/unkey/go/apps/api/integration" - run "github.com/unkeyed/unkey/go/apps/api/integration/multi_node_ratelimiting" - "github.com/unkeyed/unkey/go/pkg/testutil" -) - -func TestIntegration_RateLimit_Nodes1_Limit5_Duration3600000_Load10_00_Windows100(t *testing.T) { - testutil.SkipUnlessIntegration(t) - - h := integration.New(t, integration.Config{ - NumNodes: 1, - }) - - run.RunRateLimitTest( - t, - h, - 5, // limit - 3600000, // duration - 100, // window count - 10, // load factor - 1, // node count - ) -} diff --git a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes1_limit5_duration3600000_load2_00_windows100/generated_test.go b/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes1_limit5_duration3600000_load2_00_windows100/generated_test.go deleted file mode 100644 index 7c3e82b9c3..0000000000 --- a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes1_limit5_duration3600000_load2_00_windows100/generated_test.go +++ /dev/null @@ -1,28 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -package ratelimit_nodes1_limit5_duration3600000_load2_00_windows100 - -import ( - "testing" - - "github.com/unkeyed/unkey/go/apps/api/integration" - run "github.com/unkeyed/unkey/go/apps/api/integration/multi_node_ratelimiting" - "github.com/unkeyed/unkey/go/pkg/testutil" -) - -func TestIntegration_RateLimit_Nodes1_Limit5_Duration3600000_Load2_00_Windows100(t *testing.T) { - testutil.SkipUnlessIntegration(t) - - h := integration.New(t, integration.Config{ - NumNodes: 1, - }) - - run.RunRateLimitTest( - t, - h, - 5, // limit - 3600000, // duration - 100, // window count - 2, // load factor - 1, // node count - ) -} diff --git a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes1_limit5_duration60000_load0_90_windows100/generated_test.go b/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes1_limit5_duration60000_load0_90_windows100/generated_test.go deleted file mode 100644 index 6f6109a177..0000000000 --- a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes1_limit5_duration60000_load0_90_windows100/generated_test.go +++ /dev/null @@ -1,28 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -package ratelimit_nodes1_limit5_duration60000_load0_90_windows100 - -import ( - "testing" - - "github.com/unkeyed/unkey/go/apps/api/integration" - run "github.com/unkeyed/unkey/go/apps/api/integration/multi_node_ratelimiting" - "github.com/unkeyed/unkey/go/pkg/testutil" -) - -func TestIntegration_RateLimit_Nodes1_Limit5_Duration60000_Load0_90_Windows100(t *testing.T) { - testutil.SkipUnlessIntegration(t) - - h := integration.New(t, integration.Config{ - NumNodes: 1, - }) - - run.RunRateLimitTest( - t, - h, - 5, // limit - 60000, // duration - 100, // window count - 0.9, // load factor - 1, // node count - ) -} diff --git a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes1_limit5_duration60000_load10_00_windows100/generated_test.go b/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes1_limit5_duration60000_load10_00_windows100/generated_test.go deleted file mode 100644 index 02189ab1e5..0000000000 --- a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes1_limit5_duration60000_load10_00_windows100/generated_test.go +++ /dev/null @@ -1,28 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -package ratelimit_nodes1_limit5_duration60000_load10_00_windows100 - -import ( - "testing" - - "github.com/unkeyed/unkey/go/apps/api/integration" - run "github.com/unkeyed/unkey/go/apps/api/integration/multi_node_ratelimiting" - "github.com/unkeyed/unkey/go/pkg/testutil" -) - -func TestIntegration_RateLimit_Nodes1_Limit5_Duration60000_Load10_00_Windows100(t *testing.T) { - testutil.SkipUnlessIntegration(t) - - h := integration.New(t, integration.Config{ - NumNodes: 1, - }) - - run.RunRateLimitTest( - t, - h, - 5, // limit - 60000, // duration - 100, // window count - 10, // load factor - 1, // node count - ) -} diff --git a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes1_limit5_duration60000_load2_00_windows100/generated_test.go b/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes1_limit5_duration60000_load2_00_windows100/generated_test.go deleted file mode 100644 index 42d2d34765..0000000000 --- a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes1_limit5_duration60000_load2_00_windows100/generated_test.go +++ /dev/null @@ -1,28 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -package ratelimit_nodes1_limit5_duration60000_load2_00_windows100 - -import ( - "testing" - - "github.com/unkeyed/unkey/go/apps/api/integration" - run "github.com/unkeyed/unkey/go/apps/api/integration/multi_node_ratelimiting" - "github.com/unkeyed/unkey/go/pkg/testutil" -) - -func TestIntegration_RateLimit_Nodes1_Limit5_Duration60000_Load2_00_Windows100(t *testing.T) { - testutil.SkipUnlessIntegration(t) - - h := integration.New(t, integration.Config{ - NumNodes: 1, - }) - - run.RunRateLimitTest( - t, - h, - 5, // limit - 60000, // duration - 100, // window count - 2, // load factor - 1, // node count - ) -} diff --git a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes1_limit5_duration86400000_load0_90_windows10/generated_test.go b/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes1_limit5_duration86400000_load0_90_windows10/generated_test.go deleted file mode 100644 index 28081b0713..0000000000 --- a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes1_limit5_duration86400000_load0_90_windows10/generated_test.go +++ /dev/null @@ -1,28 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -package ratelimit_nodes1_limit5_duration86400000_load0_90_windows10 - -import ( - "testing" - - "github.com/unkeyed/unkey/go/apps/api/integration" - run "github.com/unkeyed/unkey/go/apps/api/integration/multi_node_ratelimiting" - "github.com/unkeyed/unkey/go/pkg/testutil" -) - -func TestIntegration_RateLimit_Nodes1_Limit5_Duration86400000_Load0_90_Windows10(t *testing.T) { - testutil.SkipUnlessIntegration(t) - - h := integration.New(t, integration.Config{ - NumNodes: 1, - }) - - run.RunRateLimitTest( - t, - h, - 5, // limit - 86400000, // duration - 10, // window count - 0.9, // load factor - 1, // node count - ) -} diff --git a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes1_limit5_duration86400000_load0_90_windows100/generated_test.go b/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes1_limit5_duration86400000_load0_90_windows100/generated_test.go deleted file mode 100644 index 1adee80c8e..0000000000 --- a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes1_limit5_duration86400000_load0_90_windows100/generated_test.go +++ /dev/null @@ -1,28 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -package ratelimit_nodes1_limit5_duration86400000_load0_90_windows100 - -import ( - "testing" - - "github.com/unkeyed/unkey/go/apps/api/integration" - run "github.com/unkeyed/unkey/go/apps/api/integration/multi_node_ratelimiting" - "github.com/unkeyed/unkey/go/pkg/testutil" -) - -func TestIntegration_RateLimit_Nodes1_Limit5_Duration86400000_Load0_90_Windows100(t *testing.T) { - testutil.SkipUnlessIntegration(t) - - h := integration.New(t, integration.Config{ - NumNodes: 1, - }) - - run.RunRateLimitTest( - t, - h, - 5, // limit - 86400000, // duration - 100, // window count - 0.9, // load factor - 1, // node count - ) -} diff --git a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes1_limit5_duration86400000_load10_00_windows10/generated_test.go b/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes1_limit5_duration86400000_load10_00_windows10/generated_test.go deleted file mode 100644 index 4248bd68f5..0000000000 --- a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes1_limit5_duration86400000_load10_00_windows10/generated_test.go +++ /dev/null @@ -1,28 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -package ratelimit_nodes1_limit5_duration86400000_load10_00_windows10 - -import ( - "testing" - - "github.com/unkeyed/unkey/go/apps/api/integration" - run "github.com/unkeyed/unkey/go/apps/api/integration/multi_node_ratelimiting" - "github.com/unkeyed/unkey/go/pkg/testutil" -) - -func TestIntegration_RateLimit_Nodes1_Limit5_Duration86400000_Load10_00_Windows10(t *testing.T) { - testutil.SkipUnlessIntegration(t) - - h := integration.New(t, integration.Config{ - NumNodes: 1, - }) - - run.RunRateLimitTest( - t, - h, - 5, // limit - 86400000, // duration - 10, // window count - 10, // load factor - 1, // node count - ) -} diff --git a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes1_limit5_duration86400000_load10_00_windows100/generated_test.go b/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes1_limit5_duration86400000_load10_00_windows100/generated_test.go deleted file mode 100644 index faccdf3790..0000000000 --- a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes1_limit5_duration86400000_load10_00_windows100/generated_test.go +++ /dev/null @@ -1,28 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -package ratelimit_nodes1_limit5_duration86400000_load10_00_windows100 - -import ( - "testing" - - "github.com/unkeyed/unkey/go/apps/api/integration" - run "github.com/unkeyed/unkey/go/apps/api/integration/multi_node_ratelimiting" - "github.com/unkeyed/unkey/go/pkg/testutil" -) - -func TestIntegration_RateLimit_Nodes1_Limit5_Duration86400000_Load10_00_Windows100(t *testing.T) { - testutil.SkipUnlessIntegration(t) - - h := integration.New(t, integration.Config{ - NumNodes: 1, - }) - - run.RunRateLimitTest( - t, - h, - 5, // limit - 86400000, // duration - 100, // window count - 10, // load factor - 1, // node count - ) -} diff --git a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes1_limit5_duration86400000_load2_00_windows10/generated_test.go b/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes1_limit5_duration86400000_load2_00_windows10/generated_test.go deleted file mode 100644 index 739cb490e5..0000000000 --- a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes1_limit5_duration86400000_load2_00_windows10/generated_test.go +++ /dev/null @@ -1,28 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -package ratelimit_nodes1_limit5_duration86400000_load2_00_windows10 - -import ( - "testing" - - "github.com/unkeyed/unkey/go/apps/api/integration" - run "github.com/unkeyed/unkey/go/apps/api/integration/multi_node_ratelimiting" - "github.com/unkeyed/unkey/go/pkg/testutil" -) - -func TestIntegration_RateLimit_Nodes1_Limit5_Duration86400000_Load2_00_Windows10(t *testing.T) { - testutil.SkipUnlessIntegration(t) - - h := integration.New(t, integration.Config{ - NumNodes: 1, - }) - - run.RunRateLimitTest( - t, - h, - 5, // limit - 86400000, // duration - 10, // window count - 2, // load factor - 1, // node count - ) -} diff --git a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes1_limit5_duration86400000_load2_00_windows100/generated_test.go b/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes1_limit5_duration86400000_load2_00_windows100/generated_test.go deleted file mode 100644 index 046b5c45e5..0000000000 --- a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes1_limit5_duration86400000_load2_00_windows100/generated_test.go +++ /dev/null @@ -1,28 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -package ratelimit_nodes1_limit5_duration86400000_load2_00_windows100 - -import ( - "testing" - - "github.com/unkeyed/unkey/go/apps/api/integration" - run "github.com/unkeyed/unkey/go/apps/api/integration/multi_node_ratelimiting" - "github.com/unkeyed/unkey/go/pkg/testutil" -) - -func TestIntegration_RateLimit_Nodes1_Limit5_Duration86400000_Load2_00_Windows100(t *testing.T) { - testutil.SkipUnlessIntegration(t) - - h := integration.New(t, integration.Config{ - NumNodes: 1, - }) - - run.RunRateLimitTest( - t, - h, - 5, // limit - 86400000, // duration - 100, // window count - 2, // load factor - 1, // node count - ) -} diff --git a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes3_limit1000_duration1000_load0_90_windows10/generated_test.go b/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes3_limit1000_duration1000_load0_90_windows10/generated_test.go deleted file mode 100644 index 1e9b818e04..0000000000 --- a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes3_limit1000_duration1000_load0_90_windows10/generated_test.go +++ /dev/null @@ -1,28 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -package ratelimit_nodes3_limit1000_duration1000_load0_90_windows10 - -import ( - "testing" - - "github.com/unkeyed/unkey/go/apps/api/integration" - run "github.com/unkeyed/unkey/go/apps/api/integration/multi_node_ratelimiting" - "github.com/unkeyed/unkey/go/pkg/testutil" -) - -func TestIntegration_RateLimit_Nodes3_Limit1000_Duration1000_Load0_90_Windows10(t *testing.T) { - testutil.SkipUnlessIntegration(t) - - h := integration.New(t, integration.Config{ - NumNodes: 3, - }) - - run.RunRateLimitTest( - t, - h, - 1000, // limit - 1000, // duration - 10, // window count - 0.9, // load factor - 3, // node count - ) -} diff --git a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes3_limit1000_duration1000_load0_90_windows100/generated_test.go b/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes3_limit1000_duration1000_load0_90_windows100/generated_test.go deleted file mode 100644 index 9b0af5b0d6..0000000000 --- a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes3_limit1000_duration1000_load0_90_windows100/generated_test.go +++ /dev/null @@ -1,28 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -package ratelimit_nodes3_limit1000_duration1000_load0_90_windows100 - -import ( - "testing" - - "github.com/unkeyed/unkey/go/apps/api/integration" - run "github.com/unkeyed/unkey/go/apps/api/integration/multi_node_ratelimiting" - "github.com/unkeyed/unkey/go/pkg/testutil" -) - -func TestIntegration_RateLimit_Nodes3_Limit1000_Duration1000_Load0_90_Windows100(t *testing.T) { - testutil.SkipUnlessIntegration(t) - - h := integration.New(t, integration.Config{ - NumNodes: 3, - }) - - run.RunRateLimitTest( - t, - h, - 1000, // limit - 1000, // duration - 100, // window count - 0.9, // load factor - 3, // node count - ) -} diff --git a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes3_limit1000_duration1000_load10_00_windows10/generated_test.go b/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes3_limit1000_duration1000_load10_00_windows10/generated_test.go deleted file mode 100644 index b0ac43fd76..0000000000 --- a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes3_limit1000_duration1000_load10_00_windows10/generated_test.go +++ /dev/null @@ -1,28 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -package ratelimit_nodes3_limit1000_duration1000_load10_00_windows10 - -import ( - "testing" - - "github.com/unkeyed/unkey/go/apps/api/integration" - run "github.com/unkeyed/unkey/go/apps/api/integration/multi_node_ratelimiting" - "github.com/unkeyed/unkey/go/pkg/testutil" -) - -func TestIntegration_RateLimit_Nodes3_Limit1000_Duration1000_Load10_00_Windows10(t *testing.T) { - testutil.SkipUnlessIntegration(t) - - h := integration.New(t, integration.Config{ - NumNodes: 3, - }) - - run.RunRateLimitTest( - t, - h, - 1000, // limit - 1000, // duration - 10, // window count - 10, // load factor - 3, // node count - ) -} diff --git a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes3_limit1000_duration1000_load10_00_windows100/generated_test.go b/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes3_limit1000_duration1000_load10_00_windows100/generated_test.go deleted file mode 100644 index 49b144092d..0000000000 --- a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes3_limit1000_duration1000_load10_00_windows100/generated_test.go +++ /dev/null @@ -1,28 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -package ratelimit_nodes3_limit1000_duration1000_load10_00_windows100 - -import ( - "testing" - - "github.com/unkeyed/unkey/go/apps/api/integration" - run "github.com/unkeyed/unkey/go/apps/api/integration/multi_node_ratelimiting" - "github.com/unkeyed/unkey/go/pkg/testutil" -) - -func TestIntegration_RateLimit_Nodes3_Limit1000_Duration1000_Load10_00_Windows100(t *testing.T) { - testutil.SkipUnlessIntegration(t) - - h := integration.New(t, integration.Config{ - NumNodes: 3, - }) - - run.RunRateLimitTest( - t, - h, - 1000, // limit - 1000, // duration - 100, // window count - 10, // load factor - 3, // node count - ) -} diff --git a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes3_limit1000_duration1000_load2_00_windows10/generated_test.go b/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes3_limit1000_duration1000_load2_00_windows10/generated_test.go deleted file mode 100644 index feee3e39a1..0000000000 --- a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes3_limit1000_duration1000_load2_00_windows10/generated_test.go +++ /dev/null @@ -1,28 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -package ratelimit_nodes3_limit1000_duration1000_load2_00_windows10 - -import ( - "testing" - - "github.com/unkeyed/unkey/go/apps/api/integration" - run "github.com/unkeyed/unkey/go/apps/api/integration/multi_node_ratelimiting" - "github.com/unkeyed/unkey/go/pkg/testutil" -) - -func TestIntegration_RateLimit_Nodes3_Limit1000_Duration1000_Load2_00_Windows10(t *testing.T) { - testutil.SkipUnlessIntegration(t) - - h := integration.New(t, integration.Config{ - NumNodes: 3, - }) - - run.RunRateLimitTest( - t, - h, - 1000, // limit - 1000, // duration - 10, // window count - 2, // load factor - 3, // node count - ) -} diff --git a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes3_limit1000_duration1000_load2_00_windows100/generated_test.go b/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes3_limit1000_duration1000_load2_00_windows100/generated_test.go deleted file mode 100644 index 3fc55681f1..0000000000 --- a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes3_limit1000_duration1000_load2_00_windows100/generated_test.go +++ /dev/null @@ -1,28 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -package ratelimit_nodes3_limit1000_duration1000_load2_00_windows100 - -import ( - "testing" - - "github.com/unkeyed/unkey/go/apps/api/integration" - run "github.com/unkeyed/unkey/go/apps/api/integration/multi_node_ratelimiting" - "github.com/unkeyed/unkey/go/pkg/testutil" -) - -func TestIntegration_RateLimit_Nodes3_Limit1000_Duration1000_Load2_00_Windows100(t *testing.T) { - testutil.SkipUnlessIntegration(t) - - h := integration.New(t, integration.Config{ - NumNodes: 3, - }) - - run.RunRateLimitTest( - t, - h, - 1000, // limit - 1000, // duration - 100, // window count - 2, // load factor - 3, // node count - ) -} diff --git a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes3_limit1000_duration3600000_load0_90_windows10/generated_test.go b/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes3_limit1000_duration3600000_load0_90_windows10/generated_test.go deleted file mode 100644 index 00a33b99c4..0000000000 --- a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes3_limit1000_duration3600000_load0_90_windows10/generated_test.go +++ /dev/null @@ -1,28 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -package ratelimit_nodes3_limit1000_duration3600000_load0_90_windows10 - -import ( - "testing" - - "github.com/unkeyed/unkey/go/apps/api/integration" - run "github.com/unkeyed/unkey/go/apps/api/integration/multi_node_ratelimiting" - "github.com/unkeyed/unkey/go/pkg/testutil" -) - -func TestIntegration_RateLimit_Nodes3_Limit1000_Duration3600000_Load0_90_Windows10(t *testing.T) { - testutil.SkipUnlessIntegration(t) - - h := integration.New(t, integration.Config{ - NumNodes: 3, - }) - - run.RunRateLimitTest( - t, - h, - 1000, // limit - 3600000, // duration - 10, // window count - 0.9, // load factor - 3, // node count - ) -} diff --git a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes3_limit1000_duration3600000_load0_90_windows100/generated_test.go b/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes3_limit1000_duration3600000_load0_90_windows100/generated_test.go deleted file mode 100644 index 722478b096..0000000000 --- a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes3_limit1000_duration3600000_load0_90_windows100/generated_test.go +++ /dev/null @@ -1,28 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -package ratelimit_nodes3_limit1000_duration3600000_load0_90_windows100 - -import ( - "testing" - - "github.com/unkeyed/unkey/go/apps/api/integration" - run "github.com/unkeyed/unkey/go/apps/api/integration/multi_node_ratelimiting" - "github.com/unkeyed/unkey/go/pkg/testutil" -) - -func TestIntegration_RateLimit_Nodes3_Limit1000_Duration3600000_Load0_90_Windows100(t *testing.T) { - testutil.SkipUnlessIntegration(t) - - h := integration.New(t, integration.Config{ - NumNodes: 3, - }) - - run.RunRateLimitTest( - t, - h, - 1000, // limit - 3600000, // duration - 100, // window count - 0.9, // load factor - 3, // node count - ) -} diff --git a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes3_limit1000_duration3600000_load10_00_windows10/generated_test.go b/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes3_limit1000_duration3600000_load10_00_windows10/generated_test.go deleted file mode 100644 index 5d0f6933d4..0000000000 --- a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes3_limit1000_duration3600000_load10_00_windows10/generated_test.go +++ /dev/null @@ -1,28 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -package ratelimit_nodes3_limit1000_duration3600000_load10_00_windows10 - -import ( - "testing" - - "github.com/unkeyed/unkey/go/apps/api/integration" - run "github.com/unkeyed/unkey/go/apps/api/integration/multi_node_ratelimiting" - "github.com/unkeyed/unkey/go/pkg/testutil" -) - -func TestIntegration_RateLimit_Nodes3_Limit1000_Duration3600000_Load10_00_Windows10(t *testing.T) { - testutil.SkipUnlessIntegration(t) - - h := integration.New(t, integration.Config{ - NumNodes: 3, - }) - - run.RunRateLimitTest( - t, - h, - 1000, // limit - 3600000, // duration - 10, // window count - 10, // load factor - 3, // node count - ) -} diff --git a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes3_limit1000_duration3600000_load10_00_windows100/generated_test.go b/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes3_limit1000_duration3600000_load10_00_windows100/generated_test.go deleted file mode 100644 index c935145f91..0000000000 --- a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes3_limit1000_duration3600000_load10_00_windows100/generated_test.go +++ /dev/null @@ -1,28 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -package ratelimit_nodes3_limit1000_duration3600000_load10_00_windows100 - -import ( - "testing" - - "github.com/unkeyed/unkey/go/apps/api/integration" - run "github.com/unkeyed/unkey/go/apps/api/integration/multi_node_ratelimiting" - "github.com/unkeyed/unkey/go/pkg/testutil" -) - -func TestIntegration_RateLimit_Nodes3_Limit1000_Duration3600000_Load10_00_Windows100(t *testing.T) { - testutil.SkipUnlessIntegration(t) - - h := integration.New(t, integration.Config{ - NumNodes: 3, - }) - - run.RunRateLimitTest( - t, - h, - 1000, // limit - 3600000, // duration - 100, // window count - 10, // load factor - 3, // node count - ) -} diff --git a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes3_limit1000_duration3600000_load2_00_windows10/generated_test.go b/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes3_limit1000_duration3600000_load2_00_windows10/generated_test.go deleted file mode 100644 index a14387fca0..0000000000 --- a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes3_limit1000_duration3600000_load2_00_windows10/generated_test.go +++ /dev/null @@ -1,28 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -package ratelimit_nodes3_limit1000_duration3600000_load2_00_windows10 - -import ( - "testing" - - "github.com/unkeyed/unkey/go/apps/api/integration" - run "github.com/unkeyed/unkey/go/apps/api/integration/multi_node_ratelimiting" - "github.com/unkeyed/unkey/go/pkg/testutil" -) - -func TestIntegration_RateLimit_Nodes3_Limit1000_Duration3600000_Load2_00_Windows10(t *testing.T) { - testutil.SkipUnlessIntegration(t) - - h := integration.New(t, integration.Config{ - NumNodes: 3, - }) - - run.RunRateLimitTest( - t, - h, - 1000, // limit - 3600000, // duration - 10, // window count - 2, // load factor - 3, // node count - ) -} diff --git a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes3_limit1000_duration3600000_load2_00_windows100/generated_test.go b/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes3_limit1000_duration3600000_load2_00_windows100/generated_test.go deleted file mode 100644 index aee7f6f871..0000000000 --- a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes3_limit1000_duration3600000_load2_00_windows100/generated_test.go +++ /dev/null @@ -1,28 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -package ratelimit_nodes3_limit1000_duration3600000_load2_00_windows100 - -import ( - "testing" - - "github.com/unkeyed/unkey/go/apps/api/integration" - run "github.com/unkeyed/unkey/go/apps/api/integration/multi_node_ratelimiting" - "github.com/unkeyed/unkey/go/pkg/testutil" -) - -func TestIntegration_RateLimit_Nodes3_Limit1000_Duration3600000_Load2_00_Windows100(t *testing.T) { - testutil.SkipUnlessIntegration(t) - - h := integration.New(t, integration.Config{ - NumNodes: 3, - }) - - run.RunRateLimitTest( - t, - h, - 1000, // limit - 3600000, // duration - 100, // window count - 2, // load factor - 3, // node count - ) -} diff --git a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes3_limit1000_duration60000_load0_90_windows10/generated_test.go b/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes3_limit1000_duration60000_load0_90_windows10/generated_test.go deleted file mode 100644 index c7b3b457bc..0000000000 --- a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes3_limit1000_duration60000_load0_90_windows10/generated_test.go +++ /dev/null @@ -1,28 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -package ratelimit_nodes3_limit1000_duration60000_load0_90_windows10 - -import ( - "testing" - - "github.com/unkeyed/unkey/go/apps/api/integration" - run "github.com/unkeyed/unkey/go/apps/api/integration/multi_node_ratelimiting" - "github.com/unkeyed/unkey/go/pkg/testutil" -) - -func TestIntegration_RateLimit_Nodes3_Limit1000_Duration60000_Load0_90_Windows10(t *testing.T) { - testutil.SkipUnlessIntegration(t) - - h := integration.New(t, integration.Config{ - NumNodes: 3, - }) - - run.RunRateLimitTest( - t, - h, - 1000, // limit - 60000, // duration - 10, // window count - 0.9, // load factor - 3, // node count - ) -} diff --git a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes3_limit1000_duration60000_load0_90_windows100/generated_test.go b/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes3_limit1000_duration60000_load0_90_windows100/generated_test.go deleted file mode 100644 index 325ba515e5..0000000000 --- a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes3_limit1000_duration60000_load0_90_windows100/generated_test.go +++ /dev/null @@ -1,28 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -package ratelimit_nodes3_limit1000_duration60000_load0_90_windows100 - -import ( - "testing" - - "github.com/unkeyed/unkey/go/apps/api/integration" - run "github.com/unkeyed/unkey/go/apps/api/integration/multi_node_ratelimiting" - "github.com/unkeyed/unkey/go/pkg/testutil" -) - -func TestIntegration_RateLimit_Nodes3_Limit1000_Duration60000_Load0_90_Windows100(t *testing.T) { - testutil.SkipUnlessIntegration(t) - - h := integration.New(t, integration.Config{ - NumNodes: 3, - }) - - run.RunRateLimitTest( - t, - h, - 1000, // limit - 60000, // duration - 100, // window count - 0.9, // load factor - 3, // node count - ) -} diff --git a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes3_limit1000_duration60000_load10_00_windows10/generated_test.go b/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes3_limit1000_duration60000_load10_00_windows10/generated_test.go deleted file mode 100644 index 56c9f03e7b..0000000000 --- a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes3_limit1000_duration60000_load10_00_windows10/generated_test.go +++ /dev/null @@ -1,28 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -package ratelimit_nodes3_limit1000_duration60000_load10_00_windows10 - -import ( - "testing" - - "github.com/unkeyed/unkey/go/apps/api/integration" - run "github.com/unkeyed/unkey/go/apps/api/integration/multi_node_ratelimiting" - "github.com/unkeyed/unkey/go/pkg/testutil" -) - -func TestIntegration_RateLimit_Nodes3_Limit1000_Duration60000_Load10_00_Windows10(t *testing.T) { - testutil.SkipUnlessIntegration(t) - - h := integration.New(t, integration.Config{ - NumNodes: 3, - }) - - run.RunRateLimitTest( - t, - h, - 1000, // limit - 60000, // duration - 10, // window count - 10, // load factor - 3, // node count - ) -} diff --git a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes3_limit1000_duration60000_load10_00_windows100/generated_test.go b/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes3_limit1000_duration60000_load10_00_windows100/generated_test.go deleted file mode 100644 index 8e25d84250..0000000000 --- a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes3_limit1000_duration60000_load10_00_windows100/generated_test.go +++ /dev/null @@ -1,28 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -package ratelimit_nodes3_limit1000_duration60000_load10_00_windows100 - -import ( - "testing" - - "github.com/unkeyed/unkey/go/apps/api/integration" - run "github.com/unkeyed/unkey/go/apps/api/integration/multi_node_ratelimiting" - "github.com/unkeyed/unkey/go/pkg/testutil" -) - -func TestIntegration_RateLimit_Nodes3_Limit1000_Duration60000_Load10_00_Windows100(t *testing.T) { - testutil.SkipUnlessIntegration(t) - - h := integration.New(t, integration.Config{ - NumNodes: 3, - }) - - run.RunRateLimitTest( - t, - h, - 1000, // limit - 60000, // duration - 100, // window count - 10, // load factor - 3, // node count - ) -} diff --git a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes3_limit1000_duration60000_load2_00_windows10/generated_test.go b/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes3_limit1000_duration60000_load2_00_windows10/generated_test.go deleted file mode 100644 index a2f1c2cd46..0000000000 --- a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes3_limit1000_duration60000_load2_00_windows10/generated_test.go +++ /dev/null @@ -1,28 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -package ratelimit_nodes3_limit1000_duration60000_load2_00_windows10 - -import ( - "testing" - - "github.com/unkeyed/unkey/go/apps/api/integration" - run "github.com/unkeyed/unkey/go/apps/api/integration/multi_node_ratelimiting" - "github.com/unkeyed/unkey/go/pkg/testutil" -) - -func TestIntegration_RateLimit_Nodes3_Limit1000_Duration60000_Load2_00_Windows10(t *testing.T) { - testutil.SkipUnlessIntegration(t) - - h := integration.New(t, integration.Config{ - NumNodes: 3, - }) - - run.RunRateLimitTest( - t, - h, - 1000, // limit - 60000, // duration - 10, // window count - 2, // load factor - 3, // node count - ) -} diff --git a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes3_limit1000_duration60000_load2_00_windows100/generated_test.go b/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes3_limit1000_duration60000_load2_00_windows100/generated_test.go deleted file mode 100644 index 9dc743d172..0000000000 --- a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes3_limit1000_duration60000_load2_00_windows100/generated_test.go +++ /dev/null @@ -1,28 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -package ratelimit_nodes3_limit1000_duration60000_load2_00_windows100 - -import ( - "testing" - - "github.com/unkeyed/unkey/go/apps/api/integration" - run "github.com/unkeyed/unkey/go/apps/api/integration/multi_node_ratelimiting" - "github.com/unkeyed/unkey/go/pkg/testutil" -) - -func TestIntegration_RateLimit_Nodes3_Limit1000_Duration60000_Load2_00_Windows100(t *testing.T) { - testutil.SkipUnlessIntegration(t) - - h := integration.New(t, integration.Config{ - NumNodes: 3, - }) - - run.RunRateLimitTest( - t, - h, - 1000, // limit - 60000, // duration - 100, // window count - 2, // load factor - 3, // node count - ) -} diff --git a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes3_limit1000_duration86400000_load0_90_windows10/generated_test.go b/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes3_limit1000_duration86400000_load0_90_windows10/generated_test.go deleted file mode 100644 index 30f60401e5..0000000000 --- a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes3_limit1000_duration86400000_load0_90_windows10/generated_test.go +++ /dev/null @@ -1,28 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -package ratelimit_nodes3_limit1000_duration86400000_load0_90_windows10 - -import ( - "testing" - - "github.com/unkeyed/unkey/go/apps/api/integration" - run "github.com/unkeyed/unkey/go/apps/api/integration/multi_node_ratelimiting" - "github.com/unkeyed/unkey/go/pkg/testutil" -) - -func TestIntegration_RateLimit_Nodes3_Limit1000_Duration86400000_Load0_90_Windows10(t *testing.T) { - testutil.SkipUnlessIntegration(t) - - h := integration.New(t, integration.Config{ - NumNodes: 3, - }) - - run.RunRateLimitTest( - t, - h, - 1000, // limit - 86400000, // duration - 10, // window count - 0.9, // load factor - 3, // node count - ) -} diff --git a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes3_limit1000_duration86400000_load0_90_windows100/generated_test.go b/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes3_limit1000_duration86400000_load0_90_windows100/generated_test.go deleted file mode 100644 index b43608f112..0000000000 --- a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes3_limit1000_duration86400000_load0_90_windows100/generated_test.go +++ /dev/null @@ -1,28 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -package ratelimit_nodes3_limit1000_duration86400000_load0_90_windows100 - -import ( - "testing" - - "github.com/unkeyed/unkey/go/apps/api/integration" - run "github.com/unkeyed/unkey/go/apps/api/integration/multi_node_ratelimiting" - "github.com/unkeyed/unkey/go/pkg/testutil" -) - -func TestIntegration_RateLimit_Nodes3_Limit1000_Duration86400000_Load0_90_Windows100(t *testing.T) { - testutil.SkipUnlessIntegration(t) - - h := integration.New(t, integration.Config{ - NumNodes: 3, - }) - - run.RunRateLimitTest( - t, - h, - 1000, // limit - 86400000, // duration - 100, // window count - 0.9, // load factor - 3, // node count - ) -} diff --git a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes3_limit1000_duration86400000_load10_00_windows10/generated_test.go b/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes3_limit1000_duration86400000_load10_00_windows10/generated_test.go deleted file mode 100644 index b878f5c092..0000000000 --- a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes3_limit1000_duration86400000_load10_00_windows10/generated_test.go +++ /dev/null @@ -1,28 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -package ratelimit_nodes3_limit1000_duration86400000_load10_00_windows10 - -import ( - "testing" - - "github.com/unkeyed/unkey/go/apps/api/integration" - run "github.com/unkeyed/unkey/go/apps/api/integration/multi_node_ratelimiting" - "github.com/unkeyed/unkey/go/pkg/testutil" -) - -func TestIntegration_RateLimit_Nodes3_Limit1000_Duration86400000_Load10_00_Windows10(t *testing.T) { - testutil.SkipUnlessIntegration(t) - - h := integration.New(t, integration.Config{ - NumNodes: 3, - }) - - run.RunRateLimitTest( - t, - h, - 1000, // limit - 86400000, // duration - 10, // window count - 10, // load factor - 3, // node count - ) -} diff --git a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes3_limit1000_duration86400000_load10_00_windows100/generated_test.go b/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes3_limit1000_duration86400000_load10_00_windows100/generated_test.go deleted file mode 100644 index 9ded912efc..0000000000 --- a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes3_limit1000_duration86400000_load10_00_windows100/generated_test.go +++ /dev/null @@ -1,28 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -package ratelimit_nodes3_limit1000_duration86400000_load10_00_windows100 - -import ( - "testing" - - "github.com/unkeyed/unkey/go/apps/api/integration" - run "github.com/unkeyed/unkey/go/apps/api/integration/multi_node_ratelimiting" - "github.com/unkeyed/unkey/go/pkg/testutil" -) - -func TestIntegration_RateLimit_Nodes3_Limit1000_Duration86400000_Load10_00_Windows100(t *testing.T) { - testutil.SkipUnlessIntegration(t) - - h := integration.New(t, integration.Config{ - NumNodes: 3, - }) - - run.RunRateLimitTest( - t, - h, - 1000, // limit - 86400000, // duration - 100, // window count - 10, // load factor - 3, // node count - ) -} diff --git a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes3_limit1000_duration86400000_load2_00_windows10/generated_test.go b/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes3_limit1000_duration86400000_load2_00_windows10/generated_test.go deleted file mode 100644 index 3fae512c58..0000000000 --- a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes3_limit1000_duration86400000_load2_00_windows10/generated_test.go +++ /dev/null @@ -1,28 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -package ratelimit_nodes3_limit1000_duration86400000_load2_00_windows10 - -import ( - "testing" - - "github.com/unkeyed/unkey/go/apps/api/integration" - run "github.com/unkeyed/unkey/go/apps/api/integration/multi_node_ratelimiting" - "github.com/unkeyed/unkey/go/pkg/testutil" -) - -func TestIntegration_RateLimit_Nodes3_Limit1000_Duration86400000_Load2_00_Windows10(t *testing.T) { - testutil.SkipUnlessIntegration(t) - - h := integration.New(t, integration.Config{ - NumNodes: 3, - }) - - run.RunRateLimitTest( - t, - h, - 1000, // limit - 86400000, // duration - 10, // window count - 2, // load factor - 3, // node count - ) -} diff --git a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes3_limit1000_duration86400000_load2_00_windows100/generated_test.go b/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes3_limit1000_duration86400000_load2_00_windows100/generated_test.go deleted file mode 100644 index af59951d5c..0000000000 --- a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes3_limit1000_duration86400000_load2_00_windows100/generated_test.go +++ /dev/null @@ -1,28 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -package ratelimit_nodes3_limit1000_duration86400000_load2_00_windows100 - -import ( - "testing" - - "github.com/unkeyed/unkey/go/apps/api/integration" - run "github.com/unkeyed/unkey/go/apps/api/integration/multi_node_ratelimiting" - "github.com/unkeyed/unkey/go/pkg/testutil" -) - -func TestIntegration_RateLimit_Nodes3_Limit1000_Duration86400000_Load2_00_Windows100(t *testing.T) { - testutil.SkipUnlessIntegration(t) - - h := integration.New(t, integration.Config{ - NumNodes: 3, - }) - - run.RunRateLimitTest( - t, - h, - 1000, // limit - 86400000, // duration - 100, // window count - 2, // load factor - 3, // node count - ) -} diff --git a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes3_limit100_duration1000_load0_90_windows100/generated_test.go b/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes3_limit100_duration1000_load0_90_windows100/generated_test.go deleted file mode 100644 index 4ac186e2f5..0000000000 --- a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes3_limit100_duration1000_load0_90_windows100/generated_test.go +++ /dev/null @@ -1,28 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -package ratelimit_nodes3_limit100_duration1000_load0_90_windows100 - -import ( - "testing" - - "github.com/unkeyed/unkey/go/apps/api/integration" - run "github.com/unkeyed/unkey/go/apps/api/integration/multi_node_ratelimiting" - "github.com/unkeyed/unkey/go/pkg/testutil" -) - -func TestIntegration_RateLimit_Nodes3_Limit100_Duration1000_Load0_90_Windows100(t *testing.T) { - testutil.SkipUnlessIntegration(t) - - h := integration.New(t, integration.Config{ - NumNodes: 3, - }) - - run.RunRateLimitTest( - t, - h, - 100, // limit - 1000, // duration - 100, // window count - 0.9, // load factor - 3, // node count - ) -} diff --git a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes3_limit100_duration1000_load10_00_windows100/generated_test.go b/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes3_limit100_duration1000_load10_00_windows100/generated_test.go deleted file mode 100644 index 77f0231b61..0000000000 --- a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes3_limit100_duration1000_load10_00_windows100/generated_test.go +++ /dev/null @@ -1,28 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -package ratelimit_nodes3_limit100_duration1000_load10_00_windows100 - -import ( - "testing" - - "github.com/unkeyed/unkey/go/apps/api/integration" - run "github.com/unkeyed/unkey/go/apps/api/integration/multi_node_ratelimiting" - "github.com/unkeyed/unkey/go/pkg/testutil" -) - -func TestIntegration_RateLimit_Nodes3_Limit100_Duration1000_Load10_00_Windows100(t *testing.T) { - testutil.SkipUnlessIntegration(t) - - h := integration.New(t, integration.Config{ - NumNodes: 3, - }) - - run.RunRateLimitTest( - t, - h, - 100, // limit - 1000, // duration - 100, // window count - 10, // load factor - 3, // node count - ) -} diff --git a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes3_limit100_duration1000_load2_00_windows100/generated_test.go b/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes3_limit100_duration1000_load2_00_windows100/generated_test.go deleted file mode 100644 index 3acb230435..0000000000 --- a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes3_limit100_duration1000_load2_00_windows100/generated_test.go +++ /dev/null @@ -1,28 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -package ratelimit_nodes3_limit100_duration1000_load2_00_windows100 - -import ( - "testing" - - "github.com/unkeyed/unkey/go/apps/api/integration" - run "github.com/unkeyed/unkey/go/apps/api/integration/multi_node_ratelimiting" - "github.com/unkeyed/unkey/go/pkg/testutil" -) - -func TestIntegration_RateLimit_Nodes3_Limit100_Duration1000_Load2_00_Windows100(t *testing.T) { - testutil.SkipUnlessIntegration(t) - - h := integration.New(t, integration.Config{ - NumNodes: 3, - }) - - run.RunRateLimitTest( - t, - h, - 100, // limit - 1000, // duration - 100, // window count - 2, // load factor - 3, // node count - ) -} diff --git a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes3_limit100_duration3600000_load0_90_windows100/generated_test.go b/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes3_limit100_duration3600000_load0_90_windows100/generated_test.go deleted file mode 100644 index 86b24a4e2e..0000000000 --- a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes3_limit100_duration3600000_load0_90_windows100/generated_test.go +++ /dev/null @@ -1,28 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -package ratelimit_nodes3_limit100_duration3600000_load0_90_windows100 - -import ( - "testing" - - "github.com/unkeyed/unkey/go/apps/api/integration" - run "github.com/unkeyed/unkey/go/apps/api/integration/multi_node_ratelimiting" - "github.com/unkeyed/unkey/go/pkg/testutil" -) - -func TestIntegration_RateLimit_Nodes3_Limit100_Duration3600000_Load0_90_Windows100(t *testing.T) { - testutil.SkipUnlessIntegration(t) - - h := integration.New(t, integration.Config{ - NumNodes: 3, - }) - - run.RunRateLimitTest( - t, - h, - 100, // limit - 3600000, // duration - 100, // window count - 0.9, // load factor - 3, // node count - ) -} diff --git a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes3_limit100_duration3600000_load10_00_windows100/generated_test.go b/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes3_limit100_duration3600000_load10_00_windows100/generated_test.go deleted file mode 100644 index 29da26990e..0000000000 --- a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes3_limit100_duration3600000_load10_00_windows100/generated_test.go +++ /dev/null @@ -1,28 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -package ratelimit_nodes3_limit100_duration3600000_load10_00_windows100 - -import ( - "testing" - - "github.com/unkeyed/unkey/go/apps/api/integration" - run "github.com/unkeyed/unkey/go/apps/api/integration/multi_node_ratelimiting" - "github.com/unkeyed/unkey/go/pkg/testutil" -) - -func TestIntegration_RateLimit_Nodes3_Limit100_Duration3600000_Load10_00_Windows100(t *testing.T) { - testutil.SkipUnlessIntegration(t) - - h := integration.New(t, integration.Config{ - NumNodes: 3, - }) - - run.RunRateLimitTest( - t, - h, - 100, // limit - 3600000, // duration - 100, // window count - 10, // load factor - 3, // node count - ) -} diff --git a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes3_limit100_duration3600000_load2_00_windows100/generated_test.go b/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes3_limit100_duration3600000_load2_00_windows100/generated_test.go deleted file mode 100644 index c64c6e3e49..0000000000 --- a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes3_limit100_duration3600000_load2_00_windows100/generated_test.go +++ /dev/null @@ -1,28 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -package ratelimit_nodes3_limit100_duration3600000_load2_00_windows100 - -import ( - "testing" - - "github.com/unkeyed/unkey/go/apps/api/integration" - run "github.com/unkeyed/unkey/go/apps/api/integration/multi_node_ratelimiting" - "github.com/unkeyed/unkey/go/pkg/testutil" -) - -func TestIntegration_RateLimit_Nodes3_Limit100_Duration3600000_Load2_00_Windows100(t *testing.T) { - testutil.SkipUnlessIntegration(t) - - h := integration.New(t, integration.Config{ - NumNodes: 3, - }) - - run.RunRateLimitTest( - t, - h, - 100, // limit - 3600000, // duration - 100, // window count - 2, // load factor - 3, // node count - ) -} diff --git a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes3_limit100_duration60000_load0_90_windows100/generated_test.go b/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes3_limit100_duration60000_load0_90_windows100/generated_test.go deleted file mode 100644 index 970bebf807..0000000000 --- a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes3_limit100_duration60000_load0_90_windows100/generated_test.go +++ /dev/null @@ -1,28 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -package ratelimit_nodes3_limit100_duration60000_load0_90_windows100 - -import ( - "testing" - - "github.com/unkeyed/unkey/go/apps/api/integration" - run "github.com/unkeyed/unkey/go/apps/api/integration/multi_node_ratelimiting" - "github.com/unkeyed/unkey/go/pkg/testutil" -) - -func TestIntegration_RateLimit_Nodes3_Limit100_Duration60000_Load0_90_Windows100(t *testing.T) { - testutil.SkipUnlessIntegration(t) - - h := integration.New(t, integration.Config{ - NumNodes: 3, - }) - - run.RunRateLimitTest( - t, - h, - 100, // limit - 60000, // duration - 100, // window count - 0.9, // load factor - 3, // node count - ) -} diff --git a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes3_limit100_duration60000_load10_00_windows100/generated_test.go b/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes3_limit100_duration60000_load10_00_windows100/generated_test.go deleted file mode 100644 index 394fd003de..0000000000 --- a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes3_limit100_duration60000_load10_00_windows100/generated_test.go +++ /dev/null @@ -1,28 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -package ratelimit_nodes3_limit100_duration60000_load10_00_windows100 - -import ( - "testing" - - "github.com/unkeyed/unkey/go/apps/api/integration" - run "github.com/unkeyed/unkey/go/apps/api/integration/multi_node_ratelimiting" - "github.com/unkeyed/unkey/go/pkg/testutil" -) - -func TestIntegration_RateLimit_Nodes3_Limit100_Duration60000_Load10_00_Windows100(t *testing.T) { - testutil.SkipUnlessIntegration(t) - - h := integration.New(t, integration.Config{ - NumNodes: 3, - }) - - run.RunRateLimitTest( - t, - h, - 100, // limit - 60000, // duration - 100, // window count - 10, // load factor - 3, // node count - ) -} diff --git a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes3_limit100_duration60000_load2_00_windows100/generated_test.go b/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes3_limit100_duration60000_load2_00_windows100/generated_test.go deleted file mode 100644 index 498a148021..0000000000 --- a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes3_limit100_duration60000_load2_00_windows100/generated_test.go +++ /dev/null @@ -1,28 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -package ratelimit_nodes3_limit100_duration60000_load2_00_windows100 - -import ( - "testing" - - "github.com/unkeyed/unkey/go/apps/api/integration" - run "github.com/unkeyed/unkey/go/apps/api/integration/multi_node_ratelimiting" - "github.com/unkeyed/unkey/go/pkg/testutil" -) - -func TestIntegration_RateLimit_Nodes3_Limit100_Duration60000_Load2_00_Windows100(t *testing.T) { - testutil.SkipUnlessIntegration(t) - - h := integration.New(t, integration.Config{ - NumNodes: 3, - }) - - run.RunRateLimitTest( - t, - h, - 100, // limit - 60000, // duration - 100, // window count - 2, // load factor - 3, // node count - ) -} diff --git a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes3_limit100_duration86400000_load0_90_windows10/generated_test.go b/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes3_limit100_duration86400000_load0_90_windows10/generated_test.go deleted file mode 100644 index b398011090..0000000000 --- a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes3_limit100_duration86400000_load0_90_windows10/generated_test.go +++ /dev/null @@ -1,28 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -package ratelimit_nodes3_limit100_duration86400000_load0_90_windows10 - -import ( - "testing" - - "github.com/unkeyed/unkey/go/apps/api/integration" - run "github.com/unkeyed/unkey/go/apps/api/integration/multi_node_ratelimiting" - "github.com/unkeyed/unkey/go/pkg/testutil" -) - -func TestIntegration_RateLimit_Nodes3_Limit100_Duration86400000_Load0_90_Windows10(t *testing.T) { - testutil.SkipUnlessIntegration(t) - - h := integration.New(t, integration.Config{ - NumNodes: 3, - }) - - run.RunRateLimitTest( - t, - h, - 100, // limit - 86400000, // duration - 10, // window count - 0.9, // load factor - 3, // node count - ) -} diff --git a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes3_limit100_duration86400000_load0_90_windows100/generated_test.go b/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes3_limit100_duration86400000_load0_90_windows100/generated_test.go deleted file mode 100644 index 7f3756ce8a..0000000000 --- a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes3_limit100_duration86400000_load0_90_windows100/generated_test.go +++ /dev/null @@ -1,28 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -package ratelimit_nodes3_limit100_duration86400000_load0_90_windows100 - -import ( - "testing" - - "github.com/unkeyed/unkey/go/apps/api/integration" - run "github.com/unkeyed/unkey/go/apps/api/integration/multi_node_ratelimiting" - "github.com/unkeyed/unkey/go/pkg/testutil" -) - -func TestIntegration_RateLimit_Nodes3_Limit100_Duration86400000_Load0_90_Windows100(t *testing.T) { - testutil.SkipUnlessIntegration(t) - - h := integration.New(t, integration.Config{ - NumNodes: 3, - }) - - run.RunRateLimitTest( - t, - h, - 100, // limit - 86400000, // duration - 100, // window count - 0.9, // load factor - 3, // node count - ) -} diff --git a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes3_limit100_duration86400000_load10_00_windows10/generated_test.go b/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes3_limit100_duration86400000_load10_00_windows10/generated_test.go deleted file mode 100644 index c31861df86..0000000000 --- a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes3_limit100_duration86400000_load10_00_windows10/generated_test.go +++ /dev/null @@ -1,28 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -package ratelimit_nodes3_limit100_duration86400000_load10_00_windows10 - -import ( - "testing" - - "github.com/unkeyed/unkey/go/apps/api/integration" - run "github.com/unkeyed/unkey/go/apps/api/integration/multi_node_ratelimiting" - "github.com/unkeyed/unkey/go/pkg/testutil" -) - -func TestIntegration_RateLimit_Nodes3_Limit100_Duration86400000_Load10_00_Windows10(t *testing.T) { - testutil.SkipUnlessIntegration(t) - - h := integration.New(t, integration.Config{ - NumNodes: 3, - }) - - run.RunRateLimitTest( - t, - h, - 100, // limit - 86400000, // duration - 10, // window count - 10, // load factor - 3, // node count - ) -} diff --git a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes3_limit100_duration86400000_load10_00_windows100/generated_test.go b/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes3_limit100_duration86400000_load10_00_windows100/generated_test.go deleted file mode 100644 index 138ad49d1e..0000000000 --- a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes3_limit100_duration86400000_load10_00_windows100/generated_test.go +++ /dev/null @@ -1,28 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -package ratelimit_nodes3_limit100_duration86400000_load10_00_windows100 - -import ( - "testing" - - "github.com/unkeyed/unkey/go/apps/api/integration" - run "github.com/unkeyed/unkey/go/apps/api/integration/multi_node_ratelimiting" - "github.com/unkeyed/unkey/go/pkg/testutil" -) - -func TestIntegration_RateLimit_Nodes3_Limit100_Duration86400000_Load10_00_Windows100(t *testing.T) { - testutil.SkipUnlessIntegration(t) - - h := integration.New(t, integration.Config{ - NumNodes: 3, - }) - - run.RunRateLimitTest( - t, - h, - 100, // limit - 86400000, // duration - 100, // window count - 10, // load factor - 3, // node count - ) -} diff --git a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes3_limit100_duration86400000_load2_00_windows10/generated_test.go b/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes3_limit100_duration86400000_load2_00_windows10/generated_test.go deleted file mode 100644 index 711a1d28a6..0000000000 --- a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes3_limit100_duration86400000_load2_00_windows10/generated_test.go +++ /dev/null @@ -1,28 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -package ratelimit_nodes3_limit100_duration86400000_load2_00_windows10 - -import ( - "testing" - - "github.com/unkeyed/unkey/go/apps/api/integration" - run "github.com/unkeyed/unkey/go/apps/api/integration/multi_node_ratelimiting" - "github.com/unkeyed/unkey/go/pkg/testutil" -) - -func TestIntegration_RateLimit_Nodes3_Limit100_Duration86400000_Load2_00_Windows10(t *testing.T) { - testutil.SkipUnlessIntegration(t) - - h := integration.New(t, integration.Config{ - NumNodes: 3, - }) - - run.RunRateLimitTest( - t, - h, - 100, // limit - 86400000, // duration - 10, // window count - 2, // load factor - 3, // node count - ) -} diff --git a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes3_limit100_duration86400000_load2_00_windows100/generated_test.go b/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes3_limit100_duration86400000_load2_00_windows100/generated_test.go deleted file mode 100644 index cc28d0a113..0000000000 --- a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes3_limit100_duration86400000_load2_00_windows100/generated_test.go +++ /dev/null @@ -1,28 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -package ratelimit_nodes3_limit100_duration86400000_load2_00_windows100 - -import ( - "testing" - - "github.com/unkeyed/unkey/go/apps/api/integration" - run "github.com/unkeyed/unkey/go/apps/api/integration/multi_node_ratelimiting" - "github.com/unkeyed/unkey/go/pkg/testutil" -) - -func TestIntegration_RateLimit_Nodes3_Limit100_Duration86400000_Load2_00_Windows100(t *testing.T) { - testutil.SkipUnlessIntegration(t) - - h := integration.New(t, integration.Config{ - NumNodes: 3, - }) - - run.RunRateLimitTest( - t, - h, - 100, // limit - 86400000, // duration - 100, // window count - 2, // load factor - 3, // node count - ) -} diff --git a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes3_limit5_duration1000_load0_90_windows100/generated_test.go b/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes3_limit5_duration1000_load0_90_windows100/generated_test.go deleted file mode 100644 index 4f68f760b6..0000000000 --- a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes3_limit5_duration1000_load0_90_windows100/generated_test.go +++ /dev/null @@ -1,28 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -package ratelimit_nodes3_limit5_duration1000_load0_90_windows100 - -import ( - "testing" - - "github.com/unkeyed/unkey/go/apps/api/integration" - run "github.com/unkeyed/unkey/go/apps/api/integration/multi_node_ratelimiting" - "github.com/unkeyed/unkey/go/pkg/testutil" -) - -func TestIntegration_RateLimit_Nodes3_Limit5_Duration1000_Load0_90_Windows100(t *testing.T) { - testutil.SkipUnlessIntegration(t) - - h := integration.New(t, integration.Config{ - NumNodes: 3, - }) - - run.RunRateLimitTest( - t, - h, - 5, // limit - 1000, // duration - 100, // window count - 0.9, // load factor - 3, // node count - ) -} diff --git a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes3_limit5_duration1000_load10_00_windows100/generated_test.go b/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes3_limit5_duration1000_load10_00_windows100/generated_test.go deleted file mode 100644 index 83bcabfd4b..0000000000 --- a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes3_limit5_duration1000_load10_00_windows100/generated_test.go +++ /dev/null @@ -1,28 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -package ratelimit_nodes3_limit5_duration1000_load10_00_windows100 - -import ( - "testing" - - "github.com/unkeyed/unkey/go/apps/api/integration" - run "github.com/unkeyed/unkey/go/apps/api/integration/multi_node_ratelimiting" - "github.com/unkeyed/unkey/go/pkg/testutil" -) - -func TestIntegration_RateLimit_Nodes3_Limit5_Duration1000_Load10_00_Windows100(t *testing.T) { - testutil.SkipUnlessIntegration(t) - - h := integration.New(t, integration.Config{ - NumNodes: 3, - }) - - run.RunRateLimitTest( - t, - h, - 5, // limit - 1000, // duration - 100, // window count - 10, // load factor - 3, // node count - ) -} diff --git a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes3_limit5_duration1000_load2_00_windows100/generated_test.go b/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes3_limit5_duration1000_load2_00_windows100/generated_test.go deleted file mode 100644 index c606cf051a..0000000000 --- a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes3_limit5_duration1000_load2_00_windows100/generated_test.go +++ /dev/null @@ -1,28 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -package ratelimit_nodes3_limit5_duration1000_load2_00_windows100 - -import ( - "testing" - - "github.com/unkeyed/unkey/go/apps/api/integration" - run "github.com/unkeyed/unkey/go/apps/api/integration/multi_node_ratelimiting" - "github.com/unkeyed/unkey/go/pkg/testutil" -) - -func TestIntegration_RateLimit_Nodes3_Limit5_Duration1000_Load2_00_Windows100(t *testing.T) { - testutil.SkipUnlessIntegration(t) - - h := integration.New(t, integration.Config{ - NumNodes: 3, - }) - - run.RunRateLimitTest( - t, - h, - 5, // limit - 1000, // duration - 100, // window count - 2, // load factor - 3, // node count - ) -} diff --git a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes3_limit5_duration3600000_load0_90_windows100/generated_test.go b/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes3_limit5_duration3600000_load0_90_windows100/generated_test.go deleted file mode 100644 index 47fb1e4949..0000000000 --- a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes3_limit5_duration3600000_load0_90_windows100/generated_test.go +++ /dev/null @@ -1,28 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -package ratelimit_nodes3_limit5_duration3600000_load0_90_windows100 - -import ( - "testing" - - "github.com/unkeyed/unkey/go/apps/api/integration" - run "github.com/unkeyed/unkey/go/apps/api/integration/multi_node_ratelimiting" - "github.com/unkeyed/unkey/go/pkg/testutil" -) - -func TestIntegration_RateLimit_Nodes3_Limit5_Duration3600000_Load0_90_Windows100(t *testing.T) { - testutil.SkipUnlessIntegration(t) - - h := integration.New(t, integration.Config{ - NumNodes: 3, - }) - - run.RunRateLimitTest( - t, - h, - 5, // limit - 3600000, // duration - 100, // window count - 0.9, // load factor - 3, // node count - ) -} diff --git a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes3_limit5_duration3600000_load10_00_windows100/generated_test.go b/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes3_limit5_duration3600000_load10_00_windows100/generated_test.go deleted file mode 100644 index 333e1a1cf8..0000000000 --- a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes3_limit5_duration3600000_load10_00_windows100/generated_test.go +++ /dev/null @@ -1,28 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -package ratelimit_nodes3_limit5_duration3600000_load10_00_windows100 - -import ( - "testing" - - "github.com/unkeyed/unkey/go/apps/api/integration" - run "github.com/unkeyed/unkey/go/apps/api/integration/multi_node_ratelimiting" - "github.com/unkeyed/unkey/go/pkg/testutil" -) - -func TestIntegration_RateLimit_Nodes3_Limit5_Duration3600000_Load10_00_Windows100(t *testing.T) { - testutil.SkipUnlessIntegration(t) - - h := integration.New(t, integration.Config{ - NumNodes: 3, - }) - - run.RunRateLimitTest( - t, - h, - 5, // limit - 3600000, // duration - 100, // window count - 10, // load factor - 3, // node count - ) -} diff --git a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes3_limit5_duration3600000_load2_00_windows100/generated_test.go b/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes3_limit5_duration3600000_load2_00_windows100/generated_test.go deleted file mode 100644 index 80515364b4..0000000000 --- a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes3_limit5_duration3600000_load2_00_windows100/generated_test.go +++ /dev/null @@ -1,28 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -package ratelimit_nodes3_limit5_duration3600000_load2_00_windows100 - -import ( - "testing" - - "github.com/unkeyed/unkey/go/apps/api/integration" - run "github.com/unkeyed/unkey/go/apps/api/integration/multi_node_ratelimiting" - "github.com/unkeyed/unkey/go/pkg/testutil" -) - -func TestIntegration_RateLimit_Nodes3_Limit5_Duration3600000_Load2_00_Windows100(t *testing.T) { - testutil.SkipUnlessIntegration(t) - - h := integration.New(t, integration.Config{ - NumNodes: 3, - }) - - run.RunRateLimitTest( - t, - h, - 5, // limit - 3600000, // duration - 100, // window count - 2, // load factor - 3, // node count - ) -} diff --git a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes3_limit5_duration60000_load0_90_windows100/generated_test.go b/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes3_limit5_duration60000_load0_90_windows100/generated_test.go deleted file mode 100644 index ad56f6dcca..0000000000 --- a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes3_limit5_duration60000_load0_90_windows100/generated_test.go +++ /dev/null @@ -1,28 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -package ratelimit_nodes3_limit5_duration60000_load0_90_windows100 - -import ( - "testing" - - "github.com/unkeyed/unkey/go/apps/api/integration" - run "github.com/unkeyed/unkey/go/apps/api/integration/multi_node_ratelimiting" - "github.com/unkeyed/unkey/go/pkg/testutil" -) - -func TestIntegration_RateLimit_Nodes3_Limit5_Duration60000_Load0_90_Windows100(t *testing.T) { - testutil.SkipUnlessIntegration(t) - - h := integration.New(t, integration.Config{ - NumNodes: 3, - }) - - run.RunRateLimitTest( - t, - h, - 5, // limit - 60000, // duration - 100, // window count - 0.9, // load factor - 3, // node count - ) -} diff --git a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes3_limit5_duration60000_load10_00_windows100/generated_test.go b/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes3_limit5_duration60000_load10_00_windows100/generated_test.go deleted file mode 100644 index ef13e40fee..0000000000 --- a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes3_limit5_duration60000_load10_00_windows100/generated_test.go +++ /dev/null @@ -1,28 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -package ratelimit_nodes3_limit5_duration60000_load10_00_windows100 - -import ( - "testing" - - "github.com/unkeyed/unkey/go/apps/api/integration" - run "github.com/unkeyed/unkey/go/apps/api/integration/multi_node_ratelimiting" - "github.com/unkeyed/unkey/go/pkg/testutil" -) - -func TestIntegration_RateLimit_Nodes3_Limit5_Duration60000_Load10_00_Windows100(t *testing.T) { - testutil.SkipUnlessIntegration(t) - - h := integration.New(t, integration.Config{ - NumNodes: 3, - }) - - run.RunRateLimitTest( - t, - h, - 5, // limit - 60000, // duration - 100, // window count - 10, // load factor - 3, // node count - ) -} diff --git a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes3_limit5_duration60000_load2_00_windows100/generated_test.go b/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes3_limit5_duration60000_load2_00_windows100/generated_test.go deleted file mode 100644 index 5926d853f6..0000000000 --- a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes3_limit5_duration60000_load2_00_windows100/generated_test.go +++ /dev/null @@ -1,28 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -package ratelimit_nodes3_limit5_duration60000_load2_00_windows100 - -import ( - "testing" - - "github.com/unkeyed/unkey/go/apps/api/integration" - run "github.com/unkeyed/unkey/go/apps/api/integration/multi_node_ratelimiting" - "github.com/unkeyed/unkey/go/pkg/testutil" -) - -func TestIntegration_RateLimit_Nodes3_Limit5_Duration60000_Load2_00_Windows100(t *testing.T) { - testutil.SkipUnlessIntegration(t) - - h := integration.New(t, integration.Config{ - NumNodes: 3, - }) - - run.RunRateLimitTest( - t, - h, - 5, // limit - 60000, // duration - 100, // window count - 2, // load factor - 3, // node count - ) -} diff --git a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes3_limit5_duration86400000_load0_90_windows10/generated_test.go b/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes3_limit5_duration86400000_load0_90_windows10/generated_test.go deleted file mode 100644 index 8da120010d..0000000000 --- a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes3_limit5_duration86400000_load0_90_windows10/generated_test.go +++ /dev/null @@ -1,28 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -package ratelimit_nodes3_limit5_duration86400000_load0_90_windows10 - -import ( - "testing" - - "github.com/unkeyed/unkey/go/apps/api/integration" - run "github.com/unkeyed/unkey/go/apps/api/integration/multi_node_ratelimiting" - "github.com/unkeyed/unkey/go/pkg/testutil" -) - -func TestIntegration_RateLimit_Nodes3_Limit5_Duration86400000_Load0_90_Windows10(t *testing.T) { - testutil.SkipUnlessIntegration(t) - - h := integration.New(t, integration.Config{ - NumNodes: 3, - }) - - run.RunRateLimitTest( - t, - h, - 5, // limit - 86400000, // duration - 10, // window count - 0.9, // load factor - 3, // node count - ) -} diff --git a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes3_limit5_duration86400000_load0_90_windows100/generated_test.go b/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes3_limit5_duration86400000_load0_90_windows100/generated_test.go deleted file mode 100644 index 4f324731eb..0000000000 --- a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes3_limit5_duration86400000_load0_90_windows100/generated_test.go +++ /dev/null @@ -1,28 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -package ratelimit_nodes3_limit5_duration86400000_load0_90_windows100 - -import ( - "testing" - - "github.com/unkeyed/unkey/go/apps/api/integration" - run "github.com/unkeyed/unkey/go/apps/api/integration/multi_node_ratelimiting" - "github.com/unkeyed/unkey/go/pkg/testutil" -) - -func TestIntegration_RateLimit_Nodes3_Limit5_Duration86400000_Load0_90_Windows100(t *testing.T) { - testutil.SkipUnlessIntegration(t) - - h := integration.New(t, integration.Config{ - NumNodes: 3, - }) - - run.RunRateLimitTest( - t, - h, - 5, // limit - 86400000, // duration - 100, // window count - 0.9, // load factor - 3, // node count - ) -} diff --git a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes3_limit5_duration86400000_load10_00_windows10/generated_test.go b/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes3_limit5_duration86400000_load10_00_windows10/generated_test.go deleted file mode 100644 index fc942e59c4..0000000000 --- a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes3_limit5_duration86400000_load10_00_windows10/generated_test.go +++ /dev/null @@ -1,28 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -package ratelimit_nodes3_limit5_duration86400000_load10_00_windows10 - -import ( - "testing" - - "github.com/unkeyed/unkey/go/apps/api/integration" - run "github.com/unkeyed/unkey/go/apps/api/integration/multi_node_ratelimiting" - "github.com/unkeyed/unkey/go/pkg/testutil" -) - -func TestIntegration_RateLimit_Nodes3_Limit5_Duration86400000_Load10_00_Windows10(t *testing.T) { - testutil.SkipUnlessIntegration(t) - - h := integration.New(t, integration.Config{ - NumNodes: 3, - }) - - run.RunRateLimitTest( - t, - h, - 5, // limit - 86400000, // duration - 10, // window count - 10, // load factor - 3, // node count - ) -} diff --git a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes3_limit5_duration86400000_load10_00_windows100/generated_test.go b/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes3_limit5_duration86400000_load10_00_windows100/generated_test.go deleted file mode 100644 index fa46c42a01..0000000000 --- a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes3_limit5_duration86400000_load10_00_windows100/generated_test.go +++ /dev/null @@ -1,28 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -package ratelimit_nodes3_limit5_duration86400000_load10_00_windows100 - -import ( - "testing" - - "github.com/unkeyed/unkey/go/apps/api/integration" - run "github.com/unkeyed/unkey/go/apps/api/integration/multi_node_ratelimiting" - "github.com/unkeyed/unkey/go/pkg/testutil" -) - -func TestIntegration_RateLimit_Nodes3_Limit5_Duration86400000_Load10_00_Windows100(t *testing.T) { - testutil.SkipUnlessIntegration(t) - - h := integration.New(t, integration.Config{ - NumNodes: 3, - }) - - run.RunRateLimitTest( - t, - h, - 5, // limit - 86400000, // duration - 100, // window count - 10, // load factor - 3, // node count - ) -} diff --git a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes3_limit5_duration86400000_load2_00_windows10/generated_test.go b/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes3_limit5_duration86400000_load2_00_windows10/generated_test.go deleted file mode 100644 index 938d4ac49d..0000000000 --- a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes3_limit5_duration86400000_load2_00_windows10/generated_test.go +++ /dev/null @@ -1,28 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -package ratelimit_nodes3_limit5_duration86400000_load2_00_windows10 - -import ( - "testing" - - "github.com/unkeyed/unkey/go/apps/api/integration" - run "github.com/unkeyed/unkey/go/apps/api/integration/multi_node_ratelimiting" - "github.com/unkeyed/unkey/go/pkg/testutil" -) - -func TestIntegration_RateLimit_Nodes3_Limit5_Duration86400000_Load2_00_Windows10(t *testing.T) { - testutil.SkipUnlessIntegration(t) - - h := integration.New(t, integration.Config{ - NumNodes: 3, - }) - - run.RunRateLimitTest( - t, - h, - 5, // limit - 86400000, // duration - 10, // window count - 2, // load factor - 3, // node count - ) -} diff --git a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes3_limit5_duration86400000_load2_00_windows100/generated_test.go b/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes3_limit5_duration86400000_load2_00_windows100/generated_test.go deleted file mode 100644 index 34f8cf6803..0000000000 --- a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes3_limit5_duration86400000_load2_00_windows100/generated_test.go +++ /dev/null @@ -1,28 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -package ratelimit_nodes3_limit5_duration86400000_load2_00_windows100 - -import ( - "testing" - - "github.com/unkeyed/unkey/go/apps/api/integration" - run "github.com/unkeyed/unkey/go/apps/api/integration/multi_node_ratelimiting" - "github.com/unkeyed/unkey/go/pkg/testutil" -) - -func TestIntegration_RateLimit_Nodes3_Limit5_Duration86400000_Load2_00_Windows100(t *testing.T) { - testutil.SkipUnlessIntegration(t) - - h := integration.New(t, integration.Config{ - NumNodes: 3, - }) - - run.RunRateLimitTest( - t, - h, - 5, // limit - 86400000, // duration - 100, // window count - 2, // load factor - 3, // node count - ) -} diff --git a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes9_limit1000_duration1000_load0_90_windows10/generated_test.go b/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes9_limit1000_duration1000_load0_90_windows10/generated_test.go deleted file mode 100644 index 6219666b74..0000000000 --- a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes9_limit1000_duration1000_load0_90_windows10/generated_test.go +++ /dev/null @@ -1,28 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -package ratelimit_nodes9_limit1000_duration1000_load0_90_windows10 - -import ( - "testing" - - "github.com/unkeyed/unkey/go/apps/api/integration" - run "github.com/unkeyed/unkey/go/apps/api/integration/multi_node_ratelimiting" - "github.com/unkeyed/unkey/go/pkg/testutil" -) - -func TestIntegration_RateLimit_Nodes9_Limit1000_Duration1000_Load0_90_Windows10(t *testing.T) { - testutil.SkipUnlessIntegration(t) - - h := integration.New(t, integration.Config{ - NumNodes: 9, - }) - - run.RunRateLimitTest( - t, - h, - 1000, // limit - 1000, // duration - 10, // window count - 0.9, // load factor - 9, // node count - ) -} diff --git a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes9_limit1000_duration1000_load0_90_windows100/generated_test.go b/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes9_limit1000_duration1000_load0_90_windows100/generated_test.go deleted file mode 100644 index fd4a36dd08..0000000000 --- a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes9_limit1000_duration1000_load0_90_windows100/generated_test.go +++ /dev/null @@ -1,28 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -package ratelimit_nodes9_limit1000_duration1000_load0_90_windows100 - -import ( - "testing" - - "github.com/unkeyed/unkey/go/apps/api/integration" - run "github.com/unkeyed/unkey/go/apps/api/integration/multi_node_ratelimiting" - "github.com/unkeyed/unkey/go/pkg/testutil" -) - -func TestIntegration_RateLimit_Nodes9_Limit1000_Duration1000_Load0_90_Windows100(t *testing.T) { - testutil.SkipUnlessIntegration(t) - - h := integration.New(t, integration.Config{ - NumNodes: 9, - }) - - run.RunRateLimitTest( - t, - h, - 1000, // limit - 1000, // duration - 100, // window count - 0.9, // load factor - 9, // node count - ) -} diff --git a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes9_limit1000_duration1000_load10_00_windows10/generated_test.go b/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes9_limit1000_duration1000_load10_00_windows10/generated_test.go deleted file mode 100644 index 743ea41a80..0000000000 --- a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes9_limit1000_duration1000_load10_00_windows10/generated_test.go +++ /dev/null @@ -1,28 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -package ratelimit_nodes9_limit1000_duration1000_load10_00_windows10 - -import ( - "testing" - - "github.com/unkeyed/unkey/go/apps/api/integration" - run "github.com/unkeyed/unkey/go/apps/api/integration/multi_node_ratelimiting" - "github.com/unkeyed/unkey/go/pkg/testutil" -) - -func TestIntegration_RateLimit_Nodes9_Limit1000_Duration1000_Load10_00_Windows10(t *testing.T) { - testutil.SkipUnlessIntegration(t) - - h := integration.New(t, integration.Config{ - NumNodes: 9, - }) - - run.RunRateLimitTest( - t, - h, - 1000, // limit - 1000, // duration - 10, // window count - 10, // load factor - 9, // node count - ) -} diff --git a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes9_limit1000_duration1000_load10_00_windows100/generated_test.go b/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes9_limit1000_duration1000_load10_00_windows100/generated_test.go deleted file mode 100644 index 99832aa638..0000000000 --- a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes9_limit1000_duration1000_load10_00_windows100/generated_test.go +++ /dev/null @@ -1,28 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -package ratelimit_nodes9_limit1000_duration1000_load10_00_windows100 - -import ( - "testing" - - "github.com/unkeyed/unkey/go/apps/api/integration" - run "github.com/unkeyed/unkey/go/apps/api/integration/multi_node_ratelimiting" - "github.com/unkeyed/unkey/go/pkg/testutil" -) - -func TestIntegration_RateLimit_Nodes9_Limit1000_Duration1000_Load10_00_Windows100(t *testing.T) { - testutil.SkipUnlessIntegration(t) - - h := integration.New(t, integration.Config{ - NumNodes: 9, - }) - - run.RunRateLimitTest( - t, - h, - 1000, // limit - 1000, // duration - 100, // window count - 10, // load factor - 9, // node count - ) -} diff --git a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes9_limit1000_duration1000_load2_00_windows10/generated_test.go b/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes9_limit1000_duration1000_load2_00_windows10/generated_test.go deleted file mode 100644 index bf6d46fbae..0000000000 --- a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes9_limit1000_duration1000_load2_00_windows10/generated_test.go +++ /dev/null @@ -1,28 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -package ratelimit_nodes9_limit1000_duration1000_load2_00_windows10 - -import ( - "testing" - - "github.com/unkeyed/unkey/go/apps/api/integration" - run "github.com/unkeyed/unkey/go/apps/api/integration/multi_node_ratelimiting" - "github.com/unkeyed/unkey/go/pkg/testutil" -) - -func TestIntegration_RateLimit_Nodes9_Limit1000_Duration1000_Load2_00_Windows10(t *testing.T) { - testutil.SkipUnlessIntegration(t) - - h := integration.New(t, integration.Config{ - NumNodes: 9, - }) - - run.RunRateLimitTest( - t, - h, - 1000, // limit - 1000, // duration - 10, // window count - 2, // load factor - 9, // node count - ) -} diff --git a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes9_limit1000_duration1000_load2_00_windows100/generated_test.go b/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes9_limit1000_duration1000_load2_00_windows100/generated_test.go deleted file mode 100644 index ee6b949a73..0000000000 --- a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes9_limit1000_duration1000_load2_00_windows100/generated_test.go +++ /dev/null @@ -1,28 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -package ratelimit_nodes9_limit1000_duration1000_load2_00_windows100 - -import ( - "testing" - - "github.com/unkeyed/unkey/go/apps/api/integration" - run "github.com/unkeyed/unkey/go/apps/api/integration/multi_node_ratelimiting" - "github.com/unkeyed/unkey/go/pkg/testutil" -) - -func TestIntegration_RateLimit_Nodes9_Limit1000_Duration1000_Load2_00_Windows100(t *testing.T) { - testutil.SkipUnlessIntegration(t) - - h := integration.New(t, integration.Config{ - NumNodes: 9, - }) - - run.RunRateLimitTest( - t, - h, - 1000, // limit - 1000, // duration - 100, // window count - 2, // load factor - 9, // node count - ) -} diff --git a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes9_limit1000_duration3600000_load0_90_windows10/generated_test.go b/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes9_limit1000_duration3600000_load0_90_windows10/generated_test.go deleted file mode 100644 index b61ff20cda..0000000000 --- a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes9_limit1000_duration3600000_load0_90_windows10/generated_test.go +++ /dev/null @@ -1,28 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -package ratelimit_nodes9_limit1000_duration3600000_load0_90_windows10 - -import ( - "testing" - - "github.com/unkeyed/unkey/go/apps/api/integration" - run "github.com/unkeyed/unkey/go/apps/api/integration/multi_node_ratelimiting" - "github.com/unkeyed/unkey/go/pkg/testutil" -) - -func TestIntegration_RateLimit_Nodes9_Limit1000_Duration3600000_Load0_90_Windows10(t *testing.T) { - testutil.SkipUnlessIntegration(t) - - h := integration.New(t, integration.Config{ - NumNodes: 9, - }) - - run.RunRateLimitTest( - t, - h, - 1000, // limit - 3600000, // duration - 10, // window count - 0.9, // load factor - 9, // node count - ) -} diff --git a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes9_limit1000_duration3600000_load0_90_windows100/generated_test.go b/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes9_limit1000_duration3600000_load0_90_windows100/generated_test.go deleted file mode 100644 index 1b429608cf..0000000000 --- a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes9_limit1000_duration3600000_load0_90_windows100/generated_test.go +++ /dev/null @@ -1,28 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -package ratelimit_nodes9_limit1000_duration3600000_load0_90_windows100 - -import ( - "testing" - - "github.com/unkeyed/unkey/go/apps/api/integration" - run "github.com/unkeyed/unkey/go/apps/api/integration/multi_node_ratelimiting" - "github.com/unkeyed/unkey/go/pkg/testutil" -) - -func TestIntegration_RateLimit_Nodes9_Limit1000_Duration3600000_Load0_90_Windows100(t *testing.T) { - testutil.SkipUnlessIntegration(t) - - h := integration.New(t, integration.Config{ - NumNodes: 9, - }) - - run.RunRateLimitTest( - t, - h, - 1000, // limit - 3600000, // duration - 100, // window count - 0.9, // load factor - 9, // node count - ) -} diff --git a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes9_limit1000_duration3600000_load10_00_windows10/generated_test.go b/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes9_limit1000_duration3600000_load10_00_windows10/generated_test.go deleted file mode 100644 index 435237fbee..0000000000 --- a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes9_limit1000_duration3600000_load10_00_windows10/generated_test.go +++ /dev/null @@ -1,28 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -package ratelimit_nodes9_limit1000_duration3600000_load10_00_windows10 - -import ( - "testing" - - "github.com/unkeyed/unkey/go/apps/api/integration" - run "github.com/unkeyed/unkey/go/apps/api/integration/multi_node_ratelimiting" - "github.com/unkeyed/unkey/go/pkg/testutil" -) - -func TestIntegration_RateLimit_Nodes9_Limit1000_Duration3600000_Load10_00_Windows10(t *testing.T) { - testutil.SkipUnlessIntegration(t) - - h := integration.New(t, integration.Config{ - NumNodes: 9, - }) - - run.RunRateLimitTest( - t, - h, - 1000, // limit - 3600000, // duration - 10, // window count - 10, // load factor - 9, // node count - ) -} diff --git a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes9_limit1000_duration3600000_load10_00_windows100/generated_test.go b/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes9_limit1000_duration3600000_load10_00_windows100/generated_test.go deleted file mode 100644 index 3b1ce387ad..0000000000 --- a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes9_limit1000_duration3600000_load10_00_windows100/generated_test.go +++ /dev/null @@ -1,28 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -package ratelimit_nodes9_limit1000_duration3600000_load10_00_windows100 - -import ( - "testing" - - "github.com/unkeyed/unkey/go/apps/api/integration" - run "github.com/unkeyed/unkey/go/apps/api/integration/multi_node_ratelimiting" - "github.com/unkeyed/unkey/go/pkg/testutil" -) - -func TestIntegration_RateLimit_Nodes9_Limit1000_Duration3600000_Load10_00_Windows100(t *testing.T) { - testutil.SkipUnlessIntegration(t) - - h := integration.New(t, integration.Config{ - NumNodes: 9, - }) - - run.RunRateLimitTest( - t, - h, - 1000, // limit - 3600000, // duration - 100, // window count - 10, // load factor - 9, // node count - ) -} diff --git a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes9_limit1000_duration3600000_load2_00_windows10/generated_test.go b/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes9_limit1000_duration3600000_load2_00_windows10/generated_test.go deleted file mode 100644 index 3a6b9bfbe7..0000000000 --- a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes9_limit1000_duration3600000_load2_00_windows10/generated_test.go +++ /dev/null @@ -1,28 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -package ratelimit_nodes9_limit1000_duration3600000_load2_00_windows10 - -import ( - "testing" - - "github.com/unkeyed/unkey/go/apps/api/integration" - run "github.com/unkeyed/unkey/go/apps/api/integration/multi_node_ratelimiting" - "github.com/unkeyed/unkey/go/pkg/testutil" -) - -func TestIntegration_RateLimit_Nodes9_Limit1000_Duration3600000_Load2_00_Windows10(t *testing.T) { - testutil.SkipUnlessIntegration(t) - - h := integration.New(t, integration.Config{ - NumNodes: 9, - }) - - run.RunRateLimitTest( - t, - h, - 1000, // limit - 3600000, // duration - 10, // window count - 2, // load factor - 9, // node count - ) -} diff --git a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes9_limit1000_duration3600000_load2_00_windows100/generated_test.go b/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes9_limit1000_duration3600000_load2_00_windows100/generated_test.go deleted file mode 100644 index 2fc5319134..0000000000 --- a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes9_limit1000_duration3600000_load2_00_windows100/generated_test.go +++ /dev/null @@ -1,28 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -package ratelimit_nodes9_limit1000_duration3600000_load2_00_windows100 - -import ( - "testing" - - "github.com/unkeyed/unkey/go/apps/api/integration" - run "github.com/unkeyed/unkey/go/apps/api/integration/multi_node_ratelimiting" - "github.com/unkeyed/unkey/go/pkg/testutil" -) - -func TestIntegration_RateLimit_Nodes9_Limit1000_Duration3600000_Load2_00_Windows100(t *testing.T) { - testutil.SkipUnlessIntegration(t) - - h := integration.New(t, integration.Config{ - NumNodes: 9, - }) - - run.RunRateLimitTest( - t, - h, - 1000, // limit - 3600000, // duration - 100, // window count - 2, // load factor - 9, // node count - ) -} diff --git a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes9_limit1000_duration60000_load0_90_windows10/generated_test.go b/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes9_limit1000_duration60000_load0_90_windows10/generated_test.go deleted file mode 100644 index 1c64f3c43a..0000000000 --- a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes9_limit1000_duration60000_load0_90_windows10/generated_test.go +++ /dev/null @@ -1,28 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -package ratelimit_nodes9_limit1000_duration60000_load0_90_windows10 - -import ( - "testing" - - "github.com/unkeyed/unkey/go/apps/api/integration" - run "github.com/unkeyed/unkey/go/apps/api/integration/multi_node_ratelimiting" - "github.com/unkeyed/unkey/go/pkg/testutil" -) - -func TestIntegration_RateLimit_Nodes9_Limit1000_Duration60000_Load0_90_Windows10(t *testing.T) { - testutil.SkipUnlessIntegration(t) - - h := integration.New(t, integration.Config{ - NumNodes: 9, - }) - - run.RunRateLimitTest( - t, - h, - 1000, // limit - 60000, // duration - 10, // window count - 0.9, // load factor - 9, // node count - ) -} diff --git a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes9_limit1000_duration60000_load0_90_windows100/generated_test.go b/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes9_limit1000_duration60000_load0_90_windows100/generated_test.go deleted file mode 100644 index b5fc5c5919..0000000000 --- a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes9_limit1000_duration60000_load0_90_windows100/generated_test.go +++ /dev/null @@ -1,28 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -package ratelimit_nodes9_limit1000_duration60000_load0_90_windows100 - -import ( - "testing" - - "github.com/unkeyed/unkey/go/apps/api/integration" - run "github.com/unkeyed/unkey/go/apps/api/integration/multi_node_ratelimiting" - "github.com/unkeyed/unkey/go/pkg/testutil" -) - -func TestIntegration_RateLimit_Nodes9_Limit1000_Duration60000_Load0_90_Windows100(t *testing.T) { - testutil.SkipUnlessIntegration(t) - - h := integration.New(t, integration.Config{ - NumNodes: 9, - }) - - run.RunRateLimitTest( - t, - h, - 1000, // limit - 60000, // duration - 100, // window count - 0.9, // load factor - 9, // node count - ) -} diff --git a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes9_limit1000_duration60000_load10_00_windows10/generated_test.go b/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes9_limit1000_duration60000_load10_00_windows10/generated_test.go deleted file mode 100644 index bce30e279e..0000000000 --- a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes9_limit1000_duration60000_load10_00_windows10/generated_test.go +++ /dev/null @@ -1,28 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -package ratelimit_nodes9_limit1000_duration60000_load10_00_windows10 - -import ( - "testing" - - "github.com/unkeyed/unkey/go/apps/api/integration" - run "github.com/unkeyed/unkey/go/apps/api/integration/multi_node_ratelimiting" - "github.com/unkeyed/unkey/go/pkg/testutil" -) - -func TestIntegration_RateLimit_Nodes9_Limit1000_Duration60000_Load10_00_Windows10(t *testing.T) { - testutil.SkipUnlessIntegration(t) - - h := integration.New(t, integration.Config{ - NumNodes: 9, - }) - - run.RunRateLimitTest( - t, - h, - 1000, // limit - 60000, // duration - 10, // window count - 10, // load factor - 9, // node count - ) -} diff --git a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes9_limit1000_duration60000_load10_00_windows100/generated_test.go b/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes9_limit1000_duration60000_load10_00_windows100/generated_test.go deleted file mode 100644 index b85430b764..0000000000 --- a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes9_limit1000_duration60000_load10_00_windows100/generated_test.go +++ /dev/null @@ -1,28 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -package ratelimit_nodes9_limit1000_duration60000_load10_00_windows100 - -import ( - "testing" - - "github.com/unkeyed/unkey/go/apps/api/integration" - run "github.com/unkeyed/unkey/go/apps/api/integration/multi_node_ratelimiting" - "github.com/unkeyed/unkey/go/pkg/testutil" -) - -func TestIntegration_RateLimit_Nodes9_Limit1000_Duration60000_Load10_00_Windows100(t *testing.T) { - testutil.SkipUnlessIntegration(t) - - h := integration.New(t, integration.Config{ - NumNodes: 9, - }) - - run.RunRateLimitTest( - t, - h, - 1000, // limit - 60000, // duration - 100, // window count - 10, // load factor - 9, // node count - ) -} diff --git a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes9_limit1000_duration60000_load2_00_windows10/generated_test.go b/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes9_limit1000_duration60000_load2_00_windows10/generated_test.go deleted file mode 100644 index 6f8fff565d..0000000000 --- a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes9_limit1000_duration60000_load2_00_windows10/generated_test.go +++ /dev/null @@ -1,28 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -package ratelimit_nodes9_limit1000_duration60000_load2_00_windows10 - -import ( - "testing" - - "github.com/unkeyed/unkey/go/apps/api/integration" - run "github.com/unkeyed/unkey/go/apps/api/integration/multi_node_ratelimiting" - "github.com/unkeyed/unkey/go/pkg/testutil" -) - -func TestIntegration_RateLimit_Nodes9_Limit1000_Duration60000_Load2_00_Windows10(t *testing.T) { - testutil.SkipUnlessIntegration(t) - - h := integration.New(t, integration.Config{ - NumNodes: 9, - }) - - run.RunRateLimitTest( - t, - h, - 1000, // limit - 60000, // duration - 10, // window count - 2, // load factor - 9, // node count - ) -} diff --git a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes9_limit1000_duration60000_load2_00_windows100/generated_test.go b/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes9_limit1000_duration60000_load2_00_windows100/generated_test.go deleted file mode 100644 index 005b5aa9c3..0000000000 --- a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes9_limit1000_duration60000_load2_00_windows100/generated_test.go +++ /dev/null @@ -1,28 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -package ratelimit_nodes9_limit1000_duration60000_load2_00_windows100 - -import ( - "testing" - - "github.com/unkeyed/unkey/go/apps/api/integration" - run "github.com/unkeyed/unkey/go/apps/api/integration/multi_node_ratelimiting" - "github.com/unkeyed/unkey/go/pkg/testutil" -) - -func TestIntegration_RateLimit_Nodes9_Limit1000_Duration60000_Load2_00_Windows100(t *testing.T) { - testutil.SkipUnlessIntegration(t) - - h := integration.New(t, integration.Config{ - NumNodes: 9, - }) - - run.RunRateLimitTest( - t, - h, - 1000, // limit - 60000, // duration - 100, // window count - 2, // load factor - 9, // node count - ) -} diff --git a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes9_limit1000_duration86400000_load0_90_windows10/generated_test.go b/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes9_limit1000_duration86400000_load0_90_windows10/generated_test.go deleted file mode 100644 index 554b664a5c..0000000000 --- a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes9_limit1000_duration86400000_load0_90_windows10/generated_test.go +++ /dev/null @@ -1,28 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -package ratelimit_nodes9_limit1000_duration86400000_load0_90_windows10 - -import ( - "testing" - - "github.com/unkeyed/unkey/go/apps/api/integration" - run "github.com/unkeyed/unkey/go/apps/api/integration/multi_node_ratelimiting" - "github.com/unkeyed/unkey/go/pkg/testutil" -) - -func TestIntegration_RateLimit_Nodes9_Limit1000_Duration86400000_Load0_90_Windows10(t *testing.T) { - testutil.SkipUnlessIntegration(t) - - h := integration.New(t, integration.Config{ - NumNodes: 9, - }) - - run.RunRateLimitTest( - t, - h, - 1000, // limit - 86400000, // duration - 10, // window count - 0.9, // load factor - 9, // node count - ) -} diff --git a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes9_limit1000_duration86400000_load0_90_windows100/generated_test.go b/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes9_limit1000_duration86400000_load0_90_windows100/generated_test.go deleted file mode 100644 index 2c9beeb811..0000000000 --- a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes9_limit1000_duration86400000_load0_90_windows100/generated_test.go +++ /dev/null @@ -1,28 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -package ratelimit_nodes9_limit1000_duration86400000_load0_90_windows100 - -import ( - "testing" - - "github.com/unkeyed/unkey/go/apps/api/integration" - run "github.com/unkeyed/unkey/go/apps/api/integration/multi_node_ratelimiting" - "github.com/unkeyed/unkey/go/pkg/testutil" -) - -func TestIntegration_RateLimit_Nodes9_Limit1000_Duration86400000_Load0_90_Windows100(t *testing.T) { - testutil.SkipUnlessIntegration(t) - - h := integration.New(t, integration.Config{ - NumNodes: 9, - }) - - run.RunRateLimitTest( - t, - h, - 1000, // limit - 86400000, // duration - 100, // window count - 0.9, // load factor - 9, // node count - ) -} diff --git a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes9_limit1000_duration86400000_load10_00_windows10/generated_test.go b/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes9_limit1000_duration86400000_load10_00_windows10/generated_test.go deleted file mode 100644 index b0f1143cf6..0000000000 --- a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes9_limit1000_duration86400000_load10_00_windows10/generated_test.go +++ /dev/null @@ -1,28 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -package ratelimit_nodes9_limit1000_duration86400000_load10_00_windows10 - -import ( - "testing" - - "github.com/unkeyed/unkey/go/apps/api/integration" - run "github.com/unkeyed/unkey/go/apps/api/integration/multi_node_ratelimiting" - "github.com/unkeyed/unkey/go/pkg/testutil" -) - -func TestIntegration_RateLimit_Nodes9_Limit1000_Duration86400000_Load10_00_Windows10(t *testing.T) { - testutil.SkipUnlessIntegration(t) - - h := integration.New(t, integration.Config{ - NumNodes: 9, - }) - - run.RunRateLimitTest( - t, - h, - 1000, // limit - 86400000, // duration - 10, // window count - 10, // load factor - 9, // node count - ) -} diff --git a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes9_limit1000_duration86400000_load10_00_windows100/generated_test.go b/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes9_limit1000_duration86400000_load10_00_windows100/generated_test.go deleted file mode 100644 index 73af3d096c..0000000000 --- a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes9_limit1000_duration86400000_load10_00_windows100/generated_test.go +++ /dev/null @@ -1,28 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -package ratelimit_nodes9_limit1000_duration86400000_load10_00_windows100 - -import ( - "testing" - - "github.com/unkeyed/unkey/go/apps/api/integration" - run "github.com/unkeyed/unkey/go/apps/api/integration/multi_node_ratelimiting" - "github.com/unkeyed/unkey/go/pkg/testutil" -) - -func TestIntegration_RateLimit_Nodes9_Limit1000_Duration86400000_Load10_00_Windows100(t *testing.T) { - testutil.SkipUnlessIntegration(t) - - h := integration.New(t, integration.Config{ - NumNodes: 9, - }) - - run.RunRateLimitTest( - t, - h, - 1000, // limit - 86400000, // duration - 100, // window count - 10, // load factor - 9, // node count - ) -} diff --git a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes9_limit1000_duration86400000_load2_00_windows10/generated_test.go b/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes9_limit1000_duration86400000_load2_00_windows10/generated_test.go deleted file mode 100644 index e0e1284f1b..0000000000 --- a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes9_limit1000_duration86400000_load2_00_windows10/generated_test.go +++ /dev/null @@ -1,28 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -package ratelimit_nodes9_limit1000_duration86400000_load2_00_windows10 - -import ( - "testing" - - "github.com/unkeyed/unkey/go/apps/api/integration" - run "github.com/unkeyed/unkey/go/apps/api/integration/multi_node_ratelimiting" - "github.com/unkeyed/unkey/go/pkg/testutil" -) - -func TestIntegration_RateLimit_Nodes9_Limit1000_Duration86400000_Load2_00_Windows10(t *testing.T) { - testutil.SkipUnlessIntegration(t) - - h := integration.New(t, integration.Config{ - NumNodes: 9, - }) - - run.RunRateLimitTest( - t, - h, - 1000, // limit - 86400000, // duration - 10, // window count - 2, // load factor - 9, // node count - ) -} diff --git a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes9_limit1000_duration86400000_load2_00_windows100/generated_test.go b/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes9_limit1000_duration86400000_load2_00_windows100/generated_test.go deleted file mode 100644 index 569d6ddf0e..0000000000 --- a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes9_limit1000_duration86400000_load2_00_windows100/generated_test.go +++ /dev/null @@ -1,28 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -package ratelimit_nodes9_limit1000_duration86400000_load2_00_windows100 - -import ( - "testing" - - "github.com/unkeyed/unkey/go/apps/api/integration" - run "github.com/unkeyed/unkey/go/apps/api/integration/multi_node_ratelimiting" - "github.com/unkeyed/unkey/go/pkg/testutil" -) - -func TestIntegration_RateLimit_Nodes9_Limit1000_Duration86400000_Load2_00_Windows100(t *testing.T) { - testutil.SkipUnlessIntegration(t) - - h := integration.New(t, integration.Config{ - NumNodes: 9, - }) - - run.RunRateLimitTest( - t, - h, - 1000, // limit - 86400000, // duration - 100, // window count - 2, // load factor - 9, // node count - ) -} diff --git a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes9_limit100_duration1000_load0_90_windows100/generated_test.go b/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes9_limit100_duration1000_load0_90_windows100/generated_test.go deleted file mode 100644 index c3541f739a..0000000000 --- a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes9_limit100_duration1000_load0_90_windows100/generated_test.go +++ /dev/null @@ -1,28 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -package ratelimit_nodes9_limit100_duration1000_load0_90_windows100 - -import ( - "testing" - - "github.com/unkeyed/unkey/go/apps/api/integration" - run "github.com/unkeyed/unkey/go/apps/api/integration/multi_node_ratelimiting" - "github.com/unkeyed/unkey/go/pkg/testutil" -) - -func TestIntegration_RateLimit_Nodes9_Limit100_Duration1000_Load0_90_Windows100(t *testing.T) { - testutil.SkipUnlessIntegration(t) - - h := integration.New(t, integration.Config{ - NumNodes: 9, - }) - - run.RunRateLimitTest( - t, - h, - 100, // limit - 1000, // duration - 100, // window count - 0.9, // load factor - 9, // node count - ) -} diff --git a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes9_limit100_duration1000_load10_00_windows100/generated_test.go b/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes9_limit100_duration1000_load10_00_windows100/generated_test.go deleted file mode 100644 index 1fecb61481..0000000000 --- a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes9_limit100_duration1000_load10_00_windows100/generated_test.go +++ /dev/null @@ -1,28 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -package ratelimit_nodes9_limit100_duration1000_load10_00_windows100 - -import ( - "testing" - - "github.com/unkeyed/unkey/go/apps/api/integration" - run "github.com/unkeyed/unkey/go/apps/api/integration/multi_node_ratelimiting" - "github.com/unkeyed/unkey/go/pkg/testutil" -) - -func TestIntegration_RateLimit_Nodes9_Limit100_Duration1000_Load10_00_Windows100(t *testing.T) { - testutil.SkipUnlessIntegration(t) - - h := integration.New(t, integration.Config{ - NumNodes: 9, - }) - - run.RunRateLimitTest( - t, - h, - 100, // limit - 1000, // duration - 100, // window count - 10, // load factor - 9, // node count - ) -} diff --git a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes9_limit100_duration1000_load2_00_windows100/generated_test.go b/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes9_limit100_duration1000_load2_00_windows100/generated_test.go deleted file mode 100644 index d76f177b26..0000000000 --- a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes9_limit100_duration1000_load2_00_windows100/generated_test.go +++ /dev/null @@ -1,28 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -package ratelimit_nodes9_limit100_duration1000_load2_00_windows100 - -import ( - "testing" - - "github.com/unkeyed/unkey/go/apps/api/integration" - run "github.com/unkeyed/unkey/go/apps/api/integration/multi_node_ratelimiting" - "github.com/unkeyed/unkey/go/pkg/testutil" -) - -func TestIntegration_RateLimit_Nodes9_Limit100_Duration1000_Load2_00_Windows100(t *testing.T) { - testutil.SkipUnlessIntegration(t) - - h := integration.New(t, integration.Config{ - NumNodes: 9, - }) - - run.RunRateLimitTest( - t, - h, - 100, // limit - 1000, // duration - 100, // window count - 2, // load factor - 9, // node count - ) -} diff --git a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes9_limit100_duration3600000_load0_90_windows100/generated_test.go b/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes9_limit100_duration3600000_load0_90_windows100/generated_test.go deleted file mode 100644 index 6299ff4344..0000000000 --- a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes9_limit100_duration3600000_load0_90_windows100/generated_test.go +++ /dev/null @@ -1,28 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -package ratelimit_nodes9_limit100_duration3600000_load0_90_windows100 - -import ( - "testing" - - "github.com/unkeyed/unkey/go/apps/api/integration" - run "github.com/unkeyed/unkey/go/apps/api/integration/multi_node_ratelimiting" - "github.com/unkeyed/unkey/go/pkg/testutil" -) - -func TestIntegration_RateLimit_Nodes9_Limit100_Duration3600000_Load0_90_Windows100(t *testing.T) { - testutil.SkipUnlessIntegration(t) - - h := integration.New(t, integration.Config{ - NumNodes: 9, - }) - - run.RunRateLimitTest( - t, - h, - 100, // limit - 3600000, // duration - 100, // window count - 0.9, // load factor - 9, // node count - ) -} diff --git a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes9_limit100_duration3600000_load10_00_windows100/generated_test.go b/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes9_limit100_duration3600000_load10_00_windows100/generated_test.go deleted file mode 100644 index 014a12381a..0000000000 --- a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes9_limit100_duration3600000_load10_00_windows100/generated_test.go +++ /dev/null @@ -1,28 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -package ratelimit_nodes9_limit100_duration3600000_load10_00_windows100 - -import ( - "testing" - - "github.com/unkeyed/unkey/go/apps/api/integration" - run "github.com/unkeyed/unkey/go/apps/api/integration/multi_node_ratelimiting" - "github.com/unkeyed/unkey/go/pkg/testutil" -) - -func TestIntegration_RateLimit_Nodes9_Limit100_Duration3600000_Load10_00_Windows100(t *testing.T) { - testutil.SkipUnlessIntegration(t) - - h := integration.New(t, integration.Config{ - NumNodes: 9, - }) - - run.RunRateLimitTest( - t, - h, - 100, // limit - 3600000, // duration - 100, // window count - 10, // load factor - 9, // node count - ) -} diff --git a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes9_limit100_duration3600000_load2_00_windows100/generated_test.go b/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes9_limit100_duration3600000_load2_00_windows100/generated_test.go deleted file mode 100644 index 22936682a4..0000000000 --- a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes9_limit100_duration3600000_load2_00_windows100/generated_test.go +++ /dev/null @@ -1,28 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -package ratelimit_nodes9_limit100_duration3600000_load2_00_windows100 - -import ( - "testing" - - "github.com/unkeyed/unkey/go/apps/api/integration" - run "github.com/unkeyed/unkey/go/apps/api/integration/multi_node_ratelimiting" - "github.com/unkeyed/unkey/go/pkg/testutil" -) - -func TestIntegration_RateLimit_Nodes9_Limit100_Duration3600000_Load2_00_Windows100(t *testing.T) { - testutil.SkipUnlessIntegration(t) - - h := integration.New(t, integration.Config{ - NumNodes: 9, - }) - - run.RunRateLimitTest( - t, - h, - 100, // limit - 3600000, // duration - 100, // window count - 2, // load factor - 9, // node count - ) -} diff --git a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes9_limit100_duration60000_load0_90_windows100/generated_test.go b/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes9_limit100_duration60000_load0_90_windows100/generated_test.go deleted file mode 100644 index 6d55930b9d..0000000000 --- a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes9_limit100_duration60000_load0_90_windows100/generated_test.go +++ /dev/null @@ -1,28 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -package ratelimit_nodes9_limit100_duration60000_load0_90_windows100 - -import ( - "testing" - - "github.com/unkeyed/unkey/go/apps/api/integration" - run "github.com/unkeyed/unkey/go/apps/api/integration/multi_node_ratelimiting" - "github.com/unkeyed/unkey/go/pkg/testutil" -) - -func TestIntegration_RateLimit_Nodes9_Limit100_Duration60000_Load0_90_Windows100(t *testing.T) { - testutil.SkipUnlessIntegration(t) - - h := integration.New(t, integration.Config{ - NumNodes: 9, - }) - - run.RunRateLimitTest( - t, - h, - 100, // limit - 60000, // duration - 100, // window count - 0.9, // load factor - 9, // node count - ) -} diff --git a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes9_limit100_duration60000_load10_00_windows100/generated_test.go b/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes9_limit100_duration60000_load10_00_windows100/generated_test.go deleted file mode 100644 index 60d86395a6..0000000000 --- a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes9_limit100_duration60000_load10_00_windows100/generated_test.go +++ /dev/null @@ -1,28 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -package ratelimit_nodes9_limit100_duration60000_load10_00_windows100 - -import ( - "testing" - - "github.com/unkeyed/unkey/go/apps/api/integration" - run "github.com/unkeyed/unkey/go/apps/api/integration/multi_node_ratelimiting" - "github.com/unkeyed/unkey/go/pkg/testutil" -) - -func TestIntegration_RateLimit_Nodes9_Limit100_Duration60000_Load10_00_Windows100(t *testing.T) { - testutil.SkipUnlessIntegration(t) - - h := integration.New(t, integration.Config{ - NumNodes: 9, - }) - - run.RunRateLimitTest( - t, - h, - 100, // limit - 60000, // duration - 100, // window count - 10, // load factor - 9, // node count - ) -} diff --git a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes9_limit100_duration60000_load2_00_windows100/generated_test.go b/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes9_limit100_duration60000_load2_00_windows100/generated_test.go deleted file mode 100644 index 2d5e8cbc6f..0000000000 --- a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes9_limit100_duration60000_load2_00_windows100/generated_test.go +++ /dev/null @@ -1,28 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -package ratelimit_nodes9_limit100_duration60000_load2_00_windows100 - -import ( - "testing" - - "github.com/unkeyed/unkey/go/apps/api/integration" - run "github.com/unkeyed/unkey/go/apps/api/integration/multi_node_ratelimiting" - "github.com/unkeyed/unkey/go/pkg/testutil" -) - -func TestIntegration_RateLimit_Nodes9_Limit100_Duration60000_Load2_00_Windows100(t *testing.T) { - testutil.SkipUnlessIntegration(t) - - h := integration.New(t, integration.Config{ - NumNodes: 9, - }) - - run.RunRateLimitTest( - t, - h, - 100, // limit - 60000, // duration - 100, // window count - 2, // load factor - 9, // node count - ) -} diff --git a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes9_limit100_duration86400000_load0_90_windows10/generated_test.go b/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes9_limit100_duration86400000_load0_90_windows10/generated_test.go deleted file mode 100644 index a329d9234e..0000000000 --- a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes9_limit100_duration86400000_load0_90_windows10/generated_test.go +++ /dev/null @@ -1,28 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -package ratelimit_nodes9_limit100_duration86400000_load0_90_windows10 - -import ( - "testing" - - "github.com/unkeyed/unkey/go/apps/api/integration" - run "github.com/unkeyed/unkey/go/apps/api/integration/multi_node_ratelimiting" - "github.com/unkeyed/unkey/go/pkg/testutil" -) - -func TestIntegration_RateLimit_Nodes9_Limit100_Duration86400000_Load0_90_Windows10(t *testing.T) { - testutil.SkipUnlessIntegration(t) - - h := integration.New(t, integration.Config{ - NumNodes: 9, - }) - - run.RunRateLimitTest( - t, - h, - 100, // limit - 86400000, // duration - 10, // window count - 0.9, // load factor - 9, // node count - ) -} diff --git a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes9_limit100_duration86400000_load0_90_windows100/generated_test.go b/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes9_limit100_duration86400000_load0_90_windows100/generated_test.go deleted file mode 100644 index 458eddd776..0000000000 --- a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes9_limit100_duration86400000_load0_90_windows100/generated_test.go +++ /dev/null @@ -1,28 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -package ratelimit_nodes9_limit100_duration86400000_load0_90_windows100 - -import ( - "testing" - - "github.com/unkeyed/unkey/go/apps/api/integration" - run "github.com/unkeyed/unkey/go/apps/api/integration/multi_node_ratelimiting" - "github.com/unkeyed/unkey/go/pkg/testutil" -) - -func TestIntegration_RateLimit_Nodes9_Limit100_Duration86400000_Load0_90_Windows100(t *testing.T) { - testutil.SkipUnlessIntegration(t) - - h := integration.New(t, integration.Config{ - NumNodes: 9, - }) - - run.RunRateLimitTest( - t, - h, - 100, // limit - 86400000, // duration - 100, // window count - 0.9, // load factor - 9, // node count - ) -} diff --git a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes9_limit100_duration86400000_load10_00_windows10/generated_test.go b/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes9_limit100_duration86400000_load10_00_windows10/generated_test.go deleted file mode 100644 index fe5979b0d9..0000000000 --- a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes9_limit100_duration86400000_load10_00_windows10/generated_test.go +++ /dev/null @@ -1,28 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -package ratelimit_nodes9_limit100_duration86400000_load10_00_windows10 - -import ( - "testing" - - "github.com/unkeyed/unkey/go/apps/api/integration" - run "github.com/unkeyed/unkey/go/apps/api/integration/multi_node_ratelimiting" - "github.com/unkeyed/unkey/go/pkg/testutil" -) - -func TestIntegration_RateLimit_Nodes9_Limit100_Duration86400000_Load10_00_Windows10(t *testing.T) { - testutil.SkipUnlessIntegration(t) - - h := integration.New(t, integration.Config{ - NumNodes: 9, - }) - - run.RunRateLimitTest( - t, - h, - 100, // limit - 86400000, // duration - 10, // window count - 10, // load factor - 9, // node count - ) -} diff --git a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes9_limit100_duration86400000_load10_00_windows100/generated_test.go b/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes9_limit100_duration86400000_load10_00_windows100/generated_test.go deleted file mode 100644 index d2633b20ca..0000000000 --- a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes9_limit100_duration86400000_load10_00_windows100/generated_test.go +++ /dev/null @@ -1,28 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -package ratelimit_nodes9_limit100_duration86400000_load10_00_windows100 - -import ( - "testing" - - "github.com/unkeyed/unkey/go/apps/api/integration" - run "github.com/unkeyed/unkey/go/apps/api/integration/multi_node_ratelimiting" - "github.com/unkeyed/unkey/go/pkg/testutil" -) - -func TestIntegration_RateLimit_Nodes9_Limit100_Duration86400000_Load10_00_Windows100(t *testing.T) { - testutil.SkipUnlessIntegration(t) - - h := integration.New(t, integration.Config{ - NumNodes: 9, - }) - - run.RunRateLimitTest( - t, - h, - 100, // limit - 86400000, // duration - 100, // window count - 10, // load factor - 9, // node count - ) -} diff --git a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes9_limit100_duration86400000_load2_00_windows10/generated_test.go b/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes9_limit100_duration86400000_load2_00_windows10/generated_test.go deleted file mode 100644 index 3afeeef6ff..0000000000 --- a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes9_limit100_duration86400000_load2_00_windows10/generated_test.go +++ /dev/null @@ -1,28 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -package ratelimit_nodes9_limit100_duration86400000_load2_00_windows10 - -import ( - "testing" - - "github.com/unkeyed/unkey/go/apps/api/integration" - run "github.com/unkeyed/unkey/go/apps/api/integration/multi_node_ratelimiting" - "github.com/unkeyed/unkey/go/pkg/testutil" -) - -func TestIntegration_RateLimit_Nodes9_Limit100_Duration86400000_Load2_00_Windows10(t *testing.T) { - testutil.SkipUnlessIntegration(t) - - h := integration.New(t, integration.Config{ - NumNodes: 9, - }) - - run.RunRateLimitTest( - t, - h, - 100, // limit - 86400000, // duration - 10, // window count - 2, // load factor - 9, // node count - ) -} diff --git a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes9_limit100_duration86400000_load2_00_windows100/generated_test.go b/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes9_limit100_duration86400000_load2_00_windows100/generated_test.go deleted file mode 100644 index da00ccd0f2..0000000000 --- a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes9_limit100_duration86400000_load2_00_windows100/generated_test.go +++ /dev/null @@ -1,28 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -package ratelimit_nodes9_limit100_duration86400000_load2_00_windows100 - -import ( - "testing" - - "github.com/unkeyed/unkey/go/apps/api/integration" - run "github.com/unkeyed/unkey/go/apps/api/integration/multi_node_ratelimiting" - "github.com/unkeyed/unkey/go/pkg/testutil" -) - -func TestIntegration_RateLimit_Nodes9_Limit100_Duration86400000_Load2_00_Windows100(t *testing.T) { - testutil.SkipUnlessIntegration(t) - - h := integration.New(t, integration.Config{ - NumNodes: 9, - }) - - run.RunRateLimitTest( - t, - h, - 100, // limit - 86400000, // duration - 100, // window count - 2, // load factor - 9, // node count - ) -} diff --git a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes9_limit5_duration1000_load0_90_windows100/generated_test.go b/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes9_limit5_duration1000_load0_90_windows100/generated_test.go deleted file mode 100644 index cb3aa9735b..0000000000 --- a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes9_limit5_duration1000_load0_90_windows100/generated_test.go +++ /dev/null @@ -1,28 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -package ratelimit_nodes9_limit5_duration1000_load0_90_windows100 - -import ( - "testing" - - "github.com/unkeyed/unkey/go/apps/api/integration" - run "github.com/unkeyed/unkey/go/apps/api/integration/multi_node_ratelimiting" - "github.com/unkeyed/unkey/go/pkg/testutil" -) - -func TestIntegration_RateLimit_Nodes9_Limit5_Duration1000_Load0_90_Windows100(t *testing.T) { - testutil.SkipUnlessIntegration(t) - - h := integration.New(t, integration.Config{ - NumNodes: 9, - }) - - run.RunRateLimitTest( - t, - h, - 5, // limit - 1000, // duration - 100, // window count - 0.9, // load factor - 9, // node count - ) -} diff --git a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes9_limit5_duration1000_load10_00_windows100/generated_test.go b/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes9_limit5_duration1000_load10_00_windows100/generated_test.go deleted file mode 100644 index 741c1149fa..0000000000 --- a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes9_limit5_duration1000_load10_00_windows100/generated_test.go +++ /dev/null @@ -1,28 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -package ratelimit_nodes9_limit5_duration1000_load10_00_windows100 - -import ( - "testing" - - "github.com/unkeyed/unkey/go/apps/api/integration" - run "github.com/unkeyed/unkey/go/apps/api/integration/multi_node_ratelimiting" - "github.com/unkeyed/unkey/go/pkg/testutil" -) - -func TestIntegration_RateLimit_Nodes9_Limit5_Duration1000_Load10_00_Windows100(t *testing.T) { - testutil.SkipUnlessIntegration(t) - - h := integration.New(t, integration.Config{ - NumNodes: 9, - }) - - run.RunRateLimitTest( - t, - h, - 5, // limit - 1000, // duration - 100, // window count - 10, // load factor - 9, // node count - ) -} diff --git a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes9_limit5_duration1000_load2_00_windows100/generated_test.go b/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes9_limit5_duration1000_load2_00_windows100/generated_test.go deleted file mode 100644 index 2b3ec1df32..0000000000 --- a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes9_limit5_duration1000_load2_00_windows100/generated_test.go +++ /dev/null @@ -1,28 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -package ratelimit_nodes9_limit5_duration1000_load2_00_windows100 - -import ( - "testing" - - "github.com/unkeyed/unkey/go/apps/api/integration" - run "github.com/unkeyed/unkey/go/apps/api/integration/multi_node_ratelimiting" - "github.com/unkeyed/unkey/go/pkg/testutil" -) - -func TestIntegration_RateLimit_Nodes9_Limit5_Duration1000_Load2_00_Windows100(t *testing.T) { - testutil.SkipUnlessIntegration(t) - - h := integration.New(t, integration.Config{ - NumNodes: 9, - }) - - run.RunRateLimitTest( - t, - h, - 5, // limit - 1000, // duration - 100, // window count - 2, // load factor - 9, // node count - ) -} diff --git a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes9_limit5_duration3600000_load0_90_windows100/generated_test.go b/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes9_limit5_duration3600000_load0_90_windows100/generated_test.go deleted file mode 100644 index cd9c73c86a..0000000000 --- a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes9_limit5_duration3600000_load0_90_windows100/generated_test.go +++ /dev/null @@ -1,28 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -package ratelimit_nodes9_limit5_duration3600000_load0_90_windows100 - -import ( - "testing" - - "github.com/unkeyed/unkey/go/apps/api/integration" - run "github.com/unkeyed/unkey/go/apps/api/integration/multi_node_ratelimiting" - "github.com/unkeyed/unkey/go/pkg/testutil" -) - -func TestIntegration_RateLimit_Nodes9_Limit5_Duration3600000_Load0_90_Windows100(t *testing.T) { - testutil.SkipUnlessIntegration(t) - - h := integration.New(t, integration.Config{ - NumNodes: 9, - }) - - run.RunRateLimitTest( - t, - h, - 5, // limit - 3600000, // duration - 100, // window count - 0.9, // load factor - 9, // node count - ) -} diff --git a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes9_limit5_duration3600000_load10_00_windows100/generated_test.go b/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes9_limit5_duration3600000_load10_00_windows100/generated_test.go deleted file mode 100644 index 823241711e..0000000000 --- a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes9_limit5_duration3600000_load10_00_windows100/generated_test.go +++ /dev/null @@ -1,28 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -package ratelimit_nodes9_limit5_duration3600000_load10_00_windows100 - -import ( - "testing" - - "github.com/unkeyed/unkey/go/apps/api/integration" - run "github.com/unkeyed/unkey/go/apps/api/integration/multi_node_ratelimiting" - "github.com/unkeyed/unkey/go/pkg/testutil" -) - -func TestIntegration_RateLimit_Nodes9_Limit5_Duration3600000_Load10_00_Windows100(t *testing.T) { - testutil.SkipUnlessIntegration(t) - - h := integration.New(t, integration.Config{ - NumNodes: 9, - }) - - run.RunRateLimitTest( - t, - h, - 5, // limit - 3600000, // duration - 100, // window count - 10, // load factor - 9, // node count - ) -} diff --git a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes9_limit5_duration3600000_load2_00_windows100/generated_test.go b/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes9_limit5_duration3600000_load2_00_windows100/generated_test.go deleted file mode 100644 index 74f8a1cb24..0000000000 --- a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes9_limit5_duration3600000_load2_00_windows100/generated_test.go +++ /dev/null @@ -1,28 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -package ratelimit_nodes9_limit5_duration3600000_load2_00_windows100 - -import ( - "testing" - - "github.com/unkeyed/unkey/go/apps/api/integration" - run "github.com/unkeyed/unkey/go/apps/api/integration/multi_node_ratelimiting" - "github.com/unkeyed/unkey/go/pkg/testutil" -) - -func TestIntegration_RateLimit_Nodes9_Limit5_Duration3600000_Load2_00_Windows100(t *testing.T) { - testutil.SkipUnlessIntegration(t) - - h := integration.New(t, integration.Config{ - NumNodes: 9, - }) - - run.RunRateLimitTest( - t, - h, - 5, // limit - 3600000, // duration - 100, // window count - 2, // load factor - 9, // node count - ) -} diff --git a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes9_limit5_duration60000_load0_90_windows100/generated_test.go b/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes9_limit5_duration60000_load0_90_windows100/generated_test.go deleted file mode 100644 index 22f2de1738..0000000000 --- a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes9_limit5_duration60000_load0_90_windows100/generated_test.go +++ /dev/null @@ -1,28 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -package ratelimit_nodes9_limit5_duration60000_load0_90_windows100 - -import ( - "testing" - - "github.com/unkeyed/unkey/go/apps/api/integration" - run "github.com/unkeyed/unkey/go/apps/api/integration/multi_node_ratelimiting" - "github.com/unkeyed/unkey/go/pkg/testutil" -) - -func TestIntegration_RateLimit_Nodes9_Limit5_Duration60000_Load0_90_Windows100(t *testing.T) { - testutil.SkipUnlessIntegration(t) - - h := integration.New(t, integration.Config{ - NumNodes: 9, - }) - - run.RunRateLimitTest( - t, - h, - 5, // limit - 60000, // duration - 100, // window count - 0.9, // load factor - 9, // node count - ) -} diff --git a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes9_limit5_duration60000_load10_00_windows100/generated_test.go b/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes9_limit5_duration60000_load10_00_windows100/generated_test.go deleted file mode 100644 index 87ab12cabb..0000000000 --- a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes9_limit5_duration60000_load10_00_windows100/generated_test.go +++ /dev/null @@ -1,28 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -package ratelimit_nodes9_limit5_duration60000_load10_00_windows100 - -import ( - "testing" - - "github.com/unkeyed/unkey/go/apps/api/integration" - run "github.com/unkeyed/unkey/go/apps/api/integration/multi_node_ratelimiting" - "github.com/unkeyed/unkey/go/pkg/testutil" -) - -func TestIntegration_RateLimit_Nodes9_Limit5_Duration60000_Load10_00_Windows100(t *testing.T) { - testutil.SkipUnlessIntegration(t) - - h := integration.New(t, integration.Config{ - NumNodes: 9, - }) - - run.RunRateLimitTest( - t, - h, - 5, // limit - 60000, // duration - 100, // window count - 10, // load factor - 9, // node count - ) -} diff --git a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes9_limit5_duration60000_load2_00_windows100/generated_test.go b/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes9_limit5_duration60000_load2_00_windows100/generated_test.go deleted file mode 100644 index 49dfec26ef..0000000000 --- a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes9_limit5_duration60000_load2_00_windows100/generated_test.go +++ /dev/null @@ -1,28 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -package ratelimit_nodes9_limit5_duration60000_load2_00_windows100 - -import ( - "testing" - - "github.com/unkeyed/unkey/go/apps/api/integration" - run "github.com/unkeyed/unkey/go/apps/api/integration/multi_node_ratelimiting" - "github.com/unkeyed/unkey/go/pkg/testutil" -) - -func TestIntegration_RateLimit_Nodes9_Limit5_Duration60000_Load2_00_Windows100(t *testing.T) { - testutil.SkipUnlessIntegration(t) - - h := integration.New(t, integration.Config{ - NumNodes: 9, - }) - - run.RunRateLimitTest( - t, - h, - 5, // limit - 60000, // duration - 100, // window count - 2, // load factor - 9, // node count - ) -} diff --git a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes9_limit5_duration86400000_load0_90_windows10/generated_test.go b/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes9_limit5_duration86400000_load0_90_windows10/generated_test.go deleted file mode 100644 index ec484b1196..0000000000 --- a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes9_limit5_duration86400000_load0_90_windows10/generated_test.go +++ /dev/null @@ -1,28 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -package ratelimit_nodes9_limit5_duration86400000_load0_90_windows10 - -import ( - "testing" - - "github.com/unkeyed/unkey/go/apps/api/integration" - run "github.com/unkeyed/unkey/go/apps/api/integration/multi_node_ratelimiting" - "github.com/unkeyed/unkey/go/pkg/testutil" -) - -func TestIntegration_RateLimit_Nodes9_Limit5_Duration86400000_Load0_90_Windows10(t *testing.T) { - testutil.SkipUnlessIntegration(t) - - h := integration.New(t, integration.Config{ - NumNodes: 9, - }) - - run.RunRateLimitTest( - t, - h, - 5, // limit - 86400000, // duration - 10, // window count - 0.9, // load factor - 9, // node count - ) -} diff --git a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes9_limit5_duration86400000_load0_90_windows100/generated_test.go b/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes9_limit5_duration86400000_load0_90_windows100/generated_test.go deleted file mode 100644 index 7bbe561e3a..0000000000 --- a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes9_limit5_duration86400000_load0_90_windows100/generated_test.go +++ /dev/null @@ -1,28 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -package ratelimit_nodes9_limit5_duration86400000_load0_90_windows100 - -import ( - "testing" - - "github.com/unkeyed/unkey/go/apps/api/integration" - run "github.com/unkeyed/unkey/go/apps/api/integration/multi_node_ratelimiting" - "github.com/unkeyed/unkey/go/pkg/testutil" -) - -func TestIntegration_RateLimit_Nodes9_Limit5_Duration86400000_Load0_90_Windows100(t *testing.T) { - testutil.SkipUnlessIntegration(t) - - h := integration.New(t, integration.Config{ - NumNodes: 9, - }) - - run.RunRateLimitTest( - t, - h, - 5, // limit - 86400000, // duration - 100, // window count - 0.9, // load factor - 9, // node count - ) -} diff --git a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes9_limit5_duration86400000_load10_00_windows10/generated_test.go b/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes9_limit5_duration86400000_load10_00_windows10/generated_test.go deleted file mode 100644 index 77c3ffa021..0000000000 --- a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes9_limit5_duration86400000_load10_00_windows10/generated_test.go +++ /dev/null @@ -1,28 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -package ratelimit_nodes9_limit5_duration86400000_load10_00_windows10 - -import ( - "testing" - - "github.com/unkeyed/unkey/go/apps/api/integration" - run "github.com/unkeyed/unkey/go/apps/api/integration/multi_node_ratelimiting" - "github.com/unkeyed/unkey/go/pkg/testutil" -) - -func TestIntegration_RateLimit_Nodes9_Limit5_Duration86400000_Load10_00_Windows10(t *testing.T) { - testutil.SkipUnlessIntegration(t) - - h := integration.New(t, integration.Config{ - NumNodes: 9, - }) - - run.RunRateLimitTest( - t, - h, - 5, // limit - 86400000, // duration - 10, // window count - 10, // load factor - 9, // node count - ) -} diff --git a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes9_limit5_duration86400000_load10_00_windows100/generated_test.go b/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes9_limit5_duration86400000_load10_00_windows100/generated_test.go deleted file mode 100644 index 56ac2330fb..0000000000 --- a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes9_limit5_duration86400000_load10_00_windows100/generated_test.go +++ /dev/null @@ -1,28 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -package ratelimit_nodes9_limit5_duration86400000_load10_00_windows100 - -import ( - "testing" - - "github.com/unkeyed/unkey/go/apps/api/integration" - run "github.com/unkeyed/unkey/go/apps/api/integration/multi_node_ratelimiting" - "github.com/unkeyed/unkey/go/pkg/testutil" -) - -func TestIntegration_RateLimit_Nodes9_Limit5_Duration86400000_Load10_00_Windows100(t *testing.T) { - testutil.SkipUnlessIntegration(t) - - h := integration.New(t, integration.Config{ - NumNodes: 9, - }) - - run.RunRateLimitTest( - t, - h, - 5, // limit - 86400000, // duration - 100, // window count - 10, // load factor - 9, // node count - ) -} diff --git a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes9_limit5_duration86400000_load2_00_windows10/generated_test.go b/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes9_limit5_duration86400000_load2_00_windows10/generated_test.go deleted file mode 100644 index 26ef479e60..0000000000 --- a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes9_limit5_duration86400000_load2_00_windows10/generated_test.go +++ /dev/null @@ -1,28 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -package ratelimit_nodes9_limit5_duration86400000_load2_00_windows10 - -import ( - "testing" - - "github.com/unkeyed/unkey/go/apps/api/integration" - run "github.com/unkeyed/unkey/go/apps/api/integration/multi_node_ratelimiting" - "github.com/unkeyed/unkey/go/pkg/testutil" -) - -func TestIntegration_RateLimit_Nodes9_Limit5_Duration86400000_Load2_00_Windows10(t *testing.T) { - testutil.SkipUnlessIntegration(t) - - h := integration.New(t, integration.Config{ - NumNodes: 9, - }) - - run.RunRateLimitTest( - t, - h, - 5, // limit - 86400000, // duration - 10, // window count - 2, // load factor - 9, // node count - ) -} diff --git a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes9_limit5_duration86400000_load2_00_windows100/generated_test.go b/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes9_limit5_duration86400000_load2_00_windows100/generated_test.go deleted file mode 100644 index 5c7dd5b526..0000000000 --- a/go/apps/api/integration/multi_node_ratelimiting/generated/ratelimit_nodes9_limit5_duration86400000_load2_00_windows100/generated_test.go +++ /dev/null @@ -1,28 +0,0 @@ -// Code generated by go generate; DO NOT EDIT. -package ratelimit_nodes9_limit5_duration86400000_load2_00_windows100 - -import ( - "testing" - - "github.com/unkeyed/unkey/go/apps/api/integration" - run "github.com/unkeyed/unkey/go/apps/api/integration/multi_node_ratelimiting" - "github.com/unkeyed/unkey/go/pkg/testutil" -) - -func TestIntegration_RateLimit_Nodes9_Limit5_Duration86400000_Load2_00_Windows100(t *testing.T) { - testutil.SkipUnlessIntegration(t) - - h := integration.New(t, integration.Config{ - NumNodes: 9, - }) - - run.RunRateLimitTest( - t, - h, - 5, // limit - 86400000, // duration - 100, // window count - 2, // load factor - 9, // node count - ) -} diff --git a/go/apps/api/openapi/gen.go b/go/apps/api/openapi/gen.go index d9d5307ada..529e0b0ee6 100644 --- a/go/apps/api/openapi/gen.go +++ b/go/apps/api/openapi/gen.go @@ -57,12 +57,24 @@ type BaseError struct { Type string `json:"type"` } +// ConflictErrorResponse defines model for ConflictErrorResponse. +type ConflictErrorResponse struct { + Error BaseError `json:"error"` + Meta Meta `json:"meta"` +} + // ForbiddenErrorResponse defines model for ForbiddenErrorResponse. type ForbiddenErrorResponse struct { Error BaseError `json:"error"` Meta Meta `json:"meta"` } +// IdentitiesCreateIdentityResponseData defines model for IdentitiesCreateIdentityResponseData. +type IdentitiesCreateIdentityResponseData struct { + // IdentityId The id of the identity. Used internally, you do not need to store this. + IdentityId string `json:"identityId"` +} + // InternalServerErrorResponse defines model for InternalServerErrorResponse. type InternalServerErrorResponse struct { Error BaseError `json:"error"` @@ -173,12 +185,42 @@ type UnauthorizedErrorResponse struct { Meta Meta `json:"meta"` } +// V2IdentitiesCreateIdentityRequestBody defines model for V2IdentitiesCreateIdentityRequestBody. +type V2IdentitiesCreateIdentityRequestBody struct { + // ExternalId The id of this identity in your system. + ExternalId string `json:"externalId"` + + // Meta Attach metadata to this identity that you need to have access to when verifying a key. + Meta *map[string]interface{} `json:"meta,omitempty"` + + // Ratelimits Attach ratelimits to this identity. + Ratelimits *[]V2Ratelimit `json:"ratelimits,omitempty"` +} + +// V2IdentitiesCreateIdentityResponseBody defines model for V2IdentitiesCreateIdentityResponseBody. +type V2IdentitiesCreateIdentityResponseBody struct { + Data IdentitiesCreateIdentityResponseData `json:"data"` + Meta Meta `json:"meta"` +} + // V2LivenessResponseBody defines model for V2LivenessResponseBody. type V2LivenessResponseBody struct { Data LivenessResponseData `json:"data"` Meta Meta `json:"meta"` } +// V2Ratelimit defines model for V2Ratelimit. +type V2Ratelimit struct { + // Duration The duration for each ratelimit window in milliseconds. + Duration int64 `json:"duration"` + + // Limit How many requests may pass within a given window before requests are rejected. + Limit int64 `json:"limit"` + + // Name The name of this limit. You will need to use this again when verifying a key. + Name string `json:"name"` +} + // V2RatelimitDeleteOverrideRequestBody Deletes an existing override. type V2RatelimitDeleteOverrideRequestBody struct { // Identifier Identifier of the override to delete @@ -297,6 +339,9 @@ type ValidationError struct { Message string `json:"message"` } +// V2IdentitiesCreateIdentityJSONRequestBody defines body for V2IdentitiesCreateIdentity for application/json ContentType. +type V2IdentitiesCreateIdentityJSONRequestBody = V2IdentitiesCreateIdentityRequestBody + // RatelimitDeleteOverrideJSONRequestBody defines body for RatelimitDeleteOverride for application/json ContentType. type RatelimitDeleteOverrideJSONRequestBody = V2RatelimitDeleteOverrideRequestBody diff --git a/go/apps/api/openapi/openapi.json b/go/apps/api/openapi/openapi.json index ca9ce91f97..51b3cff34b 100644 --- a/go/apps/api/openapi/openapi.json +++ b/go/apps/api/openapi/openapi.json @@ -17,7 +17,9 @@ "maxElapsedTime": 10000, "exponent": 1.5 }, - "statusCodes": ["5XX"], + "statusCodes": [ + "5XX" + ], "retryConnectionErrors": true }, "components": { @@ -32,7 +34,9 @@ "schemas": { "Meta": { "type": "object", - "required": ["requestId"], + "required": [ + "requestId" + ], "properties": { "requestId": { "description": "A unique id for this request. Please always provide this to support.", @@ -89,7 +93,12 @@ } }, "type": "object", - "required": ["detail", "status", "title", "type"] + "required": [ + "detail", + "status", + "title", + "type" + ] }, "ValidationError": { "additionalProperties": false, @@ -108,7 +117,10 @@ } }, "type": "object", - "required": ["message", "location"] + "required": [ + "message", + "location" + ] }, "BadRequestErrorDetails": { "allOf": [ @@ -126,13 +138,33 @@ "type": "array" } }, - "required": ["errors"] + "required": [ + "errors" + ] } ] }, "NotFoundErrorResponse": { "type": "object", - "required": ["meta", "error"], + "required": [ + "meta", + "error" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/Meta" + }, + "error": { + "$ref": "#/components/schemas/BaseError" + } + } + }, + "ConflictErrorResponse": { + "type": "object", + "required": [ + "meta", + "error" + ], "properties": { "meta": { "$ref": "#/components/schemas/Meta" @@ -144,7 +176,10 @@ }, "UnauthorizedErrorResponse": { "type": "object", - "required": ["meta", "error"], + "required": [ + "meta", + "error" + ], "properties": { "meta": { "$ref": "#/components/schemas/Meta" @@ -156,7 +191,10 @@ }, "ForbiddenErrorResponse": { "type": "object", - "required": ["meta", "error"], + "required": [ + "meta", + "error" + ], "properties": { "meta": { "$ref": "#/components/schemas/Meta" @@ -168,7 +206,10 @@ }, "PreconditionFailedErrorResponse": { "type": "object", - "required": ["meta", "error"], + "required": [ + "meta", + "error" + ], "properties": { "meta": { "$ref": "#/components/schemas/Meta" @@ -180,7 +221,10 @@ }, "BadRequestErrorResponse": { "type": "object", - "required": ["meta", "error"], + "required": [ + "meta", + "error" + ], "properties": { "meta": { "$ref": "#/components/schemas/Meta" @@ -192,7 +236,10 @@ }, "InternalServerErrorResponse": { "type": "object", - "required": ["meta", "error"], + "required": [ + "meta", + "error" + ], "properties": { "meta": { "$ref": "#/components/schemas/Meta" @@ -211,11 +258,16 @@ "type": "string" } }, - "required": ["message"] + "required": [ + "message" + ] }, "V2LivenessResponseBody": { "type": "object", - "required": ["meta", "data"], + "required": [ + "meta", + "data" + ], "properties": { "meta": { "$ref": "#/components/schemas/Meta" @@ -258,7 +310,11 @@ "minimum": 0 } }, - "required": ["identifier", "limit", "duration"], + "required": [ + "identifier", + "limit", + "duration" + ], "type": "object" }, "RatelimitSetOverrideResponseData": { @@ -269,11 +325,16 @@ "type": "string" } }, - "required": ["overrideId"] + "required": [ + "overrideId" + ] }, "V2RatelimitSetOverrideResponseBody": { "type": "object", - "required": ["meta", "data"], + "required": [ + "meta", + "data" + ], "properties": { "meta": { "$ref": "#/components/schemas/Meta" @@ -306,7 +367,9 @@ "maxLength": 255 } }, - "required": ["identifier"], + "required": [ + "identifier" + ], "type": "object" }, "RatelimitGetOverrideResponseData": { @@ -343,11 +406,20 @@ "minimum": 0 } }, - "required": ["namespaceId", "overrideId", "duration", "identifier", "limit"] + "required": [ + "namespaceId", + "overrideId", + "duration", + "identifier", + "limit" + ] }, "V2RatelimitGetOverrideResponseBody": { "type": "object", - "required": ["meta", "data"], + "required": [ + "meta", + "data" + ], "properties": { "meta": { "$ref": "#/components/schemas/Meta" @@ -406,7 +478,12 @@ "type": "integer" } }, - "required": ["overrideId", "identifier", "limit", "duration"] + "required": [ + "overrideId", + "identifier", + "limit", + "duration" + ] }, "RatelimitListOverridesResponseData": { "type": "array", @@ -416,7 +493,10 @@ }, "V2RatelimitListOverridesResponseBody": { "type": "object", - "required": ["meta", "data"], + "required": [ + "meta", + "data" + ], "properties": { "meta": { "$ref": "#/components/schemas/Meta" @@ -464,7 +544,12 @@ "minimum": 1 } }, - "required": ["namespace", "identifier", "limit", "duration"], + "required": [ + "namespace", + "identifier", + "limit", + "duration" + ], "type": "object" }, "RatelimitLimitResponseData": { @@ -494,11 +579,19 @@ "type": "string" } }, - "required": ["limit", "remaining", "reset", "success"] + "required": [ + "limit", + "remaining", + "reset", + "success" + ] }, "V2RatelimitLimitResponseBody": { "type": "object", - "required": ["meta", "data"], + "required": [ + "meta", + "data" + ], "properties": { "meta": { "$ref": "#/components/schemas/Meta" @@ -531,7 +624,9 @@ "maxLength": 255 } }, - "required": ["identifier"], + "required": [ + "identifier" + ], "type": "object" }, "RatelimitDeleteOverrideResponseData": { @@ -540,7 +635,10 @@ }, "V2RatelimitDeleteOverrideResponseBody": { "type": "object", - "required": ["meta", "data"], + "required": [ + "meta", + "data" + ], "properties": { "meta": { "$ref": "#/components/schemas/Meta" @@ -549,13 +647,96 @@ "$ref": "#/components/schemas/RatelimitDeleteOverrideResponseData" } } + }, + "V2IdentitiesCreateIdentityRequestBody": { + "type": "object", + "required": [ + "externalId" + ], + "properties": { + "externalId": { + "type": "string", + "minLength": 3, + "description": "The id of this identity in your system.\n\nThis usually comes from your authentication provider and could be a userId, organisationId or even an email.\nIt does not matter what you use, as long as it uniquely identifies something in your application.\n\n`externalId`s are unique across your workspace and therefore a `CONFLICT` error is returned when you try to create duplicates.\n", + "example": "user_123" + }, + "meta": { + "type": "object", + "additionalProperties": { + "nullable": true + }, + "description": "Attach metadata to this identity that you need to have access to when verifying a key.\n\nThis will be returned as part of the `verifyKey` response.\n" + }, + "ratelimits": { + "type": "array", + "items": { + "$ref": "#/components/schemas/V2Ratelimit" + }, + "description": "Attach ratelimits to this identity.\n\nWhen verifying keys, you can specify which limits you want to use and all keys attached to this identity, will share the limits." + } + } + }, + "V2Ratelimit": { + "type": "object", + "required": [ + "name", + "limit", + "duration" + ], + "properties": { + "name": { + "description": "The name of this limit. You will need to use this again when verifying a key.", + "type": "string", + "minLength": 3, + "maxLength": 128 + }, + "limit": { + "description": "How many requests may pass within a given window before requests are rejected.", + "type": "integer", + "format": "int64" + }, + "duration": { + "description": "The duration for each ratelimit window in milliseconds.", + "type": "integer", + "format": "int64" + } + } + }, + "IdentitiesCreateIdentityResponseData": { + "type": "object", + "properties": { + "identityId": { + "description": "The id of the identity. Used internally, you do not need to store this.", + "type": "string" + } + }, + "required": [ + "identityId" + ] + }, + "V2IdentitiesCreateIdentityResponseBody": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/Meta" + }, + "data": { + "$ref": "#/components/schemas/IdentitiesCreateIdentityResponseData" + } + } } } }, "paths": { "/v2/ratelimit.limit": { "post": { - "tags": ["ratelimit"], + "tags": [ + "ratelimit" + ], "operationId": "v1.ratelimit.limit", "summary": "TODO", "security": [ @@ -639,7 +820,9 @@ }, "/v2/ratelimit.setOverride": { "post": { - "tags": ["ratelimit"], + "tags": [ + "ratelimit" + ], "operationId": "ratelimit.setOverride", "security": [ { @@ -722,7 +905,9 @@ }, "/v2/ratelimit.getOverride": { "post": { - "tags": ["ratelimit"], + "tags": [ + "ratelimit" + ], "operationId": "ratelimit.getOverride", "security": [ { @@ -805,7 +990,9 @@ }, "/v2/ratelimit.listOverrides": { "post": { - "tags": ["ratelimit"], + "tags": [ + "ratelimit" + ], "operationId": "ratelimit.listOverrides", "summary": "List rate limit overrides", "security": [ @@ -889,8 +1076,15 @@ }, "/v2/ratelimit.deleteOverride": { "post": { - "tags": ["ratelimit"], + "tags": [ + "ratelimit" + ], "operationId": "ratelimit.deleteOverride", + "security": [ + { + "rootKey": [] + } + ], "requestBody": { "content": { "application/json": { @@ -965,9 +1159,96 @@ } } }, + "/v2/identities.createIdentity": { + "post": { + "tags": [ + "identities" + ], + "operationId": "v2.identities.createIdentity", + "security": [ + { + "rootKey": [] + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/V2IdentitiesCreateIdentityRequestBody" + } + } + }, + "required": true + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/V2IdentitiesCreateIdentityResponseBody" + } + } + }, + "description": "OK" + }, + "400": { + "description": "Bad request", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/BadRequestErrorResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/UnauthorizedErrorResponse" + } + } + } + }, + "403": { + "description": "Forbidden", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/ForbiddenErrorResponse" + } + } + } + }, + "409": { + "description": "This response is sent when a request conflicts with the current state of the server.", + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/ConflictErrorResponse" + } + } + } + }, + "500": { + "content": { + "application/problem+json": { + "schema": { + "$ref": "#/components/schemas/InternalServerErrorResponse" + } + } + }, + "description": "Error" + } + } + } + }, "/v2/liveness": { "get": { - "tags": ["liveness"], + "tags": [ + "liveness" + ], "operationId": "liveness", "description": "This endpoint checks if the service is alive.", "responses": { diff --git a/go/apps/api/routes/register.go b/go/apps/api/routes/register.go index 8d78c51ce2..cec3fe1298 100644 --- a/go/apps/api/routes/register.go +++ b/go/apps/api/routes/register.go @@ -2,10 +2,14 @@ package routes import ( v2Liveness "github.com/unkeyed/unkey/go/apps/api/routes/v2_liveness" + v2RatelimitDeleteOverride "github.com/unkeyed/unkey/go/apps/api/routes/v2_ratelimit_delete_override" v2RatelimitGetOverride "github.com/unkeyed/unkey/go/apps/api/routes/v2_ratelimit_get_override" v2RatelimitLimit "github.com/unkeyed/unkey/go/apps/api/routes/v2_ratelimit_limit" v2RatelimitSetOverride "github.com/unkeyed/unkey/go/apps/api/routes/v2_ratelimit_set_override" + + v2IdentitiesCreateIdentity "github.com/unkeyed/unkey/go/apps/api/routes/v2_identities_create_identity" + zen "github.com/unkeyed/unkey/go/pkg/zen" ) @@ -27,15 +31,7 @@ func Register(srv *zen.Server, svc *Services) { withValidation, } - srv.RegisterRoute( - []zen.Middleware{ - withTracing, - withMetrics, - withLogging, - withErrorHandling, - withValidation, - }, - v2Liveness.New()) + srv.RegisterRoute(defaultMiddlewares, v2Liveness.New()) // --------------------------------------------------------------------------- // v2/ratelimit @@ -55,6 +51,7 @@ func Register(srv *zen.Server, svc *Services) { TestMode: srv.Flags().TestMode, }), ) + // v2/ratelimit.setOverride srv.RegisterRoute( defaultMiddlewares, @@ -63,9 +60,11 @@ func Register(srv *zen.Server, svc *Services) { DB: svc.Database, Keys: svc.Keys, Permissions: svc.Permissions, + Auditlogs: svc.Auditlogs, }), ) + // v2/ratelimit.getOverride srv.RegisterRoute( defaultMiddlewares, v2RatelimitGetOverride.New(v2RatelimitGetOverride.Services{ @@ -76,6 +75,7 @@ func Register(srv *zen.Server, svc *Services) { }), ) + // v2/ratelimit.deleteOverride srv.RegisterRoute( defaultMiddlewares, v2RatelimitDeleteOverride.New(v2RatelimitDeleteOverride.Services{ @@ -83,6 +83,22 @@ func Register(srv *zen.Server, svc *Services) { DB: svc.Database, Keys: svc.Keys, Permissions: svc.Permissions, + Auditlogs: svc.Auditlogs, + }), + ) + + // --------------------------------------------------------------------------- + // v2/identities + + // v2/identities.createIdentity + srv.RegisterRoute( + defaultMiddlewares, + v2IdentitiesCreateIdentity.New(v2IdentitiesCreateIdentity.Services{ + Logger: svc.Logger, + DB: svc.Database, + Keys: svc.Keys, + Permissions: svc.Permissions, + Auditlogs: svc.Auditlogs, }), ) diff --git a/go/apps/api/routes/services.go b/go/apps/api/routes/services.go index 1c0940e112..6d795dc04d 100644 --- a/go/apps/api/routes/services.go +++ b/go/apps/api/routes/services.go @@ -1,6 +1,7 @@ package routes import ( + "github.com/unkeyed/unkey/go/internal/services/auditlogs" "github.com/unkeyed/unkey/go/internal/services/caches" "github.com/unkeyed/unkey/go/internal/services/keys" "github.com/unkeyed/unkey/go/internal/services/permissions" @@ -24,5 +25,6 @@ type Services struct { Permissions permissions.PermissionService Validator *validation.Validator Ratelimit ratelimit.Service + Auditlogs auditlogs.AuditLogService Caches caches.Caches } diff --git a/go/apps/api/routes/v2_identities_create_identity/200_test.go b/go/apps/api/routes/v2_identities_create_identity/200_test.go new file mode 100644 index 0000000000..c07aa3e26d --- /dev/null +++ b/go/apps/api/routes/v2_identities_create_identity/200_test.go @@ -0,0 +1,181 @@ +package handler_test + +import ( + "context" + "database/sql" + "encoding/json" + "fmt" + "net/http" + "slices" + "testing" + "time" + + "github.com/stretchr/testify/require" + "github.com/unkeyed/unkey/go/apps/api/openapi" + handler "github.com/unkeyed/unkey/go/apps/api/routes/v2_identities_create_identity" + "github.com/unkeyed/unkey/go/pkg/db" + "github.com/unkeyed/unkey/go/pkg/testutil" + "github.com/unkeyed/unkey/go/pkg/uid" +) + +func TestCreateIdentitySuccessfully(t *testing.T) { + ctx := context.Background() + h := testutil.NewHarness(t) + + route := handler.New(handler.Services{ + DB: h.DB, + Keys: h.Keys, + Logger: h.Logger, + Permissions: h.Permissions, + Auditlogs: h.Auditlogs, + }) + + h.Register(route) + + rootKey := h.CreateRootKey(h.Resources().UserWorkspace.ID, "identity.*.create_identity") + headers := http.Header{ + "Content-Type": {"application/json"}, + "Authorization": {fmt.Sprintf("Bearer %s", rootKey)}, + } + + // Create a identity via DB + t.Run("insert identity via DB", func(t *testing.T) { + identityID := uid.New(uid.IdentityPrefix) + externalTestID := uid.New("test_external_id") + err := db.Query.InsertIdentity(ctx, h.DB.RW(), db.InsertIdentityParams{ + ID: identityID, + ExternalID: externalTestID, + WorkspaceID: h.Resources().UserWorkspace.ID, + Meta: nil, + CreatedAt: time.Now().UnixMilli(), + Environment: "default", + }) + require.NoError(t, err) + + identity, err := db.Query.FindIdentityByID(ctx, h.DB.RO(), identityID) + require.NoError(t, err) + require.Equal(t, identity.ExternalID, externalTestID) + }) + + // Create a identity with ratelimits via DB + t.Run("insert identity via DB and add ratelimits", func(t *testing.T) { + identityID := uid.New(uid.IdentityPrefix) + externalTestID := uid.New("test_external_id") + err := db.Query.InsertIdentity(ctx, h.DB.RW(), db.InsertIdentityParams{ + ID: identityID, + ExternalID: externalTestID, + WorkspaceID: h.Resources().UserWorkspace.ID, + Meta: nil, + CreatedAt: time.Now().UnixMilli(), + Environment: "default", + }) + require.NoError(t, err) + + identity, err := db.Query.FindIdentityByID(ctx, h.DB.RO(), identityID) + require.NoError(t, err) + require.Equal(t, identity.ExternalID, externalTestID) + + err = db.Query.InsertIdentityRatelimit(ctx, h.DB.RW(), db.InsertIdentityRatelimitParams{ + ID: uid.New(uid.RatelimitPrefix), + WorkspaceID: h.Resources().UserWorkspace.ID, + IdentityID: sql.NullString{String: identityID, Valid: true}, + Name: "Requests", + Limit: 15, + Duration: (time.Minute * 15).Milliseconds(), + CreatedAt: time.Now().UnixMilli(), + }) + require.NoError(t, err) + + rateLimits, err := db.Query.FindRatelimitsByIdentityID(ctx, h.DB.RO(), sql.NullString{String: identityID, Valid: true}) + require.NoError(t, err) + require.Len(t, rateLimits, 1) + require.Equal(t, rateLimits[0].Name, "Requests") + require.Equal(t, rateLimits[0].Limit, int32(15)) + require.Equal(t, rateLimits[0].Duration, (time.Minute * 15).Milliseconds()) + }) + + // Test creating a identity with no other information + t.Run("create identity", func(t *testing.T) { + externalTestID := uid.New("test_external_id") + req := handler.Request{ExternalId: externalTestID} + res := testutil.CallRoute[handler.Request, handler.Response](h, route, headers, req) + + require.Equal(t, 200, res.Status, "expected 200, received: %#v", res) + require.NotNil(t, res.Body) + require.NotEmpty(t, res.Body.Data.IdentityId) + + identity, err := db.Query.FindIdentityByID(ctx, h.DB.RO(), res.Body.Data.IdentityId) + require.NoError(t, err) + require.Equal(t, identity.ExternalID, req.ExternalId) + }) + + // Test creating a identity with metadata + t.Run("create identity with metadata", func(t *testing.T) { + externalTestID := uid.New("test_external_id") + + meta := &map[string]interface{}{"key": "example"} + req := handler.Request{ + ExternalId: externalTestID, + Meta: meta, + } + + res := testutil.CallRoute[handler.Request, handler.Response](h, route, headers, req) + require.Equal(t, 200, res.Status, "expected 200, received: %#v", res) + require.NotNil(t, res.Body) + require.NotEmpty(t, res.Body.Data.IdentityId) + + identity, err := db.Query.FindIdentityByID(ctx, h.DB.RO(), res.Body.Data.IdentityId) + require.NoError(t, err) + require.Equal(t, identity.ExternalID, req.ExternalId) + + var dbMeta map[string]interface{} + err = json.Unmarshal(identity.Meta, &dbMeta) + require.NoError(t, err) + require.Equal(t, *meta, dbMeta) + }) + + // Test creating a identity with ratelimits + t.Run("create identity with ratelimits", func(t *testing.T) { + externalTestID := uid.New("test_external_id") + + identityRateLimits := []openapi.V2Ratelimit{ + { + Duration: time.Minute.Milliseconds(), + Limit: 100, + Name: "test", + }, + { + Duration: time.Minute.Milliseconds(), + Limit: 200, + Name: "test2", + }, + } + + req := handler.Request{ + ExternalId: externalTestID, + Ratelimits: &identityRateLimits, + } + + res := testutil.CallRoute[handler.Request, handler.Response](h, route, headers, req) + require.Equal(t, 200, res.Status, "expected 200, received: %#v", res) + require.NotNil(t, res.Body) + require.NotEmpty(t, res.Body.Data.IdentityId) + + identity, err := db.Query.FindIdentityByID(ctx, h.DB.RO(), res.Body.Data.IdentityId) + require.NoError(t, err) + require.Equal(t, identity.ExternalID, req.ExternalId) + + rateLimits, err := db.Query.FindRatelimitsByIdentityID(ctx, h.DB.RO(), sql.NullString{String: res.Body.Data.IdentityId, Valid: true}) + require.NoError(t, err) + require.Len(t, rateLimits, len(identityRateLimits)) + + for _, ratelimit := range identityRateLimits { + idx := slices.IndexFunc(rateLimits, func(c db.FindRatelimitsByIdentityIDRow) bool { return c.Name == ratelimit.Name }) + + require.True(t, idx >= 0 && idx < len(rateLimits), "Rate limit with name %s not found in the database", ratelimit.Name) + require.Equal(t, rateLimits[idx].Duration, ratelimit.Duration) + require.Equal(t, int64(rateLimits[idx].Limit), ratelimit.Limit) + require.Equal(t, rateLimits[idx].Name, ratelimit.Name) + } + }) +} diff --git a/go/apps/api/routes/v2_identities_create_identity/400_test.go b/go/apps/api/routes/v2_identities_create_identity/400_test.go new file mode 100644 index 0000000000..462e60f1f7 --- /dev/null +++ b/go/apps/api/routes/v2_identities_create_identity/400_test.go @@ -0,0 +1,151 @@ +//nolint:exhaustruct +package handler_test + +import ( + "encoding/json" + "fmt" + "net/http" + "testing" + + "github.com/stretchr/testify/require" + "github.com/unkeyed/unkey/go/apps/api/openapi" + handler "github.com/unkeyed/unkey/go/apps/api/routes/v2_identities_create_identity" + "github.com/unkeyed/unkey/go/pkg/testutil" + "github.com/unkeyed/unkey/go/pkg/uid" +) + +func TestBadRequests(t *testing.T) { + h := testutil.NewHarness(t) + + rootKey := h.CreateRootKey(h.Resources().UserWorkspace.ID, "identity.*.create_identity") + route := handler.New(handler.Services{ + DB: h.DB, + Keys: h.Keys, + Logger: h.Logger, + Permissions: h.Permissions, + Auditlogs: h.Auditlogs, + }) + + h.Register(route) + + headers := http.Header{ + "Content-Type": {"application/json"}, + "Authorization": {fmt.Sprintf("Bearer %s", rootKey)}, + } + + t.Run("missing external id", func(t *testing.T) { + req := openapi.V2IdentitiesCreateIdentityRequestBody{} + res := testutil.CallRoute[handler.Request, openapi.BadRequestErrorResponse](h, route, headers, req) + require.Equal(t, 400, res.Status, "expected 400, sent: %+v, received: %s", req, res.RawBody) + require.NotNil(t, res.Body) + + require.Equal(t, "https://unkey.com/docs/errors/bad_request", res.Body.Error.Type) + require.Equal(t, "POST request body for '/v2/identities.createIdentity' failed to validate schema", res.Body.Error.Detail) + require.Equal(t, http.StatusBadRequest, res.Body.Error.Status) + require.Equal(t, "Bad Request", res.Body.Error.Title) + require.NotEmpty(t, res.Body.Meta.RequestId) + require.Greater(t, len(res.Body.Error.Errors), 0) + require.Nil(t, res.Body.Error.Instance) + }) + + t.Run("empty external id", func(t *testing.T) { + req := openapi.V2IdentitiesCreateIdentityRequestBody{ExternalId: ""} + res := testutil.CallRoute[handler.Request, openapi.BadRequestErrorResponse](h, route, headers, req) + require.Equal(t, 400, res.Status, "expected 400, sent: %+v, received: %s", req, res.RawBody) + require.NotNil(t, res.Body) + + require.Equal(t, "https://unkey.com/docs/errors/bad_request", res.Body.Error.Type) + require.Equal(t, "POST request body for '/v2/identities.createIdentity' failed to validate schema", res.Body.Error.Detail) + require.Equal(t, http.StatusBadRequest, res.Body.Error.Status) + require.Equal(t, "Bad Request", res.Body.Error.Title) + require.NotEmpty(t, res.Body.Meta.RequestId) + require.Greater(t, len(res.Body.Error.Errors), 0) + require.Nil(t, res.Body.Error.Instance) + }) + + t.Run("external id too short", func(t *testing.T) { + req := openapi.V2IdentitiesCreateIdentityRequestBody{ExternalId: "12"} + res := testutil.CallRoute[handler.Request, openapi.BadRequestErrorResponse](h, route, headers, req) + require.Equal(t, 400, res.Status, "expected 400, sent: %+v, received: %s", req, res.RawBody) + require.NotNil(t, res.Body) + + require.Equal(t, "https://unkey.com/docs/errors/bad_request", res.Body.Error.Type) + require.Equal(t, "POST request body for '/v2/identities.createIdentity' failed to validate schema", res.Body.Error.Detail) + require.Equal(t, http.StatusBadRequest, res.Body.Error.Status) + require.Equal(t, "Bad Request", res.Body.Error.Title) + require.NotEmpty(t, res.Body.Meta.RequestId) + require.Greater(t, len(res.Body.Error.Errors), 0) + require.Nil(t, res.Body.Error.Instance) + }) + + t.Run("metadata exceeds maximum size limit", func(t *testing.T) { + metaData := make(map[string]interface{}) + entriesNeeded := (handler.MAX_META_LENGTH_MB * 1024 * 1024) / 15 + for i := 0; i < entriesNeeded+1000; i++ { + var data interface{} = fmt.Sprintf("some_%d", i) + metaData[fmt.Sprintf("key_%d", i)] = &data + } + + rawMeta, _ := json.Marshal(metaData) + + req := openapi.V2IdentitiesCreateIdentityRequestBody{ExternalId: uid.New("test"), Meta: &metaData} + res := testutil.CallRoute[handler.Request, openapi.BadRequestErrorResponse](h, route, headers, req) + require.Equal(t, 400, res.Status, "expected 400, sent: %+v, received: %s", req, res.RawBody) + require.NotNil(t, res.Body) + + require.Equal(t, "https://unkey.com/docs/errors/bad_request", res.Body.Error.Type) + require.Equal(t, fmt.Sprintf("Metadata is too large, it must be less than %dMB, got: %.2f", handler.MAX_META_LENGTH_MB, float64(len(rawMeta))/1024/1024), res.Body.Error.Detail) + require.Equal(t, http.StatusBadRequest, res.Body.Error.Status) + require.Equal(t, "Bad Request", res.Body.Error.Title) + require.NotEmpty(t, res.Body.Meta.RequestId) + require.Nil(t, res.Body.Error.Instance) + }) + + t.Run("invalid ratelimit", func(t *testing.T) { + + req := openapi.V2IdentitiesCreateIdentityRequestBody{ + ExternalId: uid.New("test"), + Ratelimits: &[]openapi.V2Ratelimit{ + { + Duration: 1, + Limit: 1, + }, + }, + } + res := testutil.CallRoute[handler.Request, openapi.BadRequestErrorResponse](h, route, headers, req) + require.Equal(t, 400, res.Status, "expected 400, sent: %+v, received: %s", req, res.RawBody) + require.NotNil(t, res.Body) + + require.Equal(t, "https://unkey.com/docs/errors/bad_request", res.Body.Error.Type) + require.Equal(t, "POST request body for '/v2/identities.createIdentity' failed to validate schema", res.Body.Error.Detail) + require.Equal(t, http.StatusBadRequest, res.Body.Error.Status) + require.Equal(t, "Bad Request", res.Body.Error.Title) + require.NotEmpty(t, res.Body.Meta.RequestId) + require.Greater(t, len(res.Body.Error.Errors), 0) + require.Nil(t, res.Body.Error.Instance) + }) + + t.Run("malformed authorization header", func(t *testing.T) { + headers := http.Header{ + "Content-Type": {"application/json"}, + "Authorization": {"malformed_header"}, + } + + req := handler.Request{ExternalId: uid.New("test")} + res := testutil.CallRoute[handler.Request, openapi.BadRequestErrorResponse](h, route, headers, req) + require.Equal(t, http.StatusBadRequest, res.Status) + require.NotNil(t, res.Body) + }) + + t.Run("missing authorization header", func(t *testing.T) { + headers := http.Header{ + "Content-Type": {"application/json"}, + // No Authorization header + } + + req := handler.Request{ExternalId: uid.New("test")} + res := testutil.CallRoute[handler.Request, openapi.BadRequestErrorResponse](h, route, headers, req) + require.Equal(t, http.StatusBadRequest, res.Status) + require.NotNil(t, res.Body) + }) +} diff --git a/go/apps/api/routes/v2_identities_create_identity/401_test.go b/go/apps/api/routes/v2_identities_create_identity/401_test.go new file mode 100644 index 0000000000..87c25b4129 --- /dev/null +++ b/go/apps/api/routes/v2_identities_create_identity/401_test.go @@ -0,0 +1,39 @@ +package handler_test + +import ( + "net/http" + "testing" + + "github.com/stretchr/testify/require" + "github.com/unkeyed/unkey/go/apps/api/openapi" + handler "github.com/unkeyed/unkey/go/apps/api/routes/v2_identities_create_identity" + "github.com/unkeyed/unkey/go/pkg/testutil" + "github.com/unkeyed/unkey/go/pkg/uid" +) + +func TestUnauthorizedAccess(t *testing.T) { + h := testutil.NewHarness(t) + + route := handler.New(handler.Services{ + DB: h.DB, + Keys: h.Keys, + Logger: h.Logger, + Permissions: h.Permissions, + Auditlogs: h.Auditlogs, + }) + + h.Register(route) + + t.Run("invalid authorization token", func(t *testing.T) { + headers := http.Header{ + "Content-Type": {"application/json"}, + "Authorization": {"Bearer invalid_token"}, + } + + req := handler.Request{ExternalId: uid.New("test")} + res := testutil.CallRoute[handler.Request, openapi.UnauthorizedErrorResponse](h, route, headers, req) + require.Equal(t, http.StatusUnauthorized, res.Status) + require.NotNil(t, res.Body) + }) + +} diff --git a/go/apps/api/routes/v2_identities_create_identity/403_test.go b/go/apps/api/routes/v2_identities_create_identity/403_test.go new file mode 100644 index 0000000000..d21a22d830 --- /dev/null +++ b/go/apps/api/routes/v2_identities_create_identity/403_test.go @@ -0,0 +1,37 @@ +package handler_test + +import ( + "fmt" + "net/http" + "testing" + + "github.com/stretchr/testify/require" + "github.com/unkeyed/unkey/go/apps/api/openapi" + handler "github.com/unkeyed/unkey/go/apps/api/routes/v2_identities_create_identity" + "github.com/unkeyed/unkey/go/pkg/testutil" +) + +func TestWorkspacePermissions(t *testing.T) { + h := testutil.NewHarness(t) + + route := handler.New(handler.Services{ + DB: h.DB, + Keys: h.Keys, + Logger: h.Logger, + Permissions: h.Permissions, + Auditlogs: h.Auditlogs, + }) + + h.Register(route) + + rootKey := h.CreateRootKey(h.Resources().UserWorkspace.ID) + headers := http.Header{ + "Content-Type": {"application/json"}, + "Authorization": {fmt.Sprintf("Bearer %s", rootKey)}, + } + + req := handler.Request{ExternalId: "external_test_id"} + res := testutil.CallRoute[handler.Request, openapi.BadRequestErrorResponse](h, route, headers, req) + require.Equal(t, http.StatusForbidden, res.Status, "got: %s", res.RawBody) + require.NotNil(t, res.Body) +} diff --git a/go/apps/api/routes/v2_identities_create_identity/409_test.go b/go/apps/api/routes/v2_identities_create_identity/409_test.go new file mode 100644 index 0000000000..26219dc752 --- /dev/null +++ b/go/apps/api/routes/v2_identities_create_identity/409_test.go @@ -0,0 +1,47 @@ +package handler_test + +import ( + "fmt" + "net/http" + "testing" + + "github.com/stretchr/testify/require" + "github.com/unkeyed/unkey/go/apps/api/openapi" + handler "github.com/unkeyed/unkey/go/apps/api/routes/v2_identities_create_identity" + "github.com/unkeyed/unkey/go/pkg/testutil" + "github.com/unkeyed/unkey/go/pkg/uid" +) + +func TestCreateIdentityDuplicate(t *testing.T) { + h := testutil.NewHarness(t) + + route := handler.New(handler.Services{ + DB: h.DB, + Keys: h.Keys, + Logger: h.Logger, + Permissions: h.Permissions, + Auditlogs: h.Auditlogs, + }) + + h.Register(route) + + rootKey := h.CreateRootKey(h.Resources().UserWorkspace.ID, "identity.*.create_identity") + headers := http.Header{ + "Content-Type": {"application/json"}, + "Authorization": {fmt.Sprintf("Bearer %s", rootKey)}, + } + + t.Run("create identity twice", func(t *testing.T) { + req := handler.Request{ExternalId: uid.New("test_external_id")} + + successRes := testutil.CallRoute[handler.Request, handler.Response](h, route, headers, req) + require.Equal(t, 200, successRes.Status, "expected 200, received: %#v", successRes.Body) + require.NotNil(t, successRes.Body) + require.NotEmpty(t, successRes.Body.Data.IdentityId, successRes.Body) + + errorRes := testutil.CallRoute[handler.Request, openapi.ConflictErrorResponse](h, route, headers, req) + require.Equal(t, 409, errorRes.Status, "expected 409, received: %#v", errorRes) + require.NotNil(t, errorRes.Body) + require.Equal(t, "https://unkey.com/docs/errors/conflict", errorRes.Body.Error.Type) + }) +} diff --git a/go/apps/api/routes/v2_identities_create_identity/handler.go b/go/apps/api/routes/v2_identities_create_identity/handler.go new file mode 100644 index 0000000000..509139c428 --- /dev/null +++ b/go/apps/api/routes/v2_identities_create_identity/handler.go @@ -0,0 +1,243 @@ +package handler + +import ( + "context" + "database/sql" + "encoding/json" + "errors" + "fmt" + "net/http" + "time" + + "github.com/go-sql-driver/mysql" + "github.com/unkeyed/unkey/go/apps/api/openapi" + "github.com/unkeyed/unkey/go/internal/services/auditlogs" + "github.com/unkeyed/unkey/go/internal/services/keys" + "github.com/unkeyed/unkey/go/internal/services/permissions" + "github.com/unkeyed/unkey/go/pkg/auditlog" + "github.com/unkeyed/unkey/go/pkg/db" + "github.com/unkeyed/unkey/go/pkg/fault" + "github.com/unkeyed/unkey/go/pkg/otel/logging" + "github.com/unkeyed/unkey/go/pkg/rbac" + "github.com/unkeyed/unkey/go/pkg/uid" + "github.com/unkeyed/unkey/go/pkg/zen" +) + +type Request = openapi.V2IdentitiesCreateIdentityRequestBody +type Response = openapi.V2IdentitiesCreateIdentityResponseBody + +type Services struct { + Logger logging.Logger + DB db.Database + Keys keys.KeyService + Permissions permissions.PermissionService + Auditlogs auditlogs.AuditLogService +} + +const ( + // Planetscale only allows for 67MB of json data + // 1MB should be enough for most use cases + MAX_META_LENGTH_MB = 1 +) + +func New(svc Services) zen.Route { + return zen.NewRoute("POST", "/v2/identities.createIdentity", func(ctx context.Context, s *zen.Session) error { + auth, err := svc.Keys.VerifyRootKey(ctx, s) + if err != nil { + return err + } + + // nolint:exhaustruct + req := Request{} + err = s.BindBody(&req) + if err != nil { + return fault.Wrap(err, + fault.WithTag(fault.INTERNAL_SERVER_ERROR), + fault.WithDesc("invalid request body", "The request body is invalid."), + ) + } + + permissions, err := svc.Permissions.Check( + ctx, + auth.KeyID, + rbac.Or( + rbac.T(rbac.Tuple{ + ResourceType: rbac.Identity, + ResourceID: "*", + Action: rbac.CreateIdentity, + }), + ), + ) + if err != nil { + return fault.Wrap(err, + fault.WithTag(fault.INTERNAL_SERVER_ERROR), + fault.WithDesc("unable to check permissions", "We're unable to check the permissions of your key."), + ) + } + + if !permissions.Valid { + return fault.New("insufficient permissions", + fault.WithTag(fault.INSUFFICIENT_PERMISSIONS), + fault.WithDesc(permissions.Message, permissions.Message), + ) + } + + var meta []byte + if req.Meta != nil { + rawMeta, metaErr := json.Marshal(req.Meta) + if metaErr != nil { + return fault.Wrap(metaErr, + fault.WithTag(fault.BAD_REQUEST), + fault.WithDesc("unable to marshal metadata", "We're unable to use your meta object."), + ) + } + + sizeInMB := float64(len(rawMeta)) / 1024 / 1024 + if sizeInMB > MAX_META_LENGTH_MB { + return fault.New("metadata is too large", + fault.WithTag(fault.BAD_REQUEST), + fault.WithDesc("metadata is too large", fmt.Sprintf("Metadata is too large, it must be less than %dMB, got: %.2f", MAX_META_LENGTH_MB, sizeInMB)), + ) + } + + meta = rawMeta + } + + tx, err := svc.DB.RW().Begin(ctx) + if err != nil { + return fault.Wrap(err, + fault.WithTag(fault.DATABASE_ERROR), + fault.WithDesc("database failed to create transaction", "Unable to start database transaction."), + ) + } + + defer func() { + rollbackErr := tx.Rollback() + if rollbackErr != nil && !errors.Is(rollbackErr, sql.ErrTxDone) { + svc.Logger.Error("rollback failed", "requestId", s.RequestID(), "error", rollbackErr) + } + }() + + identityID := uid.New(uid.IdentityPrefix) + err = db.Query.InsertIdentity(ctx, tx, db.InsertIdentityParams{ + ID: identityID, + ExternalID: req.ExternalId, + WorkspaceID: auth.AuthorizedWorkspaceID, + Environment: "default", + CreatedAt: time.Now().UnixMilli(), + Meta: meta, + }) + if err != nil { + if mysqlErr, ok := err.(*mysql.MySQLError); ok && mysqlErr.Number == 1062 { + return fault.Wrap(err, + fault.WithTag(fault.CONFLICT), + fault.WithDesc("identity already exists", fmt.Sprintf("Identity with externalId \"%s\" already exists in this workspace.", req.ExternalId)), + ) + } + + return fault.Wrap(err, + fault.WithTag(fault.INTERNAL_SERVER_ERROR), + fault.WithDesc("unable to create identity", "We're unable to create the identity and its ratelimits."), + ) + } + + auditLogs := []auditlog.AuditLog{ + { + WorkspaceID: auth.AuthorizedWorkspaceID, + Event: auditlog.IdentityCreateEvent, + Display: fmt.Sprintf("Created identity %s.", identityID), + ActorID: auth.KeyID, + ActorName: "root key", + ActorMeta: nil, + Bucket: auditlogs.DEFAULT_BUCKET, + ActorType: auditlog.RootKeyActor, + RemoteIP: s.Location(), + UserAgent: s.UserAgent(), + Resources: []auditlog.AuditLogResource{ + { + ID: identityID, + Type: auditlog.IdentityResourceType, + Meta: nil, + Name: req.ExternalId, + DisplayName: req.ExternalId, + }, + }, + }, + } + + if req.Ratelimits != nil { + for _, ratelimit := range *req.Ratelimits { + ratelimitID := uid.New(uid.RatelimitPrefix) + err = db.Query.InsertIdentityRatelimit(ctx, tx, db.InsertIdentityRatelimitParams{ + ID: ratelimitID, + WorkspaceID: auth.AuthorizedWorkspaceID, + IdentityID: sql.NullString{String: identityID, Valid: true}, + Name: ratelimit.Name, + Limit: int32(ratelimit.Limit), // nolint:gosec + Duration: ratelimit.Duration, + CreatedAt: time.Now().UnixMilli(), + }) + if err != nil { + return fault.Wrap(err, + fault.WithTag(fault.INTERNAL_SERVER_ERROR), + fault.WithDesc("unable to create ratelimit", "We're unable to create a ratelimit for the identity."), + ) + } + + auditLogs = append(auditLogs, auditlog.AuditLog{ + WorkspaceID: auth.AuthorizedWorkspaceID, + Event: auditlog.RatelimitCreateEvent, + Display: fmt.Sprintf("Created ratelimit %s.", ratelimitID), + ActorID: auth.KeyID, + Bucket: auditlogs.DEFAULT_BUCKET, + ActorType: auditlog.RootKeyActor, + ActorName: "root key", + ActorMeta: nil, + RemoteIP: s.Location(), + UserAgent: s.UserAgent(), + Resources: []auditlog.AuditLogResource{ + { + Type: auditlog.IdentityResourceType, + ID: identityID, + Name: req.ExternalId, + Meta: nil, + DisplayName: req.ExternalId, + }, + { + Type: auditlog.RatelimitResourceType, + ID: ratelimitID, + DisplayName: ratelimit.Name, + Name: ratelimit.Name, + Meta: nil, + }, + }, + }) + } + } + + err = svc.Auditlogs.Insert(ctx, tx, auditLogs) + if err != nil { + return fault.Wrap(err, + fault.WithTag(fault.DATABASE_ERROR), + fault.WithDesc("database failed to insert audit logs", "Failed to insert audit logs"), + ) + } + + err = tx.Commit() + if err != nil { + return fault.Wrap(err, + fault.WithTag(fault.DATABASE_ERROR), + fault.WithDesc("database failed to commit transaction", "Failed to commit changes."), + ) + } + + return s.JSON(http.StatusOK, Response{ + Meta: openapi.Meta{ + RequestId: s.RequestID(), + }, + Data: openapi.IdentitiesCreateIdentityResponseData{ + IdentityId: identityID, + }, + }) + }) +} diff --git a/go/apps/api/routes/v2_ratelimit_delete_override/200_test.go b/go/apps/api/routes/v2_ratelimit_delete_override/200_test.go index ccbfb3a9e1..6ea9a8e5c9 100644 --- a/go/apps/api/routes/v2_ratelimit_delete_override/200_test.go +++ b/go/apps/api/routes/v2_ratelimit_delete_override/200_test.go @@ -48,6 +48,7 @@ func TestDeleteOverrideSuccessfully(t *testing.T) { Keys: h.Keys, Logger: h.Logger, Permissions: h.Permissions, + Auditlogs: h.Auditlogs, }) h.Register(route) diff --git a/go/apps/api/routes/v2_ratelimit_delete_override/401_test.go b/go/apps/api/routes/v2_ratelimit_delete_override/401_test.go index d0c762b77f..e04d58d069 100644 --- a/go/apps/api/routes/v2_ratelimit_delete_override/401_test.go +++ b/go/apps/api/routes/v2_ratelimit_delete_override/401_test.go @@ -18,6 +18,7 @@ func TestUnauthorizedAccess(t *testing.T) { Keys: h.Keys, Logger: h.Logger, Permissions: h.Permissions, + Auditlogs: h.Auditlogs, }) h.Register(route) diff --git a/go/apps/api/routes/v2_ratelimit_delete_override/403_test.go b/go/apps/api/routes/v2_ratelimit_delete_override/403_test.go index 82b1a2f5bc..ddc9845ac3 100644 --- a/go/apps/api/routes/v2_ratelimit_delete_override/403_test.go +++ b/go/apps/api/routes/v2_ratelimit_delete_override/403_test.go @@ -49,13 +49,13 @@ func TestWorkspacePermissions(t *testing.T) { Keys: h.Keys, Logger: h.Logger, Permissions: h.Permissions, + Auditlogs: h.Auditlogs, }) h.Register(route) // Create a key for a different workspace - differentWorkspaceID := "ws_different" - differentWorkspaceKey := h.CreateRootKey(differentWorkspaceID) + differentWorkspaceKey := h.CreateRootKey(h.Resources().DifferentWorkspace.ID) headers := http.Header{ "Content-Type": {"application/json"}, diff --git a/go/apps/api/routes/v2_ratelimit_delete_override/404_test.go b/go/apps/api/routes/v2_ratelimit_delete_override/404_test.go index 2d3713329c..43ca7502a2 100644 --- a/go/apps/api/routes/v2_ratelimit_delete_override/404_test.go +++ b/go/apps/api/routes/v2_ratelimit_delete_override/404_test.go @@ -35,6 +35,7 @@ func TestNotFound(t *testing.T) { Keys: h.Keys, Logger: h.Logger, Permissions: h.Permissions, + Auditlogs: h.Auditlogs, }) h.Register(route) @@ -48,6 +49,7 @@ func TestNotFound(t *testing.T) { // Test with non-existent identifier t.Run("override not found", func(t *testing.T) { + req := handler.Request{ NamespaceId: &namespaceID, Identifier: "non_existent_identifier", @@ -69,13 +71,14 @@ func TestNotFound(t *testing.T) { } res := testutil.CallRoute[handler.Request, openapi.NotFoundErrorResponse](h, route, headers, req) - require.Equal(t, http.StatusNotFound, res.Status) + require.Equal(t, http.StatusNotFound, res.Status, "Received %s", res.RawBody) require.NotNil(t, res.Body) require.Equal(t, "https://unkey.com/docs/errors/not_found", res.Body.Error.Type) }) // Test with non-existent namespace name t.Run("namespace name not found", func(t *testing.T) { + nonExistentNamespaceName := "nonexistent_namespace" req := handler.Request{ NamespaceName: &nonExistentNamespaceName, diff --git a/go/apps/api/routes/v2_ratelimit_delete_override/handler.go b/go/apps/api/routes/v2_ratelimit_delete_override/handler.go index 207de15b39..5c434a6918 100644 --- a/go/apps/api/routes/v2_ratelimit_delete_override/handler.go +++ b/go/apps/api/routes/v2_ratelimit_delete_override/handler.go @@ -9,6 +9,7 @@ import ( "time" "github.com/unkeyed/unkey/go/apps/api/openapi" + "github.com/unkeyed/unkey/go/internal/services/auditlogs" "github.com/unkeyed/unkey/go/internal/services/keys" "github.com/unkeyed/unkey/go/internal/services/permissions" "github.com/unkeyed/unkey/go/pkg/auditlog" @@ -16,7 +17,6 @@ import ( "github.com/unkeyed/unkey/go/pkg/fault" "github.com/unkeyed/unkey/go/pkg/otel/logging" "github.com/unkeyed/unkey/go/pkg/rbac" - "github.com/unkeyed/unkey/go/pkg/uid" "github.com/unkeyed/unkey/go/pkg/zen" ) @@ -28,6 +28,7 @@ type Services struct { DB db.Database Keys keys.KeyService Permissions permissions.PermissionService + Auditlogs auditlogs.AuditLogService } func New(svc Services) zen.Route { @@ -106,7 +107,7 @@ func New(svc Services) zen.Route { defer func() { rollbackErr := tx.Rollback() if rollbackErr != nil && !errors.Is(rollbackErr, sql.ErrTxDone) { - svc.Logger.Error("rollback failed", "requestId", s.RequestID()) + svc.Logger.Error("rollback failed", "requestId", s.RequestID(), "error", rollbackErr) } }() @@ -140,61 +141,40 @@ func New(svc Services) zen.Route { ) } - auditLogID := uid.New(uid.AuditLogPrefix) - err = db.Query.InsertAuditLog(ctx, tx, db.InsertAuditLogParams{ - ID: auditLogID, - WorkspaceID: auth.AuthorizedWorkspaceID, - BucketID: "", - Event: string(auditlog.RatelimitDeleteOverrideEvent), - Time: time.Now().UnixMilli(), - Display: fmt.Sprintf("Deleted override %s.", override.ID), - RemoteIp: sql.NullString{String: "", Valid: false}, - UserAgent: sql.NullString{String: "", Valid: false}, - ActorType: string(auditlog.RootKeyActor), - ActorID: auth.KeyID, - ActorName: sql.NullString{String: "", Valid: false}, - ActorMeta: nil, - CreatedAt: time.Now().UnixMilli(), - }) - if err != nil { - svc.Logger.Error(err.Error()) - return fault.Wrap(err, - fault.WithTag(fault.DATABASE_ERROR), - fault.WithDesc("database failed to insert audit log", "Failed to insert audit log."), - ) - } - err = db.Query.InsertAuditLogTarget(ctx, tx, db.InsertAuditLogTargetParams{ - ID: override.ID, - WorkspaceID: auth.AuthorizedWorkspaceID, - BucketID: "", - AuditLogID: auditLogID, - DisplayName: override.Identifier, - Type: "ratelimit_override", - Name: sql.NullString{String: "", Valid: false}, - Meta: nil, - CreatedAt: time.Now().UnixMilli(), - }) - if err != nil { - return fault.Wrap(err, - fault.WithTag(fault.DATABASE_ERROR), - fault.WithDesc("database failed to insert audit log target namespace", "Failed to insert audit log target."), - ) - } - err = db.Query.InsertAuditLogTarget(ctx, tx, db.InsertAuditLogTargetParams{ - ID: namespace.ID, - WorkspaceID: auth.AuthorizedWorkspaceID, - BucketID: "", - AuditLogID: auditLogID, - DisplayName: namespace.Name, - Type: "ratelimit_namespacee", - Name: sql.NullString{String: override.Identifier, Valid: true}, - Meta: nil, - CreatedAt: time.Now().UnixMilli(), + err = svc.Auditlogs.Insert(ctx, tx, []auditlog.AuditLog{ + { + WorkspaceID: auth.AuthorizedWorkspaceID, + Event: auditlog.RatelimitDeleteOverrideEvent, + Display: fmt.Sprintf("Deleted override %s.", override.ID), + ActorID: auth.KeyID, + Bucket: auditlogs.DEFAULT_BUCKET, + ActorType: auditlog.RootKeyActor, + ActorName: "root key", + ActorMeta: nil, + RemoteIP: s.Location(), + UserAgent: s.UserAgent(), + Resources: []auditlog.AuditLogResource{ + { + ID: override.ID, + Name: override.Identifier, + DisplayName: override.Identifier, + Type: auditlog.RatelimitOverrideResourceType, + Meta: nil, + }, + { + ID: namespace.ID, + Name: namespace.Name, + DisplayName: namespace.Name, + Type: auditlog.RatelimitNamespaceResourceType, + Meta: nil, + }, + }, + }, }) if err != nil { return fault.Wrap(err, fault.WithTag(fault.DATABASE_ERROR), - fault.WithDesc("database failed to insert audit log target override", "Failed to insert audit log target."), + fault.WithDesc("database failed to insert audit logs", "Failed to insert audit logs"), ) } diff --git a/go/apps/api/routes/v2_ratelimit_get_override/403_test.go b/go/apps/api/routes/v2_ratelimit_get_override/403_test.go index f59125eff1..d0c581a840 100644 --- a/go/apps/api/routes/v2_ratelimit_get_override/403_test.go +++ b/go/apps/api/routes/v2_ratelimit_get_override/403_test.go @@ -54,8 +54,7 @@ func TestWorkspacePermissions(t *testing.T) { h.Register(route) // Create a key for a different workspace - differentWorkspaceID := "ws_different" - differentWorkspaceKey := h.CreateRootKey(differentWorkspaceID) + differentWorkspaceKey := h.CreateRootKey(h.Resources().DifferentWorkspace.ID) headers := http.Header{ "Content-Type": {"application/json"}, diff --git a/go/apps/api/routes/v2_ratelimit_limit/403_test.go b/go/apps/api/routes/v2_ratelimit_limit/403_test.go index fe63e5184c..7f4c778a9b 100644 --- a/go/apps/api/routes/v2_ratelimit_limit/403_test.go +++ b/go/apps/api/routes/v2_ratelimit_limit/403_test.go @@ -43,8 +43,7 @@ func TestWorkspacePermissions(t *testing.T) { h.Register(route) // Create a key for a different workspace - differentWorkspaceID := "ws_different" - differentWorkspaceKey := h.CreateRootKey(differentWorkspaceID) + differentWorkspaceKey := h.CreateRootKey(h.Resources().DifferentWorkspace.ID) headers := http.Header{ "Content-Type": {"application/json"}, diff --git a/go/apps/api/routes/v2_ratelimit_set_override/200_test.go b/go/apps/api/routes/v2_ratelimit_set_override/200_test.go index 5ab2713ca6..3499aefbd6 100644 --- a/go/apps/api/routes/v2_ratelimit_set_override/200_test.go +++ b/go/apps/api/routes/v2_ratelimit_set_override/200_test.go @@ -34,6 +34,7 @@ func TestSetOverrideSuccessfully(t *testing.T) { Keys: h.Keys, Logger: h.Logger, Permissions: h.Permissions, + Auditlogs: h.Auditlogs, }) h.Register(route) diff --git a/go/apps/api/routes/v2_ratelimit_set_override/401_test.go b/go/apps/api/routes/v2_ratelimit_set_override/401_test.go index bd2d424704..87c44bc5ec 100644 --- a/go/apps/api/routes/v2_ratelimit_set_override/401_test.go +++ b/go/apps/api/routes/v2_ratelimit_set_override/401_test.go @@ -18,6 +18,7 @@ func TestUnauthorizedAccess(t *testing.T) { Keys: h.Keys, Logger: h.Logger, Permissions: h.Permissions, + Auditlogs: h.Auditlogs, }) h.Register(route) diff --git a/go/apps/api/routes/v2_ratelimit_set_override/403_test.go b/go/apps/api/routes/v2_ratelimit_set_override/403_test.go index 91e9d36c1f..d43f9d5039 100644 --- a/go/apps/api/routes/v2_ratelimit_set_override/403_test.go +++ b/go/apps/api/routes/v2_ratelimit_set_override/403_test.go @@ -35,13 +35,13 @@ func TestWorkspacePermissions(t *testing.T) { Keys: h.Keys, Logger: h.Logger, Permissions: h.Permissions, + Auditlogs: h.Auditlogs, }) h.Register(route) // Create a key for a different workspace - differentWorkspaceID := "ws_different" - differentWorkspaceKey := h.CreateRootKey(differentWorkspaceID) + differentWorkspaceKey := h.CreateRootKey(h.Resources().DifferentWorkspace.ID) headers := http.Header{ "Content-Type": {"application/json"}, diff --git a/go/apps/api/routes/v2_ratelimit_set_override/404_test.go b/go/apps/api/routes/v2_ratelimit_set_override/404_test.go index 0aabdb1de4..c9bb9ef45b 100644 --- a/go/apps/api/routes/v2_ratelimit_set_override/404_test.go +++ b/go/apps/api/routes/v2_ratelimit_set_override/404_test.go @@ -19,6 +19,7 @@ func TestNamespaceNotFound(t *testing.T) { Keys: h.Keys, Logger: h.Logger, Permissions: h.Permissions, + Auditlogs: h.Auditlogs, }) h.Register(route) diff --git a/go/apps/api/routes/v2_ratelimit_set_override/handler.go b/go/apps/api/routes/v2_ratelimit_set_override/handler.go index b4db491ff1..40186bfac0 100644 --- a/go/apps/api/routes/v2_ratelimit_set_override/handler.go +++ b/go/apps/api/routes/v2_ratelimit_set_override/handler.go @@ -4,12 +4,15 @@ import ( "context" "database/sql" "errors" + "fmt" "net/http" "time" "github.com/unkeyed/unkey/go/apps/api/openapi" + "github.com/unkeyed/unkey/go/internal/services/auditlogs" "github.com/unkeyed/unkey/go/internal/services/keys" "github.com/unkeyed/unkey/go/internal/services/permissions" + "github.com/unkeyed/unkey/go/pkg/auditlog" "github.com/unkeyed/unkey/go/pkg/db" "github.com/unkeyed/unkey/go/pkg/fault" "github.com/unkeyed/unkey/go/pkg/otel/logging" @@ -26,6 +29,7 @@ type Services struct { DB db.Database Keys keys.KeyService Permissions permissions.PermissionService + Auditlogs auditlogs.AuditLogService } func New(svc Services) zen.Route { @@ -94,8 +98,22 @@ func New(svc Services) zen.Route { ) } + tx, err := svc.DB.RW().Begin(ctx) + if err != nil { + return fault.Wrap(err, + fault.WithTag(fault.DATABASE_ERROR), + fault.WithDesc("database failed to create transaction", "Unable to start database transaction."), + ) + } + defer func() { + rollbackErr := tx.Rollback() + if rollbackErr != nil && !errors.Is(rollbackErr, sql.ErrTxDone) { + svc.Logger.Error("rollback failed", "requestId", s.RequestID(), "error", rollbackErr) + } + }() + overrideID := uid.New(uid.RatelimitOverridePrefix) - err = db.Query.InsertRatelimitOverride(ctx, svc.DB.RO(), db.InsertRatelimitOverrideParams{ + err = db.Query.InsertRatelimitOverride(ctx, tx, db.InsertRatelimitOverrideParams{ ID: overrideID, WorkspaceID: auth.AuthorizedWorkspaceID, NamespaceID: namespace.ID, @@ -111,6 +129,45 @@ func New(svc Services) zen.Route { ) } + err = svc.Auditlogs.Insert(ctx, tx, []auditlog.AuditLog{ + { + WorkspaceID: auth.AuthorizedWorkspaceID, + Event: auditlog.RatelimitSetOverrideEvent, + ActorID: auth.KeyID, + ActorType: auditlog.RootKeyActor, + ActorName: "root key", + ActorMeta: nil, + Bucket: auditlogs.DEFAULT_BUCKET, + + RemoteIP: s.Location(), + UserAgent: s.UserAgent(), + Display: fmt.Sprintf("Set ratelimit override for %s and %s", namespace.ID, req.Identifier), + Resources: []auditlog.AuditLogResource{ + { + Type: auditlog.RatelimitOverrideResourceType, + ID: overrideID, + Name: req.Identifier, + DisplayName: req.Identifier, + Meta: nil, + }, + }, + }, + }) + if err != nil { + return fault.Wrap(err, + fault.WithTag(fault.DATABASE_ERROR), + fault.WithDesc("database failed to insert audit logs", "Failed to insert audit logs"), + ) + } + + err = tx.Commit() + if err != nil { + return fault.Wrap(err, + fault.WithTag(fault.DATABASE_ERROR), + fault.WithDesc("database failed to commit transaction", "Failed to commit changes."), + ) + } + return s.JSON(http.StatusOK, Response{ Meta: openapi.Meta{ RequestId: s.RequestID(), diff --git a/go/apps/api/run.go b/go/apps/api/run.go index 434482a3a1..fb72daeaef 100644 --- a/go/apps/api/run.go +++ b/go/apps/api/run.go @@ -11,6 +11,7 @@ import ( "time" "github.com/unkeyed/unkey/go/apps/api/routes" + "github.com/unkeyed/unkey/go/internal/services/auditlogs" "github.com/unkeyed/unkey/go/internal/services/caches" "github.com/unkeyed/unkey/go/internal/services/keys" "github.com/unkeyed/unkey/go/internal/services/permissions" @@ -147,10 +148,11 @@ func Run(ctx context.Context, cfg Config) error { } keySvc, err := keys.New(keys.Config{ - Logger: logger, - DB: db, - Clock: clk, - KeyCache: caches.KeyByHash, + Logger: logger, + DB: db, + Clock: clk, + KeyCache: caches.KeyByHash, + WorkspaceCache: caches.WorkspaceByID, }) if err != nil { return fmt.Errorf("unable to create key service: %w", err) @@ -191,7 +193,11 @@ func Run(ctx context.Context, cfg Config) error { Validator: validator, Ratelimit: rlSvc, Permissions: p, - Caches: caches, + Auditlogs: auditlogs.New(auditlogs.Config{ + Logger: logger, + DB: db, + }), + Caches: caches, }) go func() { diff --git a/go/cmd/api/main.go b/go/cmd/api/main.go index f6f2c6fc02..a2d89c3a28 100644 --- a/go/cmd/api/main.go +++ b/go/cmd/api/main.go @@ -120,7 +120,6 @@ var Cmd = &cli.Command{ } func action(ctx context.Context, cmd *cli.Command) error { - config := api.Config{ // Basic configuration Platform: cmd.String("platform"), diff --git a/go/gen/proto/ratelimit/v1/service.pb.go b/go/gen/proto/ratelimit/v1/service.pb.go new file mode 100644 index 0000000000..ab3f28faa5 --- /dev/null +++ b/go/gen/proto/ratelimit/v1/service.pb.go @@ -0,0 +1,529 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.36.6 +// protoc (unknown) +// source: proto/ratelimit/v1/service.proto + +package ratelimitv1 + +import ( + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" + unsafe "unsafe" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +// RatelimitRequest represents a request to check or consume rate limit tokens. +// This is typically the first point of contact when a client wants to verify +// if they are allowed to perform an action under the rate limit constraints. +type RatelimitRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + // Unique identifier for the rate limit subject. + // This could be: + // - A user ID + // - An API key + // - An IP address + // - Any other unique identifier that needs rate limiting + Identifier string `protobuf:"bytes,1,opt,name=identifier,proto3" json:"identifier,omitempty"` + // Maximum number of tokens allowed within the duration. + // Once this limit is reached, subsequent requests will be denied + // until there is more capacity. + Limit int64 `protobuf:"varint,2,opt,name=limit,proto3" json:"limit,omitempty"` + // Duration of the rate limit window in milliseconds. + // After this duration, a new window begins. + // Common values might be: + // - 1000 (1 second) + // - 60000 (1 minute) + // - 3600000 (1 hour) + Duration int64 `protobuf:"varint,3,opt,name=duration,proto3" json:"duration,omitempty"` + // Number of tokens to consume in this request. + // Higher values can be used for operations that should count more heavily + // against the rate limit (e.g., batch operations). + Cost int64 `protobuf:"varint,4,opt,name=cost,proto3" json:"cost,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *RatelimitRequest) Reset() { + *x = RatelimitRequest{} + mi := &file_proto_ratelimit_v1_service_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *RatelimitRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RatelimitRequest) ProtoMessage() {} + +func (x *RatelimitRequest) ProtoReflect() protoreflect.Message { + mi := &file_proto_ratelimit_v1_service_proto_msgTypes[0] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use RatelimitRequest.ProtoReflect.Descriptor instead. +func (*RatelimitRequest) Descriptor() ([]byte, []int) { + return file_proto_ratelimit_v1_service_proto_rawDescGZIP(), []int{0} +} + +func (x *RatelimitRequest) GetIdentifier() string { + if x != nil { + return x.Identifier + } + return "" +} + +func (x *RatelimitRequest) GetLimit() int64 { + if x != nil { + return x.Limit + } + return 0 +} + +func (x *RatelimitRequest) GetDuration() int64 { + if x != nil { + return x.Duration + } + return 0 +} + +func (x *RatelimitRequest) GetCost() int64 { + if x != nil { + return x.Cost + } + return 0 +} + +// RatelimitResponse contains the result of a rate limit check. +// This response includes all necessary information for clients to understand +// their current rate limit status and when they can retry if limited. +type RatelimitResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + // Total limit configured for this window. + // This matches the limit specified in the request and is included + // for convenience in client implementations. + Limit int64 `protobuf:"varint,1,opt,name=limit,proto3" json:"limit,omitempty"` + // Number of tokens remaining in the current window. + // Clients can use this to implement progressive backoff or + // warn users when they're close to their limit. + Remaining int64 `protobuf:"varint,2,opt,name=remaining,proto3" json:"remaining,omitempty"` + // Unix timestamp (in milliseconds) when the current window expires. + // Clients can use this to: + // - Display time until reset to users + // - Implement automatic retry after window reset + // - Schedule future requests optimally + Reset_ int64 `protobuf:"varint,3,opt,name=reset,proto3" json:"reset,omitempty"` + // Whether the rate limit check was successful. + // true = request is allowed + // false = request is denied due to rate limit exceeded + Success bool `protobuf:"varint,4,opt,name=success,proto3" json:"success,omitempty"` + // Current token count in this window. + // This represents how many tokens have been consumed so far, + // useful for monitoring and debugging purposes. + Current int64 `protobuf:"varint,5,opt,name=current,proto3" json:"current,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *RatelimitResponse) Reset() { + *x = RatelimitResponse{} + mi := &file_proto_ratelimit_v1_service_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *RatelimitResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RatelimitResponse) ProtoMessage() {} + +func (x *RatelimitResponse) ProtoReflect() protoreflect.Message { + mi := &file_proto_ratelimit_v1_service_proto_msgTypes[1] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use RatelimitResponse.ProtoReflect.Descriptor instead. +func (*RatelimitResponse) Descriptor() ([]byte, []int) { + return file_proto_ratelimit_v1_service_proto_rawDescGZIP(), []int{1} +} + +func (x *RatelimitResponse) GetLimit() int64 { + if x != nil { + return x.Limit + } + return 0 +} + +func (x *RatelimitResponse) GetRemaining() int64 { + if x != nil { + return x.Remaining + } + return 0 +} + +func (x *RatelimitResponse) GetReset_() int64 { + if x != nil { + return x.Reset_ + } + return 0 +} + +func (x *RatelimitResponse) GetSuccess() bool { + if x != nil { + return x.Success + } + return false +} + +func (x *RatelimitResponse) GetCurrent() int64 { + if x != nil { + return x.Current + } + return 0 +} + +// Window represents a rate limiting time window with its state. +// The system uses a sliding window approach to provide smooth +// rate limiting behavior across window boundaries. +type Window struct { + state protoimpl.MessageState `protogen:"open.v1"` + // Monotonically increasing sequence number for window ordering. + // The sequence is calculated as follows: + // sequence = time.Now().UnixMilli() / duration + Sequence int64 `protobuf:"varint,1,opt,name=sequence,proto3" json:"sequence,omitempty"` + // Duration of the window in milliseconds. + // This matches the duration from the original request and defines + // how long this window remains active. + Duration int64 `protobuf:"varint,2,opt,name=duration,proto3" json:"duration,omitempty"` + // Current token count in this window. + // This is the actual count of tokens consumed during this window's + // lifetime. It must never exceed the configured limit. + Counter int64 `protobuf:"varint,3,opt,name=counter,proto3" json:"counter,omitempty"` + // Start time of the window (Unix timestamp in milliseconds). + // Used to: + // - Calculate window expiration + // - Determine if a window is still active + // - Handle sliding window calculations between current and previous windows + Start int64 `protobuf:"varint,4,opt,name=start,proto3" json:"start,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *Window) Reset() { + *x = Window{} + mi := &file_proto_ratelimit_v1_service_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *Window) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Window) ProtoMessage() {} + +func (x *Window) ProtoReflect() protoreflect.Message { + mi := &file_proto_ratelimit_v1_service_proto_msgTypes[2] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Window.ProtoReflect.Descriptor instead. +func (*Window) Descriptor() ([]byte, []int) { + return file_proto_ratelimit_v1_service_proto_rawDescGZIP(), []int{2} +} + +func (x *Window) GetSequence() int64 { + if x != nil { + return x.Sequence + } + return 0 +} + +func (x *Window) GetDuration() int64 { + if x != nil { + return x.Duration + } + return 0 +} + +func (x *Window) GetCounter() int64 { + if x != nil { + return x.Counter + } + return 0 +} + +func (x *Window) GetStart() int64 { + if x != nil { + return x.Start + } + return 0 +} + +// ReplayRequest is used to synchronize rate limit state between nodes. +// This is a crucial part of maintaining consistency in a distributed +// rate limiting system. +type ReplayRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + // Original rate limit request that triggered the replay. + // Contains all the parameters needed to evaluate the rate limit + // on the origin server. + Request *RatelimitRequest `protobuf:"bytes,1,opt,name=request,proto3" json:"request,omitempty"` + // Time at which the request was received by the edge node. + // This is used to calculate the sequence number and determine + // the window in which the request falls. + Time int64 `protobuf:"varint,2,opt,name=time,proto3" json:"time,omitempty"` + // Indicates if the edge node denied the request. + // When false: The origin must increment the counter regardless of its own evaluation + // When true: The origin can evaluate the request fresh + // This field is crucial for maintaining consistency when edge nodes + // make defensive denials due to network issues or uncertainty. + Denied bool `protobuf:"varint,3,opt,name=denied,proto3" json:"denied,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ReplayRequest) Reset() { + *x = ReplayRequest{} + mi := &file_proto_ratelimit_v1_service_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ReplayRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ReplayRequest) ProtoMessage() {} + +func (x *ReplayRequest) ProtoReflect() protoreflect.Message { + mi := &file_proto_ratelimit_v1_service_proto_msgTypes[3] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ReplayRequest.ProtoReflect.Descriptor instead. +func (*ReplayRequest) Descriptor() ([]byte, []int) { + return file_proto_ratelimit_v1_service_proto_rawDescGZIP(), []int{3} +} + +func (x *ReplayRequest) GetRequest() *RatelimitRequest { + if x != nil { + return x.Request + } + return nil +} + +func (x *ReplayRequest) GetTime() int64 { + if x != nil { + return x.Time + } + return 0 +} + +func (x *ReplayRequest) GetDenied() bool { + if x != nil { + return x.Denied + } + return false +} + +// ReplayResponse contains the synchronized rate limit state that +// should be used to update both the origin and edge nodes. +type ReplayResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + // Current active window state. + // This represents the authoritative state of the current window + // as determined by the origin server. + Current *Window `protobuf:"bytes,1,opt,name=current,proto3" json:"current,omitempty"` + // Previous window state for sliding window calculations. + // Used to smooth out rate limiting across window boundaries and + // prevent sharp cliffs in availability during window transitions. + Previous *Window `protobuf:"bytes,2,opt,name=previous,proto3" json:"previous,omitempty"` + // Rate limit response that should be used by the edge node. + // This is the authoritative response that should be returned to + // the client and used to update edge state. + Response *RatelimitResponse `protobuf:"bytes,3,opt,name=response,proto3" json:"response,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ReplayResponse) Reset() { + *x = ReplayResponse{} + mi := &file_proto_ratelimit_v1_service_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ReplayResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ReplayResponse) ProtoMessage() {} + +func (x *ReplayResponse) ProtoReflect() protoreflect.Message { + mi := &file_proto_ratelimit_v1_service_proto_msgTypes[4] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ReplayResponse.ProtoReflect.Descriptor instead. +func (*ReplayResponse) Descriptor() ([]byte, []int) { + return file_proto_ratelimit_v1_service_proto_rawDescGZIP(), []int{4} +} + +func (x *ReplayResponse) GetCurrent() *Window { + if x != nil { + return x.Current + } + return nil +} + +func (x *ReplayResponse) GetPrevious() *Window { + if x != nil { + return x.Previous + } + return nil +} + +func (x *ReplayResponse) GetResponse() *RatelimitResponse { + if x != nil { + return x.Response + } + return nil +} + +var File_proto_ratelimit_v1_service_proto protoreflect.FileDescriptor + +const file_proto_ratelimit_v1_service_proto_rawDesc = "" + + "\n" + + " proto/ratelimit/v1/service.proto\x12\fratelimit.v1\"x\n" + + "\x10RatelimitRequest\x12\x1e\n" + + "\n" + + "identifier\x18\x01 \x01(\tR\n" + + "identifier\x12\x14\n" + + "\x05limit\x18\x02 \x01(\x03R\x05limit\x12\x1a\n" + + "\bduration\x18\x03 \x01(\x03R\bduration\x12\x12\n" + + "\x04cost\x18\x04 \x01(\x03R\x04cost\"\x91\x01\n" + + "\x11RatelimitResponse\x12\x14\n" + + "\x05limit\x18\x01 \x01(\x03R\x05limit\x12\x1c\n" + + "\tremaining\x18\x02 \x01(\x03R\tremaining\x12\x14\n" + + "\x05reset\x18\x03 \x01(\x03R\x05reset\x12\x18\n" + + "\asuccess\x18\x04 \x01(\bR\asuccess\x12\x18\n" + + "\acurrent\x18\x05 \x01(\x03R\acurrent\"p\n" + + "\x06Window\x12\x1a\n" + + "\bsequence\x18\x01 \x01(\x03R\bsequence\x12\x1a\n" + + "\bduration\x18\x02 \x01(\x03R\bduration\x12\x18\n" + + "\acounter\x18\x03 \x01(\x03R\acounter\x12\x14\n" + + "\x05start\x18\x04 \x01(\x03R\x05start\"u\n" + + "\rReplayRequest\x128\n" + + "\arequest\x18\x01 \x01(\v2\x1e.ratelimit.v1.RatelimitRequestR\arequest\x12\x12\n" + + "\x04time\x18\x02 \x01(\x03R\x04time\x12\x16\n" + + "\x06denied\x18\x03 \x01(\bR\x06denied\"\xaf\x01\n" + + "\x0eReplayResponse\x12.\n" + + "\acurrent\x18\x01 \x01(\v2\x14.ratelimit.v1.WindowR\acurrent\x120\n" + + "\bprevious\x18\x02 \x01(\v2\x14.ratelimit.v1.WindowR\bprevious\x12;\n" + + "\bresponse\x18\x03 \x01(\v2\x1f.ratelimit.v1.RatelimitResponseR\bresponse2Y\n" + + "\x10RatelimitService\x12E\n" + + "\x06Replay\x12\x1b.ratelimit.v1.ReplayRequest\x1a\x1c.ratelimit.v1.ReplayResponse\"\x00B@Z>github.com/unkeyed/unkey/go/gen/proto/ratelimit/v1;ratelimitv1b\x06proto3" + +var ( + file_proto_ratelimit_v1_service_proto_rawDescOnce sync.Once + file_proto_ratelimit_v1_service_proto_rawDescData []byte +) + +func file_proto_ratelimit_v1_service_proto_rawDescGZIP() []byte { + file_proto_ratelimit_v1_service_proto_rawDescOnce.Do(func() { + file_proto_ratelimit_v1_service_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_proto_ratelimit_v1_service_proto_rawDesc), len(file_proto_ratelimit_v1_service_proto_rawDesc))) + }) + return file_proto_ratelimit_v1_service_proto_rawDescData +} + +var file_proto_ratelimit_v1_service_proto_msgTypes = make([]protoimpl.MessageInfo, 5) +var file_proto_ratelimit_v1_service_proto_goTypes = []any{ + (*RatelimitRequest)(nil), // 0: ratelimit.v1.RatelimitRequest + (*RatelimitResponse)(nil), // 1: ratelimit.v1.RatelimitResponse + (*Window)(nil), // 2: ratelimit.v1.Window + (*ReplayRequest)(nil), // 3: ratelimit.v1.ReplayRequest + (*ReplayResponse)(nil), // 4: ratelimit.v1.ReplayResponse +} +var file_proto_ratelimit_v1_service_proto_depIdxs = []int32{ + 0, // 0: ratelimit.v1.ReplayRequest.request:type_name -> ratelimit.v1.RatelimitRequest + 2, // 1: ratelimit.v1.ReplayResponse.current:type_name -> ratelimit.v1.Window + 2, // 2: ratelimit.v1.ReplayResponse.previous:type_name -> ratelimit.v1.Window + 1, // 3: ratelimit.v1.ReplayResponse.response:type_name -> ratelimit.v1.RatelimitResponse + 3, // 4: ratelimit.v1.RatelimitService.Replay:input_type -> ratelimit.v1.ReplayRequest + 4, // 5: ratelimit.v1.RatelimitService.Replay:output_type -> ratelimit.v1.ReplayResponse + 5, // [5:6] is the sub-list for method output_type + 4, // [4:5] is the sub-list for method input_type + 4, // [4:4] is the sub-list for extension type_name + 4, // [4:4] is the sub-list for extension extendee + 0, // [0:4] is the sub-list for field type_name +} + +func init() { file_proto_ratelimit_v1_service_proto_init() } +func file_proto_ratelimit_v1_service_proto_init() { + if File_proto_ratelimit_v1_service_proto != nil { + return + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: unsafe.Slice(unsafe.StringData(file_proto_ratelimit_v1_service_proto_rawDesc), len(file_proto_ratelimit_v1_service_proto_rawDesc)), + NumEnums: 0, + NumMessages: 5, + NumExtensions: 0, + NumServices: 1, + }, + GoTypes: file_proto_ratelimit_v1_service_proto_goTypes, + DependencyIndexes: file_proto_ratelimit_v1_service_proto_depIdxs, + MessageInfos: file_proto_ratelimit_v1_service_proto_msgTypes, + }.Build() + File_proto_ratelimit_v1_service_proto = out.File + file_proto_ratelimit_v1_service_proto_goTypes = nil + file_proto_ratelimit_v1_service_proto_depIdxs = nil +} diff --git a/go/internal/services/auditlogs/insert.go b/go/internal/services/auditlogs/insert.go new file mode 100644 index 0000000000..cc8c55b7b8 --- /dev/null +++ b/go/internal/services/auditlogs/insert.go @@ -0,0 +1,120 @@ +package auditlogs + +import ( + "context" + "database/sql" + "encoding/json" + "errors" + "time" + + "github.com/unkeyed/unkey/go/pkg/auditlog" + "github.com/unkeyed/unkey/go/pkg/db" + "github.com/unkeyed/unkey/go/pkg/uid" +) + +const ( + DEFAULT_BUCKET = "unkey_mutations" +) + +func (s *service) Insert(ctx context.Context, tx *sql.Tx, logs []auditlog.AuditLog) error { + if len(logs) == 0 { + return nil + } + + auditLogs := make([]db.InsertAuditLogParams, 0) + auditLogTargets := make([]db.InsertAuditLogTargetParams, 0) + + var dbTx db.DBTX = tx + var rwTx *sql.Tx + if tx == nil { + // If we didn't get a transaction, start a new one so we can commit all + // audit logs together to not miss anything + newTx, err := s.db.RW().Begin(ctx) + if err != nil { + return err + } + + dbTx = newTx + rwTx = newTx + + defer func() { + rollbackErr := rwTx.Rollback() + if rollbackErr != nil && !errors.Is(rollbackErr, sql.ErrTxDone) { + s.logger.Error("rollback failed", "error", rollbackErr) + } + }() + } + + for _, l := range logs { + auditLogID := uid.New(uid.AuditLogPrefix) + if l.Bucket == "" { + l.Bucket = DEFAULT_BUCKET + } + + now := time.Now().UnixMilli() + + actorMeta, err := json.Marshal(l.ActorMeta) + if err != nil { + return err + } + auditLogs = append(auditLogs, db.InsertAuditLogParams{ + ID: auditLogID, + WorkspaceID: l.WorkspaceID, + BucketID: "dummy", + Bucket: DEFAULT_BUCKET, + Event: string(l.Event), + Display: l.Display, + ActorMeta: actorMeta, + ActorType: string(l.ActorType), + ActorID: l.ActorID, + ActorName: sql.NullString{String: l.ActorName, Valid: l.ActorName != ""}, + RemoteIp: sql.NullString{String: l.RemoteIP, Valid: l.RemoteIP != ""}, + UserAgent: sql.NullString{String: l.UserAgent, Valid: l.UserAgent != ""}, + Time: now, + CreatedAt: now, + }) + + for _, resource := range l.Resources { + + meta, err := json.Marshal(resource.Meta) + if err != nil { + return err + } + + auditLogTargets = append(auditLogTargets, db.InsertAuditLogTargetParams{ + ID: resource.ID, + AuditLogID: auditLogID, + WorkspaceID: l.WorkspaceID, + BucketID: "dummy", + Bucket: DEFAULT_BUCKET, + + Type: string(resource.Type), + DisplayName: resource.DisplayName, + Name: sql.NullString{String: resource.DisplayName, Valid: resource.DisplayName != ""}, + Meta: meta, + CreatedAt: now, + }) + } + } + + for _, log := range auditLogs { + if err := db.Query.InsertAuditLog(ctx, dbTx, log); err != nil { + return err + } + } + + for _, logTarget := range auditLogTargets { + if err := db.Query.InsertAuditLogTarget(ctx, dbTx, logTarget); err != nil { + return err + } + } + + // If we are not using a transaction that has been passed in we will just commit all logs + if rwTx != nil { + if err := rwTx.Commit(); err != nil { + return err + } + } + + return nil +} diff --git a/go/internal/services/auditlogs/interface.go b/go/internal/services/auditlogs/interface.go new file mode 100644 index 0000000000..f637b3cf5d --- /dev/null +++ b/go/internal/services/auditlogs/interface.go @@ -0,0 +1,12 @@ +package auditlogs + +import ( + "context" + "database/sql" + + "github.com/unkeyed/unkey/go/pkg/auditlog" +) + +type AuditLogService interface { + Insert(ctx context.Context, tx *sql.Tx, logs []auditlog.AuditLog) error +} diff --git a/go/internal/services/auditlogs/service.go b/go/internal/services/auditlogs/service.go new file mode 100644 index 0000000000..8d41afee7f --- /dev/null +++ b/go/internal/services/auditlogs/service.go @@ -0,0 +1,25 @@ +package auditlogs + +import ( + "github.com/unkeyed/unkey/go/pkg/db" + "github.com/unkeyed/unkey/go/pkg/otel/logging" +) + +type service struct { + db db.Database + logger logging.Logger +} + +var _ AuditLogService = (*service)(nil) + +type Config struct { + DB db.Database + Logger logging.Logger +} + +func New(cfg Config) *service { + return &service{ + db: cfg.DB, + logger: cfg.Logger, + } +} diff --git a/go/internal/services/caches/caches.go b/go/internal/services/caches/caches.go index a38755d3cc..045c6639c8 100644 --- a/go/internal/services/caches/caches.go +++ b/go/internal/services/caches/caches.go @@ -28,6 +28,10 @@ type Caches struct { // PermissionsByKeyId caches permission strings for a given key ID. // Keys are string (key ID) and values are slices of string representing permissions. PermissionsByKeyId cache.Cache[string, []string] + + // WorkspaceByID caches workspace lookups by their ID. + // Keys are string (workspace ID) and values are db.Workspace. + WorkspaceByID cache.Cache[string, db.Workspace] } // Config defines the configuration options for initializing caches. @@ -120,11 +124,24 @@ func New(config Config) (Caches, error) { return Caches{}, err } + workspaceByID, err := cache.New(cache.Config[string, db.Workspace]{ + Fresh: 10 * time.Second, + Stale: 24 * time.Hour, + Logger: config.Logger, + MaxSize: 1_000_000, + + Resource: "workspace_by_id", + Clock: config.Clock, + }) + if err != nil { + return Caches{}, err + } + return Caches{ RatelimitNamespaceByName: middleware.WithTracing(ratelimitNamespace), RatelimitOverridesMatch: middleware.WithTracing(ratelimitOverridesMatch), KeyByHash: middleware.WithTracing(keyByHash), PermissionsByKeyId: middleware.WithTracing(permissionsByKeyId), + WorkspaceByID: middleware.WithTracing(workspaceByID), }, nil - } diff --git a/go/internal/services/caches/op.go b/go/internal/services/caches/op.go new file mode 100644 index 0000000000..f379580570 --- /dev/null +++ b/go/internal/services/caches/op.go @@ -0,0 +1,23 @@ +package caches + +import ( + "database/sql" + "errors" + + "github.com/unkeyed/unkey/go/pkg/cache" +) + +// DefaultFindFirstOp returns the appropriate cache operation based on the sql error +func DefaultFindFirstOp(err error) cache.Op { + if err == nil { + // everything went well and we have a row response + return cache.WriteValue + } + if errors.Is(err, sql.ErrNoRows) { + // the response is empty, we need to store that the row does not exist + return cache.WriteNull + } + // this is a noop in the cache + return cache.Noop + +} diff --git a/go/internal/services/keys/service.go b/go/internal/services/keys/service.go index 626d63f5e4..b2b27ead83 100644 --- a/go/internal/services/keys/service.go +++ b/go/internal/services/keys/service.go @@ -8,24 +8,26 @@ import ( ) type Config struct { - Logger logging.Logger - DB db.Database - Clock clock.Clock - KeyCache cache.Cache[string, db.Key] + Logger logging.Logger + DB db.Database + Clock clock.Clock + KeyCache cache.Cache[string, db.Key] + WorkspaceCache cache.Cache[string, db.Workspace] } type service struct { logger logging.Logger db db.Database // hash -> key - keyCache cache.Cache[string, db.Key] + keyCache cache.Cache[string, db.Key] + workspaceCache cache.Cache[string, db.Workspace] } func New(config Config) (*service, error) { - return &service{ - logger: config.Logger, - db: config.DB, - keyCache: config.KeyCache, + logger: config.Logger, + db: config.DB, + keyCache: config.KeyCache, + workspaceCache: config.WorkspaceCache, }, nil } diff --git a/go/internal/services/keys/verify.go b/go/internal/services/keys/verify.go index 5e90255207..1d046b0a7e 100644 --- a/go/internal/services/keys/verify.go +++ b/go/internal/services/keys/verify.go @@ -5,8 +5,8 @@ import ( "database/sql" "errors" + "github.com/unkeyed/unkey/go/internal/services/caches" "github.com/unkeyed/unkey/go/pkg/assert" - "github.com/unkeyed/unkey/go/pkg/cache" "github.com/unkeyed/unkey/go/pkg/db" "github.com/unkeyed/unkey/go/pkg/fault" "github.com/unkeyed/unkey/go/pkg/hash" @@ -14,7 +14,7 @@ import ( ) func (s *service) Verify(ctx context.Context, rawKey string) (VerifyResponse, error) { - ctx, span := tracing.Start(ctx, "keys.Verify") + ctx, span := tracing.Start(ctx, "keys.VerifyRootKey") defer span.End() err := assert.NotEmpty(rawKey) @@ -25,19 +25,7 @@ func (s *service) Verify(ctx context.Context, rawKey string) (VerifyResponse, er key, err := s.keyCache.SWR(ctx, h, func(ctx context.Context) (db.Key, error) { return db.Query.FindKeyByHash(ctx, s.db.RO(), h) - }, func(err error) cache.Op { - if err == nil { - // everything went well and we have a key response - return cache.WriteValue - } - if errors.Is(err, sql.ErrNoRows) { - // the response is empty, we need to store that the key does not exist - return cache.WriteNull - } - // this is a noop in the cache - return cache.Noop - - }) + }, caches.DefaultFindFirstOp) if err != nil { if errors.Is(err, sql.ErrNoRows) { @@ -56,8 +44,13 @@ func (s *service) Verify(ctx context.Context, rawKey string) (VerifyResponse, er // Following are various checks to ensure the validity of the key // - Is it enabled? + // - Is it deleted? // - Is it expired? // - Is it ratelimited? + // - Is the related workspace deleted? + // - Is the related workspace disabled? + // - Is the related forWorkspace deleted? + // - Is the related forWorkspace disabled? if key.DeletedAtM.Valid { return VerifyResponse{}, fault.New( @@ -73,8 +66,33 @@ func (s *service) Verify(ctx context.Context, rawKey string) (VerifyResponse, er ) } + authorizedWorkspaceID := key.WorkspaceID + if key.ForWorkspaceID.Valid { + authorizedWorkspaceID = key.ForWorkspaceID.String + } + + ws, err := s.workspaceCache.SWR(ctx, authorizedWorkspaceID, func(ctx context.Context) (db.Workspace, error) { + return db.Query.FindWorkspaceByID(ctx, s.db.RW(), authorizedWorkspaceID) + }, caches.DefaultFindFirstOp) + + if err != nil { + s.logger.Error("unable to load workspace", + "error", err.Error()) + return VerifyResponse{}, fault.Wrap( + err, + fault.WithDesc("unable to load workspace", "We could not load the requested workspace."), + ) + } + + if !ws.Enabled { + return VerifyResponse{}, fault.New( + "workspace is disabled", + fault.WithDesc("workspace disabled", "The workspace is disabled."), + ) + } + res := VerifyResponse{ - AuthorizedWorkspaceID: key.WorkspaceID, + AuthorizedWorkspaceID: authorizedWorkspaceID, KeyID: key.ID, } // Root keys store the user's workspace id in `ForWorkspaceID` and we're diff --git a/go/pkg/auditlog/log.go b/go/pkg/auditlog/log.go new file mode 100644 index 0000000000..74cd38cb4a --- /dev/null +++ b/go/pkg/auditlog/log.go @@ -0,0 +1,32 @@ +package auditlog + +// AuditLog represents an pretty struct of an audit log entry that we will write into the db +type AuditLog struct { + Event AuditLogEvent + WorkspaceID string + Display string + Bucket string + + ActorID string + ActorType AuditLogActor + ActorName string + + // json encoded metadata + ActorMeta map[string]any + + // There can be multiple resources affected by the action + Resources []AuditLogResource + + RemoteIP string + UserAgent string +} + +// AuditLogResource represents a single resource that was affected by the action +type AuditLogResource struct { + ID string + DisplayName string + Name string + // json encoded metadata + Meta map[string]any + Type AuditLogResourceType +} diff --git a/go/pkg/auditlog/target.go b/go/pkg/auditlog/target.go new file mode 100644 index 0000000000..668a62191d --- /dev/null +++ b/go/pkg/auditlog/target.go @@ -0,0 +1,20 @@ +package auditlog + +// AuditLogResourceType represents the possible type in the audit log targets +type AuditLogResourceType string + +const ( + APIResourceType AuditLogResourceType = "api" + AuditLogBucketResourceType AuditLogResourceType = "auditLogBucket" + IdentityResourceType AuditLogResourceType = "identity" + KeyAuthResourceType AuditLogResourceType = "keyAuth" + KeyResourceType AuditLogResourceType = "key" + PermissionResourceType AuditLogResourceType = "permission" + RatelimitResourceType AuditLogResourceType = "ratelimit" + RatelimitNamespaceResourceType AuditLogResourceType = "ratelimitNamespace" + RatelimitOverrideResourceType AuditLogResourceType = "ratelimitOverride" + RoleResourceType AuditLogResourceType = "role" + VercelBindingResourceType AuditLogResourceType = "vercelBinding" + VercelIntegrationResourceType AuditLogResourceType = "vercelIntegration" + WorkspaceResourceType AuditLogResourceType = "workspace" +) diff --git a/go/pkg/db/audit_log_bucket_id_find_by_workspace_and_name.sql_generated.go b/go/pkg/db/audit_log_bucket_id_find_by_workspace_and_name.sql_generated.go new file mode 100644 index 0000000000..8fafc323d7 --- /dev/null +++ b/go/pkg/db/audit_log_bucket_id_find_by_workspace_and_name.sql_generated.go @@ -0,0 +1,29 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.27.0 +// source: audit_log_bucket_id_find_by_workspace_and_name.sql + +package db + +import ( + "context" +) + +const findAuditLogBucketIDByWorkspaceIDAndName = `-- name: FindAuditLogBucketIDByWorkspaceIDAndName :one +SELECT id FROM audit_log_bucket WHERE workspace_id = ? AND name = ? +` + +type FindAuditLogBucketIDByWorkspaceIDAndNameParams struct { + WorkspaceID string `db:"workspace_id"` + Name string `db:"name"` +} + +// FindAuditLogBucketIDByWorkspaceIDAndName +// +// SELECT id FROM audit_log_bucket WHERE workspace_id = ? AND name = ? +func (q *Queries) FindAuditLogBucketIDByWorkspaceIDAndName(ctx context.Context, db DBTX, arg FindAuditLogBucketIDByWorkspaceIDAndNameParams) (string, error) { + row := db.QueryRowContext(ctx, findAuditLogBucketIDByWorkspaceIDAndName, arg.WorkspaceID, arg.Name) + var id string + err := row.Scan(&id) + return id, err +} diff --git a/go/pkg/db/audit_log_insert.sql_generated.go b/go/pkg/db/audit_log_insert.sql_generated.go index 0f01ec612b..5d40a500ed 100644 --- a/go/pkg/db/audit_log_insert.sql_generated.go +++ b/go/pkg/db/audit_log_insert.sql_generated.go @@ -8,7 +8,6 @@ package db import ( "context" "database/sql" - "encoding/json" ) const insertAuditLog = `-- name: InsertAuditLog :exec @@ -16,6 +15,7 @@ INSERT INTO ` + "`" + `audit_log` + "`" + ` ( id, workspace_id, bucket_id, + bucket, event, time, display, @@ -39,24 +39,26 @@ INSERT INTO ` + "`" + `audit_log` + "`" + ` ( ?, ?, ?, + ?, ? ) ` type InsertAuditLogParams struct { - ID string `db:"id"` - WorkspaceID string `db:"workspace_id"` - BucketID string `db:"bucket_id"` - Event string `db:"event"` - Time int64 `db:"time"` - Display string `db:"display"` - RemoteIp sql.NullString `db:"remote_ip"` - UserAgent sql.NullString `db:"user_agent"` - ActorType string `db:"actor_type"` - ActorID string `db:"actor_id"` - ActorName sql.NullString `db:"actor_name"` - ActorMeta json.RawMessage `db:"actor_meta"` - CreatedAt int64 `db:"created_at"` + ID string `db:"id"` + WorkspaceID string `db:"workspace_id"` + BucketID string `db:"bucket_id"` + Bucket string `db:"bucket"` + Event string `db:"event"` + Time int64 `db:"time"` + Display string `db:"display"` + RemoteIp sql.NullString `db:"remote_ip"` + UserAgent sql.NullString `db:"user_agent"` + ActorType string `db:"actor_type"` + ActorID string `db:"actor_id"` + ActorName sql.NullString `db:"actor_name"` + ActorMeta []byte `db:"actor_meta"` + CreatedAt int64 `db:"created_at"` } // InsertAuditLog @@ -65,6 +67,7 @@ type InsertAuditLogParams struct { // id, // workspace_id, // bucket_id, +// bucket, // event, // time, // display, @@ -88,6 +91,7 @@ type InsertAuditLogParams struct { // ?, // ?, // ?, +// ?, // ? // ) func (q *Queries) InsertAuditLog(ctx context.Context, db DBTX, arg InsertAuditLogParams) error { @@ -95,6 +99,7 @@ func (q *Queries) InsertAuditLog(ctx context.Context, db DBTX, arg InsertAuditLo arg.ID, arg.WorkspaceID, arg.BucketID, + arg.Bucket, arg.Event, arg.Time, arg.Display, diff --git a/go/pkg/db/audit_log_target_insert.sql_generated.go b/go/pkg/db/audit_log_target_insert.sql_generated.go index 27f764353f..8ed952b300 100644 --- a/go/pkg/db/audit_log_target_insert.sql_generated.go +++ b/go/pkg/db/audit_log_target_insert.sql_generated.go @@ -8,13 +8,13 @@ package db import ( "context" "database/sql" - "encoding/json" ) const insertAuditLogTarget = `-- name: InsertAuditLogTarget :exec INSERT INTO ` + "`" + `audit_log_target` + "`" + ` ( workspace_id, bucket_id, + bucket, audit_log_id, display_name, type, @@ -31,20 +31,22 @@ INSERT INTO ` + "`" + `audit_log_target` + "`" + ` ( ?, ?, ?, + ?, ? ) ` type InsertAuditLogTargetParams struct { - WorkspaceID string `db:"workspace_id"` - BucketID string `db:"bucket_id"` - AuditLogID string `db:"audit_log_id"` - DisplayName string `db:"display_name"` - Type string `db:"type"` - ID string `db:"id"` - Name sql.NullString `db:"name"` - Meta json.RawMessage `db:"meta"` - CreatedAt int64 `db:"created_at"` + WorkspaceID string `db:"workspace_id"` + BucketID string `db:"bucket_id"` + Bucket string `db:"bucket"` + AuditLogID string `db:"audit_log_id"` + DisplayName string `db:"display_name"` + Type string `db:"type"` + ID string `db:"id"` + Name sql.NullString `db:"name"` + Meta []byte `db:"meta"` + CreatedAt int64 `db:"created_at"` } // InsertAuditLogTarget @@ -52,6 +54,7 @@ type InsertAuditLogTargetParams struct { // INSERT INTO `audit_log_target` ( // workspace_id, // bucket_id, +// bucket, // audit_log_id, // display_name, // type, @@ -68,12 +71,14 @@ type InsertAuditLogTargetParams struct { // ?, // ?, // ?, +// ?, // ? // ) func (q *Queries) InsertAuditLogTarget(ctx context.Context, db DBTX, arg InsertAuditLogTargetParams) error { _, err := db.ExecContext(ctx, insertAuditLogTarget, arg.WorkspaceID, arg.BucketID, + arg.Bucket, arg.AuditLogID, arg.DisplayName, arg.Type, diff --git a/go/pkg/db/identity_find_by_id.sql_generated.go b/go/pkg/db/identity_find_by_id.sql_generated.go new file mode 100644 index 0000000000..caa0ab9ae6 --- /dev/null +++ b/go/pkg/db/identity_find_by_id.sql_generated.go @@ -0,0 +1,41 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.27.0 +// source: identity_find_by_id.sql + +package db + +import ( + "context" + "database/sql" +) + +const findIdentityByID = `-- name: FindIdentityByID :one +SELECT external_id, workspace_id, environment, meta, created_at, updated_at FROM identities WHERE id = ? +` + +type FindIdentityByIDRow struct { + ExternalID string `db:"external_id"` + WorkspaceID string `db:"workspace_id"` + Environment string `db:"environment"` + Meta []byte `db:"meta"` + CreatedAt int64 `db:"created_at"` + UpdatedAt sql.NullInt64 `db:"updated_at"` +} + +// FindIdentityByID +// +// SELECT external_id, workspace_id, environment, meta, created_at, updated_at FROM identities WHERE id = ? +func (q *Queries) FindIdentityByID(ctx context.Context, db DBTX, id string) (FindIdentityByIDRow, error) { + row := db.QueryRowContext(ctx, findIdentityByID, id) + var i FindIdentityByIDRow + err := row.Scan( + &i.ExternalID, + &i.WorkspaceID, + &i.Environment, + &i.Meta, + &i.CreatedAt, + &i.UpdatedAt, + ) + return i, err +} diff --git a/go/pkg/db/identity_find_ratelimits_by_id.sql_generated.go b/go/pkg/db/identity_find_ratelimits_by_id.sql_generated.go new file mode 100644 index 0000000000..26dfbcf657 --- /dev/null +++ b/go/pkg/db/identity_find_ratelimits_by_id.sql_generated.go @@ -0,0 +1,59 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.27.0 +// source: identity_find_ratelimits_by_id.sql + +package db + +import ( + "context" + "database/sql" +) + +const findRatelimitsByIdentityID = `-- name: FindRatelimitsByIdentityID :many +SELECT id, name, workspace_id, created_at, updated_at, ` + "`" + `limit` + "`" + `, duration FROM ratelimits WHERE identity_id = ? +` + +type FindRatelimitsByIdentityIDRow struct { + ID string `db:"id"` + Name string `db:"name"` + WorkspaceID string `db:"workspace_id"` + CreatedAt int64 `db:"created_at"` + UpdatedAt sql.NullInt64 `db:"updated_at"` + Limit int32 `db:"limit"` + Duration int64 `db:"duration"` +} + +// FindRatelimitsByIdentityID +// +// SELECT id, name, workspace_id, created_at, updated_at, `limit`, duration FROM ratelimits WHERE identity_id = ? +func (q *Queries) FindRatelimitsByIdentityID(ctx context.Context, db DBTX, identityID sql.NullString) ([]FindRatelimitsByIdentityIDRow, error) { + rows, err := db.QueryContext(ctx, findRatelimitsByIdentityID, identityID) + if err != nil { + return nil, err + } + defer rows.Close() + var items []FindRatelimitsByIdentityIDRow + for rows.Next() { + var i FindRatelimitsByIdentityIDRow + if err := rows.Scan( + &i.ID, + &i.Name, + &i.WorkspaceID, + &i.CreatedAt, + &i.UpdatedAt, + &i.Limit, + &i.Duration, + ); err != nil { + return nil, err + } + items = append(items, i) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} diff --git a/go/pkg/db/identity_insert.sql_generated.go b/go/pkg/db/identity_insert.sql_generated.go new file mode 100644 index 0000000000..a3e8c97be2 --- /dev/null +++ b/go/pkg/db/identity_insert.sql_generated.go @@ -0,0 +1,66 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.27.0 +// source: identity_insert.sql + +package db + +import ( + "context" +) + +const insertIdentity = `-- name: InsertIdentity :exec +INSERT INTO ` + "`" + `identities` + "`" + ` ( + id, + external_id, + workspace_id, + environment, + created_at, + meta +) VALUES ( + ?, + ?, + ?, + ?, + ?, + ? +) +` + +type InsertIdentityParams struct { + ID string `db:"id"` + ExternalID string `db:"external_id"` + WorkspaceID string `db:"workspace_id"` + Environment string `db:"environment"` + CreatedAt int64 `db:"created_at"` + Meta []byte `db:"meta"` +} + +// InsertIdentity +// +// INSERT INTO `identities` ( +// id, +// external_id, +// workspace_id, +// environment, +// created_at, +// meta +// ) VALUES ( +// ?, +// ?, +// ?, +// ?, +// ?, +// ? +// ) +func (q *Queries) InsertIdentity(ctx context.Context, db DBTX, arg InsertIdentityParams) error { + _, err := db.ExecContext(ctx, insertIdentity, + arg.ID, + arg.ExternalID, + arg.WorkspaceID, + arg.Environment, + arg.CreatedAt, + arg.Meta, + ) + return err +} diff --git a/go/pkg/db/identity_insert_ratelimit.sql_generated.go b/go/pkg/db/identity_insert_ratelimit.sql_generated.go new file mode 100644 index 0000000000..dda245eb67 --- /dev/null +++ b/go/pkg/db/identity_insert_ratelimit.sql_generated.go @@ -0,0 +1,73 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.27.0 +// source: identity_insert_ratelimit.sql + +package db + +import ( + "context" + "database/sql" +) + +const insertIdentityRatelimit = `-- name: InsertIdentityRatelimit :exec +INSERT INTO ` + "`" + `ratelimits` + "`" + ` ( + id, + workspace_id, + identity_id, + name, + ` + "`" + `limit` + "`" + `, + duration, + created_at +) VALUES ( + ?, + ?, + ?, + ?, + ?, + ?, + ? +) +` + +type InsertIdentityRatelimitParams struct { + ID string `db:"id"` + WorkspaceID string `db:"workspace_id"` + IdentityID sql.NullString `db:"identity_id"` + Name string `db:"name"` + Limit int32 `db:"limit"` + Duration int64 `db:"duration"` + CreatedAt int64 `db:"created_at"` +} + +// InsertIdentityRatelimit +// +// INSERT INTO `ratelimits` ( +// id, +// workspace_id, +// identity_id, +// name, +// `limit`, +// duration, +// created_at +// ) VALUES ( +// ?, +// ?, +// ?, +// ?, +// ?, +// ?, +// ? +// ) +func (q *Queries) InsertIdentityRatelimit(ctx context.Context, db DBTX, arg InsertIdentityRatelimitParams) error { + _, err := db.ExecContext(ctx, insertIdentityRatelimit, + arg.ID, + arg.WorkspaceID, + arg.IdentityID, + arg.Name, + arg.Limit, + arg.Duration, + arg.CreatedAt, + ) + return err +} diff --git a/go/pkg/db/key_find_by_hash.sql_generated.go b/go/pkg/db/key_find_by_hash.sql_generated.go index b8862961c8..5c1c0695da 100644 --- a/go/pkg/db/key_find_by_hash.sql_generated.go +++ b/go/pkg/db/key_find_by_hash.sql_generated.go @@ -10,18 +10,12 @@ import ( ) const findKeyByHash = `-- name: FindKeyByHash :one -SELECT - id, key_auth_id, hash, start, workspace_id, for_workspace_id, name, owner_id, identity_id, meta, expires, created_at_m, updated_at_m, deleted_at_m, refill_day, refill_amount, last_refill_at, enabled, remaining_requests, ratelimit_async, ratelimit_limit, ratelimit_duration, environment -FROM ` + "`" + `keys` + "`" + ` -WHERE hash = ? +SELECT id, key_auth_id, hash, start, workspace_id, for_workspace_id, name, owner_id, identity_id, meta, expires, created_at_m, updated_at_m, deleted_at_m, refill_day, refill_amount, last_refill_at, enabled, remaining_requests, ratelimit_async, ratelimit_limit, ratelimit_duration, environment FROM ` + "`" + `keys` + "`" + ` WHERE hash = ? ` // FindKeyByHash // -// SELECT -// id, key_auth_id, hash, start, workspace_id, for_workspace_id, name, owner_id, identity_id, meta, expires, created_at_m, updated_at_m, deleted_at_m, refill_day, refill_amount, last_refill_at, enabled, remaining_requests, ratelimit_async, ratelimit_limit, ratelimit_duration, environment -// FROM `keys` -// WHERE hash = ? +// SELECT id, key_auth_id, hash, start, workspace_id, for_workspace_id, name, owner_id, identity_id, meta, expires, created_at_m, updated_at_m, deleted_at_m, refill_day, refill_amount, last_refill_at, enabled, remaining_requests, ratelimit_async, ratelimit_limit, ratelimit_duration, environment FROM `keys` WHERE hash = ? func (q *Queries) FindKeyByHash(ctx context.Context, db DBTX, hash string) (Key, error) { row := db.QueryRowContext(ctx, findKeyByHash, hash) var i Key diff --git a/go/pkg/db/models_generated.go b/go/pkg/db/models_generated.go index e2c4536eec..987eb58547 100644 --- a/go/pkg/db/models_generated.go +++ b/go/pkg/db/models_generated.go @@ -277,43 +277,35 @@ type Api struct { } type AuditLog struct { - ID string `db:"id"` - WorkspaceID string `db:"workspace_id"` - BucketID string `db:"bucket_id"` - Event string `db:"event"` - Time int64 `db:"time"` - Display string `db:"display"` - RemoteIp sql.NullString `db:"remote_ip"` - UserAgent sql.NullString `db:"user_agent"` - ActorType string `db:"actor_type"` - ActorID string `db:"actor_id"` - ActorName sql.NullString `db:"actor_name"` - ActorMeta json.RawMessage `db:"actor_meta"` - CreatedAt int64 `db:"created_at"` - UpdatedAt sql.NullInt64 `db:"updated_at"` -} - -type AuditLogBucket struct { - ID string `db:"id"` - WorkspaceID string `db:"workspace_id"` - Name string `db:"name"` - RetentionDays sql.NullInt32 `db:"retention_days"` - CreatedAt int64 `db:"created_at"` - UpdatedAt sql.NullInt64 `db:"updated_at"` - DeleteProtection sql.NullBool `db:"delete_protection"` + ID string `db:"id"` + WorkspaceID string `db:"workspace_id"` + BucketID string `db:"bucket_id"` + Bucket string `db:"bucket"` + Event string `db:"event"` + Time int64 `db:"time"` + Display string `db:"display"` + RemoteIp sql.NullString `db:"remote_ip"` + UserAgent sql.NullString `db:"user_agent"` + ActorType string `db:"actor_type"` + ActorID string `db:"actor_id"` + ActorName sql.NullString `db:"actor_name"` + ActorMeta []byte `db:"actor_meta"` + CreatedAt int64 `db:"created_at"` + UpdatedAt sql.NullInt64 `db:"updated_at"` } type AuditLogTarget struct { - WorkspaceID string `db:"workspace_id"` - BucketID string `db:"bucket_id"` - AuditLogID string `db:"audit_log_id"` - DisplayName string `db:"display_name"` - Type string `db:"type"` - ID string `db:"id"` - Name sql.NullString `db:"name"` - Meta json.RawMessage `db:"meta"` - CreatedAt int64 `db:"created_at"` - UpdatedAt sql.NullInt64 `db:"updated_at"` + WorkspaceID string `db:"workspace_id"` + BucketID string `db:"bucket_id"` + AuditLogID string `db:"audit_log_id"` + Bucket string `db:"bucket"` + DisplayName string `db:"display_name"` + Type string `db:"type"` + ID string `db:"id"` + Name sql.NullString `db:"name"` + Meta []byte `db:"meta"` + CreatedAt int64 `db:"created_at"` + UpdatedAt sql.NullInt64 `db:"updated_at"` } type EncryptedKey struct { @@ -326,13 +318,13 @@ type EncryptedKey struct { } type Identity struct { - ID string `db:"id"` - ExternalID string `db:"external_id"` - WorkspaceID string `db:"workspace_id"` - Environment string `db:"environment"` - CreatedAt int64 `db:"created_at"` - UpdatedAt sql.NullInt64 `db:"updated_at"` - Meta json.RawMessage `db:"meta"` + ID string `db:"id"` + ExternalID string `db:"external_id"` + WorkspaceID string `db:"workspace_id"` + Environment string `db:"environment"` + CreatedAt int64 `db:"created_at"` + UpdatedAt sql.NullInt64 `db:"updated_at"` + Meta []byte `db:"meta"` } type Key struct { diff --git a/go/pkg/db/querier_generated.go b/go/pkg/db/querier_generated.go index 9c8f388a64..12bd54fce1 100644 --- a/go/pkg/db/querier_generated.go +++ b/go/pkg/db/querier_generated.go @@ -16,12 +16,13 @@ type Querier interface { // SET deleted_at_m = ? // WHERE id = ? DeleteRatelimitNamespace(ctx context.Context, db DBTX, arg DeleteRatelimitNamespaceParams) (sql.Result, error) + //FindIdentityByID + // + // SELECT external_id, workspace_id, environment, meta, created_at, updated_at FROM identities WHERE id = ? + FindIdentityByID(ctx context.Context, db DBTX, id string) (FindIdentityByIDRow, error) //FindKeyByHash // - // SELECT - // id, key_auth_id, hash, start, workspace_id, for_workspace_id, name, owner_id, identity_id, meta, expires, created_at_m, updated_at_m, deleted_at_m, refill_day, refill_amount, last_refill_at, enabled, remaining_requests, ratelimit_async, ratelimit_limit, ratelimit_duration, environment - // FROM `keys` - // WHERE hash = ? + // SELECT id, key_auth_id, hash, start, workspace_id, for_workspace_id, name, owner_id, identity_id, meta, expires, created_at_m, updated_at_m, deleted_at_m, refill_day, refill_amount, last_refill_at, enabled, remaining_requests, ratelimit_async, ratelimit_limit, ratelimit_duration, environment FROM `keys` WHERE hash = ? FindKeyByHash(ctx context.Context, db DBTX, hash string) (Key, error) //FindKeyByID // @@ -157,6 +158,10 @@ type Querier interface { // AND namespace_id = ? // AND identifier = ? FindRatelimitOverridesByIdentifier(ctx context.Context, db DBTX, arg FindRatelimitOverridesByIdentifierParams) (RatelimitOverride, error) + //FindRatelimitsByIdentityID + // + // SELECT id, name, workspace_id, created_at, updated_at, `limit`, duration FROM ratelimits WHERE identity_id = ? + FindRatelimitsByIdentityID(ctx context.Context, db DBTX, identityID sql.NullString) ([]FindRatelimitsByIdentityIDRow, error) //FindWorkspaceByID // // SELECT id, tenant_id, org_id, name, plan, tier, stripe_customer_id, stripe_subscription_id, trial_ends, beta_features, features, plan_locked_until, plan_downgrade_request, plan_changed, enabled, delete_protection, created_at_m, updated_at_m, deleted_at_m FROM `workspaces` @@ -174,6 +179,7 @@ type Querier interface { // id, // workspace_id, // bucket_id, + // bucket, // event, // time, // display, @@ -197,6 +203,7 @@ type Querier interface { // ?, // ?, // ?, + // ?, // ? // ) InsertAuditLog(ctx context.Context, db DBTX, arg InsertAuditLogParams) error @@ -205,6 +212,7 @@ type Querier interface { // INSERT INTO `audit_log_target` ( // workspace_id, // bucket_id, + // bucket, // audit_log_id, // display_name, // type, @@ -221,9 +229,48 @@ type Querier interface { // ?, // ?, // ?, + // ?, // ? // ) InsertAuditLogTarget(ctx context.Context, db DBTX, arg InsertAuditLogTargetParams) error + //InsertIdentity + // + // INSERT INTO `identities` ( + // id, + // external_id, + // workspace_id, + // environment, + // created_at, + // meta + // ) VALUES ( + // ?, + // ?, + // ?, + // ?, + // ?, + // ? + // ) + InsertIdentity(ctx context.Context, db DBTX, arg InsertIdentityParams) error + //InsertIdentityRatelimit + // + // INSERT INTO `ratelimits` ( + // id, + // workspace_id, + // identity_id, + // name, + // `limit`, + // duration, + // created_at + // ) VALUES ( + // ?, + // ?, + // ?, + // ?, + // ?, + // ?, + // ? + // ) + InsertIdentityRatelimit(ctx context.Context, db DBTX, arg InsertIdentityRatelimitParams) error //InsertKey // // INSERT INTO `keys` ( diff --git a/go/pkg/db/queries/audit_log_insert.sql b/go/pkg/db/queries/audit_log_insert.sql index 63dd20f407..ea3c22dbdc 100644 --- a/go/pkg/db/queries/audit_log_insert.sql +++ b/go/pkg/db/queries/audit_log_insert.sql @@ -3,6 +3,7 @@ INSERT INTO `audit_log` ( id, workspace_id, bucket_id, + bucket, event, time, display, @@ -17,6 +18,7 @@ INSERT INTO `audit_log` ( sqlc.arg(id), sqlc.arg(workspace_id), sqlc.arg(bucket_id), + sqlc.arg(bucket), sqlc.arg(event), sqlc.arg(time), sqlc.arg(display), diff --git a/go/pkg/db/queries/audit_log_target_insert.sql b/go/pkg/db/queries/audit_log_target_insert.sql index 2354e82f0b..016befc63e 100644 --- a/go/pkg/db/queries/audit_log_target_insert.sql +++ b/go/pkg/db/queries/audit_log_target_insert.sql @@ -2,6 +2,7 @@ INSERT INTO `audit_log_target` ( workspace_id, bucket_id, + bucket, audit_log_id, display_name, type, @@ -12,6 +13,7 @@ INSERT INTO `audit_log_target` ( ) VALUES ( sqlc.arg(workspace_id), sqlc.arg(bucket_id), + sqlc.arg(bucket), sqlc.arg(audit_log_id), sqlc.arg(display_name), sqlc.arg(type), diff --git a/go/pkg/db/queries/identity_find_by_id.sql b/go/pkg/db/queries/identity_find_by_id.sql new file mode 100644 index 0000000000..622afe8ccf --- /dev/null +++ b/go/pkg/db/queries/identity_find_by_id.sql @@ -0,0 +1,2 @@ +-- name: FindIdentityByID :one +SELECT external_id, workspace_id, environment, meta, created_at, updated_at FROM identities WHERE id = sqlc.arg(id) diff --git a/go/pkg/db/queries/identity_find_ratelimits_by_id.sql b/go/pkg/db/queries/identity_find_ratelimits_by_id.sql new file mode 100644 index 0000000000..61a417dde7 --- /dev/null +++ b/go/pkg/db/queries/identity_find_ratelimits_by_id.sql @@ -0,0 +1,2 @@ +-- name: FindRatelimitsByIdentityID :many +SELECT id, name, workspace_id, created_at, updated_at, `limit`, duration FROM ratelimits WHERE identity_id = sqlc.arg(identity_id) diff --git a/go/pkg/db/queries/identity_insert.sql b/go/pkg/db/queries/identity_insert.sql new file mode 100644 index 0000000000..e459f7d169 --- /dev/null +++ b/go/pkg/db/queries/identity_insert.sql @@ -0,0 +1,16 @@ +-- name: InsertIdentity :exec +INSERT INTO `identities` ( + id, + external_id, + workspace_id, + environment, + created_at, + meta +) VALUES ( + sqlc.arg('id'), + sqlc.arg('external_id'), + sqlc.arg('workspace_id'), + sqlc.arg('environment'), + sqlc.arg('created_at'), + sqlc.arg('meta') +); diff --git a/go/pkg/db/queries/identity_insert_ratelimit.sql b/go/pkg/db/queries/identity_insert_ratelimit.sql new file mode 100644 index 0000000000..094551fd5a --- /dev/null +++ b/go/pkg/db/queries/identity_insert_ratelimit.sql @@ -0,0 +1,18 @@ +-- name: InsertIdentityRatelimit :exec +INSERT INTO `ratelimits` ( + id, + workspace_id, + identity_id, + name, + `limit`, + duration, + created_at +) VALUES ( + sqlc.arg('id'), + sqlc.arg('workspace_id'), + sqlc.arg('identity_id'), + sqlc.arg('name'), + sqlc.arg('limit'), + sqlc.arg('duration'), + sqlc.arg('created_at') +); diff --git a/go/pkg/db/queries/key_find_by_hash.sql b/go/pkg/db/queries/key_find_by_hash.sql index bb03710055..1df33fca13 100644 --- a/go/pkg/db/queries/key_find_by_hash.sql +++ b/go/pkg/db/queries/key_find_by_hash.sql @@ -1,6 +1,3 @@ -- name: FindKeyByHash :one -SELECT - * -FROM `keys` -WHERE hash = sqlc.arg(hash); +SELECT * FROM `keys` WHERE hash = sqlc.arg(hash); diff --git a/go/pkg/db/schema.sql b/go/pkg/db/schema.sql index bc776d203d..e3e2f33e3a 100644 --- a/go/pkg/db/schema.sql +++ b/go/pkg/db/schema.sql @@ -246,6 +246,7 @@ CREATE TABLE `audit_log` ( `id` varchar(256) NOT NULL, `workspace_id` varchar(256) NOT NULL, `bucket_id` varchar(256) NOT NULL, + `bucket` varchar(256) NOT NULL, `event` varchar(256) NOT NULL, `time` bigint NOT NULL, `display` varchar(256) NOT NULL, @@ -260,22 +261,11 @@ CREATE TABLE `audit_log` ( CONSTRAINT `audit_log_id` PRIMARY KEY(`id`) ); -CREATE TABLE `audit_log_bucket` ( - `id` varchar(256) NOT NULL, - `workspace_id` varchar(256) NOT NULL, - `name` varchar(256) NOT NULL, - `retention_days` int, - `created_at` bigint NOT NULL, - `updated_at` bigint, - `delete_protection` boolean DEFAULT false, - CONSTRAINT `audit_log_bucket_id` PRIMARY KEY(`id`), - CONSTRAINT `unique_name_per_workspace_idx` UNIQUE(`workspace_id`,`name`) -); - CREATE TABLE `audit_log_target` ( `workspace_id` varchar(256) NOT NULL, `bucket_id` varchar(256) NOT NULL, `audit_log_id` varchar(256) NOT NULL, + `bucket` varchar(256) NOT NULL, `display_name` varchar(256) NOT NULL, `type` varchar(256) NOT NULL, `id` varchar(256) NOT NULL, diff --git a/go/pkg/db/sqlc.json b/go/pkg/db/sqlc.json index 6c48080f1d..117e2455d6 100644 --- a/go/pkg/db/sqlc.json +++ b/go/pkg/db/sqlc.json @@ -23,7 +23,16 @@ "output_db_file_name": "delete_me", "rename": { "Quotum": "Quotas" - } + }, + "overrides": [ + { + "db_type": "json", + "go_type": { + "type": "[]byte" + }, + "nullable": true + } + ] } } } diff --git a/go/pkg/fault/tag.go b/go/pkg/fault/tag.go index d8f378abe5..345c1fa591 100644 --- a/go/pkg/fault/tag.go +++ b/go/pkg/fault/tag.go @@ -20,6 +20,9 @@ const ( // An object was not found in the system. NOT_FOUND Tag = "NOT_FOUND" + // Object already exists + CONFLICT Tag = "CONFLICT" + UNAUTHORIZED Tag = "UNAUTHORIZED" FORBIDDEN Tag = "FORBIDDEN" INSUFFICIENT_PERMISSIONS Tag = "INSUFFICIENT_PERMISSIONS" diff --git a/go/pkg/testutil/http.go b/go/pkg/testutil/http.go index f0329afdcd..d49f973115 100644 --- a/go/pkg/testutil/http.go +++ b/go/pkg/testutil/http.go @@ -9,6 +9,7 @@ import ( "testing" "github.com/stretchr/testify/require" + "github.com/unkeyed/unkey/go/internal/services/auditlogs" "github.com/unkeyed/unkey/go/internal/services/caches" "github.com/unkeyed/unkey/go/internal/services/keys" "github.com/unkeyed/unkey/go/internal/services/permissions" @@ -40,6 +41,7 @@ type Harness struct { Logger logging.Logger Keys keys.KeyService Permissions permissions.PermissionService + Auditlogs auditlogs.AuditLogService ClickHouse clickhouse.ClickHouse Ratelimit ratelimit.Service seeder *seed.Seeder @@ -78,10 +80,11 @@ func NewHarness(t *testing.T) *Harness { require.NoError(t, err) keyService, err := keys.New(keys.Config{ - Logger: logger, - DB: db, - Clock: clk, - KeyCache: caches.KeyByHash, + Logger: logger, + DB: db, + Clock: clk, + KeyCache: caches.KeyByHash, + WorkspaceCache: caches.WorkspaceByID, }) require.NoError(t, err) @@ -114,6 +117,8 @@ func NewHarness(t *testing.T) *Harness { // Create seeder seeder := seed.New(t, db) + seeder.Seed(context.Background()) + h := Harness{ t: t, Logger: logger, @@ -127,8 +132,11 @@ func NewHarness(t *testing.T) *Harness { DB: db, seeder: seeder, Clock: clk, - Caches: caches, - + Auditlogs: auditlogs.New(auditlogs.Config{ + DB: db, + Logger: logger, + }), + Caches: caches, middleware: []zen.Middleware{ zen.WithTracing(), zen.WithLogging(logger), diff --git a/go/pkg/testutil/seed/seed.go b/go/pkg/testutil/seed/seed.go index 84a295bbdf..18d4339b9b 100644 --- a/go/pkg/testutil/seed/seed.go +++ b/go/pkg/testutil/seed/seed.go @@ -19,6 +19,8 @@ type Resources struct { RootWorkspace db.Workspace RootKeyring db.KeyAuth UserWorkspace db.Workspace + + DifferentWorkspace db.Workspace } // Seeder provides methods to seed test data @@ -42,7 +44,7 @@ func (s *Seeder) Seed(ctx context.Context) { // Insert root workspace insertRootWorkspaceParams := db.InsertWorkspaceParams{ ID: uid.New("test_ws"), - TenantID: "unkey", + TenantID: uid.New("unkey"), Name: "unkey", CreatedAt: time.Now().UnixMilli(), } @@ -71,7 +73,7 @@ func (s *Seeder) Seed(ctx context.Context) { // Insert user workspace insertUserWorkspaceParams := db.InsertWorkspaceParams{ ID: uid.New("test_ws"), - TenantID: "user", + TenantID: uid.New("user"), Name: "user", CreatedAt: time.Now().UnixMilli(), } @@ -82,6 +84,18 @@ func (s *Seeder) Seed(ctx context.Context) { s.Resources.UserWorkspace, err = db.Query.FindWorkspaceByID(ctx, s.DB.RW(), insertUserWorkspaceParams.ID) require.NoError(s.t, err) + // Insert different workspace for permission tests + insertDifferentWorkspaceParams := db.InsertWorkspaceParams{ + ID: uid.New("test_ws"), + TenantID: uid.New("alice"), + Name: "alice", + CreatedAt: time.Now().UnixMilli(), + } + + err = db.Query.InsertWorkspace(ctx, s.DB.RW(), insertDifferentWorkspaceParams) + require.NoError(s.t, err) + s.Resources.DifferentWorkspace, err = db.Query.FindWorkspaceByID(ctx, s.DB.RW(), insertDifferentWorkspaceParams.ID) + require.NoError(s.t, err) } // CreateRootKey creates a root key with optional permissions @@ -149,5 +163,7 @@ func (s *Seeder) CreateRootKey(ctx context.Context, workspaceID string, permissi } } + s.t.Logf("created root key: %s", insertKeyParams.ID) + return key } diff --git a/go/pkg/zen/middleware_errors.go b/go/pkg/zen/middleware_errors.go index e0c86ae025..48158df73f 100644 --- a/go/pkg/zen/middleware_errors.go +++ b/go/pkg/zen/middleware_errors.go @@ -16,6 +16,7 @@ import ( // - BAD_REQUEST: 400 Bad Request // - UNAUTHORIZED: 401 Unauthorized // - FORBIDDEN: 403 Forbidden +// - CONFLICT: 409 Conflict // - PROTECTED_RESOURCE: 412 Precondition Failed // - Other errors: 500 Internal Server Error // @@ -153,6 +154,20 @@ func WithErrorHandling(logger logging.Logger) Middleware { Instance: nil, }, }) + case fault.CONFLICT: + return s.JSON(http.StatusConflict, openapi.ConflictErrorResponse{ + Meta: openapi.Meta{ + RequestId: s.RequestID(), + }, + Error: openapi.BaseError{ + + Title: "Another resource already uses this identifier", + Type: "https://unkey.com/docs/errors/conflict", + Detail: fault.UserFacingMessage(err), + Status: http.StatusConflict, + Instance: nil, + }, + }) case fault.DATABASE_ERROR: break // fall through to default 500 diff --git a/go/pkg/zen/session.go b/go/pkg/zen/session.go index 05209435d7..6e99f8bdaf 100644 --- a/go/pkg/zen/session.go +++ b/go/pkg/zen/session.go @@ -4,6 +4,7 @@ import ( "encoding/json" "fmt" "io" + "net" "net/http" "reflect" "strconv" @@ -57,6 +58,25 @@ func (s *Session) AuthorizedWorkspaceID() string { return s.workspaceID } +func (s *Session) UserAgent() string { + return s.r.UserAgent() +} + +func (s *Session) Location() string { + location := s.r.Header.Get("True-Client-Ip") + // Fall back to RemoteAddr + if location == "" { + host, _, err := net.SplitHostPort(s.r.RemoteAddr) + if err == nil { + location = host + } else { + location = s.r.RemoteAddr + } + } + + return location +} + // Request returns the underlying http.Request. // This allows direct access to the standard library request features. //