KevinStephenson
Adding in weaviate code
b110593
raw
history blame
3.2 kB
// _ _
// __ _____ __ ___ ___ __ _| |_ ___
// \ \ /\ / / _ \/ _` \ \ / / |/ _` | __/ _ \
// \ V V / __/ (_| |\ V /| | (_| | || __/
// \_/\_/ \___|\__,_| \_/ |_|\__,_|\__\___|
//
// Copyright © 2016 - 2024 Weaviate B.V. All rights reserved.
//
// CONTACT: [email protected]
//
package auth_tests
import (
"context"
"os"
"testing"
"github.com/stretchr/testify/require"
"github.com/weaviate/weaviate-go-client/v4/weaviate/auth"
"github.com/weaviate/weaviate-go-client/v4/weaviate/fault"
"github.com/weaviate/weaviate/entities/models"
client "github.com/weaviate/weaviate-go-client/v4/weaviate"
)
const (
wcsUserOnAdmin = "[email protected]"
wcsUserNotOnAdmin = "[email protected]"
)
func TestAuthGraphQLUnauthenticated(t *testing.T) {
ctx := context.Background()
c := client.New(client.Config{Scheme: "http", Host: os.Getenv(weaviateEndpoint)})
_, err := c.GraphQL().Raw().WithQuery("{__schema {queryType {fields {name}}}}").Do(ctx)
require.NotNil(t, err)
}
func TestAuthGraphQLValidUserNotOnAdminlist(t *testing.T) {
pw := os.Getenv("WCS_DUMMY_CI_PW_2")
if pw == "" {
t.Skip("No password supplied")
}
ctx := context.Background()
conf := client.Config{
Scheme: "http",
Host: os.Getenv(weaviateEndpoint),
AuthConfig: auth.ResourceOwnerPasswordFlow{Username: wcsUserNotOnAdmin, Password: pw},
}
c, err := client.NewClient(conf)
require.Nil(t, err)
_, err = c.GraphQL().Raw().WithQuery("{__schema {queryType {fields {name}}}}").Do(ctx)
require.NotNil(t, err)
}
func TestAuthGraphQLValidUser(t *testing.T) {
pwAdminUser := os.Getenv("WCS_DUMMY_CI_PW")
pwNoAdminUser := os.Getenv("WCS_DUMMY_CI_PW_2")
if pwAdminUser == "" || pwNoAdminUser == "" {
t.Skip("No password supplied")
}
ctx := context.Background()
conf := client.Config{
Scheme: "http",
Host: os.Getenv(weaviateEndpoint),
AuthConfig: auth.ResourceOwnerPasswordFlow{Username: wcsUserOnAdmin, Password: pwAdminUser},
}
c, err := client.NewClient(conf)
require.Nil(t, err)
// add a class so schema is not empty
require.Nil(t, c.Schema().AllDeleter().Do(ctx))
require.Nil(t, c.Schema().ClassCreator().WithClass(&models.Class{Class: "Pizza"}).Do(ctx))
t.Run("returns schema without error for admin", func(t *testing.T) {
_, err = c.GraphQL().Raw().WithQuery("{__schema {queryType {fields {name}}}}").Do(ctx)
require.Nil(t, err)
})
t.Run("returns auth error for non-admin", func(t *testing.T) {
conf2 := client.Config{
Scheme: "http",
Host: os.Getenv(weaviateEndpoint),
AuthConfig: auth.ResourceOwnerPasswordFlow{Username: wcsUserNotOnAdmin, Password: pwNoAdminUser},
}
cNoAdmin, err := client.NewClient(conf2)
require.Nil(t, err)
_, err = cNoAdmin.GraphQL().Raw().WithQuery("{__schema {queryType {fields {name}}}}").Do(ctx)
require.NotNil(t, err)
wErr, ok := err.(*fault.WeaviateClientError)
require.True(t, ok)
require.Contains(t, wErr.DerivedFromError.Error(), "forbidden")
})
}