| 
									
										
										
										
											2022-08-26 23:03:38 +08:00
										 |  |  | package service | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import ( | 
					
						
							|  |  |  | 	"context" | 
					
						
							|  |  |  | 	"errors" | 
					
						
							|  |  |  | 	"strconv" | 
					
						
							|  |  |  | 	"testing" | 
					
						
							|  |  |  | 	"time" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	"github.com/stretchr/testify/assert" | 
					
						
							|  |  |  | 	"github.com/stretchr/testify/require" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	"github.com/grafana/grafana/pkg/events" | 
					
						
							| 
									
										
										
										
											2022-10-19 21:02:15 +08:00
										 |  |  | 	"github.com/grafana/grafana/pkg/infra/db" | 
					
						
							| 
									
										
										
										
											2022-08-26 23:03:38 +08:00
										 |  |  | 	ac "github.com/grafana/grafana/pkg/services/accesscontrol" | 
					
						
							|  |  |  | 	"github.com/grafana/grafana/pkg/services/datasources" | 
					
						
							|  |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func TestIntegrationDataAccess(t *testing.T) { | 
					
						
							|  |  |  | 	if testing.Short() { | 
					
						
							|  |  |  | 		t.Skip("skipping integration test") | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	defaultAddDatasourceCommand := datasources.AddDataSourceCommand{ | 
					
						
							| 
									
										
										
										
											2023-02-03 00:22:43 +08:00
										 |  |  | 		OrgID:  10, | 
					
						
							| 
									
										
										
										
											2022-08-26 23:03:38 +08:00
										 |  |  | 		Name:   "nisse", | 
					
						
							|  |  |  | 		Type:   datasources.DS_GRAPHITE, | 
					
						
							|  |  |  | 		Access: datasources.DS_ACCESS_DIRECT, | 
					
						
							| 
									
										
										
										
											2023-02-03 00:22:43 +08:00
										 |  |  | 		URL:    "http://test", | 
					
						
							| 
									
										
										
										
											2022-08-26 23:03:38 +08:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	defaultUpdateDatasourceCommand := datasources.UpdateDataSourceCommand{ | 
					
						
							| 
									
										
										
										
											2023-02-03 00:22:43 +08:00
										 |  |  | 		OrgID:  10, | 
					
						
							| 
									
										
										
										
											2022-08-26 23:03:38 +08:00
										 |  |  | 		Name:   "nisse_updated", | 
					
						
							|  |  |  | 		Type:   datasources.DS_GRAPHITE, | 
					
						
							|  |  |  | 		Access: datasources.DS_ACCESS_DIRECT, | 
					
						
							| 
									
										
										
										
											2023-02-03 00:22:43 +08:00
										 |  |  | 		URL:    "http://test", | 
					
						
							| 
									
										
										
										
											2022-08-26 23:03:38 +08:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-10-19 21:02:15 +08:00
										 |  |  | 	initDatasource := func(db db.DB) *datasources.DataSource { | 
					
						
							| 
									
										
										
										
											2022-08-26 23:03:38 +08:00
										 |  |  | 		cmd := defaultAddDatasourceCommand | 
					
						
							|  |  |  | 		ss := SqlStore{db: db} | 
					
						
							| 
									
										
										
										
											2023-02-09 22:49:44 +08:00
										 |  |  | 		_, err := ss.AddDataSource(context.Background(), &cmd) | 
					
						
							| 
									
										
										
										
											2022-08-26 23:03:38 +08:00
										 |  |  | 		require.NoError(t, err) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-02-03 00:22:43 +08:00
										 |  |  | 		query := datasources.GetDataSourcesQuery{OrgID: 10} | 
					
						
							| 
									
										
										
										
											2023-02-09 22:49:44 +08:00
										 |  |  | 		dataSources, err := ss.GetDataSources(context.Background(), &query) | 
					
						
							| 
									
										
										
										
											2022-08-26 23:03:38 +08:00
										 |  |  | 		require.NoError(t, err) | 
					
						
							| 
									
										
										
										
											2023-02-09 22:49:44 +08:00
										 |  |  | 		require.Equal(t, 1, len(dataSources)) | 
					
						
							| 
									
										
										
										
											2022-08-26 23:03:38 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-02-09 22:49:44 +08:00
										 |  |  | 		return dataSources[0] | 
					
						
							| 
									
										
										
										
											2022-08-26 23:03:38 +08:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	t.Run("AddDataSource", func(t *testing.T) { | 
					
						
							|  |  |  | 		t.Run("Can add datasource", func(t *testing.T) { | 
					
						
							| 
									
										
										
										
											2022-10-19 21:02:15 +08:00
										 |  |  | 			db := db.InitTestDB(t) | 
					
						
							| 
									
										
										
										
											2022-08-26 23:03:38 +08:00
										 |  |  | 			ss := SqlStore{db: db} | 
					
						
							| 
									
										
										
										
											2023-02-09 22:49:44 +08:00
										 |  |  | 			_, err := ss.AddDataSource(context.Background(), &datasources.AddDataSourceCommand{ | 
					
						
							| 
									
										
										
										
											2023-02-03 00:22:43 +08:00
										 |  |  | 				OrgID:    10, | 
					
						
							| 
									
										
										
										
											2022-08-26 23:03:38 +08:00
										 |  |  | 				Name:     "laban", | 
					
						
							|  |  |  | 				Type:     datasources.DS_GRAPHITE, | 
					
						
							|  |  |  | 				Access:   datasources.DS_ACCESS_DIRECT, | 
					
						
							| 
									
										
										
										
											2023-02-03 00:22:43 +08:00
										 |  |  | 				URL:      "http://test", | 
					
						
							| 
									
										
										
										
											2022-08-26 23:03:38 +08:00
										 |  |  | 				Database: "site", | 
					
						
							|  |  |  | 				ReadOnly: true, | 
					
						
							|  |  |  | 			}) | 
					
						
							|  |  |  | 			require.NoError(t, err) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-02-03 00:22:43 +08:00
										 |  |  | 			query := datasources.GetDataSourcesQuery{OrgID: 10} | 
					
						
							| 
									
										
										
										
											2023-02-09 22:49:44 +08:00
										 |  |  | 			dataSources, err := ss.GetDataSources(context.Background(), &query) | 
					
						
							| 
									
										
										
										
											2022-08-26 23:03:38 +08:00
										 |  |  | 			require.NoError(t, err) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-02-09 22:49:44 +08:00
										 |  |  | 			require.Equal(t, 1, len(dataSources)) | 
					
						
							|  |  |  | 			ds := dataSources[0] | 
					
						
							| 
									
										
										
										
											2022-08-26 23:03:38 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-02-03 00:22:43 +08:00
										 |  |  | 			require.EqualValues(t, 10, ds.OrgID) | 
					
						
							| 
									
										
										
										
											2022-08-26 23:03:38 +08:00
										 |  |  | 			require.Equal(t, "site", ds.Database) | 
					
						
							|  |  |  | 			require.True(t, ds.ReadOnly) | 
					
						
							|  |  |  | 		}) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		t.Run("generates uid if not specified", func(t *testing.T) { | 
					
						
							| 
									
										
										
										
											2022-10-19 21:02:15 +08:00
										 |  |  | 			db := db.InitTestDB(t) | 
					
						
							| 
									
										
										
										
											2022-08-26 23:03:38 +08:00
										 |  |  | 			ds := initDatasource(db) | 
					
						
							| 
									
										
										
										
											2023-02-03 00:22:43 +08:00
										 |  |  | 			require.NotEmpty(t, ds.UID) | 
					
						
							| 
									
										
										
										
											2022-08-26 23:03:38 +08:00
										 |  |  | 		}) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		t.Run("fails to insert ds with same uid", func(t *testing.T) { | 
					
						
							| 
									
										
										
										
											2022-10-19 21:02:15 +08:00
										 |  |  | 			db := db.InitTestDB(t) | 
					
						
							| 
									
										
										
										
											2022-08-26 23:03:38 +08:00
										 |  |  | 			ss := SqlStore{db: db} | 
					
						
							|  |  |  | 			cmd1 := defaultAddDatasourceCommand | 
					
						
							|  |  |  | 			cmd2 := defaultAddDatasourceCommand | 
					
						
							| 
									
										
										
										
											2023-02-03 00:22:43 +08:00
										 |  |  | 			cmd1.UID = "test" | 
					
						
							|  |  |  | 			cmd2.UID = "test" | 
					
						
							| 
									
										
										
										
											2023-02-09 22:49:44 +08:00
										 |  |  | 			_, err := ss.AddDataSource(context.Background(), &cmd1) | 
					
						
							| 
									
										
										
										
											2022-08-26 23:03:38 +08:00
										 |  |  | 			require.NoError(t, err) | 
					
						
							| 
									
										
										
										
											2023-02-09 22:49:44 +08:00
										 |  |  | 			_, err = ss.AddDataSource(context.Background(), &cmd2) | 
					
						
							| 
									
										
										
										
											2022-08-26 23:03:38 +08:00
										 |  |  | 			require.Error(t, err) | 
					
						
							|  |  |  | 			require.IsType(t, datasources.ErrDataSourceUidExists, err) | 
					
						
							|  |  |  | 		}) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		t.Run("fires an event when the datasource is added", func(t *testing.T) { | 
					
						
							| 
									
										
										
										
											2022-10-19 21:02:15 +08:00
										 |  |  | 			db := db.InitTestDB(t) | 
					
						
							| 
									
										
										
										
											2022-08-26 23:03:38 +08:00
										 |  |  | 			sqlStore := SqlStore{db: db} | 
					
						
							|  |  |  | 			var created *events.DataSourceCreated | 
					
						
							|  |  |  | 			db.Bus().AddEventListener(func(ctx context.Context, e *events.DataSourceCreated) error { | 
					
						
							|  |  |  | 				created = e | 
					
						
							|  |  |  | 				return nil | 
					
						
							|  |  |  | 			}) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-02-09 22:49:44 +08:00
										 |  |  | 			_, err := sqlStore.AddDataSource(context.Background(), &defaultAddDatasourceCommand) | 
					
						
							| 
									
										
										
										
											2022-08-26 23:03:38 +08:00
										 |  |  | 			require.NoError(t, err) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			require.Eventually(t, func() bool { | 
					
						
							|  |  |  | 				return assert.NotNil(t, created) | 
					
						
							|  |  |  | 			}, time.Second, time.Millisecond) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-02-03 00:22:43 +08:00
										 |  |  | 			query := datasources.GetDataSourcesQuery{OrgID: 10} | 
					
						
							| 
									
										
										
										
											2023-02-09 22:49:44 +08:00
										 |  |  | 			dataSources, err := sqlStore.GetDataSources(context.Background(), &query) | 
					
						
							| 
									
										
										
										
											2022-08-26 23:03:38 +08:00
										 |  |  | 			require.NoError(t, err) | 
					
						
							| 
									
										
										
										
											2023-02-09 22:49:44 +08:00
										 |  |  | 			require.Equal(t, 1, len(dataSources)) | 
					
						
							| 
									
										
										
										
											2022-08-26 23:03:38 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-02-09 22:49:44 +08:00
										 |  |  | 			require.Equal(t, dataSources[0].ID, created.ID) | 
					
						
							|  |  |  | 			require.Equal(t, dataSources[0].UID, created.UID) | 
					
						
							| 
									
										
										
										
											2022-08-26 23:03:38 +08:00
										 |  |  | 			require.Equal(t, int64(10), created.OrgID) | 
					
						
							|  |  |  | 			require.Equal(t, "nisse", created.Name) | 
					
						
							|  |  |  | 		}) | 
					
						
							|  |  |  | 	}) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	t.Run("UpdateDataSource", func(t *testing.T) { | 
					
						
							|  |  |  | 		t.Run("updates datasource with version", func(t *testing.T) { | 
					
						
							| 
									
										
										
										
											2022-10-19 21:02:15 +08:00
										 |  |  | 			db := db.InitTestDB(t) | 
					
						
							| 
									
										
										
										
											2022-08-26 23:03:38 +08:00
										 |  |  | 			ds := initDatasource(db) | 
					
						
							|  |  |  | 			cmd := defaultUpdateDatasourceCommand | 
					
						
							| 
									
										
										
										
											2023-02-03 00:22:43 +08:00
										 |  |  | 			cmd.ID = ds.ID | 
					
						
							| 
									
										
										
										
											2022-08-26 23:03:38 +08:00
										 |  |  | 			cmd.Version = ds.Version | 
					
						
							|  |  |  | 			ss := SqlStore{db: db} | 
					
						
							| 
									
										
										
										
											2023-02-09 22:49:44 +08:00
										 |  |  | 			_, err := ss.UpdateDataSource(context.Background(), &cmd) | 
					
						
							| 
									
										
										
										
											2022-08-26 23:03:38 +08:00
										 |  |  | 			require.NoError(t, err) | 
					
						
							|  |  |  | 		}) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-02-03 00:22:43 +08:00
										 |  |  | 		t.Run("does not overwrite UID if not specified", func(t *testing.T) { | 
					
						
							| 
									
										
										
										
											2022-10-19 21:02:15 +08:00
										 |  |  | 			db := db.InitTestDB(t) | 
					
						
							| 
									
										
										
										
											2022-08-26 23:03:38 +08:00
										 |  |  | 			ds := initDatasource(db) | 
					
						
							|  |  |  | 			ss := SqlStore{db: db} | 
					
						
							| 
									
										
										
										
											2023-02-03 00:22:43 +08:00
										 |  |  | 			require.NotEmpty(t, ds.UID) | 
					
						
							| 
									
										
										
										
											2022-08-26 23:03:38 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 			cmd := defaultUpdateDatasourceCommand | 
					
						
							| 
									
										
										
										
											2023-02-03 00:22:43 +08:00
										 |  |  | 			cmd.ID = ds.ID | 
					
						
							| 
									
										
										
										
											2023-02-09 22:49:44 +08:00
										 |  |  | 			_, err := ss.UpdateDataSource(context.Background(), &cmd) | 
					
						
							| 
									
										
										
										
											2022-08-26 23:03:38 +08:00
										 |  |  | 			require.NoError(t, err) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-02-03 00:22:43 +08:00
										 |  |  | 			query := datasources.GetDataSourceQuery{ID: ds.ID, OrgID: 10} | 
					
						
							| 
									
										
										
										
											2023-02-09 22:49:44 +08:00
										 |  |  | 			dataSource, err := ss.GetDataSource(context.Background(), &query) | 
					
						
							| 
									
										
										
										
											2022-08-26 23:03:38 +08:00
										 |  |  | 			require.NoError(t, err) | 
					
						
							| 
									
										
										
										
											2023-02-09 22:49:44 +08:00
										 |  |  | 			require.Equal(t, ds.UID, dataSource.UID) | 
					
						
							| 
									
										
										
										
											2022-08-26 23:03:38 +08:00
										 |  |  | 		}) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		t.Run("prevents update if version changed", func(t *testing.T) { | 
					
						
							| 
									
										
										
										
											2022-10-19 21:02:15 +08:00
										 |  |  | 			db := db.InitTestDB(t) | 
					
						
							| 
									
										
										
										
											2022-08-26 23:03:38 +08:00
										 |  |  | 			ds := initDatasource(db) | 
					
						
							|  |  |  | 			ss := SqlStore{db: db} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			cmd := datasources.UpdateDataSourceCommand{ | 
					
						
							| 
									
										
										
										
											2023-02-03 00:22:43 +08:00
										 |  |  | 				ID:      ds.ID, | 
					
						
							|  |  |  | 				OrgID:   10, | 
					
						
							| 
									
										
										
										
											2022-08-26 23:03:38 +08:00
										 |  |  | 				Name:    "nisse", | 
					
						
							|  |  |  | 				Type:    datasources.DS_GRAPHITE, | 
					
						
							|  |  |  | 				Access:  datasources.DS_ACCESS_PROXY, | 
					
						
							| 
									
										
										
										
											2023-02-03 00:22:43 +08:00
										 |  |  | 				URL:     "http://test", | 
					
						
							| 
									
										
										
										
											2022-08-26 23:03:38 +08:00
										 |  |  | 				Version: ds.Version, | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 			// Make a copy as UpdateDataSource modifies it
 | 
					
						
							|  |  |  | 			cmd2 := cmd | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-02-09 22:49:44 +08:00
										 |  |  | 			_, err := ss.UpdateDataSource(context.Background(), &cmd) | 
					
						
							| 
									
										
										
										
											2022-08-26 23:03:38 +08:00
										 |  |  | 			require.NoError(t, err) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-02-09 22:49:44 +08:00
										 |  |  | 			_, err = ss.UpdateDataSource(context.Background(), &cmd2) | 
					
						
							| 
									
										
										
										
											2022-08-26 23:03:38 +08:00
										 |  |  | 			require.Error(t, err) | 
					
						
							|  |  |  | 		}) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		t.Run("updates ds without version specified", func(t *testing.T) { | 
					
						
							| 
									
										
										
										
											2022-10-19 21:02:15 +08:00
										 |  |  | 			db := db.InitTestDB(t) | 
					
						
							| 
									
										
										
										
											2022-08-26 23:03:38 +08:00
										 |  |  | 			ds := initDatasource(db) | 
					
						
							|  |  |  | 			ss := SqlStore{db: db} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			cmd := &datasources.UpdateDataSourceCommand{ | 
					
						
							| 
									
										
										
										
											2023-02-03 00:22:43 +08:00
										 |  |  | 				ID:     ds.ID, | 
					
						
							|  |  |  | 				OrgID:  10, | 
					
						
							| 
									
										
										
										
											2022-08-26 23:03:38 +08:00
										 |  |  | 				Name:   "nisse", | 
					
						
							|  |  |  | 				Type:   datasources.DS_GRAPHITE, | 
					
						
							|  |  |  | 				Access: datasources.DS_ACCESS_PROXY, | 
					
						
							| 
									
										
										
										
											2023-02-03 00:22:43 +08:00
										 |  |  | 				URL:    "http://test", | 
					
						
							| 
									
										
										
										
											2022-08-26 23:03:38 +08:00
										 |  |  | 			} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-02-09 22:49:44 +08:00
										 |  |  | 			_, err := ss.UpdateDataSource(context.Background(), cmd) | 
					
						
							| 
									
										
										
										
											2022-08-26 23:03:38 +08:00
										 |  |  | 			require.NoError(t, err) | 
					
						
							|  |  |  | 		}) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		t.Run("updates ds without higher version", func(t *testing.T) { | 
					
						
							| 
									
										
										
										
											2022-10-19 21:02:15 +08:00
										 |  |  | 			db := db.InitTestDB(t) | 
					
						
							| 
									
										
										
										
											2022-08-26 23:03:38 +08:00
										 |  |  | 			ds := initDatasource(db) | 
					
						
							|  |  |  | 			ss := SqlStore{db: db} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			cmd := &datasources.UpdateDataSourceCommand{ | 
					
						
							| 
									
										
										
										
											2023-02-03 00:22:43 +08:00
										 |  |  | 				ID:      ds.ID, | 
					
						
							|  |  |  | 				OrgID:   10, | 
					
						
							| 
									
										
										
										
											2022-08-26 23:03:38 +08:00
										 |  |  | 				Name:    "nisse", | 
					
						
							|  |  |  | 				Type:    datasources.DS_GRAPHITE, | 
					
						
							|  |  |  | 				Access:  datasources.DS_ACCESS_PROXY, | 
					
						
							| 
									
										
										
										
											2023-02-03 00:22:43 +08:00
										 |  |  | 				URL:     "http://test", | 
					
						
							| 
									
										
										
										
											2022-08-26 23:03:38 +08:00
										 |  |  | 				Version: 90000, | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-02-09 22:49:44 +08:00
										 |  |  | 			_, err := ss.UpdateDataSource(context.Background(), cmd) | 
					
						
							| 
									
										
										
										
											2022-08-26 23:03:38 +08:00
										 |  |  | 			require.NoError(t, err) | 
					
						
							|  |  |  | 		}) | 
					
						
							|  |  |  | 	}) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	t.Run("DeleteDataSourceById", func(t *testing.T) { | 
					
						
							|  |  |  | 		t.Run("can delete datasource", func(t *testing.T) { | 
					
						
							| 
									
										
										
										
											2022-10-19 21:02:15 +08:00
										 |  |  | 			db := db.InitTestDB(t) | 
					
						
							| 
									
										
										
										
											2022-08-26 23:03:38 +08:00
										 |  |  | 			ds := initDatasource(db) | 
					
						
							|  |  |  | 			ss := SqlStore{db: db} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-02-03 00:22:43 +08:00
										 |  |  | 			err := ss.DeleteDataSource(context.Background(), &datasources.DeleteDataSourceCommand{ID: ds.ID, OrgID: ds.OrgID}) | 
					
						
							| 
									
										
										
										
											2022-08-26 23:03:38 +08:00
										 |  |  | 			require.NoError(t, err) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-02-03 00:22:43 +08:00
										 |  |  | 			query := datasources.GetDataSourcesQuery{OrgID: 10} | 
					
						
							| 
									
										
										
										
											2023-02-09 22:49:44 +08:00
										 |  |  | 			dataSources, err := ss.GetDataSources(context.Background(), &query) | 
					
						
							| 
									
										
										
										
											2022-08-26 23:03:38 +08:00
										 |  |  | 			require.NoError(t, err) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-02-09 22:49:44 +08:00
										 |  |  | 			require.Equal(t, 0, len(dataSources)) | 
					
						
							| 
									
										
										
										
											2022-08-26 23:03:38 +08:00
										 |  |  | 		}) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-02-09 22:49:44 +08:00
										 |  |  | 		t.Run("Can not delete datasource with wrong orgID", func(t *testing.T) { | 
					
						
							| 
									
										
										
										
											2022-10-19 21:02:15 +08:00
										 |  |  | 			db := db.InitTestDB(t) | 
					
						
							| 
									
										
										
										
											2022-08-26 23:03:38 +08:00
										 |  |  | 			ds := initDatasource(db) | 
					
						
							|  |  |  | 			ss := SqlStore{db: db} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			err := ss.DeleteDataSource(context.Background(), | 
					
						
							| 
									
										
										
										
											2023-02-03 00:22:43 +08:00
										 |  |  | 				&datasources.DeleteDataSourceCommand{ID: ds.ID, OrgID: 123123}) | 
					
						
							| 
									
										
										
										
											2022-08-26 23:03:38 +08:00
										 |  |  | 			require.NoError(t, err) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-02-03 00:22:43 +08:00
										 |  |  | 			query := datasources.GetDataSourcesQuery{OrgID: 10} | 
					
						
							| 
									
										
										
										
											2023-02-09 22:49:44 +08:00
										 |  |  | 			dataSources, err := ss.GetDataSources(context.Background(), &query) | 
					
						
							| 
									
										
										
										
											2022-08-26 23:03:38 +08:00
										 |  |  | 			require.NoError(t, err) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-02-09 22:49:44 +08:00
										 |  |  | 			require.Equal(t, 1, len(dataSources)) | 
					
						
							| 
									
										
										
										
											2022-08-26 23:03:38 +08:00
										 |  |  | 		}) | 
					
						
							|  |  |  | 	}) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	t.Run("fires an event when the datasource is deleted", func(t *testing.T) { | 
					
						
							| 
									
										
										
										
											2022-10-19 21:02:15 +08:00
										 |  |  | 		db := db.InitTestDB(t) | 
					
						
							| 
									
										
										
										
											2022-08-26 23:03:38 +08:00
										 |  |  | 		ds := initDatasource(db) | 
					
						
							|  |  |  | 		ss := SqlStore{db: db} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		var deleted *events.DataSourceDeleted | 
					
						
							|  |  |  | 		db.Bus().AddEventListener(func(ctx context.Context, e *events.DataSourceDeleted) error { | 
					
						
							|  |  |  | 			deleted = e | 
					
						
							|  |  |  | 			return nil | 
					
						
							|  |  |  | 		}) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		err := ss.DeleteDataSource(context.Background(), | 
					
						
							| 
									
										
										
										
											2023-02-03 00:22:43 +08:00
										 |  |  | 			&datasources.DeleteDataSourceCommand{ID: ds.ID, UID: ds.UID, Name: ds.Name, OrgID: ds.OrgID}) | 
					
						
							| 
									
										
										
										
											2022-08-26 23:03:38 +08:00
										 |  |  | 		require.NoError(t, err) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		require.Eventually(t, func() bool { | 
					
						
							|  |  |  | 			return assert.NotNil(t, deleted) | 
					
						
							|  |  |  | 		}, time.Second, time.Millisecond) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-02-03 00:22:43 +08:00
										 |  |  | 		require.Equal(t, ds.ID, deleted.ID) | 
					
						
							|  |  |  | 		require.Equal(t, ds.OrgID, deleted.OrgID) | 
					
						
							| 
									
										
										
										
											2022-08-26 23:03:38 +08:00
										 |  |  | 		require.Equal(t, ds.Name, deleted.Name) | 
					
						
							| 
									
										
										
										
											2023-02-03 00:22:43 +08:00
										 |  |  | 		require.Equal(t, ds.UID, deleted.UID) | 
					
						
							| 
									
										
										
										
											2022-08-26 23:03:38 +08:00
										 |  |  | 	}) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	t.Run("does not fire an event when the datasource is not deleted", func(t *testing.T) { | 
					
						
							| 
									
										
										
										
											2022-10-19 21:02:15 +08:00
										 |  |  | 		db := db.InitTestDB(t) | 
					
						
							| 
									
										
										
										
											2022-08-26 23:03:38 +08:00
										 |  |  | 		ss := SqlStore{db: db} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		var called bool | 
					
						
							|  |  |  | 		db.Bus().AddEventListener(func(ctx context.Context, e *events.DataSourceDeleted) error { | 
					
						
							|  |  |  | 			called = true | 
					
						
							|  |  |  | 			return nil | 
					
						
							|  |  |  | 		}) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		err := ss.DeleteDataSource(context.Background(), | 
					
						
							|  |  |  | 			&datasources.DeleteDataSourceCommand{ID: 1, UID: "non-existing", Name: "non-existing", OrgID: int64(10)}) | 
					
						
							|  |  |  | 		require.NoError(t, err) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		require.Never(t, func() bool { | 
					
						
							|  |  |  | 			return called | 
					
						
							|  |  |  | 		}, time.Second, time.Millisecond) | 
					
						
							|  |  |  | 	}) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	t.Run("DeleteDataSourceByName", func(t *testing.T) { | 
					
						
							| 
									
										
										
										
											2022-10-19 21:02:15 +08:00
										 |  |  | 		db := db.InitTestDB(t) | 
					
						
							| 
									
										
										
										
											2022-08-26 23:03:38 +08:00
										 |  |  | 		ds := initDatasource(db) | 
					
						
							|  |  |  | 		ss := SqlStore{db: db} | 
					
						
							| 
									
										
										
										
											2023-02-03 00:22:43 +08:00
										 |  |  | 		query := datasources.GetDataSourcesQuery{OrgID: 10} | 
					
						
							| 
									
										
										
										
											2022-08-26 23:03:38 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-02-03 00:22:43 +08:00
										 |  |  | 		err := ss.DeleteDataSource(context.Background(), &datasources.DeleteDataSourceCommand{Name: ds.Name, OrgID: ds.OrgID}) | 
					
						
							| 
									
										
										
										
											2022-08-26 23:03:38 +08:00
										 |  |  | 		require.NoError(t, err) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-02-09 22:49:44 +08:00
										 |  |  | 		dataSources, err := ss.GetDataSources(context.Background(), &query) | 
					
						
							| 
									
										
										
										
											2022-08-26 23:03:38 +08:00
										 |  |  | 		require.NoError(t, err) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-02-09 22:49:44 +08:00
										 |  |  | 		require.Equal(t, 0, len(dataSources)) | 
					
						
							| 
									
										
										
										
											2022-08-26 23:03:38 +08:00
										 |  |  | 	}) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	t.Run("DeleteDataSourceAccessControlPermissions", func(t *testing.T) { | 
					
						
							| 
									
										
										
										
											2022-10-19 21:02:15 +08:00
										 |  |  | 		store := db.InitTestDB(t) | 
					
						
							|  |  |  | 		ds := initDatasource(store) | 
					
						
							|  |  |  | 		ss := SqlStore{db: store} | 
					
						
							| 
									
										
										
										
											2022-08-26 23:03:38 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 		// Init associated permission
 | 
					
						
							| 
									
										
										
										
											2022-10-19 21:02:15 +08:00
										 |  |  | 		errAddPermissions := store.WithTransactionalDbSession(context.TODO(), func(sess *db.Session) error { | 
					
						
							| 
									
										
										
										
											2022-08-26 23:03:38 +08:00
										 |  |  | 			_, err := sess.Table("permission").Insert(ac.Permission{ | 
					
						
							|  |  |  | 				RoleID:  1, | 
					
						
							|  |  |  | 				Action:  "datasources:read", | 
					
						
							| 
									
										
										
										
											2023-02-03 00:22:43 +08:00
										 |  |  | 				Scope:   datasources.ScopeProvider.GetResourceScope(ds.UID), | 
					
						
							| 
									
										
										
										
											2022-08-26 23:03:38 +08:00
										 |  |  | 				Updated: time.Now(), | 
					
						
							|  |  |  | 				Created: time.Now(), | 
					
						
							|  |  |  | 			}) | 
					
						
							|  |  |  | 			return err | 
					
						
							|  |  |  | 		}) | 
					
						
							|  |  |  | 		require.NoError(t, errAddPermissions) | 
					
						
							| 
									
										
										
										
											2023-02-03 00:22:43 +08:00
										 |  |  | 		query := datasources.GetDataSourcesQuery{OrgID: 10} | 
					
						
							| 
									
										
										
										
											2022-08-26 23:03:38 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 		errDeletingDS := ss.DeleteDataSource(context.Background(), | 
					
						
							| 
									
										
										
										
											2023-02-03 00:22:43 +08:00
										 |  |  | 			&datasources.DeleteDataSourceCommand{Name: ds.Name, OrgID: ds.OrgID}, | 
					
						
							| 
									
										
										
										
											2022-08-26 23:03:38 +08:00
										 |  |  | 		) | 
					
						
							|  |  |  | 		require.NoError(t, errDeletingDS) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		// Check associated permission
 | 
					
						
							|  |  |  | 		permCount := int64(0) | 
					
						
							| 
									
										
										
										
											2022-10-19 21:02:15 +08:00
										 |  |  | 		errGetPermissions := store.WithTransactionalDbSession(context.TODO(), func(sess *db.Session) error { | 
					
						
							| 
									
										
										
										
											2022-08-26 23:03:38 +08:00
										 |  |  | 			var err error | 
					
						
							|  |  |  | 			permCount, err = sess.Table("permission").Count() | 
					
						
							|  |  |  | 			return err | 
					
						
							|  |  |  | 		}) | 
					
						
							|  |  |  | 		require.NoError(t, errGetPermissions) | 
					
						
							|  |  |  | 		require.Zero(t, permCount, "permissions associated to the data source should have been removed") | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-02-09 22:49:44 +08:00
										 |  |  | 		dataSources, err := ss.GetDataSources(context.Background(), &query) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		require.NoError(t, err) | 
					
						
							|  |  |  | 		require.Equal(t, 0, len(dataSources)) | 
					
						
							| 
									
										
										
										
											2022-08-26 23:03:38 +08:00
										 |  |  | 	}) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	t.Run("GetDataSources", func(t *testing.T) { | 
					
						
							|  |  |  | 		t.Run("Number of data sources returned limited to 6 per organization", func(t *testing.T) { | 
					
						
							| 
									
										
										
										
											2022-10-19 21:02:15 +08:00
										 |  |  | 			db := db.InitTestDB(t) | 
					
						
							| 
									
										
										
										
											2022-08-26 23:03:38 +08:00
										 |  |  | 			ss := SqlStore{db: db} | 
					
						
							|  |  |  | 			datasourceLimit := 6 | 
					
						
							|  |  |  | 			for i := 0; i < datasourceLimit+1; i++ { | 
					
						
							| 
									
										
										
										
											2023-02-09 22:49:44 +08:00
										 |  |  | 				_, err := ss.AddDataSource(context.Background(), &datasources.AddDataSourceCommand{ | 
					
						
							| 
									
										
										
										
											2023-02-03 00:22:43 +08:00
										 |  |  | 					OrgID:    10, | 
					
						
							| 
									
										
										
										
											2022-08-26 23:03:38 +08:00
										 |  |  | 					Name:     "laban" + strconv.Itoa(i), | 
					
						
							|  |  |  | 					Type:     datasources.DS_GRAPHITE, | 
					
						
							|  |  |  | 					Access:   datasources.DS_ACCESS_DIRECT, | 
					
						
							| 
									
										
										
										
											2023-02-03 00:22:43 +08:00
										 |  |  | 					URL:      "http://test", | 
					
						
							| 
									
										
										
										
											2022-08-26 23:03:38 +08:00
										 |  |  | 					Database: "site", | 
					
						
							|  |  |  | 					ReadOnly: true, | 
					
						
							|  |  |  | 				}) | 
					
						
							|  |  |  | 				require.NoError(t, err) | 
					
						
							|  |  |  | 			} | 
					
						
							| 
									
										
										
										
											2023-02-03 00:22:43 +08:00
										 |  |  | 			query := datasources.GetDataSourcesQuery{OrgID: 10, DataSourceLimit: datasourceLimit} | 
					
						
							| 
									
										
										
										
											2022-08-26 23:03:38 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-02-09 22:49:44 +08:00
										 |  |  | 			dataSources, err := ss.GetDataSources(context.Background(), &query) | 
					
						
							| 
									
										
										
										
											2022-08-26 23:03:38 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 			require.NoError(t, err) | 
					
						
							| 
									
										
										
										
											2023-02-09 22:49:44 +08:00
										 |  |  | 			require.Equal(t, datasourceLimit, len(dataSources)) | 
					
						
							| 
									
										
										
										
											2022-08-26 23:03:38 +08:00
										 |  |  | 		}) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		t.Run("No limit should be applied on the returned data sources if the limit is not set", func(t *testing.T) { | 
					
						
							| 
									
										
										
										
											2022-10-19 21:02:15 +08:00
										 |  |  | 			db := db.InitTestDB(t) | 
					
						
							| 
									
										
										
										
											2022-08-26 23:03:38 +08:00
										 |  |  | 			ss := SqlStore{db: db} | 
					
						
							|  |  |  | 			numberOfDatasource := 5100 | 
					
						
							|  |  |  | 			for i := 0; i < numberOfDatasource; i++ { | 
					
						
							| 
									
										
										
										
											2023-02-09 22:49:44 +08:00
										 |  |  | 				_, err := ss.AddDataSource(context.Background(), &datasources.AddDataSourceCommand{ | 
					
						
							| 
									
										
										
										
											2023-02-03 00:22:43 +08:00
										 |  |  | 					OrgID:    10, | 
					
						
							| 
									
										
										
										
											2022-08-26 23:03:38 +08:00
										 |  |  | 					Name:     "laban" + strconv.Itoa(i), | 
					
						
							|  |  |  | 					Type:     datasources.DS_GRAPHITE, | 
					
						
							|  |  |  | 					Access:   datasources.DS_ACCESS_DIRECT, | 
					
						
							| 
									
										
										
										
											2023-02-03 00:22:43 +08:00
										 |  |  | 					URL:      "http://test", | 
					
						
							| 
									
										
										
										
											2022-08-26 23:03:38 +08:00
										 |  |  | 					Database: "site", | 
					
						
							|  |  |  | 					ReadOnly: true, | 
					
						
							|  |  |  | 				}) | 
					
						
							|  |  |  | 				require.NoError(t, err) | 
					
						
							|  |  |  | 			} | 
					
						
							| 
									
										
										
										
											2023-02-03 00:22:43 +08:00
										 |  |  | 			query := datasources.GetDataSourcesQuery{OrgID: 10} | 
					
						
							| 
									
										
										
										
											2022-08-26 23:03:38 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-02-09 22:49:44 +08:00
										 |  |  | 			dataSources, err := ss.GetDataSources(context.Background(), &query) | 
					
						
							| 
									
										
										
										
											2022-08-26 23:03:38 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 			require.NoError(t, err) | 
					
						
							| 
									
										
										
										
											2023-02-09 22:49:44 +08:00
										 |  |  | 			require.Equal(t, numberOfDatasource, len(dataSources)) | 
					
						
							| 
									
										
										
										
											2022-08-26 23:03:38 +08:00
										 |  |  | 		}) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		t.Run("No limit should be applied on the returned data sources if the limit is negative", func(t *testing.T) { | 
					
						
							| 
									
										
										
										
											2022-10-19 21:02:15 +08:00
										 |  |  | 			db := db.InitTestDB(t) | 
					
						
							| 
									
										
										
										
											2022-08-26 23:03:38 +08:00
										 |  |  | 			ss := SqlStore{db: db} | 
					
						
							|  |  |  | 			numberOfDatasource := 5100 | 
					
						
							|  |  |  | 			for i := 0; i < numberOfDatasource; i++ { | 
					
						
							| 
									
										
										
										
											2023-02-09 22:49:44 +08:00
										 |  |  | 				_, err := ss.AddDataSource(context.Background(), &datasources.AddDataSourceCommand{ | 
					
						
							| 
									
										
										
										
											2023-02-03 00:22:43 +08:00
										 |  |  | 					OrgID:    10, | 
					
						
							| 
									
										
										
										
											2022-08-26 23:03:38 +08:00
										 |  |  | 					Name:     "laban" + strconv.Itoa(i), | 
					
						
							|  |  |  | 					Type:     datasources.DS_GRAPHITE, | 
					
						
							|  |  |  | 					Access:   datasources.DS_ACCESS_DIRECT, | 
					
						
							| 
									
										
										
										
											2023-02-03 00:22:43 +08:00
										 |  |  | 					URL:      "http://test", | 
					
						
							| 
									
										
										
										
											2022-08-26 23:03:38 +08:00
										 |  |  | 					Database: "site", | 
					
						
							|  |  |  | 					ReadOnly: true, | 
					
						
							|  |  |  | 				}) | 
					
						
							|  |  |  | 				require.NoError(t, err) | 
					
						
							|  |  |  | 			} | 
					
						
							| 
									
										
										
										
											2023-02-03 00:22:43 +08:00
										 |  |  | 			query := datasources.GetDataSourcesQuery{OrgID: 10, DataSourceLimit: -1} | 
					
						
							| 
									
										
										
										
											2022-08-26 23:03:38 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-02-09 22:49:44 +08:00
										 |  |  | 			dataSources, err := ss.GetDataSources(context.Background(), &query) | 
					
						
							| 
									
										
										
										
											2022-08-26 23:03:38 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 			require.NoError(t, err) | 
					
						
							| 
									
										
										
										
											2023-02-09 22:49:44 +08:00
										 |  |  | 			require.Equal(t, numberOfDatasource, len(dataSources)) | 
					
						
							| 
									
										
										
										
											2022-08-26 23:03:38 +08:00
										 |  |  | 		}) | 
					
						
							|  |  |  | 	}) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	t.Run("GetDataSourcesByType", func(t *testing.T) { | 
					
						
							|  |  |  | 		t.Run("Only returns datasources of specified type", func(t *testing.T) { | 
					
						
							| 
									
										
										
										
											2022-10-19 21:02:15 +08:00
										 |  |  | 			db := db.InitTestDB(t) | 
					
						
							| 
									
										
										
										
											2022-08-26 23:03:38 +08:00
										 |  |  | 			ss := SqlStore{db: db} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-02-09 22:49:44 +08:00
										 |  |  | 			_, err := ss.AddDataSource(context.Background(), &datasources.AddDataSourceCommand{ | 
					
						
							| 
									
										
										
										
											2023-02-03 00:22:43 +08:00
										 |  |  | 				OrgID:    10, | 
					
						
							| 
									
										
										
										
											2022-08-26 23:03:38 +08:00
										 |  |  | 				Name:     "Elasticsearch", | 
					
						
							|  |  |  | 				Type:     datasources.DS_ES, | 
					
						
							|  |  |  | 				Access:   datasources.DS_ACCESS_DIRECT, | 
					
						
							| 
									
										
										
										
											2023-02-03 00:22:43 +08:00
										 |  |  | 				URL:      "http://test", | 
					
						
							| 
									
										
										
										
											2022-08-26 23:03:38 +08:00
										 |  |  | 				Database: "site", | 
					
						
							|  |  |  | 				ReadOnly: true, | 
					
						
							|  |  |  | 			}) | 
					
						
							|  |  |  | 			require.NoError(t, err) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-02-09 22:49:44 +08:00
										 |  |  | 			_, err = ss.AddDataSource(context.Background(), &datasources.AddDataSourceCommand{ | 
					
						
							| 
									
										
										
										
											2023-02-03 00:22:43 +08:00
										 |  |  | 				OrgID:    10, | 
					
						
							| 
									
										
										
										
											2022-08-26 23:03:38 +08:00
										 |  |  | 				Name:     "Graphite", | 
					
						
							|  |  |  | 				Type:     datasources.DS_GRAPHITE, | 
					
						
							|  |  |  | 				Access:   datasources.DS_ACCESS_DIRECT, | 
					
						
							| 
									
										
										
										
											2023-02-03 00:22:43 +08:00
										 |  |  | 				URL:      "http://test", | 
					
						
							| 
									
										
										
										
											2022-08-26 23:03:38 +08:00
										 |  |  | 				Database: "site", | 
					
						
							|  |  |  | 				ReadOnly: true, | 
					
						
							|  |  |  | 			}) | 
					
						
							|  |  |  | 			require.NoError(t, err) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			query := datasources.GetDataSourcesByTypeQuery{Type: datasources.DS_ES} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-02-09 22:49:44 +08:00
										 |  |  | 			dataSources, err := ss.GetDataSourcesByType(context.Background(), &query) | 
					
						
							| 
									
										
										
										
											2022-08-26 23:03:38 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 			require.NoError(t, err) | 
					
						
							| 
									
										
										
										
											2023-02-09 22:49:44 +08:00
										 |  |  | 			require.Equal(t, 1, len(dataSources)) | 
					
						
							| 
									
										
										
										
											2022-08-26 23:03:38 +08:00
										 |  |  | 		}) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		t.Run("Returns an error if no type specified", func(t *testing.T) { | 
					
						
							| 
									
										
										
										
											2022-10-19 21:02:15 +08:00
										 |  |  | 			db := db.InitTestDB(t) | 
					
						
							| 
									
										
										
										
											2022-08-26 23:03:38 +08:00
										 |  |  | 			ss := SqlStore{db: db} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			query := datasources.GetDataSourcesByTypeQuery{} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-02-09 22:49:44 +08:00
										 |  |  | 			_, err := ss.GetDataSourcesByType(context.Background(), &query) | 
					
						
							| 
									
										
										
										
											2022-08-26 23:03:38 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 			require.Error(t, err) | 
					
						
							|  |  |  | 		}) | 
					
						
							|  |  |  | 	}) | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func TestIntegrationGetDefaultDataSource(t *testing.T) { | 
					
						
							|  |  |  | 	if testing.Short() { | 
					
						
							|  |  |  | 		t.Skip("skipping integration test") | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	t.Run("should return error if there is no default datasource", func(t *testing.T) { | 
					
						
							| 
									
										
										
										
											2022-10-19 21:02:15 +08:00
										 |  |  | 		db := db.InitTestDB(t) | 
					
						
							| 
									
										
										
										
											2022-08-26 23:03:38 +08:00
										 |  |  | 		ss := SqlStore{db: db} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		cmd := datasources.AddDataSourceCommand{ | 
					
						
							| 
									
										
										
										
											2023-02-03 00:22:43 +08:00
										 |  |  | 			OrgID:  10, | 
					
						
							| 
									
										
										
										
											2022-08-26 23:03:38 +08:00
										 |  |  | 			Name:   "nisse", | 
					
						
							|  |  |  | 			Type:   datasources.DS_GRAPHITE, | 
					
						
							|  |  |  | 			Access: datasources.DS_ACCESS_DIRECT, | 
					
						
							| 
									
										
										
										
											2023-02-03 00:22:43 +08:00
										 |  |  | 			URL:    "http://test", | 
					
						
							| 
									
										
										
										
											2022-08-26 23:03:38 +08:00
										 |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-02-09 22:49:44 +08:00
										 |  |  | 		_, err := ss.AddDataSource(context.Background(), &cmd) | 
					
						
							| 
									
										
										
										
											2022-08-26 23:03:38 +08:00
										 |  |  | 		require.NoError(t, err) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-02-03 00:22:43 +08:00
										 |  |  | 		query := datasources.GetDefaultDataSourceQuery{OrgID: 10} | 
					
						
							| 
									
										
										
										
											2023-02-09 22:49:44 +08:00
										 |  |  | 		_, err = ss.GetDefaultDataSource(context.Background(), &query) | 
					
						
							| 
									
										
										
										
											2022-08-26 23:03:38 +08:00
										 |  |  | 		require.Error(t, err) | 
					
						
							|  |  |  | 		assert.True(t, errors.Is(err, datasources.ErrDataSourceNotFound)) | 
					
						
							|  |  |  | 	}) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	t.Run("should return default datasource if exists", func(t *testing.T) { | 
					
						
							| 
									
										
										
										
											2022-10-19 21:02:15 +08:00
										 |  |  | 		db := db.InitTestDB(t) | 
					
						
							| 
									
										
										
										
											2022-08-26 23:03:38 +08:00
										 |  |  | 		ss := SqlStore{db: db} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		cmd := datasources.AddDataSourceCommand{ | 
					
						
							| 
									
										
										
										
											2023-02-03 00:22:43 +08:00
										 |  |  | 			OrgID:     10, | 
					
						
							| 
									
										
										
										
											2022-08-26 23:03:38 +08:00
										 |  |  | 			Name:      "default datasource", | 
					
						
							|  |  |  | 			Type:      datasources.DS_GRAPHITE, | 
					
						
							|  |  |  | 			Access:    datasources.DS_ACCESS_DIRECT, | 
					
						
							| 
									
										
										
										
											2023-02-03 00:22:43 +08:00
										 |  |  | 			URL:       "http://test", | 
					
						
							| 
									
										
										
										
											2022-08-26 23:03:38 +08:00
										 |  |  | 			IsDefault: true, | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-02-09 22:49:44 +08:00
										 |  |  | 		_, err := ss.AddDataSource(context.Background(), &cmd) | 
					
						
							| 
									
										
										
										
											2022-08-26 23:03:38 +08:00
										 |  |  | 		require.NoError(t, err) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-02-03 00:22:43 +08:00
										 |  |  | 		query := datasources.GetDefaultDataSourceQuery{OrgID: 10} | 
					
						
							| 
									
										
										
										
											2023-02-09 22:49:44 +08:00
										 |  |  | 		dataSource, err := ss.GetDefaultDataSource(context.Background(), &query) | 
					
						
							| 
									
										
										
										
											2022-08-26 23:03:38 +08:00
										 |  |  | 		require.NoError(t, err) | 
					
						
							| 
									
										
										
										
											2023-02-09 22:49:44 +08:00
										 |  |  | 		assert.Equal(t, "default datasource", dataSource.Name) | 
					
						
							| 
									
										
										
										
											2022-08-26 23:03:38 +08:00
										 |  |  | 	}) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	t.Run("should not return default datasource of other organisation", func(t *testing.T) { | 
					
						
							| 
									
										
										
										
											2022-10-19 21:02:15 +08:00
										 |  |  | 		db := db.InitTestDB(t) | 
					
						
							| 
									
										
										
										
											2022-08-26 23:03:38 +08:00
										 |  |  | 		ss := SqlStore{db: db} | 
					
						
							| 
									
										
										
										
											2023-02-03 00:22:43 +08:00
										 |  |  | 		query := datasources.GetDefaultDataSourceQuery{OrgID: 1} | 
					
						
							| 
									
										
										
										
											2023-02-09 22:49:44 +08:00
										 |  |  | 		_, err := ss.GetDefaultDataSource(context.Background(), &query) | 
					
						
							| 
									
										
										
										
											2022-08-26 23:03:38 +08:00
										 |  |  | 		require.Error(t, err) | 
					
						
							|  |  |  | 		assert.True(t, errors.Is(err, datasources.ErrDataSourceNotFound)) | 
					
						
							|  |  |  | 	}) | 
					
						
							|  |  |  | } |