mirror of
https://github.com/usememos/memos.git
synced 2026-05-02 18:52:32 +00:00
73 lines
2.0 KiB
Go
73 lines
2.0 KiB
Go
package test
|
|
|
|
import (
|
|
"context"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/require"
|
|
"google.golang.org/grpc/codes"
|
|
"google.golang.org/grpc/status"
|
|
|
|
v1pb "github.com/usememos/memos/proto/gen/api/v1"
|
|
)
|
|
|
|
func TestGetInstanceStats_HappyPath(t *testing.T) {
|
|
ctx := context.Background()
|
|
ts := NewTestService(t)
|
|
defer ts.Cleanup()
|
|
|
|
admin, err := ts.CreateHostUser(ctx, "admin1")
|
|
require.NoError(t, err)
|
|
adminCtx := ts.CreateUserContext(ctx, admin.ID)
|
|
|
|
resp, err := ts.Service.GetInstanceStats(adminCtx, &v1pb.GetInstanceStatsRequest{})
|
|
require.NoError(t, err)
|
|
require.NotNil(t, resp)
|
|
|
|
require.NotNil(t, resp.Database)
|
|
require.Equal(t, "sqlite", resp.Database.Driver)
|
|
require.Greater(t, resp.Database.SizeBytes, int64(0))
|
|
|
|
require.GreaterOrEqual(t, resp.LocalStorageBytes, int64(0))
|
|
}
|
|
|
|
func TestGetInstanceStats_NonAdminDenied(t *testing.T) {
|
|
ctx := context.Background()
|
|
ts := NewTestService(t)
|
|
defer ts.Cleanup()
|
|
|
|
// Need an admin to exist (otherwise instance is uninitialized).
|
|
admin, err := ts.CreateHostUser(ctx, "admin1")
|
|
require.NoError(t, err)
|
|
_ = admin
|
|
|
|
regular, err := ts.CreateRegularUser(ctx, "alice")
|
|
require.NoError(t, err)
|
|
regularCtx := ts.CreateUserContext(ctx, regular.ID)
|
|
|
|
_, err = ts.Service.GetInstanceStats(regularCtx, &v1pb.GetInstanceStatsRequest{})
|
|
require.Error(t, err)
|
|
st, ok := status.FromError(err)
|
|
require.True(t, ok)
|
|
require.Equal(t, codes.PermissionDenied, st.Code())
|
|
}
|
|
|
|
func TestGetInstanceStats_Cache(t *testing.T) {
|
|
ctx := context.Background()
|
|
ts := NewTestService(t)
|
|
defer ts.Cleanup()
|
|
|
|
admin, err := ts.CreateHostUser(ctx, "admin1")
|
|
require.NoError(t, err)
|
|
adminCtx := ts.CreateUserContext(ctx, admin.ID)
|
|
|
|
first, err := ts.Service.GetInstanceStats(adminCtx, &v1pb.GetInstanceStatsRequest{})
|
|
require.NoError(t, err)
|
|
|
|
second, err := ts.Service.GetInstanceStats(adminCtx, &v1pb.GetInstanceStatsRequest{})
|
|
require.NoError(t, err)
|
|
|
|
// Cache hit: same pointer (the cache returns the stored *InstanceStats directly).
|
|
require.Same(t, first, second)
|
|
}
|