c4c9bfaf2e
* first round of entityapi updates - quote column names and clean up insert/update queries - replace grn with guid - streamline table structure fixes streamline entity history move EntitySummary into proto remove EntitySummary add guid to json fix tests change DB_Uuid to DB_NVarchar fix folder test convert interface to any more cleanup start entity store under grafana-apiserver dskit target CRUD working, kind of rough cut of wiring entity api to kube-apiserver fake grafana user in context add key to entity list working revert unnecessary changes move entity storage files to their own package, clean up use accessor to read/write grafana annotations implement separate Create and Update functions * go mod tidy * switch from Kind to resource * basic grpc storage server * basic support for grpc entity store * don't connect to database unless it's needed, pass user identity over grpc * support getting user from k8s context, fix some mysql issues * assign owner to snowflake dependency * switch from ulid to uuid for guids * cleanup, rename Search to List * remove entityListResult * EntityAPI: remove extra user abstraction (#79033) * remove extra user abstraction * add test stub (but * move grpc context setup into client wrapper, fix lint issue * remove unused constants * remove custom json stuff * basic list filtering, add todo * change target to storage-server, allow entityStore flag in prod mode * fix issue with Update * EntityAPI: make test work, need to resolve expected differences (#79123) * make test work, need to resolve expected differences * remove the fields not supported by legacy * sanitize out the bits legacy does not support * sanitize out the bits legacy does not support --------- Co-authored-by: Ryan McKinley <ryantxu@gmail.com> * update feature toggle generated files * remove unused http headers * update feature flag strategy * devmode * update readme * spelling * readme --------- Co-authored-by: Ryan McKinley <ryantxu@gmail.com>
92 lines
2.6 KiB
Go
92 lines
2.6 KiB
Go
package entity_server_tests
|
|
|
|
import (
|
|
"context"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/require"
|
|
"google.golang.org/grpc"
|
|
"google.golang.org/grpc/credentials/insecure"
|
|
|
|
"github.com/grafana/grafana/pkg/components/satokengen"
|
|
"github.com/grafana/grafana/pkg/infra/appcontext"
|
|
"github.com/grafana/grafana/pkg/server"
|
|
"github.com/grafana/grafana/pkg/services/featuremgmt"
|
|
"github.com/grafana/grafana/pkg/services/org"
|
|
saAPI "github.com/grafana/grafana/pkg/services/serviceaccounts/api"
|
|
saTests "github.com/grafana/grafana/pkg/services/serviceaccounts/tests"
|
|
"github.com/grafana/grafana/pkg/services/store/entity"
|
|
"github.com/grafana/grafana/pkg/services/user"
|
|
"github.com/grafana/grafana/pkg/tests/testinfra"
|
|
)
|
|
|
|
func createServiceAccountAdminToken(t *testing.T, env *server.TestEnv) (string, *user.SignedInUser) {
|
|
t.Helper()
|
|
|
|
account := saTests.SetupUserServiceAccount(t, env.SQLStore, saTests.TestUser{
|
|
Name: "grpc-server-sa",
|
|
Role: string(org.RoleAdmin),
|
|
Login: "grpc-server-sa",
|
|
IsServiceAccount: true,
|
|
})
|
|
|
|
keyGen, err := satokengen.New(saAPI.ServiceID)
|
|
require.NoError(t, err)
|
|
|
|
_ = saTests.SetupApiKey(t, env.SQLStore, saTests.TestApiKey{
|
|
Name: "grpc-server-test",
|
|
Role: org.RoleAdmin,
|
|
OrgId: account.OrgID,
|
|
Key: keyGen.HashedKey,
|
|
ServiceAccountID: &account.ID,
|
|
})
|
|
|
|
return keyGen.ClientSecret, &user.SignedInUser{
|
|
UserID: account.ID,
|
|
Email: account.Email,
|
|
Name: account.Name,
|
|
Login: account.Login,
|
|
OrgID: account.OrgID,
|
|
IsServiceAccount: account.IsServiceAccount,
|
|
}
|
|
}
|
|
|
|
type testContext struct {
|
|
authToken string
|
|
client entity.EntityStoreClient
|
|
user *user.SignedInUser
|
|
ctx context.Context
|
|
}
|
|
|
|
func createTestContext(t *testing.T) testContext {
|
|
t.Helper()
|
|
|
|
dir, path := testinfra.CreateGrafDir(t, testinfra.GrafanaOpts{
|
|
EnableFeatureToggles: []string{
|
|
featuremgmt.FlagGrpcServer,
|
|
featuremgmt.FlagUnifiedStorage,
|
|
},
|
|
AppModeProduction: false, // required for migrations to run
|
|
GRPCServerAddress: "127.0.0.1:0", // :0 for choosing the port automatically
|
|
})
|
|
|
|
_, env := testinfra.StartGrafanaEnv(t, dir, path)
|
|
|
|
authToken, serviceAccountUser := createServiceAccountAdminToken(t, env)
|
|
|
|
conn, err := grpc.Dial(
|
|
env.GRPCServer.GetAddress(),
|
|
grpc.WithTransportCredentials(insecure.NewCredentials()),
|
|
)
|
|
require.NoError(t, err)
|
|
|
|
client := entity.NewEntityStoreClient(conn)
|
|
|
|
return testContext{
|
|
authToken: authToken,
|
|
client: client,
|
|
user: serviceAccountUser,
|
|
ctx: appcontext.WithUser(context.Background(), serviceAccountUser),
|
|
}
|
|
}
|