@ -20,6 +20,7 @@ import (
"github.com/grafana/grafana/pkg/services/publicdashboards/database"
"github.com/grafana/grafana/pkg/services/publicdashboards/database"
"github.com/grafana/grafana/pkg/services/publicdashboards/internal"
"github.com/grafana/grafana/pkg/services/publicdashboards/internal"
. "github.com/grafana/grafana/pkg/services/publicdashboards/models"
. "github.com/grafana/grafana/pkg/services/publicdashboards/models"
"github.com/grafana/grafana/pkg/services/query"
"github.com/grafana/grafana/pkg/services/quota/quotatest"
"github.com/grafana/grafana/pkg/services/quota/quotatest"
"github.com/grafana/grafana/pkg/services/sqlstore"
"github.com/grafana/grafana/pkg/services/sqlstore"
"github.com/grafana/grafana/pkg/services/tag/tagimpl"
"github.com/grafana/grafana/pkg/services/tag/tagimpl"
@ -439,10 +440,14 @@ func TestGetQueryDataResponse(t *testing.T) {
require . NoError ( t , err )
require . NoError ( t , err )
publicdashboardStore := database . ProvideStore ( sqlStore )
publicdashboardStore := database . ProvideStore ( sqlStore )
fakeQueryService := & query . FakeQueryService { }
fakeQueryService . On ( "QueryData" , mock . Anything , mock . Anything , mock . Anything , mock . Anything ) . Return ( & backend . QueryDataResponse { } , nil )
service := & PublicDashboardServiceImpl {
service := & PublicDashboardServiceImpl {
log : log . New ( "test.logger" ) ,
log : log . New ( "test.logger" ) ,
store : publicdashboardStore ,
store : publicdashboardStore ,
intervalCalculator : intervalv2 . NewCalculator ( ) ,
intervalCalculator : intervalv2 . NewCalculator ( ) ,
QueryDataService : fakeQueryService ,
}
}
publicDashboardQueryDTO := PublicDashboardQueryDTO {
publicDashboardQueryDTO := PublicDashboardQueryDTO {
@ -450,7 +455,7 @@ func TestGetQueryDataResponse(t *testing.T) {
MaxDataPoints : int64 ( 1 ) ,
MaxDataPoints : int64 ( 1 ) ,
}
}
t . Run ( "Returns nil when query is hidden" , func ( t * testing . T ) {
t . Run ( "Returns query data eve n when the query is hidden" , func ( t * testing . T ) {
hiddenQuery := map [ string ] interface { } {
hiddenQuery := map [ string ] interface { } {
"datasource" : map [ string ] interface { } {
"datasource" : map [ string ] interface { } {
"type" : "mysql" ,
"type" : "mysql" ,
@ -484,7 +489,7 @@ func TestGetQueryDataResponse(t *testing.T) {
require . NoError ( t , err )
require . NoError ( t , err )
resp , _ := service . GetQueryDataResponse ( context . Background ( ) , true , publicDashboardQueryDTO , 1 , pubdashDto . AccessToken )
resp , _ := service . GetQueryDataResponse ( context . Background ( ) , true , publicDashboardQueryDTO , 1 , pubdashDto . AccessToken )
require . Nil ( t , resp )
require . NotN il ( t , resp )
} )
} )
}
}
@ -1003,7 +1008,7 @@ func TestBuildMetricRequest(t *testing.T) {
require . ErrorContains ( t , err , ErrPanelNotFound . Error ( ) )
require . ErrorContains ( t , err , ErrPanelNotFound . Error ( ) )
} )
} )
t . Run ( "metric request built without hidden query" , func ( t * testing . T ) {
t . Run ( "metric request built with hidden query" , func ( t * testing . T ) {
hiddenQuery := map [ string ] interface { } {
hiddenQuery := map [ string ] interface { } {
"datasource" : map [ string ] interface { } {
"datasource" : map [ string ] interface { } {
"type" : "mysql" ,
"type" : "mysql" ,
@ -1048,9 +1053,9 @@ func TestBuildMetricRequest(t *testing.T) {
require . Equal ( t , publicDashboardQueryDTO . MaxDataPoints , reqDTO . Queries [ i ] . Get ( "maxDataPoints" ) . MustInt64 ( ) )
require . Equal ( t , publicDashboardQueryDTO . MaxDataPoints , reqDTO . Queries [ i ] . Get ( "maxDataPoints" ) . MustInt64 ( ) )
}
}
require . Len ( t , reqDTO . Queries , 1 )
require . Len ( t , reqDTO . Queries , 2 )
require . Not Equal(
require . Equal (
t ,
t ,
simplejson . NewFromAny ( hiddenQuery ) ,
simplejson . NewFromAny ( hiddenQuery ) ,
reqDTO . Queries [ 0 ] ,
reqDTO . Queries [ 0 ] ,
@ -1059,49 +1064,8 @@ func TestBuildMetricRequest(t *testing.T) {
require . Equal (
require . Equal (
t ,
t ,
simplejson . NewFromAny ( nonHiddenQuery ) ,
simplejson . NewFromAny ( nonHiddenQuery ) ,
reqDTO . Queries [ 0 ] ,
reqDTO . Queries [ 1 ] ,
)
} )
t . Run ( "metric request built with 0 queries len when all queries are hidden" , func ( t * testing . T ) {
customPanels := [ ] interface { } {
map [ string ] interface { } {
"id" : 1 ,
"datasource" : map [ string ] interface { } {
"uid" : "ds1" ,
} ,
"targets" : [ ] interface { } { map [ string ] interface { } {
"datasource" : map [ string ] interface { } {
"type" : "mysql" ,
"uid" : "ds1" ,
} ,
"hide" : true ,
"refId" : "A" ,
} , map [ string ] interface { } {
"datasource" : map [ string ] interface { } {
"type" : "prometheus" ,
"uid" : "ds2" ,
} ,
"hide" : true ,
"refId" : "B" ,
} } ,
} }
publicDashboard := insertTestDashboard ( t , dashboardStore , "testDashWithAllQueriesHidden" , 1 , 0 , true , [ ] map [ string ] interface { } { } , customPanels )
reqDTO , err := service . buildMetricRequest (
context . Background ( ) ,
publicDashboard ,
publicDashboardPD ,
1 ,
publicDashboardQueryDTO ,
)
)
require . NoError ( t , err )
require . Equal ( t , from , reqDTO . From )
require . Equal ( t , to , reqDTO . To )
require . Len ( t , reqDTO . Queries , 0 )
} )
} )
}
}
@ -1110,11 +1074,6 @@ func TestBuildAnonymousUser(t *testing.T) {
dashboardStore , err := dashboardsDB . ProvideDashboardStore ( sqlStore , sqlStore . Cfg , featuremgmt . WithFeatures ( ) , tagimpl . ProvideService ( sqlStore , sqlStore . Cfg ) , quotatest . New ( false , nil ) )
dashboardStore , err := dashboardsDB . ProvideDashboardStore ( sqlStore , sqlStore . Cfg , featuremgmt . WithFeatures ( ) , tagimpl . ProvideService ( sqlStore , sqlStore . Cfg ) , quotatest . New ( false , nil ) )
require . NoError ( t , err )
require . NoError ( t , err )
dashboard := insertTestDashboard ( t , dashboardStore , "testDashie" , 1 , 0 , true , [ ] map [ string ] interface { } { } , nil )
dashboard := insertTestDashboard ( t , dashboardStore , "testDashie" , 1 , 0 , true , [ ] map [ string ] interface { } { } , nil )
// publicdashboardStore := database.ProvideStore(sqlStore)
// service := &PublicDashboardServiceImpl{
// log: log.New("test.logger"),
// store: publicdashboardStore,
// }
t . Run ( "will add datasource read and query permissions to user for each datasource in dashboard" , func ( t * testing . T ) {
t . Run ( "will add datasource read and query permissions to user for each datasource in dashboard" , func ( t * testing . T ) {
user := buildAnonymousUser ( context . Background ( ) , dashboard )
user := buildAnonymousUser ( context . Background ( ) , dashboard )
@ -1239,25 +1198,20 @@ func TestGroupQueriesByPanelId(t *testing.T) {
} ` , string ( query ) )
} ` , string ( query ) )
} )
} )
t . Run ( "hidden query filtered" , func ( t * testing . T ) {
t . Run ( "hidden query not filtered" , func ( t * testing . T ) {
json , err := simplejson . NewJson ( [ ] byte ( dashboardWithOneHiddenQuery ) )
json , err := simplejson . NewJson ( [ ] byte ( dashboardWithOneHiddenQuery ) )
require . NoError ( t , err )
require . NoError ( t , err )
queries := groupQueriesByPanelId ( json ) [ 2 ]
queries := groupQueriesByPanelId ( json ) [ 2 ]
require . Len ( t , queries , 1 )
require . Len ( t , queries , 2 )
for _ , query := range queries {
if hideAttr , exists := query . CheckGet ( "hide" ) ; exists && hideAttr . MustBool ( ) {
require . Fail ( t , "hidden queries should have been filtered" )
}
}
} )
} )
t . Run ( "hidden query filtered, so empty queries returned" , func ( t * testing . T ) {
t . Run ( "hidden queries not filtered, so queries returned" , func ( t * testing . T ) {
json , err := simplejson . NewJson ( [ ] byte ( dashboardWithAllHiddenQueries ) )
json , err := simplejson . NewJson ( [ ] byte ( dashboardWithAllHiddenQueries ) )
require . NoError ( t , err )
require . NoError ( t , err )
queries := groupQueriesByPanelId ( json ) [ 2 ]
queries := groupQueriesByPanelId ( json ) [ 2 ]
require . Len ( t , queries , 0 )
require . Len ( t , queries , 2 )
} )
} )
t . Run ( "queries inside panels inside rows are returned" , func ( t * testing . T ) {
t . Run ( "queries inside panels inside rows are returned" , func ( t * testing . T ) {