mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
Folders: Add user service to folder service implementation (#99518)
Add user service to folder service implementation
This commit is contained in:
parent
de1df2f4e9
commit
a2097fbc2f
@ -829,9 +829,9 @@ func getDashboardShouldReturn200WithConfig(t *testing.T, sc *scenarioContext, pr
|
|||||||
db := db.InitTestDB(t)
|
db := db.InitTestDB(t)
|
||||||
fStore := folderimpl.ProvideStore(db)
|
fStore := folderimpl.ProvideStore(db)
|
||||||
quotaService := quotatest.New(false, nil)
|
quotaService := quotatest.New(false, nil)
|
||||||
folderSvc := folderimpl.ProvideService(fStore, ac, bus.ProvideBus(tracing.InitializeTracerForTest()),
|
folderSvc := folderimpl.ProvideService(
|
||||||
dashboardStore, folderStore, db, features,
|
fStore, ac, bus.ProvideBus(tracing.InitializeTracerForTest()), dashboardStore, folderStore,
|
||||||
supportbundlestest.NewFakeBundleService(), nil, cfg, nil, tracing.InitializeTracerForTest())
|
nil, db, features, supportbundlestest.NewFakeBundleService(), nil, cfg, nil, tracing.InitializeTracerForTest())
|
||||||
if dashboardService == nil {
|
if dashboardService == nil {
|
||||||
dashboardService, err = service.ProvideDashboardServiceImpl(
|
dashboardService, err = service.ProvideDashboardServiceImpl(
|
||||||
cfg, dashboardStore, folderStore, features, folderPermissions,
|
cfg, dashboardStore, folderStore, features, folderPermissions,
|
||||||
|
@ -460,8 +460,9 @@ func setupServer(b testing.TB, sc benchScenario, features featuremgmt.FeatureTog
|
|||||||
cfg := setting.NewCfg()
|
cfg := setting.NewCfg()
|
||||||
actionSets := resourcepermissions.NewActionSetService(features)
|
actionSets := resourcepermissions.NewActionSetService(features)
|
||||||
fStore := folderimpl.ProvideStore(sc.db)
|
fStore := folderimpl.ProvideStore(sc.db)
|
||||||
folderServiceWithFlagOn := folderimpl.ProvideService(fStore, ac, bus.ProvideBus(tracing.InitializeTracerForTest()), dashStore,
|
folderServiceWithFlagOn := folderimpl.ProvideService(
|
||||||
folderStore, sc.db, features, supportbundlestest.NewFakeBundleService(), nil, cfg, nil, tracing.InitializeTracerForTest())
|
fStore, ac, bus.ProvideBus(tracing.InitializeTracerForTest()), dashStore, folderStore,
|
||||||
|
nil, sc.db, features, supportbundlestest.NewFakeBundleService(), nil, cfg, nil, tracing.InitializeTracerForTest())
|
||||||
acSvc := acimpl.ProvideOSSService(
|
acSvc := acimpl.ProvideOSSService(
|
||||||
sc.cfg, acdb.ProvideService(sc.db), actionSets, localcache.ProvideService(),
|
sc.cfg, acdb.ProvideService(sc.db), actionSets, localcache.ProvideService(),
|
||||||
features, tracing.InitializeTracerForTest(), zanzana.NewNoopClient(), sc.db, permreg.ProvidePermissionRegistry(), nil, folderServiceWithFlagOn,
|
features, tracing.InitializeTracerForTest(), zanzana.NewNoopClient(), sc.db, permreg.ProvidePermissionRegistry(), nil, folderServiceWithFlagOn,
|
||||||
|
@ -47,9 +47,9 @@ func ProvideFolderPermissions(
|
|||||||
|
|
||||||
fStore := folderimpl.ProvideStore(sqlStore)
|
fStore := folderimpl.ProvideStore(sqlStore)
|
||||||
folderStore := folderimpl.ProvideDashboardFolderStore(sqlStore)
|
folderStore := folderimpl.ProvideDashboardFolderStore(sqlStore)
|
||||||
fService := folderimpl.ProvideService(fStore, ac, bus.ProvideBus(tracing.InitializeTracerForTest()),
|
fService := folderimpl.ProvideService(
|
||||||
dashboardStore, folderStore, sqlStore, features,
|
fStore, ac, bus.ProvideBus(tracing.InitializeTracerForTest()), dashboardStore, folderStore,
|
||||||
supportbundlestest.NewFakeBundleService(), nil, cfg, nil, tracing.InitializeTracerForTest())
|
nil, sqlStore, features, supportbundlestest.NewFakeBundleService(), nil, cfg, nil, tracing.InitializeTracerForTest())
|
||||||
|
|
||||||
acSvc := acimpl.ProvideOSSService(
|
acSvc := acimpl.ProvideOSSService(
|
||||||
cfg, acdb.ProvideService(sqlStore), actionSets, localcache.ProvideService(),
|
cfg, acdb.ProvideService(sqlStore), actionSets, localcache.ProvideService(),
|
||||||
|
@ -47,9 +47,9 @@ func TestIntegrationAuthorize(t *testing.T) {
|
|||||||
dashStore, err := database.ProvideDashboardStore(sql, cfg, featuremgmt.WithFeatures(), tagimpl.ProvideService(sql))
|
dashStore, err := database.ProvideDashboardStore(sql, cfg, featuremgmt.WithFeatures(), tagimpl.ProvideService(sql))
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
ac := acimpl.ProvideAccessControl(featuremgmt.WithFeatures())
|
ac := acimpl.ProvideAccessControl(featuremgmt.WithFeatures())
|
||||||
folderSvc := folderimpl.ProvideService(fStore, accesscontrolmock.New(), bus.ProvideBus(tracing.InitializeTracerForTest()),
|
folderSvc := folderimpl.ProvideService(
|
||||||
dashStore, folderStore, sql, featuremgmt.WithFeatures(),
|
fStore, accesscontrolmock.New(), bus.ProvideBus(tracing.InitializeTracerForTest()), dashStore, folderStore,
|
||||||
supportbundlestest.NewFakeBundleService(), nil, cfg, nil, tracing.InitializeTracerForTest())
|
nil, sql, featuremgmt.WithFeatures(), supportbundlestest.NewFakeBundleService(), nil, cfg, nil, tracing.InitializeTracerForTest())
|
||||||
dashSvc, err := dashboardsservice.ProvideDashboardServiceImpl(cfg, dashStore, folderStore, featuremgmt.WithFeatures(), accesscontrolmock.NewMockedPermissionsService(),
|
dashSvc, err := dashboardsservice.ProvideDashboardServiceImpl(cfg, dashStore, folderStore, featuremgmt.WithFeatures(), accesscontrolmock.NewMockedPermissionsService(),
|
||||||
ac, folderSvc, fStore, nil, nil, nil, nil, quotatest.New(false, nil), nil, nil)
|
ac, folderSvc, fStore, nil, nil, nil, nil, quotatest.New(false, nil), nil, nil)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
@ -59,9 +59,9 @@ func TestIntegrationAnnotationListingWithRBAC(t *testing.T) {
|
|||||||
dashStore, err := database.ProvideDashboardStore(sql, cfg, featuremgmt.WithFeatures(), tagimpl.ProvideService(sql))
|
dashStore, err := database.ProvideDashboardStore(sql, cfg, featuremgmt.WithFeatures(), tagimpl.ProvideService(sql))
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
ac := acimpl.ProvideAccessControl(featuremgmt.WithFeatures())
|
ac := acimpl.ProvideAccessControl(featuremgmt.WithFeatures())
|
||||||
folderSvc := folderimpl.ProvideService(fStore, accesscontrolmock.New(), bus.ProvideBus(tracing.InitializeTracerForTest()),
|
folderSvc := folderimpl.ProvideService(
|
||||||
dashStore, folderStore, sql, featuremgmt.WithFeatures(),
|
fStore, accesscontrolmock.New(), bus.ProvideBus(tracing.InitializeTracerForTest()), dashStore, folderStore,
|
||||||
supportbundlestest.NewFakeBundleService(), nil, cfg, nil, tracing.InitializeTracerForTest())
|
nil, sql, featuremgmt.WithFeatures(), supportbundlestest.NewFakeBundleService(), nil, cfg, nil, tracing.InitializeTracerForTest())
|
||||||
dashSvc, err := dashboardsservice.ProvideDashboardServiceImpl(cfg, dashStore, folderStore, featuremgmt.WithFeatures(), accesscontrolmock.NewMockedPermissionsService(),
|
dashSvc, err := dashboardsservice.ProvideDashboardServiceImpl(cfg, dashStore, folderStore, featuremgmt.WithFeatures(), accesscontrolmock.NewMockedPermissionsService(),
|
||||||
ac, folderSvc, fStore, nil, nil, nil, nil, quotatest.New(false, nil), nil, nil)
|
ac, folderSvc, fStore, nil, nil, nil, nil, quotatest.New(false, nil), nil, nil)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
@ -242,8 +242,9 @@ func TestIntegrationAnnotationListingWithInheritedRBAC(t *testing.T) {
|
|||||||
ac := acimpl.ProvideAccessControl(features)
|
ac := acimpl.ProvideAccessControl(features)
|
||||||
fStore := folderimpl.ProvideStore(sql)
|
fStore := folderimpl.ProvideStore(sql)
|
||||||
folderStore := folderimpl.ProvideDashboardFolderStore(sql)
|
folderStore := folderimpl.ProvideDashboardFolderStore(sql)
|
||||||
folderSvc := folderimpl.ProvideService(fStore, ac, bus.ProvideBus(tracing.InitializeTracerForTest()), dashStore,
|
folderSvc := folderimpl.ProvideService(
|
||||||
folderStore, sql, features, supportbundlestest.NewFakeBundleService(), nil, cfg, nil, tracing.InitializeTracerForTest())
|
fStore, ac, bus.ProvideBus(tracing.InitializeTracerForTest()), dashStore, folderStore,
|
||||||
|
nil, sql, features, supportbundlestest.NewFakeBundleService(), nil, cfg, nil, tracing.InitializeTracerForTest())
|
||||||
dashSvc, err := dashboardsservice.ProvideDashboardServiceImpl(cfg, dashStore, folderStore, features, accesscontrolmock.NewMockedPermissionsService(),
|
dashSvc, err := dashboardsservice.ProvideDashboardServiceImpl(cfg, dashStore, folderStore, features, accesscontrolmock.NewMockedPermissionsService(),
|
||||||
ac, folderSvc, fStore, nil, nil, nil, nil, quotatest.New(false, nil), nil, nil)
|
ac, folderSvc, fStore, nil, nil, nil, nil, quotatest.New(false, nil), nil, nil)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
@ -300,7 +300,9 @@ func TestIntegrationDashboardInheritedFolderRBAC(t *testing.T) {
|
|||||||
})
|
})
|
||||||
|
|
||||||
folderStore := folderimpl.ProvideStore(sqlStore)
|
folderStore := folderimpl.ProvideStore(sqlStore)
|
||||||
folderSvc := folderimpl.ProvideService(folderStore, mock.New(), bus.ProvideBus(tracer), dashboardWriteStore, folderimpl.ProvideDashboardFolderStore(sqlStore), sqlStore, features, supportbundlestest.NewFakeBundleService(), nil, cfg, nil, tracing.InitializeTracerForTest())
|
folderSvc := folderimpl.ProvideService(
|
||||||
|
folderStore, mock.New(), bus.ProvideBus(tracer), dashboardWriteStore, folderimpl.ProvideDashboardFolderStore(sqlStore),
|
||||||
|
nil, sqlStore, features, supportbundlestest.NewFakeBundleService(), nil, cfg, nil, tracing.InitializeTracerForTest())
|
||||||
|
|
||||||
parentUID := ""
|
parentUID := ""
|
||||||
for i := 0; ; i++ {
|
for i := 0; ; i++ {
|
||||||
|
@ -901,8 +901,9 @@ func TestIntegrationFindDashboardsByTitle(t *testing.T) {
|
|||||||
ac := acimpl.ProvideAccessControl(features)
|
ac := acimpl.ProvideAccessControl(features)
|
||||||
folderStore := folderimpl.ProvideDashboardFolderStore(sqlStore)
|
folderStore := folderimpl.ProvideDashboardFolderStore(sqlStore)
|
||||||
fStore := folderimpl.ProvideStore(sqlStore)
|
fStore := folderimpl.ProvideStore(sqlStore)
|
||||||
folderServiceWithFlagOn := folderimpl.ProvideService(fStore, ac, bus.ProvideBus(tracing.InitializeTracerForTest()), dashboardStore,
|
folderServiceWithFlagOn := folderimpl.ProvideService(
|
||||||
folderStore, sqlStore, features, supportbundlestest.NewFakeBundleService(), nil, cfg, nil, tracing.InitializeTracerForTest())
|
fStore, ac, bus.ProvideBus(tracing.InitializeTracerForTest()), dashboardStore, folderStore,
|
||||||
|
nil, sqlStore, features, supportbundlestest.NewFakeBundleService(), nil, cfg, nil, tracing.InitializeTracerForTest())
|
||||||
|
|
||||||
user := &user.SignedInUser{
|
user := &user.SignedInUser{
|
||||||
OrgID: 1,
|
OrgID: 1,
|
||||||
@ -1020,8 +1021,9 @@ func TestIntegrationFindDashboardsByFolder(t *testing.T) {
|
|||||||
folderStore := folderimpl.ProvideDashboardFolderStore(sqlStore)
|
folderStore := folderimpl.ProvideDashboardFolderStore(sqlStore)
|
||||||
fStore := folderimpl.ProvideStore(sqlStore)
|
fStore := folderimpl.ProvideStore(sqlStore)
|
||||||
|
|
||||||
folderServiceWithFlagOn := folderimpl.ProvideService(fStore, ac, bus.ProvideBus(tracing.InitializeTracerForTest()), dashboardStore,
|
folderServiceWithFlagOn := folderimpl.ProvideService(
|
||||||
folderStore, sqlStore, features, supportbundlestest.NewFakeBundleService(), nil, cfg, nil, tracing.InitializeTracerForTest())
|
fStore, ac, bus.ProvideBus(tracing.InitializeTracerForTest()), dashboardStore, folderStore,
|
||||||
|
nil, sqlStore, features, supportbundlestest.NewFakeBundleService(), nil, cfg, nil, tracing.InitializeTracerForTest())
|
||||||
|
|
||||||
user := &user.SignedInUser{
|
user := &user.SignedInUser{
|
||||||
OrgID: 1,
|
OrgID: 1,
|
||||||
|
@ -881,7 +881,20 @@ func permissionScenario(t *testing.T, desc string, canSave bool, fn permissionSc
|
|||||||
tracer := tracing.InitializeTracerForTest()
|
tracer := tracing.InitializeTracerForTest()
|
||||||
publicDashboardFakeService := publicdashboards.NewFakePublicDashboardServiceWrapper(t)
|
publicDashboardFakeService := publicdashboards.NewFakePublicDashboardServiceWrapper(t)
|
||||||
folderStore2 := folderimpl.ProvideStore(sqlStore)
|
folderStore2 := folderimpl.ProvideStore(sqlStore)
|
||||||
folderService := folderimpl.ProvideService(folderStore2, actest.FakeAccessControl{ExpectedEvaluate: true}, bus.ProvideBus(tracer), dashboardStore, folderStore, sqlStore, features, supportbundlestest.NewFakeBundleService(), publicDashboardFakeService, cfg, nil, tracer)
|
folderService := folderimpl.ProvideService(
|
||||||
|
folderStore2,
|
||||||
|
actest.FakeAccessControl{ExpectedEvaluate: true},
|
||||||
|
bus.ProvideBus(tracer),
|
||||||
|
dashboardStore,
|
||||||
|
folderStore,
|
||||||
|
nil,
|
||||||
|
sqlStore,
|
||||||
|
features,
|
||||||
|
supportbundlestest.NewFakeBundleService(),
|
||||||
|
publicDashboardFakeService,
|
||||||
|
cfg,
|
||||||
|
nil,
|
||||||
|
tracer)
|
||||||
dashboardPermissions := accesscontrolmock.NewMockedPermissionsService()
|
dashboardPermissions := accesscontrolmock.NewMockedPermissionsService()
|
||||||
dashboardService, err := ProvideDashboardServiceImpl(
|
dashboardService, err := ProvideDashboardServiceImpl(
|
||||||
cfg, dashboardStore, folderStore,
|
cfg, dashboardStore, folderStore,
|
||||||
@ -955,9 +968,23 @@ func callSaveWithResult(t *testing.T, cmd dashboards.SaveDashboardCommand, sqlSt
|
|||||||
tracer := tracing.InitializeTracerForTest()
|
tracer := tracing.InitializeTracerForTest()
|
||||||
publicDashboardFakeService := publicdashboards.NewFakePublicDashboardServiceWrapper(t)
|
publicDashboardFakeService := publicdashboards.NewFakePublicDashboardServiceWrapper(t)
|
||||||
folderStore2 := folderimpl.ProvideStore(sqlStore)
|
folderStore2 := folderimpl.ProvideStore(sqlStore)
|
||||||
folderService := folderimpl.ProvideService(folderStore2, actest.FakeAccessControl{ExpectedEvaluate: true}, bus.ProvideBus(tracer), dashboardStore, folderStore, sqlStore, features, supportbundlestest.NewFakeBundleService(), publicDashboardFakeService, cfg, nil, tracer)
|
folderService := folderimpl.ProvideService(
|
||||||
|
folderStore2,
|
||||||
|
actest.FakeAccessControl{ExpectedEvaluate: true},
|
||||||
|
bus.ProvideBus(tracer),
|
||||||
|
dashboardStore,
|
||||||
|
folderStore,
|
||||||
|
nil,
|
||||||
|
sqlStore,
|
||||||
|
features,
|
||||||
|
supportbundlestest.NewFakeBundleService(),
|
||||||
|
publicDashboardFakeService,
|
||||||
|
cfg,
|
||||||
|
nil,
|
||||||
|
tracer)
|
||||||
dashboardPermissions := accesscontrolmock.NewMockedPermissionsService()
|
dashboardPermissions := accesscontrolmock.NewMockedPermissionsService()
|
||||||
dashboardPermissions.On("SetPermissions", mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return([]accesscontrol.ResourcePermission{}, nil)
|
dashboardPermissions.On("SetPermissions",
|
||||||
|
mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return([]accesscontrol.ResourcePermission{}, nil)
|
||||||
service, err := ProvideDashboardServiceImpl(
|
service, err := ProvideDashboardServiceImpl(
|
||||||
cfg, dashboardStore, folderStore,
|
cfg, dashboardStore, folderStore,
|
||||||
featuremgmt.WithFeatures(),
|
featuremgmt.WithFeatures(),
|
||||||
@ -992,7 +1019,19 @@ func callSaveWithError(t *testing.T, cmd dashboards.SaveDashboardCommand, sqlSto
|
|||||||
tracer := tracing.InitializeTracerForTest()
|
tracer := tracing.InitializeTracerForTest()
|
||||||
publicDashboardFakeService := publicdashboards.NewFakePublicDashboardServiceWrapper(t)
|
publicDashboardFakeService := publicdashboards.NewFakePublicDashboardServiceWrapper(t)
|
||||||
folderStore2 := folderimpl.ProvideStore(sqlStore)
|
folderStore2 := folderimpl.ProvideStore(sqlStore)
|
||||||
folderService := folderimpl.ProvideService(folderStore2, actest.FakeAccessControl{ExpectedEvaluate: true}, bus.ProvideBus(tracer), dashboardStore, folderStore, sqlStore, features, supportbundlestest.NewFakeBundleService(), publicDashboardFakeService, cfg, nil, tracer)
|
folderService := folderimpl.ProvideService(folderStore2,
|
||||||
|
actest.FakeAccessControl{ExpectedEvaluate: true},
|
||||||
|
bus.ProvideBus(tracer),
|
||||||
|
dashboardStore,
|
||||||
|
folderStore,
|
||||||
|
nil,
|
||||||
|
sqlStore,
|
||||||
|
features,
|
||||||
|
supportbundlestest.NewFakeBundleService(),
|
||||||
|
publicDashboardFakeService,
|
||||||
|
cfg,
|
||||||
|
nil,
|
||||||
|
tracer)
|
||||||
service, err := ProvideDashboardServiceImpl(
|
service, err := ProvideDashboardServiceImpl(
|
||||||
cfg, dashboardStore, folderStore,
|
cfg, dashboardStore, folderStore,
|
||||||
featuremgmt.WithFeatures(),
|
featuremgmt.WithFeatures(),
|
||||||
@ -1046,7 +1085,19 @@ func saveTestDashboard(t *testing.T, title string, orgID int64, folderUID string
|
|||||||
tracer := tracing.InitializeTracerForTest()
|
tracer := tracing.InitializeTracerForTest()
|
||||||
publicDashboardFakeService := publicdashboards.NewFakePublicDashboardServiceWrapper(t)
|
publicDashboardFakeService := publicdashboards.NewFakePublicDashboardServiceWrapper(t)
|
||||||
folderStore2 := folderimpl.ProvideStore(sqlStore)
|
folderStore2 := folderimpl.ProvideStore(sqlStore)
|
||||||
folderService := folderimpl.ProvideService(folderStore2, actest.FakeAccessControl{ExpectedEvaluate: true}, bus.ProvideBus(tracer), dashboardStore, folderStore, sqlStore, features, supportbundlestest.NewFakeBundleService(), publicDashboardFakeService, cfg, nil, tracer)
|
folderService := folderimpl.ProvideService(folderStore2,
|
||||||
|
actest.FakeAccessControl{ExpectedEvaluate: true},
|
||||||
|
bus.ProvideBus(tracer),
|
||||||
|
dashboardStore,
|
||||||
|
folderStore,
|
||||||
|
nil,
|
||||||
|
sqlStore,
|
||||||
|
features,
|
||||||
|
supportbundlestest.NewFakeBundleService(),
|
||||||
|
publicDashboardFakeService,
|
||||||
|
cfg,
|
||||||
|
nil,
|
||||||
|
tracer)
|
||||||
service, err := ProvideDashboardServiceImpl(
|
service, err := ProvideDashboardServiceImpl(
|
||||||
cfg, dashboardStore, folderStore,
|
cfg, dashboardStore, folderStore,
|
||||||
features,
|
features,
|
||||||
@ -1106,7 +1157,19 @@ func saveTestFolder(t *testing.T, title string, orgID int64, sqlStore db.DB) *da
|
|||||||
tracer := tracing.InitializeTracerForTest()
|
tracer := tracing.InitializeTracerForTest()
|
||||||
publicDashboardFakeService := publicdashboards.NewFakePublicDashboardServiceWrapper(t)
|
publicDashboardFakeService := publicdashboards.NewFakePublicDashboardServiceWrapper(t)
|
||||||
folderStore2 := folderimpl.ProvideStore(sqlStore)
|
folderStore2 := folderimpl.ProvideStore(sqlStore)
|
||||||
folderService := folderimpl.ProvideService(folderStore2, actest.FakeAccessControl{ExpectedEvaluate: true}, bus.ProvideBus(tracer), dashboardStore, folderStore, sqlStore, features, supportbundlestest.NewFakeBundleService(), publicDashboardFakeService, cfg, nil, tracer)
|
folderService := folderimpl.ProvideService(folderStore2,
|
||||||
|
actest.FakeAccessControl{ExpectedEvaluate: true},
|
||||||
|
bus.ProvideBus(tracer),
|
||||||
|
dashboardStore,
|
||||||
|
folderStore,
|
||||||
|
nil,
|
||||||
|
sqlStore,
|
||||||
|
features,
|
||||||
|
supportbundlestest.NewFakeBundleService(),
|
||||||
|
publicDashboardFakeService,
|
||||||
|
cfg,
|
||||||
|
nil,
|
||||||
|
tracer)
|
||||||
folderPermissions.On("SetPermissions", mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return([]accesscontrol.ResourcePermission{}, nil)
|
folderPermissions.On("SetPermissions", mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return([]accesscontrol.ResourcePermission{}, nil)
|
||||||
service, err := ProvideDashboardServiceImpl(
|
service, err := ProvideDashboardServiceImpl(
|
||||||
cfg, dashboardStore, folderStore,
|
cfg, dashboardStore, folderStore,
|
||||||
|
@ -53,6 +53,7 @@ type Service struct {
|
|||||||
log *slog.Logger
|
log *slog.Logger
|
||||||
dashboardStore dashboards.Store
|
dashboardStore dashboards.Store
|
||||||
dashboardFolderStore folder.FolderStore
|
dashboardFolderStore folder.FolderStore
|
||||||
|
userService user.Service
|
||||||
features featuremgmt.FeatureToggles
|
features featuremgmt.FeatureToggles
|
||||||
accessControl accesscontrol.AccessControl
|
accessControl accesscontrol.AccessControl
|
||||||
k8sclient folderK8sHandler
|
k8sclient folderK8sHandler
|
||||||
@ -73,6 +74,7 @@ func ProvideService(
|
|||||||
bus bus.Bus,
|
bus bus.Bus,
|
||||||
dashboardStore dashboards.Store,
|
dashboardStore dashboards.Store,
|
||||||
folderStore folder.FolderStore,
|
folderStore folder.FolderStore,
|
||||||
|
userService user.Service,
|
||||||
db db.DB, // DB for the (new) nested folder store
|
db db.DB, // DB for the (new) nested folder store
|
||||||
features featuremgmt.FeatureToggles,
|
features featuremgmt.FeatureToggles,
|
||||||
supportBundles supportbundles.Service,
|
supportBundles supportbundles.Service,
|
||||||
@ -86,6 +88,7 @@ func ProvideService(
|
|||||||
dashboardStore: dashboardStore,
|
dashboardStore: dashboardStore,
|
||||||
dashboardFolderStore: folderStore,
|
dashboardFolderStore: folderStore,
|
||||||
store: store,
|
store: store,
|
||||||
|
userService: userService,
|
||||||
features: features,
|
features: features,
|
||||||
accessControl: ac,
|
accessControl: ac,
|
||||||
bus: bus,
|
bus: bus,
|
||||||
|
@ -64,8 +64,9 @@ func TestIntegrationProvideFolderService(t *testing.T) {
|
|||||||
ac := acmock.New()
|
ac := acmock.New()
|
||||||
db, cfg := db.InitTestDBWithCfg(t)
|
db, cfg := db.InitTestDBWithCfg(t)
|
||||||
store := ProvideStore(db)
|
store := ProvideStore(db)
|
||||||
ProvideService(store, ac, bus.ProvideBus(tracing.InitializeTracerForTest()), nil, nil, db,
|
ProvideService(
|
||||||
featuremgmt.WithFeatures(), supportbundlestest.NewFakeBundleService(), nil, cfg, nil, tracing.InitializeTracerForTest())
|
store, ac, bus.ProvideBus(tracing.InitializeTracerForTest()),
|
||||||
|
nil, nil, nil, db, featuremgmt.WithFeatures(), supportbundlestest.NewFakeBundleService(), nil, cfg, nil, tracing.InitializeTracerForTest())
|
||||||
|
|
||||||
require.Len(t, ac.Calls.RegisterAttributeScopeResolver, 2)
|
require.Len(t, ac.Calls.RegisterAttributeScopeResolver, 2)
|
||||||
})
|
})
|
||||||
|
@ -304,8 +304,9 @@ func createDashboard(t *testing.T, sqlStore db.DB, user user.SignedInUser, dash
|
|||||||
dashboardPermissions.On("SetPermissions", mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return([]accesscontrol.ResourcePermission{}, nil)
|
dashboardPermissions.On("SetPermissions", mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return([]accesscontrol.ResourcePermission{}, nil)
|
||||||
folderStore := folderimpl.ProvideDashboardFolderStore(sqlStore)
|
folderStore := folderimpl.ProvideDashboardFolderStore(sqlStore)
|
||||||
fStore := folderimpl.ProvideStore(sqlStore)
|
fStore := folderimpl.ProvideStore(sqlStore)
|
||||||
folderSvc := folderimpl.ProvideService(fStore, ac, bus.ProvideBus(tracing.InitializeTracerForTest()), dashboardStore,
|
folderSvc := folderimpl.ProvideService(
|
||||||
folderStore, sqlStore, features, supportbundlestest.NewFakeBundleService(), nil, cfg, nil, tracing.InitializeTracerForTest())
|
fStore, ac, bus.ProvideBus(tracing.InitializeTracerForTest()), dashboardStore, folderStore,
|
||||||
|
nil, sqlStore, features, supportbundlestest.NewFakeBundleService(), nil, cfg, nil, tracing.InitializeTracerForTest())
|
||||||
_, err = folderSvc.Create(context.Background(), &folder.CreateFolderCommand{UID: folderUID, SignedInUser: &user, Title: folderUID + "-title"})
|
_, err = folderSvc.Create(context.Background(), &folder.CreateFolderCommand{UID: folderUID, SignedInUser: &user, Title: folderUID + "-title"})
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
service, err := dashboardservice.ProvideDashboardServiceImpl(
|
service, err := dashboardservice.ProvideDashboardServiceImpl(
|
||||||
@ -341,8 +342,9 @@ func createFolder(t *testing.T, sc scenarioContext, title string, folderSvc fold
|
|||||||
|
|
||||||
folderStore := folderimpl.ProvideDashboardFolderStore(sc.sqlStore)
|
folderStore := folderimpl.ProvideDashboardFolderStore(sc.sqlStore)
|
||||||
store := folderimpl.ProvideStore(sc.sqlStore)
|
store := folderimpl.ProvideStore(sc.sqlStore)
|
||||||
folderSvc = folderimpl.ProvideService(store, ac, bus.ProvideBus(tracing.InitializeTracerForTest()), dashboardStore, folderStore, sc.sqlStore,
|
folderSvc = folderimpl.ProvideService(
|
||||||
features, supportbundlestest.NewFakeBundleService(), nil, cfg, nil, tracing.InitializeTracerForTest())
|
store, ac, bus.ProvideBus(tracing.InitializeTracerForTest()), dashboardStore, folderStore,
|
||||||
|
nil, sc.sqlStore, features, supportbundlestest.NewFakeBundleService(), nil, cfg, nil, tracing.InitializeTracerForTest())
|
||||||
t.Logf("Creating folder with title %q and UID uid_for_%s", title, title)
|
t.Logf("Creating folder with title %q and UID uid_for_%s", title, title)
|
||||||
}
|
}
|
||||||
ctx := identity.WithRequester(context.Background(), &sc.user)
|
ctx := identity.WithRequester(context.Background(), &sc.user)
|
||||||
@ -404,8 +406,9 @@ func scenarioWithPanel(t *testing.T, desc string, fn func(t *testing.T, sc scena
|
|||||||
dashboardPermissions := acmock.NewMockedPermissionsService()
|
dashboardPermissions := acmock.NewMockedPermissionsService()
|
||||||
folderStore := folderimpl.ProvideDashboardFolderStore(sqlStore)
|
folderStore := folderimpl.ProvideDashboardFolderStore(sqlStore)
|
||||||
fStore := folderimpl.ProvideStore(sqlStore)
|
fStore := folderimpl.ProvideStore(sqlStore)
|
||||||
folderSvc := folderimpl.ProvideService(fStore, ac, bus.ProvideBus(tracing.InitializeTracerForTest()), dashboardStore,
|
folderSvc := folderimpl.ProvideService(
|
||||||
folderStore, sqlStore, features, supportbundlestest.NewFakeBundleService(), nil, cfg, nil, tracing.InitializeTracerForTest())
|
fStore, ac, bus.ProvideBus(tracing.InitializeTracerForTest()), dashboardStore, folderStore,
|
||||||
|
nil, sqlStore, features, supportbundlestest.NewFakeBundleService(), nil, cfg, nil, tracing.InitializeTracerForTest())
|
||||||
dashboardService, svcErr := dashboardservice.ProvideDashboardServiceImpl(
|
dashboardService, svcErr := dashboardservice.ProvideDashboardServiceImpl(
|
||||||
cfg, dashboardStore, folderStore,
|
cfg, dashboardStore, folderStore,
|
||||||
features, folderPermissions, ac,
|
features, folderPermissions, ac,
|
||||||
@ -470,8 +473,9 @@ func testScenario(t *testing.T, desc string, fn func(t *testing.T, sc scenarioCo
|
|||||||
dashboardPermissions := acmock.NewMockedPermissionsService()
|
dashboardPermissions := acmock.NewMockedPermissionsService()
|
||||||
folderStore := folderimpl.ProvideDashboardFolderStore(sqlStore)
|
folderStore := folderimpl.ProvideDashboardFolderStore(sqlStore)
|
||||||
fStore := folderimpl.ProvideStore(sqlStore)
|
fStore := folderimpl.ProvideStore(sqlStore)
|
||||||
folderSvc := folderimpl.ProvideService(fStore, ac, bus.ProvideBus(tracing.InitializeTracerForTest()), dashboardStore,
|
folderSvc := folderimpl.ProvideService(
|
||||||
folderStore, sqlStore, features, supportbundlestest.NewFakeBundleService(), nil, cfg, nil, tracing.InitializeTracerForTest())
|
fStore, ac, bus.ProvideBus(tracing.InitializeTracerForTest()), dashboardStore, folderStore,
|
||||||
|
nil, sqlStore, features, supportbundlestest.NewFakeBundleService(), nil, cfg, nil, tracing.InitializeTracerForTest())
|
||||||
dashService, dashSvcErr := dashboardservice.ProvideDashboardServiceImpl(
|
dashService, dashSvcErr := dashboardservice.ProvideDashboardServiceImpl(
|
||||||
cfg, dashboardStore, folderStore,
|
cfg, dashboardStore, folderStore,
|
||||||
features, folderPermissions, ac,
|
features, folderPermissions, ac,
|
||||||
|
@ -755,8 +755,9 @@ func createFolder(t *testing.T, sc scenarioContext, title string) *folder.Folder
|
|||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
folderStore := folderimpl.ProvideDashboardFolderStore(sc.sqlStore)
|
folderStore := folderimpl.ProvideDashboardFolderStore(sc.sqlStore)
|
||||||
fStore := folderimpl.ProvideStore(sc.sqlStore)
|
fStore := folderimpl.ProvideStore(sc.sqlStore)
|
||||||
s := folderimpl.ProvideService(fStore, ac, bus.ProvideBus(tracing.InitializeTracerForTest()), dashboardStore, folderStore, sc.sqlStore,
|
s := folderimpl.ProvideService(
|
||||||
features, supportbundlestest.NewFakeBundleService(), nil, cfg, nil, tracing.InitializeTracerForTest())
|
fStore, ac, bus.ProvideBus(tracing.InitializeTracerForTest()), dashboardStore, folderStore,
|
||||||
|
nil, sc.sqlStore, features, supportbundlestest.NewFakeBundleService(), nil, cfg, nil, tracing.InitializeTracerForTest())
|
||||||
|
|
||||||
t.Logf("Creating folder with title and UID %q", title)
|
t.Logf("Creating folder with title and UID %q", title)
|
||||||
ctx := identity.WithRequester(context.Background(), sc.user)
|
ctx := identity.WithRequester(context.Background(), sc.user)
|
||||||
@ -842,8 +843,9 @@ func testScenario(t *testing.T, desc string, fn func(t *testing.T, sc scenarioCo
|
|||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
fStore := folderimpl.ProvideStore(sqlStore)
|
fStore := folderimpl.ProvideStore(sqlStore)
|
||||||
|
|
||||||
folderService := folderimpl.ProvideService(fStore, ac, bus.ProvideBus(tracing.InitializeTracerForTest()), dashboardStore, folderStore, sqlStore,
|
folderService := folderimpl.ProvideService(
|
||||||
features, supportbundlestest.NewFakeBundleService(), nil, cfg, nil, tracing.InitializeTracerForTest())
|
fStore, ac, bus.ProvideBus(tracing.InitializeTracerForTest()), dashboardStore, folderStore,
|
||||||
|
nil, sqlStore, features, supportbundlestest.NewFakeBundleService(), nil, cfg, nil, tracing.InitializeTracerForTest())
|
||||||
|
|
||||||
elementService := libraryelements.ProvideService(cfg, sqlStore, routing.NewRouteRegister(), folderService, features, ac)
|
elementService := libraryelements.ProvideService(cfg, sqlStore, routing.NewRouteRegister(), folderService, features, ac)
|
||||||
service := LibraryPanelService{
|
service := LibraryPanelService{
|
||||||
|
@ -1919,8 +1919,9 @@ func createTestEnv(t *testing.T, testConfig string) testEnvironment {
|
|||||||
|
|
||||||
folderStore := folderimpl.ProvideDashboardFolderStore(sqlStore)
|
folderStore := folderimpl.ProvideDashboardFolderStore(sqlStore)
|
||||||
fStore := folderimpl.ProvideStore(sqlStore)
|
fStore := folderimpl.ProvideStore(sqlStore)
|
||||||
folderService := folderimpl.ProvideService(fStore, actest.FakeAccessControl{ExpectedEvaluate: true}, bus.ProvideBus(tracing.InitializeTracerForTest()), dashboardStore, folderStore, sqlStore,
|
folderService := folderimpl.ProvideService(
|
||||||
featuremgmt.WithFeatures(), supportbundlestest.NewFakeBundleService(), nil, cfg, nil, tracing.InitializeTracerForTest())
|
fStore, actest.FakeAccessControl{ExpectedEvaluate: true}, bus.ProvideBus(tracing.InitializeTracerForTest()), dashboardStore, folderStore,
|
||||||
|
nil, sqlStore, featuremgmt.WithFeatures(), supportbundlestest.NewFakeBundleService(), nil, cfg, nil, tracing.InitializeTracerForTest())
|
||||||
store := store.DBstore{
|
store := store.DBstore{
|
||||||
Logger: log,
|
Logger: log,
|
||||||
SQLStore: sqlStore,
|
SQLStore: sqlStore,
|
||||||
|
@ -1604,8 +1604,9 @@ func TestProvisiongWithFullpath(t *testing.T) {
|
|||||||
ac := acmock.New()
|
ac := acmock.New()
|
||||||
features := featuremgmt.WithFeatures(featuremgmt.FlagNestedFolders)
|
features := featuremgmt.WithFeatures(featuremgmt.FlagNestedFolders)
|
||||||
fStore := folderimpl.ProvideStore(sqlStore)
|
fStore := folderimpl.ProvideStore(sqlStore)
|
||||||
folderService := folderimpl.ProvideService(fStore, ac, inProcBus, dashboardStore, folderStore, sqlStore,
|
folderService := folderimpl.ProvideService(
|
||||||
features, supportbundlestest.NewFakeBundleService(), nil, cfg, nil, tracing.InitializeTracerForTest())
|
fStore, ac, inProcBus, dashboardStore, folderStore,
|
||||||
|
nil, sqlStore, features, supportbundlestest.NewFakeBundleService(), nil, cfg, nil, tracing.InitializeTracerForTest())
|
||||||
|
|
||||||
ruleService := createAlertRuleService(t, folderService)
|
ruleService := createAlertRuleService(t, folderService)
|
||||||
var orgID int64 = 1
|
var orgID int64 = 1
|
||||||
|
@ -28,7 +28,7 @@ import (
|
|||||||
func SetupFolderService(tb testing.TB, cfg *setting.Cfg, db db.DB, dashboardStore dashboards.Store, folderStore *folderimpl.DashboardFolderStoreImpl, bus *bus.InProcBus, features featuremgmt.FeatureToggles, ac accesscontrol.AccessControl) folder.Service {
|
func SetupFolderService(tb testing.TB, cfg *setting.Cfg, db db.DB, dashboardStore dashboards.Store, folderStore *folderimpl.DashboardFolderStoreImpl, bus *bus.InProcBus, features featuremgmt.FeatureToggles, ac accesscontrol.AccessControl) folder.Service {
|
||||||
tb.Helper()
|
tb.Helper()
|
||||||
fStore := folderimpl.ProvideStore(db)
|
fStore := folderimpl.ProvideStore(db)
|
||||||
return folderimpl.ProvideService(fStore, ac, bus, dashboardStore, folderStore, db,
|
return folderimpl.ProvideService(fStore, ac, bus, dashboardStore, folderStore, nil, db,
|
||||||
features, supportbundlestest.NewFakeBundleService(), nil, cfg, nil, tracing.InitializeTracerForTest())
|
features, supportbundlestest.NewFakeBundleService(), nil, cfg, nil, tracing.InitializeTracerForTest())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1394,7 +1394,9 @@ func TestPublicDashboardServiceImpl_ListPublicDashboards(t *testing.T) {
|
|||||||
fStore := folderimpl.ProvideStore(testDB)
|
fStore := folderimpl.ProvideStore(testDB)
|
||||||
folderPermissions := acmock.NewMockedPermissionsService()
|
folderPermissions := acmock.NewMockedPermissionsService()
|
||||||
folderStore := folderimpl.ProvideDashboardFolderStore(testDB)
|
folderStore := folderimpl.ProvideDashboardFolderStore(testDB)
|
||||||
folderSvc := folderimpl.ProvideService(fStore, ac, bus.ProvideBus(tracing.InitializeTracerForTest()), dashStore, folderStore, testDB, features, supportbundlestest.NewFakeBundleService(), nil, cfg, nil, tracing.InitializeTracerForTest())
|
folderSvc := folderimpl.ProvideService(
|
||||||
|
fStore, ac, bus.ProvideBus(tracing.InitializeTracerForTest()), dashStore, folderStore,
|
||||||
|
nil, testDB, features, supportbundlestest.NewFakeBundleService(), nil, cfg, nil, tracing.InitializeTracerForTest())
|
||||||
|
|
||||||
dashboardService, err := dashsvc.ProvideDashboardServiceImpl(cfg, dashStore, folderStore, featuremgmt.WithFeatures(), folderPermissions, ac, folderSvc, fStore, nil, nil, nil, nil, quotatest.New(false, nil), nil, nil)
|
dashboardService, err := dashsvc.ProvideDashboardServiceImpl(cfg, dashStore, folderStore, featuremgmt.WithFeatures(), folderPermissions, ac, folderSvc, fStore, nil, nil, nil, nil, quotatest.New(false, nil), nil, nil)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
@ -491,9 +491,9 @@ func setupEnv(t *testing.T, sqlStore db.DB, cfg *setting.Cfg, b bus.Bus, quotaSe
|
|||||||
dashStore, err := dashboardStore.ProvideDashboardStore(sqlStore, cfg, featuremgmt.WithFeatures(), tagimpl.ProvideService(sqlStore))
|
dashStore, err := dashboardStore.ProvideDashboardStore(sqlStore, cfg, featuremgmt.WithFeatures(), tagimpl.ProvideService(sqlStore))
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
ac := acimpl.ProvideAccessControl(featuremgmt.WithFeatures())
|
ac := acimpl.ProvideAccessControl(featuremgmt.WithFeatures())
|
||||||
folderSvc := folderimpl.ProvideService(fStore, acmock.New(), bus.ProvideBus(tracing.InitializeTracerForTest()),
|
folderSvc := folderimpl.ProvideService(
|
||||||
dashStore, folderStore, sqlStore, featuremgmt.WithFeatures(),
|
fStore, acmock.New(), bus.ProvideBus(tracing.InitializeTracerForTest()), dashStore, folderStore,
|
||||||
supportbundlestest.NewFakeBundleService(), nil, cfg, nil, tracing.InitializeTracerForTest())
|
nil, sqlStore, featuremgmt.WithFeatures(), supportbundlestest.NewFakeBundleService(), nil, cfg, nil, tracing.InitializeTracerForTest())
|
||||||
dashService, err := dashService.ProvideDashboardServiceImpl(cfg, dashStore, folderStore, featuremgmt.WithFeatures(), acmock.NewMockedPermissionsService(),
|
dashService, err := dashService.ProvideDashboardServiceImpl(cfg, dashStore, folderStore, featuremgmt.WithFeatures(), acmock.NewMockedPermissionsService(),
|
||||||
ac, folderSvc, fStore, nil, nil, nil, nil, quotaService, nil, nil)
|
ac, folderSvc, fStore, nil, nil, nil, nil, quotaService, nil, nil)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
@ -822,8 +822,9 @@ func setupNestedTest(t *testing.T, usr *user.SignedInUser, perms []accesscontrol
|
|||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
fStore := folderimpl.ProvideStore(db)
|
fStore := folderimpl.ProvideStore(db)
|
||||||
folderSvc := folderimpl.ProvideService(fStore, actest.FakeAccessControl{ExpectedEvaluate: true}, bus.ProvideBus(tracing.InitializeTracerForTest()), dashStore,
|
folderSvc := folderimpl.ProvideService(
|
||||||
folderimpl.ProvideDashboardFolderStore(db), db, features, supportbundlestest.NewFakeBundleService(), nil, cfg, nil, tracing.InitializeTracerForTest())
|
fStore, actest.FakeAccessControl{ExpectedEvaluate: true}, bus.ProvideBus(tracing.InitializeTracerForTest()), dashStore, folderimpl.ProvideDashboardFolderStore(db),
|
||||||
|
nil, db, features, supportbundlestest.NewFakeBundleService(), nil, cfg, nil, tracing.InitializeTracerForTest())
|
||||||
|
|
||||||
// create parent folder
|
// create parent folder
|
||||||
parent, err := folderSvc.Create(context.Background(), &folder.CreateFolderCommand{
|
parent, err := folderSvc.Create(context.Background(), &folder.CreateFolderCommand{
|
||||||
|
@ -79,8 +79,9 @@ func setupBenchMark(b *testing.B, usr user.SignedInUser, features featuremgmt.Fe
|
|||||||
require.NoError(b, err)
|
require.NoError(b, err)
|
||||||
|
|
||||||
fStore := folderimpl.ProvideStore(store)
|
fStore := folderimpl.ProvideStore(store)
|
||||||
folderSvc := folderimpl.ProvideService(fStore, mock.New(), bus.ProvideBus(tracing.InitializeTracerForTest()), dashboardWriteStore, folderimpl.ProvideDashboardFolderStore(store),
|
folderSvc := folderimpl.ProvideService(
|
||||||
store, features, supportbundlestest.NewFakeBundleService(), nil, cfg, nil, tracing.InitializeTracerForTest())
|
fStore, mock.New(), bus.ProvideBus(tracing.InitializeTracerForTest()), dashboardWriteStore, folderimpl.ProvideDashboardFolderStore(store),
|
||||||
|
nil, store, features, supportbundlestest.NewFakeBundleService(), nil, cfg, nil, tracing.InitializeTracerForTest())
|
||||||
|
|
||||||
origNewGuardian := guardian.New
|
origNewGuardian := guardian.New
|
||||||
guardian.MockDashboardGuardian(&guardian.FakeDashboardGuardian{CanViewValue: true, CanSaveValue: true})
|
guardian.MockDashboardGuardian(&guardian.FakeDashboardGuardian{CanViewValue: true, CanSaveValue: true})
|
||||||
|
@ -50,9 +50,9 @@ func TestDirectSQLStats(t *testing.T) {
|
|||||||
guardian.MockDashboardGuardian(fakeGuardian)
|
guardian.MockDashboardGuardian(fakeGuardian)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
fStore := folderimpl.ProvideStore(db)
|
fStore := folderimpl.ProvideStore(db)
|
||||||
folderSvc := folderimpl.ProvideService(fStore, actest.FakeAccessControl{ExpectedEvaluate: true}, bus.ProvideBus(tracing.InitializeTracerForTest()), dashStore,
|
folderSvc := folderimpl.ProvideService(
|
||||||
folderimpl.ProvideDashboardFolderStore(db), db, featuremgmt.WithFeatures(),
|
fStore, actest.FakeAccessControl{ExpectedEvaluate: true}, bus.ProvideBus(tracing.InitializeTracerForTest()), dashStore, folderimpl.ProvideDashboardFolderStore(db),
|
||||||
supportbundlestest.NewFakeBundleService(), nil, cfg, nil, tracing.InitializeTracerForTest())
|
nil, db, featuremgmt.WithFeatures(), supportbundlestest.NewFakeBundleService(), nil, cfg, nil, tracing.InitializeTracerForTest())
|
||||||
|
|
||||||
// create parent folder
|
// create parent folder
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user