Skip to content

Commit a2cba3d

Browse files
kalleepgamab
andauthored
User: Add tracing (grafana#87028)
* Inject tracer in tests * Annotate with traces Co-authored-by: Gabriel MABILLE <[email protected]>
1 parent 7f1b2ef commit a2cba3d

File tree

31 files changed

+368
-202
lines changed

31 files changed

+368
-202
lines changed

pkg/api/folder_bench_test.go

+4-1
Original file line numberDiff line numberDiff line change
@@ -214,7 +214,10 @@ func setupDB(b testing.TB) benchScenario {
214214
require.NoError(b, err)
215215

216216
cache := localcache.ProvideService()
217-
userSvc, err := userimpl.ProvideService(db, orgService, cfg, teamSvc, cache, &quotatest.FakeQuotaService{}, bundleregistry.ProvideService())
217+
userSvc, err := userimpl.ProvideService(
218+
db, orgService, cfg, teamSvc, cache, tracing.InitializeTracerForTest(),
219+
&quotatest.FakeQuotaService{}, bundleregistry.ProvideService(),
220+
)
218221
require.NoError(b, err)
219222

220223
var orgID int64 = 1

pkg/api/org_users_test.go

+5-1
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import (
1515
"github.com/grafana/grafana/pkg/api/dtos"
1616
"github.com/grafana/grafana/pkg/infra/db"
1717
"github.com/grafana/grafana/pkg/infra/db/dbtest"
18+
"github.com/grafana/grafana/pkg/infra/tracing"
1819
"github.com/grafana/grafana/pkg/login/social"
1920
"github.com/grafana/grafana/pkg/login/social/socialtest"
2021
"github.com/grafana/grafana/pkg/models/roletype"
@@ -43,7 +44,10 @@ func setUpGetOrgUsersDB(t *testing.T, sqlStore db.DB, cfg *setting.Cfg) {
4344
quotaService := quotaimpl.ProvideService(sqlStore, cfg)
4445
orgService, err := orgimpl.ProvideService(sqlStore, cfg, quotaService)
4546
require.NoError(t, err)
46-
usrSvc, err := userimpl.ProvideService(sqlStore, orgService, cfg, nil, nil, quotaService, supportbundlestest.NewFakeBundleService())
47+
usrSvc, err := userimpl.ProvideService(
48+
sqlStore, orgService, cfg, nil, nil, tracing.InitializeTracerForTest(),
49+
quotaService, supportbundlestest.NewFakeBundleService(),
50+
)
4751
require.NoError(t, err)
4852

4953
id, err := orgService.GetOrCreate(context.Background(), "testOrg")

pkg/api/user_test.go

+17-4
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import (
2121
"github.com/grafana/grafana/pkg/infra/db"
2222
"github.com/grafana/grafana/pkg/infra/db/dbtest"
2323
"github.com/grafana/grafana/pkg/infra/remotecache"
24+
"github.com/grafana/grafana/pkg/infra/tracing"
2425
"github.com/grafana/grafana/pkg/login/social"
2526
"github.com/grafana/grafana/pkg/login/social/socialtest"
2627
"github.com/grafana/grafana/pkg/services/accesscontrol"
@@ -80,7 +81,10 @@ func TestUserAPIEndpoint_userLoggedIn(t *testing.T) {
8081
hs.authInfoService = srv
8182
orgSvc, err := orgimpl.ProvideService(sqlStore, settings, quotatest.New(false, nil))
8283
require.NoError(t, err)
83-
userSvc, err := userimpl.ProvideService(sqlStore, orgSvc, sc.cfg, nil, nil, quotatest.New(false, nil), supportbundlestest.NewFakeBundleService())
84+
userSvc, err := userimpl.ProvideService(
85+
sqlStore, orgSvc, sc.cfg, nil, nil, tracing.InitializeTracerForTest(),
86+
quotatest.New(false, nil), supportbundlestest.NewFakeBundleService(),
87+
)
8488
require.NoError(t, err)
8589
hs.userService = userSvc
8690

@@ -150,7 +154,10 @@ func TestUserAPIEndpoint_userLoggedIn(t *testing.T) {
150154
}
151155
orgSvc, err := orgimpl.ProvideService(sqlStore, sc.cfg, quotatest.New(false, nil))
152156
require.NoError(t, err)
153-
userSvc, err := userimpl.ProvideService(sqlStore, orgSvc, sc.cfg, nil, nil, quotatest.New(false, nil), supportbundlestest.NewFakeBundleService())
157+
userSvc, err := userimpl.ProvideService(
158+
sqlStore, orgSvc, sc.cfg, nil, nil, tracing.InitializeTracerForTest(),
159+
quotatest.New(false, nil), supportbundlestest.NewFakeBundleService(),
160+
)
154161
require.NoError(t, err)
155162
_, err = userSvc.Create(context.Background(), &createUserCmd)
156163
require.Nil(t, err)
@@ -384,7 +391,10 @@ func setupUpdateEmailTests(t *testing.T, cfg *setting.Cfg) (*user.User, *HTTPSer
384391
tempUserService := tempuserimpl.ProvideService(sqlStore, cfg)
385392
orgSvc, err := orgimpl.ProvideService(sqlStore, cfg, quotatest.New(false, nil))
386393
require.NoError(t, err)
387-
userSvc, err := userimpl.ProvideService(sqlStore, orgSvc, cfg, nil, nil, quotatest.New(false, nil), supportbundlestest.NewFakeBundleService())
394+
userSvc, err := userimpl.ProvideService(
395+
sqlStore, orgSvc, cfg, nil, nil, tracing.InitializeTracerForTest(),
396+
quotatest.New(false, nil), supportbundlestest.NewFakeBundleService(),
397+
)
388398
require.NoError(t, err)
389399

390400
// Create test user
@@ -610,7 +620,10 @@ func TestUser_UpdateEmail(t *testing.T) {
610620
tempUserSvc := tempuserimpl.ProvideService(sqlStore, settings)
611621
orgSvc, err := orgimpl.ProvideService(sqlStore, settings, quotatest.New(false, nil))
612622
require.NoError(t, err)
613-
userSvc, err := userimpl.ProvideService(sqlStore, orgSvc, settings, nil, nil, quotatest.New(false, nil), supportbundlestest.NewFakeBundleService())
623+
userSvc, err := userimpl.ProvideService(
624+
sqlStore, orgSvc, settings, nil, nil, tracing.InitializeTracerForTest(),
625+
quotatest.New(false, nil), supportbundlestest.NewFakeBundleService(),
626+
)
614627
require.NoError(t, err)
615628

616629
server := SetupAPITestServer(t, func(hs *HTTPServer) {

pkg/cmd/grafana-cli/commands/conflict_user_command.go

+21-16
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ import (
3333
"github.com/grafana/grafana/pkg/setting"
3434
)
3535

36-
func initConflictCfg(cmd *utils.ContextCommandLine) (*setting.Cfg, featuremgmt.FeatureToggles, error) {
36+
func initConflictCfg(cmd *utils.ContextCommandLine) (*setting.Cfg, tracing.Tracer, featuremgmt.FeatureToggles, error) {
3737
configOptions := strings.Split(cmd.String("configOverrides"), " ")
3838
configOptions = append(configOptions, cmd.Args().Slice()...)
3939
cfg, err := setting.NewCfgFromArgs(setting.CommandLineArgs{
@@ -43,19 +43,33 @@ func initConflictCfg(cmd *utils.ContextCommandLine) (*setting.Cfg, featuremgmt.F
4343
})
4444

4545
if err != nil {
46-
return nil, nil, err
46+
return nil, nil, nil, err
4747
}
4848

4949
features, err := featuremgmt.ProvideManagerService(cfg)
50-
return cfg, features, err
50+
if err != nil {
51+
return nil, nil, nil, err
52+
}
53+
54+
tracingCfg, err := tracing.ProvideTracingConfig(cfg)
55+
if err != nil {
56+
return nil, nil, nil, fmt.Errorf("%v: %w", "failed to initialize tracer config", err)
57+
}
58+
59+
tracer, err := tracing.ProvideService(tracingCfg)
60+
if err != nil {
61+
return nil, nil, nil, fmt.Errorf("%v: %w", "failed to initialize tracer service", err)
62+
}
63+
64+
return cfg, tracer, features, err
5165
}
5266

5367
func initializeConflictResolver(cmd *utils.ContextCommandLine, f Formatter, ctx *cli.Context) (*ConflictResolver, error) {
54-
cfg, features, err := initConflictCfg(cmd)
68+
cfg, tracer, features, err := initConflictCfg(cmd)
5569
if err != nil {
5670
return nil, fmt.Errorf("%v: %w", "failed to load configuration", err)
5771
}
58-
s, err := getSqlStore(cfg, features)
72+
s, err := getSqlStore(cfg, tracer, features)
5973
if err != nil {
6074
return nil, fmt.Errorf("%v: %w", "failed to get to sql", err)
6175
}
@@ -64,7 +78,7 @@ func initializeConflictResolver(cmd *utils.ContextCommandLine, f Formatter, ctx
6478
return nil, fmt.Errorf("%v: %w", "failed to get users with conflicting logins", err)
6579
}
6680
quotaService := quotaimpl.ProvideService(s, cfg)
67-
userService, err := userimpl.ProvideService(s, nil, cfg, nil, nil, quotaService, supportbundlestest.NewFakeBundleService())
81+
userService, err := userimpl.ProvideService(s, nil, cfg, nil, nil, tracer, quotaService, supportbundlestest.NewFakeBundleService())
6882
if err != nil {
6983
return nil, fmt.Errorf("%v: %w", "failed to get user service", err)
7084
}
@@ -78,16 +92,7 @@ func initializeConflictResolver(cmd *utils.ContextCommandLine, f Formatter, ctx
7892
return &resolver, nil
7993
}
8094

81-
func getSqlStore(cfg *setting.Cfg, features featuremgmt.FeatureToggles) (*sqlstore.SQLStore, error) {
82-
tracingCfg, err := tracing.ProvideTracingConfig(cfg)
83-
if err != nil {
84-
return nil, fmt.Errorf("%v: %w", "failed to initialize tracer config", err)
85-
}
86-
87-
tracer, err := tracing.ProvideService(tracingCfg)
88-
if err != nil {
89-
return nil, fmt.Errorf("%v: %w", "failed to initialize tracer service", err)
90-
}
95+
func getSqlStore(cfg *setting.Cfg, tracer tracing.Tracer, features featuremgmt.FeatureToggles) (*sqlstore.SQLStore, error) {
9196
bus := bus.ProvideBus(tracer)
9297
return sqlstore.ProvideService(cfg, features, &migrations.OSSMigrations{}, bus, tracer)
9398
}

pkg/services/accesscontrol/database/database_test.go

+14-11
Original file line numberDiff line numberDiff line change
@@ -91,9 +91,9 @@ func TestAccessControlStore_GetUserPermissions(t *testing.T) {
9191
}
9292
for _, tt := range tests {
9393
t.Run(tt.desc, func(t *testing.T) {
94-
store, permissionStore, sql, teamSvc, _ := setupTestEnv(t)
94+
store, permissionStore, usrSvc, teamSvc, _ := setupTestEnv(t)
9595

96-
user, team := createUserAndTeam(t, store.sql, sql, teamSvc, tt.orgID)
96+
user, team := createUserAndTeam(t, store.sql, usrSvc, teamSvc, tt.orgID)
9797

9898
for _, id := range tt.userPermissions {
9999
_, err := permissionStore.SetUserResourcePermission(context.Background(), tt.orgID, accesscontrol.User{ID: user.ID}, rs.SetResourcePermissionCommand{
@@ -164,8 +164,8 @@ func TestAccessControlStore_GetUserPermissions(t *testing.T) {
164164

165165
func TestAccessControlStore_DeleteUserPermissions(t *testing.T) {
166166
t.Run("expect permissions in all orgs to be deleted", func(t *testing.T) {
167-
store, permissionsStore, sql, teamSvc, _ := setupTestEnv(t)
168-
user, _ := createUserAndTeam(t, store.sql, sql, teamSvc, 1)
167+
store, permissionsStore, usrSvc, teamSvc, _ := setupTestEnv(t)
168+
user, _ := createUserAndTeam(t, store.sql, usrSvc, teamSvc, 1)
169169

170170
// generate permissions in org 1
171171
_, err := permissionsStore.SetUserResourcePermission(context.Background(), 1, accesscontrol.User{ID: user.ID}, rs.SetResourcePermissionCommand{
@@ -204,8 +204,8 @@ func TestAccessControlStore_DeleteUserPermissions(t *testing.T) {
204204
})
205205

206206
t.Run("expect permissions in org 1 to be deleted", func(t *testing.T) {
207-
store, permissionsStore, sql, teamSvc, _ := setupTestEnv(t)
208-
user, _ := createUserAndTeam(t, store.sql, sql, teamSvc, 1)
207+
store, permissionsStore, usrSvc, teamSvc, _ := setupTestEnv(t)
208+
user, _ := createUserAndTeam(t, store.sql, usrSvc, teamSvc, 1)
209209

210210
// generate permissions in org 1
211211
_, err := permissionsStore.SetUserResourcePermission(context.Background(), 1, accesscontrol.User{ID: user.ID}, rs.SetResourcePermissionCommand{
@@ -246,8 +246,8 @@ func TestAccessControlStore_DeleteUserPermissions(t *testing.T) {
246246

247247
func TestAccessControlStore_DeleteTeamPermissions(t *testing.T) {
248248
t.Run("expect permissions related to team to be deleted", func(t *testing.T) {
249-
store, permissionsStore, sql, teamSvc, _ := setupTestEnv(t)
250-
user, team := createUserAndTeam(t, store.sql, sql, teamSvc, 1)
249+
store, permissionsStore, usrSvc, teamSvc, _ := setupTestEnv(t)
250+
user, team := createUserAndTeam(t, store.sql, usrSvc, teamSvc, 1)
251251

252252
// grant permission to the team
253253
_, err := permissionsStore.SetTeamResourcePermission(context.Background(), 1, team.ID, rs.SetResourcePermissionCommand{
@@ -280,8 +280,8 @@ func TestAccessControlStore_DeleteTeamPermissions(t *testing.T) {
280280
assert.Len(t, permissions, 0)
281281
})
282282
t.Run("expect permissions not related to team to be kept", func(t *testing.T) {
283-
store, permissionsStore, sql, teamSvc, _ := setupTestEnv(t)
284-
user, team := createUserAndTeam(t, store.sql, sql, teamSvc, 1)
283+
store, permissionsStore, usrSvc, teamSvc, _ := setupTestEnv(t)
284+
user, team := createUserAndTeam(t, store.sql, usrSvc, teamSvc, 1)
285285

286286
// grant permission to the team
287287
_, err := permissionsStore.SetTeamResourcePermission(context.Background(), 1, team.ID, rs.SetResourcePermissionCommand{
@@ -409,7 +409,10 @@ func setupTestEnv(t testing.TB) (*AccessControlStore, rs.Store, user.Service, te
409409
require.Equal(t, int64(1), orgID)
410410
require.NoError(t, err)
411411

412-
userService, err := userimpl.ProvideService(sql, orgService, cfg, teamService, localcache.ProvideService(), quotatest.New(false, nil), supportbundlestest.NewFakeBundleService())
412+
userService, err := userimpl.ProvideService(
413+
sql, orgService, cfg, teamService, localcache.ProvideService(), tracing.InitializeTracerForTest(),
414+
quotatest.New(false, nil), supportbundlestest.NewFakeBundleService(),
415+
)
413416
require.NoError(t, err)
414417
return acstore, permissionStore, userService, teamService, orgService
415418
}

pkg/services/accesscontrol/resourcepermissions/api_test.go

+10-27
Original file line numberDiff line numberDiff line change
@@ -13,19 +13,12 @@ import (
1313
"github.com/stretchr/testify/assert"
1414
"github.com/stretchr/testify/require"
1515

16-
"github.com/grafana/grafana/pkg/infra/db"
1716
"github.com/grafana/grafana/pkg/infra/log"
18-
"github.com/grafana/grafana/pkg/infra/tracing"
1917
"github.com/grafana/grafana/pkg/services/accesscontrol"
2018
"github.com/grafana/grafana/pkg/services/contexthandler/ctxkey"
2119
contextmodel "github.com/grafana/grafana/pkg/services/contexthandler/model"
22-
"github.com/grafana/grafana/pkg/services/org/orgimpl"
23-
"github.com/grafana/grafana/pkg/services/quota/quotatest"
24-
"github.com/grafana/grafana/pkg/services/supportbundles/supportbundlestest"
25-
"github.com/grafana/grafana/pkg/services/team/teamimpl"
20+
"github.com/grafana/grafana/pkg/services/team"
2621
"github.com/grafana/grafana/pkg/services/user"
27-
"github.com/grafana/grafana/pkg/services/user/userimpl"
28-
"github.com/grafana/grafana/pkg/setting"
2922
"github.com/grafana/grafana/pkg/web"
3023
)
3124

@@ -117,7 +110,7 @@ func TestApi_getDescription(t *testing.T) {
117110

118111
for _, tt := range tests {
119112
t.Run(tt.desc, func(t *testing.T) {
120-
service, _, _, _ := setupTestEnvironment(t, tt.options)
113+
service, _, _ := setupTestEnvironment(t, tt.options)
121114
server := setupTestServer(t, &user.SignedInUser{OrgID: 1, Permissions: map[int64]map[string][]string{1: accesscontrol.GroupScopesByAction(tt.permissions)}}, service)
122115

123116
req, err := http.NewRequest(http.MethodGet, fmt.Sprintf("/api/access-control/%s/description", tt.options.Resource), nil)
@@ -164,10 +157,10 @@ func TestApi_getPermissions(t *testing.T) {
164157

165158
for _, tt := range tests {
166159
t.Run(tt.desc, func(t *testing.T) {
167-
service, sql, cfg, _ := setupTestEnvironment(t, testOptions)
160+
service, usrSvc, teamSvc := setupTestEnvironment(t, testOptions)
168161
server := setupTestServer(t, &user.SignedInUser{OrgID: 1, Permissions: map[int64]map[string][]string{1: accesscontrol.GroupScopesByAction(tt.permissions)}}, service)
169162

170-
seedPermissions(t, tt.resourceID, sql, cfg, service)
163+
seedPermissions(t, tt.resourceID, usrSvc, teamSvc, service)
171164

172165
permissions, recorder := getPermission(t, server, testOptions.Resource, tt.resourceID)
173166
assert.Equal(t, tt.expectedStatus, recorder.Code)
@@ -241,7 +234,7 @@ func TestApi_setBuiltinRolePermission(t *testing.T) {
241234

242235
for _, tt := range tests {
243236
t.Run(tt.desc, func(t *testing.T) {
244-
service, _, _, _ := setupTestEnvironment(t, testOptions)
237+
service, _, _ := setupTestEnvironment(t, testOptions)
245238
server := setupTestServer(t, &user.SignedInUser{OrgID: 1, Permissions: map[int64]map[string][]string{1: accesscontrol.GroupScopesByAction(tt.permissions)}}, service)
246239

247240
recorder := setPermission(t, server, testOptions.Resource, tt.resourceID, tt.permission, "builtInRoles", tt.builtInRole)
@@ -319,7 +312,7 @@ func TestApi_setTeamPermission(t *testing.T) {
319312

320313
for _, tt := range tests {
321314
t.Run(tt.desc, func(t *testing.T) {
322-
service, _, _, teamSvc := setupTestEnvironment(t, testOptions)
315+
service, _, teamSvc := setupTestEnvironment(t, testOptions)
323316
server := setupTestServer(t, &user.SignedInUser{OrgID: 1, Permissions: map[int64]map[string][]string{1: accesscontrol.GroupScopesByAction(tt.permissions)}}, service)
324317

325318
// seed team
@@ -402,18 +395,13 @@ func TestApi_setUserPermission(t *testing.T) {
402395

403396
for _, tt := range tests {
404397
t.Run(tt.desc, func(t *testing.T) {
405-
service, sql, cfg, _ := setupTestEnvironment(t, testOptions)
398+
service, usrSvc, _ := setupTestEnvironment(t, testOptions)
406399
server := setupTestServer(t, &user.SignedInUser{
407400
OrgID: 1,
408401
Permissions: map[int64]map[string][]string{1: accesscontrol.GroupScopesByAction(tt.permissions)},
409402
}, service)
410403

411-
// seed user
412-
orgSvc, err := orgimpl.ProvideService(sql, cfg, quotatest.New(false, nil))
413-
require.NoError(t, err)
414-
usrSvc, err := userimpl.ProvideService(sql, orgSvc, cfg, nil, nil, &quotatest.FakeQuotaService{}, supportbundlestest.NewFakeBundleService())
415-
require.NoError(t, err)
416-
_, err = usrSvc.Create(context.Background(), &user.CreateUserCommand{Login: "test", OrgID: 1})
404+
_, err := usrSvc.Create(context.Background(), &user.CreateUserCommand{Login: "test", OrgID: 1})
417405
require.NoError(t, err)
418406

419407
recorder := setPermission(t, server, testOptions.Resource, tt.resourceID, tt.permission, "users", strconv.Itoa(int(tt.userID)))
@@ -507,20 +495,15 @@ func checkSeededPermissions(t *testing.T, permissions []resourcePermissionDTO) {
507495
}
508496
}
509497

510-
func seedPermissions(t *testing.T, resourceID string, sql db.DB, cfg *setting.Cfg, service *Service) {
498+
func seedPermissions(t *testing.T, resourceID string, usrSvc user.Service, teamSvc team.Service, service *Service) {
511499
t.Helper()
500+
512501
// seed team 1 with "Edit" permission on dashboard 1
513-
teamSvc, err := teamimpl.ProvideService(sql, cfg, tracing.InitializeTracerForTest())
514-
require.NoError(t, err)
515502
team, err := teamSvc.CreateTeam(context.Background(), "test", "[email protected]", 1)
516503
require.NoError(t, err)
517504
_, err = service.SetTeamPermission(context.Background(), team.OrgID, team.ID, resourceID, "Edit")
518505
require.NoError(t, err)
519506
// seed user 1 with "View" permission on dashboard 1
520-
orgSvc, err := orgimpl.ProvideService(sql, cfg, quotatest.New(false, nil))
521-
require.NoError(t, err)
522-
usrSvc, err := userimpl.ProvideService(sql, orgSvc, cfg, nil, nil, &quotatest.FakeQuotaService{}, supportbundlestest.NewFakeBundleService())
523-
require.NoError(t, err)
524507
u, err := usrSvc.Create(context.Background(), &user.CreateUserCommand{Login: "test", OrgID: 1})
525508
require.NoError(t, err)
526509
_, err = service.SetUserPermission(context.Background(), u.OrgID, accesscontrol.User{ID: u.ID}, resourceID, "View")

0 commit comments

Comments
 (0)