| 
									
										
										
										
											2022-04-02 08:00:23 +08:00
										 |  |  | package api | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import ( | 
					
						
							|  |  |  | 	"net/http" | 
					
						
							|  |  |  | 	"testing" | 
					
						
							|  |  |  | 	"time" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	"github.com/grafana/grafana-plugin-sdk-go/backend" | 
					
						
							|  |  |  | 	"github.com/stretchr/testify/mock" | 
					
						
							|  |  |  | 	"github.com/stretchr/testify/require" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	models2 "github.com/grafana/grafana/pkg/models" | 
					
						
							|  |  |  | 	"github.com/grafana/grafana/pkg/services/accesscontrol" | 
					
						
							|  |  |  | 	acMock "github.com/grafana/grafana/pkg/services/accesscontrol/mock" | 
					
						
							|  |  |  | 	"github.com/grafana/grafana/pkg/services/datasources" | 
					
						
							| 
									
										
										
										
											2022-04-26 00:57:45 +08:00
										 |  |  | 	fakes "github.com/grafana/grafana/pkg/services/datasources/fakes" | 
					
						
							| 
									
										
										
										
											2022-04-02 08:00:23 +08:00
										 |  |  | 	"github.com/grafana/grafana/pkg/services/ngalert/api/tooling/definitions" | 
					
						
							|  |  |  | 	"github.com/grafana/grafana/pkg/services/ngalert/eval" | 
					
						
							| 
									
										
										
										
											2022-11-02 22:13:39 +08:00
										 |  |  | 	"github.com/grafana/grafana/pkg/services/ngalert/eval/eval_mocks" | 
					
						
							| 
									
										
										
										
											2022-04-02 08:00:23 +08:00
										 |  |  | 	"github.com/grafana/grafana/pkg/services/ngalert/models" | 
					
						
							| 
									
										
										
										
											2022-08-10 17:56:48 +08:00
										 |  |  | 	"github.com/grafana/grafana/pkg/services/user" | 
					
						
							| 
									
										
										
										
											2022-04-02 08:00:23 +08:00
										 |  |  | 	"github.com/grafana/grafana/pkg/web" | 
					
						
							|  |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func TestRouteTestGrafanaRuleConfig(t *testing.T) { | 
					
						
							|  |  |  | 	t.Run("when fine-grained access is enabled", func(t *testing.T) { | 
					
						
							|  |  |  | 		rc := &models2.ReqContext{ | 
					
						
							|  |  |  | 			Context: &web.Context{ | 
					
						
							|  |  |  | 				Req: &http.Request{}, | 
					
						
							|  |  |  | 			}, | 
					
						
							| 
									
										
										
										
											2022-08-10 17:56:48 +08:00
										 |  |  | 			SignedInUser: &user.SignedInUser{ | 
					
						
							| 
									
										
										
										
											2022-08-11 19:28:55 +08:00
										 |  |  | 				OrgID: 1, | 
					
						
							| 
									
										
										
										
											2022-04-02 08:00:23 +08:00
										 |  |  | 			}, | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		t.Run("should return 401 if user cannot query a data source", func(t *testing.T) { | 
					
						
							|  |  |  | 			data1 := models.GenerateAlertQuery() | 
					
						
							|  |  |  | 			data2 := models.GenerateAlertQuery() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-06-14 16:17:48 +08:00
										 |  |  | 			ac := acMock.New().WithPermissions([]accesscontrol.Permission{ | 
					
						
							| 
									
										
										
										
											2022-04-02 08:00:23 +08:00
										 |  |  | 				{Action: datasources.ActionQuery, Scope: datasources.ScopeProvider.GetResourceScopeUID(data1.DatasourceUID)}, | 
					
						
							|  |  |  | 			}) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			srv := createTestingApiSrv(nil, ac, nil) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			response := srv.RouteTestGrafanaRuleConfig(rc, definitions.TestRulePayload{ | 
					
						
							|  |  |  | 				Expr: "", | 
					
						
							| 
									
										
										
										
											2022-06-27 23:52:41 +08:00
										 |  |  | 				GrafanaManagedCondition: &definitions.EvalAlertConditionCommand{ | 
					
						
							| 
									
										
										
										
											2022-04-02 08:00:23 +08:00
										 |  |  | 					Condition: data1.RefID, | 
					
						
							|  |  |  | 					Data:      []models.AlertQuery{data1, data2}, | 
					
						
							|  |  |  | 					Now:       time.Time{}, | 
					
						
							|  |  |  | 				}, | 
					
						
							|  |  |  | 			}) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			require.Equal(t, http.StatusUnauthorized, response.Status()) | 
					
						
							|  |  |  | 		}) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		t.Run("should return 200 if user can query all data sources", func(t *testing.T) { | 
					
						
							|  |  |  | 			data1 := models.GenerateAlertQuery() | 
					
						
							|  |  |  | 			data2 := models.GenerateAlertQuery() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-11-02 22:13:39 +08:00
										 |  |  | 			currentTime := time.Now() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-06-14 16:17:48 +08:00
										 |  |  | 			ac := acMock.New().WithPermissions([]accesscontrol.Permission{ | 
					
						
							| 
									
										
										
										
											2022-04-02 08:00:23 +08:00
										 |  |  | 				{Action: datasources.ActionQuery, Scope: datasources.ScopeProvider.GetResourceScopeUID(data1.DatasourceUID)}, | 
					
						
							|  |  |  | 				{Action: datasources.ActionQuery, Scope: datasources.ScopeProvider.GetResourceScopeUID(data2.DatasourceUID)}, | 
					
						
							|  |  |  | 			}) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-06-28 00:23:15 +08:00
										 |  |  | 			ds := &fakes.FakeCacheService{DataSources: []*datasources.DataSource{ | 
					
						
							| 
									
										
										
										
											2022-04-02 08:00:23 +08:00
										 |  |  | 				{Uid: data1.DatasourceUID}, | 
					
						
							|  |  |  | 				{Uid: data2.DatasourceUID}, | 
					
						
							|  |  |  | 			}} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			var result []eval.Result | 
					
						
							| 
									
										
										
										
											2022-11-02 22:13:39 +08:00
										 |  |  | 			evaluator := &eval_mocks.ConditionEvaluatorMock{} | 
					
						
							|  |  |  | 			evaluator.EXPECT().Evaluate(mock.Anything, mock.Anything).Return(result, nil) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			evalFactory := eval_mocks.NewEvaluatorFactory(evaluator) | 
					
						
							| 
									
										
										
										
											2022-04-02 08:00:23 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-11-02 22:13:39 +08:00
										 |  |  | 			srv := createTestingApiSrv(ds, ac, evalFactory) | 
					
						
							| 
									
										
										
										
											2022-04-02 08:00:23 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 			response := srv.RouteTestGrafanaRuleConfig(rc, definitions.TestRulePayload{ | 
					
						
							|  |  |  | 				Expr: "", | 
					
						
							| 
									
										
										
										
											2022-06-27 23:52:41 +08:00
										 |  |  | 				GrafanaManagedCondition: &definitions.EvalAlertConditionCommand{ | 
					
						
							| 
									
										
										
										
											2022-04-02 08:00:23 +08:00
										 |  |  | 					Condition: data1.RefID, | 
					
						
							|  |  |  | 					Data:      []models.AlertQuery{data1, data2}, | 
					
						
							| 
									
										
										
										
											2022-11-02 22:13:39 +08:00
										 |  |  | 					Now:       currentTime, | 
					
						
							| 
									
										
										
										
											2022-04-02 08:00:23 +08:00
										 |  |  | 				}, | 
					
						
							|  |  |  | 			}) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			require.Equal(t, http.StatusOK, response.Status()) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-11-02 22:13:39 +08:00
										 |  |  | 			evaluator.AssertCalled(t, "Evaluate", mock.Anything, currentTime) | 
					
						
							| 
									
										
										
										
											2022-04-02 08:00:23 +08:00
										 |  |  | 		}) | 
					
						
							|  |  |  | 	}) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	t.Run("when fine-grained access is disabled", func(t *testing.T) { | 
					
						
							|  |  |  | 		rc := &models2.ReqContext{ | 
					
						
							|  |  |  | 			Context: &web.Context{ | 
					
						
							|  |  |  | 				Req: &http.Request{}, | 
					
						
							|  |  |  | 			}, | 
					
						
							|  |  |  | 			IsSignedIn: false, | 
					
						
							| 
									
										
										
										
											2022-08-10 17:56:48 +08:00
										 |  |  | 			SignedInUser: &user.SignedInUser{ | 
					
						
							| 
									
										
										
										
											2022-08-11 19:28:55 +08:00
										 |  |  | 				OrgID: 1, | 
					
						
							| 
									
										
										
										
											2022-04-02 08:00:23 +08:00
										 |  |  | 			}, | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 		ac := acMock.New().WithDisabled() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		t.Run("should require user to be signed in", func(t *testing.T) { | 
					
						
							|  |  |  | 			data1 := models.GenerateAlertQuery() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-06-28 00:23:15 +08:00
										 |  |  | 			ds := &fakes.FakeCacheService{DataSources: []*datasources.DataSource{ | 
					
						
							| 
									
										
										
										
											2022-04-02 08:00:23 +08:00
										 |  |  | 				{Uid: data1.DatasourceUID}, | 
					
						
							|  |  |  | 			}} | 
					
						
							| 
									
										
										
										
											2022-11-02 22:13:39 +08:00
										 |  |  | 			currentTime := time.Now() | 
					
						
							| 
									
										
										
										
											2022-04-02 08:00:23 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-11-02 22:13:39 +08:00
										 |  |  | 			evaluator := &eval_mocks.ConditionEvaluatorMock{} | 
					
						
							| 
									
										
										
										
											2022-04-02 08:00:23 +08:00
										 |  |  | 			var result []eval.Result | 
					
						
							| 
									
										
										
										
											2022-11-02 22:13:39 +08:00
										 |  |  | 			evaluator.EXPECT().Evaluate(mock.Anything, mock.Anything).Return(result, nil) | 
					
						
							| 
									
										
										
										
											2022-04-02 08:00:23 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-11-02 22:13:39 +08:00
										 |  |  | 			srv := createTestingApiSrv(ds, ac, eval_mocks.NewEvaluatorFactory(evaluator)) | 
					
						
							| 
									
										
										
										
											2022-04-02 08:00:23 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 			response := srv.RouteTestGrafanaRuleConfig(rc, definitions.TestRulePayload{ | 
					
						
							|  |  |  | 				Expr: "", | 
					
						
							| 
									
										
										
										
											2022-06-27 23:52:41 +08:00
										 |  |  | 				GrafanaManagedCondition: &definitions.EvalAlertConditionCommand{ | 
					
						
							| 
									
										
										
										
											2022-04-02 08:00:23 +08:00
										 |  |  | 					Condition: data1.RefID, | 
					
						
							|  |  |  | 					Data:      []models.AlertQuery{data1}, | 
					
						
							| 
									
										
										
										
											2022-11-02 22:13:39 +08:00
										 |  |  | 					Now:       currentTime, | 
					
						
							| 
									
										
										
										
											2022-04-02 08:00:23 +08:00
										 |  |  | 				}, | 
					
						
							|  |  |  | 			}) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			require.Equal(t, http.StatusUnauthorized, response.Status()) | 
					
						
							| 
									
										
										
										
											2022-11-02 22:13:39 +08:00
										 |  |  | 			evaluator.AssertNotCalled(t, "Evaluate", mock.Anything, currentTime) | 
					
						
							| 
									
										
										
										
											2022-04-02 08:00:23 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 			rc.IsSignedIn = true | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			response = srv.RouteTestGrafanaRuleConfig(rc, definitions.TestRulePayload{ | 
					
						
							|  |  |  | 				Expr: "", | 
					
						
							| 
									
										
										
										
											2022-06-27 23:52:41 +08:00
										 |  |  | 				GrafanaManagedCondition: &definitions.EvalAlertConditionCommand{ | 
					
						
							| 
									
										
										
										
											2022-04-02 08:00:23 +08:00
										 |  |  | 					Condition: data1.RefID, | 
					
						
							|  |  |  | 					Data:      []models.AlertQuery{data1}, | 
					
						
							| 
									
										
										
										
											2022-11-02 22:13:39 +08:00
										 |  |  | 					Now:       currentTime, | 
					
						
							| 
									
										
										
										
											2022-04-02 08:00:23 +08:00
										 |  |  | 				}, | 
					
						
							|  |  |  | 			}) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			require.Equal(t, http.StatusOK, response.Status()) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-11-02 22:13:39 +08:00
										 |  |  | 			evaluator.AssertCalled(t, "Evaluate", mock.Anything, currentTime) | 
					
						
							| 
									
										
										
										
											2022-04-02 08:00:23 +08:00
										 |  |  | 		}) | 
					
						
							|  |  |  | 	}) | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func TestRouteEvalQueries(t *testing.T) { | 
					
						
							|  |  |  | 	t.Run("when fine-grained access is enabled", func(t *testing.T) { | 
					
						
							|  |  |  | 		rc := &models2.ReqContext{ | 
					
						
							|  |  |  | 			Context: &web.Context{ | 
					
						
							|  |  |  | 				Req: &http.Request{}, | 
					
						
							|  |  |  | 			}, | 
					
						
							| 
									
										
										
										
											2022-08-10 17:56:48 +08:00
										 |  |  | 			SignedInUser: &user.SignedInUser{ | 
					
						
							| 
									
										
										
										
											2022-08-11 19:28:55 +08:00
										 |  |  | 				OrgID: 1, | 
					
						
							| 
									
										
										
										
											2022-04-02 08:00:23 +08:00
										 |  |  | 			}, | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		t.Run("should return 401 if user cannot query a data source", func(t *testing.T) { | 
					
						
							|  |  |  | 			data1 := models.GenerateAlertQuery() | 
					
						
							|  |  |  | 			data2 := models.GenerateAlertQuery() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-06-14 16:17:48 +08:00
										 |  |  | 			ac := acMock.New().WithPermissions([]accesscontrol.Permission{ | 
					
						
							| 
									
										
										
										
											2022-04-02 08:00:23 +08:00
										 |  |  | 				{Action: datasources.ActionQuery, Scope: datasources.ScopeProvider.GetResourceScopeUID(data1.DatasourceUID)}, | 
					
						
							|  |  |  | 			}) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			srv := &TestingApiSrv{ | 
					
						
							|  |  |  | 				accessControl: ac, | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			response := srv.RouteEvalQueries(rc, definitions.EvalQueriesPayload{ | 
					
						
							|  |  |  | 				Data: []models.AlertQuery{data1, data2}, | 
					
						
							|  |  |  | 				Now:  time.Time{}, | 
					
						
							|  |  |  | 			}) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			require.Equal(t, http.StatusUnauthorized, response.Status()) | 
					
						
							|  |  |  | 		}) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		t.Run("should return 200 if user can query all data sources", func(t *testing.T) { | 
					
						
							|  |  |  | 			data1 := models.GenerateAlertQuery() | 
					
						
							|  |  |  | 			data2 := models.GenerateAlertQuery() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-11-02 22:13:39 +08:00
										 |  |  | 			currentTime := time.Now() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-06-14 16:17:48 +08:00
										 |  |  | 			ac := acMock.New().WithPermissions([]accesscontrol.Permission{ | 
					
						
							| 
									
										
										
										
											2022-04-02 08:00:23 +08:00
										 |  |  | 				{Action: datasources.ActionQuery, Scope: datasources.ScopeProvider.GetResourceScopeUID(data1.DatasourceUID)}, | 
					
						
							|  |  |  | 				{Action: datasources.ActionQuery, Scope: datasources.ScopeProvider.GetResourceScopeUID(data2.DatasourceUID)}, | 
					
						
							|  |  |  | 			}) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-06-28 00:23:15 +08:00
										 |  |  | 			ds := &fakes.FakeCacheService{DataSources: []*datasources.DataSource{ | 
					
						
							| 
									
										
										
										
											2022-04-02 08:00:23 +08:00
										 |  |  | 				{Uid: data1.DatasourceUID}, | 
					
						
							|  |  |  | 				{Uid: data2.DatasourceUID}, | 
					
						
							|  |  |  | 			}} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-11-02 22:13:39 +08:00
										 |  |  | 			evaluator := &eval_mocks.ConditionEvaluatorMock{} | 
					
						
							| 
									
										
										
										
											2022-04-02 08:00:23 +08:00
										 |  |  | 			result := &backend.QueryDataResponse{ | 
					
						
							|  |  |  | 				Responses: map[string]backend.DataResponse{ | 
					
						
							|  |  |  | 					"test": { | 
					
						
							|  |  |  | 						Frames: nil, | 
					
						
							|  |  |  | 						Error:  nil, | 
					
						
							|  |  |  | 					}, | 
					
						
							|  |  |  | 				}, | 
					
						
							|  |  |  | 			} | 
					
						
							| 
									
										
										
										
											2022-11-02 22:13:39 +08:00
										 |  |  | 			evaluator.EXPECT().EvaluateRaw(mock.Anything, mock.Anything).Return(result, nil) | 
					
						
							| 
									
										
										
										
											2022-04-02 08:00:23 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-11-02 22:13:39 +08:00
										 |  |  | 			srv := createTestingApiSrv(ds, ac, eval_mocks.NewEvaluatorFactory(evaluator)) | 
					
						
							| 
									
										
										
										
											2022-04-02 08:00:23 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 			response := srv.RouteEvalQueries(rc, definitions.EvalQueriesPayload{ | 
					
						
							|  |  |  | 				Data: []models.AlertQuery{data1, data2}, | 
					
						
							| 
									
										
										
										
											2022-11-02 22:13:39 +08:00
										 |  |  | 				Now:  currentTime, | 
					
						
							| 
									
										
										
										
											2022-04-02 08:00:23 +08:00
										 |  |  | 			}) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			require.Equal(t, http.StatusOK, response.Status()) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-11-02 22:13:39 +08:00
										 |  |  | 			evaluator.AssertCalled(t, "EvaluateRaw", mock.Anything, currentTime) | 
					
						
							| 
									
										
										
										
											2022-04-02 08:00:23 +08:00
										 |  |  | 		}) | 
					
						
							|  |  |  | 	}) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	t.Run("when fine-grained access is disabled", func(t *testing.T) { | 
					
						
							|  |  |  | 		rc := &models2.ReqContext{ | 
					
						
							|  |  |  | 			Context: &web.Context{ | 
					
						
							|  |  |  | 				Req: &http.Request{}, | 
					
						
							|  |  |  | 			}, | 
					
						
							|  |  |  | 			IsSignedIn: false, | 
					
						
							| 
									
										
										
										
											2022-08-10 17:56:48 +08:00
										 |  |  | 			SignedInUser: &user.SignedInUser{ | 
					
						
							| 
									
										
										
										
											2022-08-11 19:28:55 +08:00
										 |  |  | 				OrgID: 1, | 
					
						
							| 
									
										
										
										
											2022-04-02 08:00:23 +08:00
										 |  |  | 			}, | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 		ac := acMock.New().WithDisabled() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		t.Run("should require user to be signed in", func(t *testing.T) { | 
					
						
							|  |  |  | 			data1 := models.GenerateAlertQuery() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-06-28 00:23:15 +08:00
										 |  |  | 			ds := &fakes.FakeCacheService{DataSources: []*datasources.DataSource{ | 
					
						
							| 
									
										
										
										
											2022-04-02 08:00:23 +08:00
										 |  |  | 				{Uid: data1.DatasourceUID}, | 
					
						
							|  |  |  | 			}} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-11-02 22:13:39 +08:00
										 |  |  | 			currentTime := time.Now() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			evaluator := &eval_mocks.ConditionEvaluatorMock{} | 
					
						
							| 
									
										
										
										
											2022-04-02 08:00:23 +08:00
										 |  |  | 			result := &backend.QueryDataResponse{ | 
					
						
							|  |  |  | 				Responses: map[string]backend.DataResponse{ | 
					
						
							|  |  |  | 					"test": { | 
					
						
							|  |  |  | 						Frames: nil, | 
					
						
							|  |  |  | 						Error:  nil, | 
					
						
							|  |  |  | 					}, | 
					
						
							|  |  |  | 				}, | 
					
						
							|  |  |  | 			} | 
					
						
							| 
									
										
										
										
											2022-11-02 22:13:39 +08:00
										 |  |  | 			evaluator.EXPECT().EvaluateRaw(mock.Anything, mock.Anything).Return(result, nil) | 
					
						
							| 
									
										
										
										
											2022-04-02 08:00:23 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-11-02 22:13:39 +08:00
										 |  |  | 			srv := createTestingApiSrv(ds, ac, eval_mocks.NewEvaluatorFactory(evaluator)) | 
					
						
							| 
									
										
										
										
											2022-04-02 08:00:23 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 			response := srv.RouteEvalQueries(rc, definitions.EvalQueriesPayload{ | 
					
						
							|  |  |  | 				Data: []models.AlertQuery{data1}, | 
					
						
							| 
									
										
										
										
											2022-11-02 22:13:39 +08:00
										 |  |  | 				Now:  currentTime, | 
					
						
							| 
									
										
										
										
											2022-04-02 08:00:23 +08:00
										 |  |  | 			}) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			require.Equal(t, http.StatusUnauthorized, response.Status()) | 
					
						
							| 
									
										
										
										
											2022-11-02 22:13:39 +08:00
										 |  |  | 			evaluator.AssertNotCalled(t, "EvaluateRaw", mock.Anything, mock.Anything) | 
					
						
							| 
									
										
										
										
											2022-04-02 08:00:23 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 			rc.IsSignedIn = true | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			response = srv.RouteEvalQueries(rc, definitions.EvalQueriesPayload{ | 
					
						
							|  |  |  | 				Data: []models.AlertQuery{data1}, | 
					
						
							| 
									
										
										
										
											2022-11-02 22:13:39 +08:00
										 |  |  | 				Now:  currentTime, | 
					
						
							| 
									
										
										
										
											2022-04-02 08:00:23 +08:00
										 |  |  | 			}) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			require.Equal(t, http.StatusOK, response.Status()) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-11-02 22:13:39 +08:00
										 |  |  | 			evaluator.AssertCalled(t, "EvaluateRaw", mock.Anything, currentTime) | 
					
						
							| 
									
										
										
										
											2022-04-02 08:00:23 +08:00
										 |  |  | 		}) | 
					
						
							|  |  |  | 	}) | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-11-02 22:13:39 +08:00
										 |  |  | func createTestingApiSrv(ds *fakes.FakeCacheService, ac *acMock.Mock, evaluator eval.EvaluatorFactory) *TestingApiSrv { | 
					
						
							| 
									
										
										
										
											2022-04-02 08:00:23 +08:00
										 |  |  | 	if ac == nil { | 
					
						
							|  |  |  | 		ac = acMock.New().WithDisabled() | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return &TestingApiSrv{ | 
					
						
							|  |  |  | 		DatasourceCache: ds, | 
					
						
							|  |  |  | 		accessControl:   ac, | 
					
						
							|  |  |  | 		evaluator:       evaluator, | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } |