Skip to content

Commit

Permalink
use testcontainers
Browse files Browse the repository at this point in the history
  • Loading branch information
patrislav committed May 31, 2024
1 parent 8493797 commit d07e4db
Show file tree
Hide file tree
Showing 6 changed files with 194 additions and 550 deletions.
2 changes: 1 addition & 1 deletion docker/awslocal_ready_hook.sh
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
shopt -s expand_aliases

if [ ! "$(type -t awslocal)" = "alias" ] && [ ! -x "$(command -v awslocal)" ]; then
alias awslocal="AWS_ACCESS_KEY_ID=test AWS_SECRET_ACCESS_KEY=test AWS_DEFAULT_REGION=${DEFAULT_REGION:-$AWS_DEFAULT_REGION} aws --endpoint-url=http://${LOCALSTACK_HOST:-localhost}:4566"
alias awslocal="AWS_ACCESS_KEY_ID=test AWS_SECRET_ACCESS_KEY=test AWS_DEFAULT_REGION=${DEFAULT_REGION:-$AWS_DEFAULT_REGION} aws --endpoint-url=${LOCALSTACK_ENDPOINT:-http://${LOCALSTACK_HOST:-localhost}:4566}"
fi

awslocal kms create-key --region us-east-1 --tags '[{"TagKey":"_custom_id_","TagValue":"aeb99e0f-9e89-44de-a084-e1817af47778"}]'
Expand Down
65 changes: 19 additions & 46 deletions rpc/admin_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,10 @@ package rpc_test

import (
"context"
"crypto/x509"
"encoding/pem"
mathrand "math/rand"
"net/http"
"net/http/httptest"
"testing"

"github.com/0xsequence/nitrocontrol/enclave"
"github.com/0xsequence/waas-authenticator/data"
"github.com/0xsequence/waas-authenticator/proto"
"github.com/goware/validation"
"github.com/stretchr/testify/assert"
Expand All @@ -20,26 +15,13 @@ import (
const adminJWT = "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJoZWxsbyI6IndvcmxkIn0.etvI60-iOY2f9a3d1SBYmbrDllxcYm0rF8tB5YyUWwFMBSArAFG8a6ms1k3OtR9xe8uLTeeOC80eLOMWSUgQd_TZmu5RPNBYMMhcqWnl5H64chO2sFrRDdxUCnNYRccEnDesQACmqaf1bbDCFs8Hwh2O4_rHoscuJ7kb3XBCC2a52Dyh8EYTEXg8DJGmUFQX5XKKb35uurejcKo_5yK2onr26SVm_arl4CCcDeNITv1mP1aGvroj1PUVGTpnd9mScPAoecmihdiMMF9VdXU3KGNvK-l44Miq9-a9mnwOwZNtoxqQxlh-cmcNAV5cGh66zfbPnWKb9t9YrMY4wKtshg"

func TestRPC_GetTenant(t *testing.T) {
block, _ := pem.Decode([]byte(testPrivateKey))
privKey, err := x509.ParsePKCS1PrivateKey(block.Bytes)
require.NoError(t, err)

cfg := initConfig(t)

issuer, _, closeJWKS := issueAccessTokenAndRunJwksServer(t)
defer closeJWKS()

random := mathrand.New(mathrand.NewSource(42))
kmsClient := &kmsMock{random: random}
enc, err := enclave.New(context.Background(), enclave.DummyProvider, kmsClient, privKey)
require.NoError(t, err)
svc := initRPC(t)

tenant, _ := newTenant(t, enc, issuer)
dbClient := &dbMock{
sessions: map[string]*data.Session{},
tenants: map[uint64][]*data.Tenant{tenant.ProjectID: {tenant}},
}
svc := initRPC(cfg, enc, dbClient)
tenant, _ := newTenant(t, svc.Enclave, issuer)
require.NoError(t, svc.Tenants.Add(context.Background(), tenant))

srv := httptest.NewServer(svc.Handler())
defer srv.Close()
Expand All @@ -48,6 +30,7 @@ func TestRPC_GetTenant(t *testing.T) {
header := make(http.Header)
header.Set("Authorization", "Bearer "+adminJWT)
ctx, err := proto.WithHTTPRequestHeaders(context.Background(), header)
require.NoError(t, err)

t.Run("ExistingTenant", func(t *testing.T) {
tnt, err := c.GetTenant(ctx, 1)
Expand All @@ -65,26 +48,13 @@ func TestRPC_GetTenant(t *testing.T) {
}

func TestRPC_CreateTenant(t *testing.T) {
block, _ := pem.Decode([]byte(testPrivateKey))
privKey, err := x509.ParsePKCS1PrivateKey(block.Bytes)
require.NoError(t, err)

cfg := initConfig(t)

issuer, _, closeJWKS := issueAccessTokenAndRunJwksServer(t)
defer closeJWKS()

random := mathrand.New(mathrand.NewSource(42))
kmsClient := &kmsMock{random: random}
enc, err := enclave.New(context.Background(), enclave.DummyProvider, kmsClient, privKey)
require.NoError(t, err)
svc := initRPC(t)

tenant, _ := newTenant(t, enc, issuer)
dbClient := &dbMock{
sessions: map[string]*data.Session{},
tenants: map[uint64][]*data.Tenant{tenant.ProjectID: {tenant}},
}
svc := initRPC(cfg, enc, dbClient)
tenant, _ := newTenant(t, svc.Enclave, issuer)
require.NoError(t, svc.Tenants.Add(context.Background(), tenant))

srv := httptest.NewServer(svc.Handler())
defer srv.Close()
Expand All @@ -93,6 +63,7 @@ func TestRPC_CreateTenant(t *testing.T) {
header := make(http.Header)
header.Set("Authorization", "Bearer "+adminJWT)
ctx, err := proto.WithHTTPRequestHeaders(context.Background(), header)
require.NoError(t, err)

audience := []string{"audience"}
validOidcProviders := []*proto.OpenIdProvider{{Issuer: issuer, Audience: audience}}
Expand All @@ -110,48 +81,50 @@ func TestRPC_CreateTenant(t *testing.T) {
{Issuer: issuer, Audience: audience},
{Issuer: "INVALID", Audience: audience},
}
tnt, code, err := c.CreateTenant(ctx, 2, "WAAS_ACCESS_TOKEN", invalidOidcProviders, allowedOrigins, nil)
tnt, code, err := c.CreateTenant(ctx, currentProjectID.Add(1), "WAAS_ACCESS_TOKEN", invalidOidcProviders, allowedOrigins, nil)
assert.Nil(t, tnt)
assert.Empty(t, code)
assert.ErrorContains(t, err, "invalid oidcProviders")
})

t.Run("InvalidOrigin", func(t *testing.T) {
invalidOrigins := []string{"localhost"}
tnt, code, err := c.CreateTenant(ctx, 3, "WAAS_ACCESS_TOKEN", validOidcProviders, invalidOrigins, nil)
tnt, code, err := c.CreateTenant(ctx, currentProjectID.Add(1), "WAAS_ACCESS_TOKEN", validOidcProviders, invalidOrigins, nil)
assert.Nil(t, tnt)
assert.Empty(t, code)
assert.ErrorContains(t, err, "invalid allowedOrigins")
})

t.Run("InvalidPassword", func(t *testing.T) {
password := "Password123"
tnt, code, err := c.CreateTenant(ctx, 4, "WAAS_ACCESS_TOKEN", validOidcProviders, allowedOrigins, &password)
tnt, code, err := c.CreateTenant(ctx, currentProjectID.Add(1), "WAAS_ACCESS_TOKEN", validOidcProviders, allowedOrigins, &password)
assert.Nil(t, tnt)
assert.Empty(t, code)
assert.ErrorContains(t, err, "password must be at least 12 characters long")
})

t.Run("Success", func(t *testing.T) {
tnt, code, err := c.CreateTenant(ctx, 5, "WAAS_ACCESS_TOKEN", validOidcProviders, allowedOrigins, nil)
projectID := currentProjectID.Add(1)
tnt, code, err := c.CreateTenant(ctx, projectID, "WAAS_ACCESS_TOKEN", validOidcProviders, allowedOrigins, nil)
require.NoError(t, err)
assert.NotEmpty(t, code)
assert.NotNil(t, tnt)

assert.Equal(t, uint64(5), tnt.ProjectID)
assert.Equal(t, projectID, tnt.ProjectID)

assert.Contains(t, dbClient.tenants, tnt.ProjectID)
//assert.Contains(t, dbClient.tenants, tnt.ProjectID)
})

t.Run("SuccessWithPassword", func(t *testing.T) {
projectID := currentProjectID.Add(1)
password := "Password1234"
tnt, code, err := c.CreateTenant(ctx, 6, "WAAS_ACCESS_TOKEN", validOidcProviders, allowedOrigins, &password)
tnt, code, err := c.CreateTenant(ctx, projectID, "WAAS_ACCESS_TOKEN", validOidcProviders, allowedOrigins, &password)
require.NoError(t, err)
assert.Equal(t, password, code)
assert.NotNil(t, tnt)

assert.Equal(t, uint64(6), tnt.ProjectID)
assert.Equal(t, projectID, tnt.ProjectID)

assert.Contains(t, dbClient.tenants, tnt.ProjectID)
//assert.Contains(t, dbClient.tenants, tnt.ProjectID)
})
}
Loading

0 comments on commit d07e4db

Please sign in to comment.