| 
									
										
										
										
											2023-08-10 00:25:28 +08:00
										 |  |  | package pluginsintegration | 
					
						
							| 
									
										
										
										
											2021-11-01 17:53:33 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | import ( | 
					
						
							| 
									
										
										
										
											2021-11-17 19:04:22 +08:00
										 |  |  | 	"context" | 
					
						
							| 
									
										
										
										
											2022-08-30 23:30:43 +08:00
										 |  |  | 	"encoding/json" | 
					
						
							| 
									
										
										
										
											2021-11-01 17:53:33 +08:00
										 |  |  | 	"path/filepath" | 
					
						
							|  |  |  | 	"testing" | 
					
						
							| 
									
										
										
										
											2022-08-30 23:30:43 +08:00
										 |  |  | 	"time" | 
					
						
							| 
									
										
										
										
											2021-11-01 17:53:33 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-03-19 22:56:40 +08:00
										 |  |  | 	"github.com/grafana/grafana-azure-sdk-go/v2/azsettings" | 
					
						
							| 
									
										
										
										
											2022-08-30 23:30:43 +08:00
										 |  |  | 	"github.com/grafana/grafana-plugin-sdk-go/backend" | 
					
						
							| 
									
										
										
										
											2022-01-21 01:16:22 +08:00
										 |  |  | 	"github.com/grafana/grafana-plugin-sdk-go/backend/httpclient" | 
					
						
							| 
									
										
										
										
											2022-09-14 21:35:35 +08:00
										 |  |  | 	"github.com/stretchr/testify/require" | 
					
						
							| 
									
										
										
										
											2022-09-27 19:58:49 +08:00
										 |  |  | 	"gopkg.in/ini.v1" | 
					
						
							| 
									
										
										
										
											2022-08-30 23:30:43 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-10-19 21:02:15 +08:00
										 |  |  | 	"github.com/grafana/grafana/pkg/infra/db" | 
					
						
							| 
									
										
										
										
											2022-02-16 21:15:44 +08:00
										 |  |  | 	"github.com/grafana/grafana/pkg/infra/tracing" | 
					
						
							| 
									
										
										
										
											2021-11-01 17:53:33 +08:00
										 |  |  | 	"github.com/grafana/grafana/pkg/plugins" | 
					
						
							| 
									
										
										
										
											2022-01-21 01:16:22 +08:00
										 |  |  | 	"github.com/grafana/grafana/pkg/plugins/backendplugin/coreplugin" | 
					
						
							| 
									
										
										
										
											2022-01-27 01:44:20 +08:00
										 |  |  | 	"github.com/grafana/grafana/pkg/services/featuremgmt" | 
					
						
							| 
									
										
										
										
											2023-09-11 19:59:24 +08:00
										 |  |  | 	"github.com/grafana/grafana/pkg/services/pluginsintegration/pluginstore" | 
					
						
							| 
									
										
										
										
											2022-02-16 02:26:03 +08:00
										 |  |  | 	"github.com/grafana/grafana/pkg/services/searchV2" | 
					
						
							| 
									
										
										
										
											2024-04-04 21:04:47 +08:00
										 |  |  | 	"github.com/grafana/grafana/pkg/services/sqlstore" | 
					
						
							| 
									
										
										
										
											2021-11-01 17:53:33 +08:00
										 |  |  | 	"github.com/grafana/grafana/pkg/setting" | 
					
						
							| 
									
										
										
										
											2024-02-09 22:35:39 +08:00
										 |  |  | 	"github.com/grafana/grafana/pkg/tests/testsuite" | 
					
						
							| 
									
										
										
										
											2022-01-21 01:16:22 +08:00
										 |  |  | 	"github.com/grafana/grafana/pkg/tsdb/azuremonitor" | 
					
						
							| 
									
										
										
										
											2023-05-23 00:19:54 +08:00
										 |  |  | 	cloudmonitoring "github.com/grafana/grafana/pkg/tsdb/cloud-monitoring" | 
					
						
							| 
									
										
										
										
											2022-01-21 01:16:22 +08:00
										 |  |  | 	"github.com/grafana/grafana/pkg/tsdb/cloudwatch" | 
					
						
							|  |  |  | 	"github.com/grafana/grafana/pkg/tsdb/elasticsearch" | 
					
						
							| 
									
										
										
										
											2023-11-13 15:49:26 +08:00
										 |  |  | 	postgres "github.com/grafana/grafana/pkg/tsdb/grafana-postgresql-datasource" | 
					
						
							| 
									
										
										
										
											2023-06-07 11:09:29 +08:00
										 |  |  | 	pyroscope "github.com/grafana/grafana/pkg/tsdb/grafana-pyroscope-datasource" | 
					
						
							| 
									
										
										
										
											2023-09-22 20:00:40 +08:00
										 |  |  | 	testdatasource "github.com/grafana/grafana/pkg/tsdb/grafana-testdata-datasource" | 
					
						
							| 
									
										
										
										
											2022-01-21 01:16:22 +08:00
										 |  |  | 	"github.com/grafana/grafana/pkg/tsdb/grafanads" | 
					
						
							|  |  |  | 	"github.com/grafana/grafana/pkg/tsdb/graphite" | 
					
						
							|  |  |  | 	"github.com/grafana/grafana/pkg/tsdb/influxdb" | 
					
						
							|  |  |  | 	"github.com/grafana/grafana/pkg/tsdb/loki" | 
					
						
							|  |  |  | 	"github.com/grafana/grafana/pkg/tsdb/mssql" | 
					
						
							|  |  |  | 	"github.com/grafana/grafana/pkg/tsdb/mysql" | 
					
						
							|  |  |  | 	"github.com/grafana/grafana/pkg/tsdb/opentsdb" | 
					
						
							| 
									
										
										
										
											2023-01-19 01:02:54 +08:00
										 |  |  | 	"github.com/grafana/grafana/pkg/tsdb/parca" | 
					
						
							| 
									
										
										
										
											2022-01-21 01:16:22 +08:00
										 |  |  | 	"github.com/grafana/grafana/pkg/tsdb/prometheus" | 
					
						
							|  |  |  | 	"github.com/grafana/grafana/pkg/tsdb/tempo" | 
					
						
							| 
									
										
										
										
											2021-11-01 17:53:33 +08:00
										 |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-02-09 22:35:39 +08:00
										 |  |  | func TestMain(m *testing.M) { | 
					
						
							|  |  |  | 	testsuite.Run(m) | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-09-23 20:27:01 +08:00
										 |  |  | func TestIntegrationPluginManager(t *testing.T) { | 
					
						
							| 
									
										
										
										
											2022-11-04 22:14:21 +08:00
										 |  |  | 	if testing.Short() { | 
					
						
							|  |  |  | 		t.Skip("skipping integration test") | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2021-11-01 17:53:33 +08:00
										 |  |  | 	staticRootPath, err := filepath.Abs("../../../public/") | 
					
						
							|  |  |  | 	require.NoError(t, err) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	bundledPluginsPath, err := filepath.Abs("../../../plugins-bundled/internal") | 
					
						
							|  |  |  | 	require.NoError(t, err) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-11-13 23:55:15 +08:00
										 |  |  | 	features := featuremgmt.WithFeatures() | 
					
						
							| 
									
										
										
										
											2021-11-01 17:53:33 +08:00
										 |  |  | 	cfg := &setting.Cfg{ | 
					
						
							| 
									
										
										
										
											2024-01-08 18:45:03 +08:00
										 |  |  | 		Raw:                ini.Empty(), | 
					
						
							| 
									
										
										
										
											2023-11-14 03:39:01 +08:00
										 |  |  | 		StaticRootPath:     staticRootPath, | 
					
						
							|  |  |  | 		BundledPluginsPath: bundledPluginsPath, | 
					
						
							|  |  |  | 		Azure:              &azsettings.AzureSettings{}, | 
					
						
							| 
									
										
										
										
											2024-01-08 18:45:03 +08:00
										 |  |  | 		PluginSettings: map[string]map[string]string{ | 
					
						
							|  |  |  | 			"test-app": { | 
					
						
							|  |  |  | 				"path": "../../plugins/manager/testdata/test-app", | 
					
						
							|  |  |  | 			}, | 
					
						
							|  |  |  | 			"test-panel": { | 
					
						
							|  |  |  | 				"not": "included", | 
					
						
							|  |  |  | 			}, | 
					
						
							|  |  |  | 		}, | 
					
						
							| 
									
										
										
										
											2021-11-01 17:53:33 +08:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-10-04 16:15:10 +08:00
										 |  |  | 	tracer := tracing.InitializeTracerForTest() | 
					
						
							| 
									
										
										
										
											2021-11-01 17:53:33 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-01-21 01:16:22 +08:00
										 |  |  | 	hcp := httpclient.NewProvider() | 
					
						
							| 
									
										
										
										
											2024-01-04 03:20:22 +08:00
										 |  |  | 	am := azuremonitor.ProvideService(hcp) | 
					
						
							| 
									
										
										
										
											2024-02-06 02:59:32 +08:00
										 |  |  | 	cw := cloudwatch.ProvideService(hcp) | 
					
						
							| 
									
										
										
										
											2024-01-30 00:24:23 +08:00
										 |  |  | 	cm := cloudmonitoring.ProvideService(hcp) | 
					
						
							| 
									
										
										
										
											2024-07-19 15:26:10 +08:00
										 |  |  | 	es := elasticsearch.ProvideService(hcp) | 
					
						
							| 
									
										
										
										
											2022-01-21 01:16:22 +08:00
										 |  |  | 	grap := graphite.ProvideService(hcp, tracer) | 
					
						
							| 
									
										
										
										
											2023-12-06 19:39:05 +08:00
										 |  |  | 	idb := influxdb.ProvideService(hcp, features) | 
					
						
							| 
									
										
										
										
											2024-07-24 17:00:41 +08:00
										 |  |  | 	lk := loki.ProvideService(hcp, tracer) | 
					
						
							| 
									
										
										
										
											2022-01-21 01:16:22 +08:00
										 |  |  | 	otsdb := opentsdb.ProvideService(hcp) | 
					
						
							| 
									
										
										
										
											2024-02-07 18:01:09 +08:00
										 |  |  | 	pr := prometheus.ProvideService(hcp) | 
					
						
							| 
									
										
										
										
											2022-01-21 01:16:22 +08:00
										 |  |  | 	tmpo := tempo.ProvideService(hcp) | 
					
						
							| 
									
										
										
										
											2023-07-13 15:34:40 +08:00
										 |  |  | 	td := testdatasource.ProvideService() | 
					
						
							| 
									
										
										
										
											2022-01-21 01:16:22 +08:00
										 |  |  | 	pg := postgres.ProvideService(cfg) | 
					
						
							| 
									
										
										
										
											2024-02-22 21:22:14 +08:00
										 |  |  | 	my := mysql.ProvideService() | 
					
						
							| 
									
										
										
										
											2022-01-21 01:16:22 +08:00
										 |  |  | 	ms := mssql.ProvideService(cfg) | 
					
						
							| 
									
										
										
										
											2024-04-24 16:38:40 +08:00
										 |  |  | 	db := db.InitTestDB(t, sqlstore.InitTestDBOpt{Cfg: cfg}) | 
					
						
							|  |  |  | 	sv2 := searchV2.ProvideService(cfg, db, nil, nil, tracer, features, nil, nil, nil) | 
					
						
							| 
									
										
										
										
											2022-10-04 18:32:25 +08:00
										 |  |  | 	graf := grafanads.ProvideService(sv2, nil) | 
					
						
							| 
									
										
										
										
											2024-01-03 19:25:38 +08:00
										 |  |  | 	pyroscope := pyroscope.ProvideService(hcp) | 
					
						
							| 
									
										
										
										
											2022-10-28 19:33:37 +08:00
										 |  |  | 	parca := parca.ProvideService(hcp) | 
					
						
							| 
									
										
										
										
											2023-09-26 20:46:31 +08:00
										 |  |  | 	coreRegistry := coreplugin.ProvideCoreRegistry(tracing.InitializeTracerForTest(), am, cw, cm, es, grap, idb, lk, otsdb, pr, tmpo, td, pg, my, ms, graf, pyroscope, parca) | 
					
						
							| 
									
										
										
										
											2022-01-21 01:16:22 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-08-10 00:25:28 +08:00
										 |  |  | 	testCtx := CreateIntegrationTestCtx(t, cfg, coreRegistry) | 
					
						
							| 
									
										
										
										
											2021-11-01 17:53:33 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-06-03 19:06:27 +08:00
										 |  |  | 	ctx := context.Background() | 
					
						
							| 
									
										
										
										
											2023-08-10 00:25:28 +08:00
										 |  |  | 	verifyCorePluginCatalogue(t, ctx, testCtx.PluginStore) | 
					
						
							| 
									
										
										
										
											2024-02-12 19:47:49 +08:00
										 |  |  | 	verifyPluginStaticRoutes(t, ctx, testCtx.PluginStore, testCtx.PluginStore) | 
					
						
							| 
									
										
										
										
											2023-08-10 00:25:28 +08:00
										 |  |  | 	verifyBackendProcesses(t, testCtx.PluginRegistry.Plugins(ctx)) | 
					
						
							|  |  |  | 	verifyPluginQuery(t, ctx, testCtx.PluginClient) | 
					
						
							| 
									
										
										
										
											2021-11-01 17:53:33 +08:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-08-30 23:30:43 +08:00
										 |  |  | func verifyPluginQuery(t *testing.T, ctx context.Context, c plugins.Client) { | 
					
						
							|  |  |  | 	now := time.Unix(1661420870, 0) | 
					
						
							|  |  |  | 	req := &backend.QueryDataRequest{ | 
					
						
							|  |  |  | 		PluginContext: backend.PluginContext{ | 
					
						
							| 
									
										
										
										
											2023-09-22 20:00:40 +08:00
										 |  |  | 			PluginID: "grafana-testdata-datasource", | 
					
						
							| 
									
										
										
										
											2022-08-30 23:30:43 +08:00
										 |  |  | 		}, | 
					
						
							|  |  |  | 		Queries: []backend.DataQuery{ | 
					
						
							|  |  |  | 			{ | 
					
						
							|  |  |  | 				RefID: "A", | 
					
						
							|  |  |  | 				TimeRange: backend.TimeRange{ | 
					
						
							|  |  |  | 					From: now.Add(-5 * time.Minute), | 
					
						
							|  |  |  | 					To:   now, | 
					
						
							|  |  |  | 				}, | 
					
						
							|  |  |  | 				JSON: json.RawMessage(`{"scenarioId":"csv_metric_values","stringInput":"1,20,90,30,5,0"}`), | 
					
						
							|  |  |  | 			}, | 
					
						
							|  |  |  | 		}, | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	resp, err := c.QueryData(ctx, req) | 
					
						
							|  |  |  | 	require.NoError(t, err) | 
					
						
							|  |  |  | 	payload, err := resp.MarshalJSON() | 
					
						
							|  |  |  | 	require.NoError(t, err) | 
					
						
							| 
									
										
										
										
											2022-11-04 01:34:27 +08:00
										 |  |  | 	require.JSONEq(t, `{"results":{"A":{"frames":[{"schema":{"refId":"A","fields":[{"name":"time","type":"time","typeInfo":{"frame":"time.Time"}},{"name":"A-series","type":"number","typeInfo":{"frame":"int64","nullable":true}}]},"data":{"values":[[1661420570000,1661420630000,1661420690000,1661420750000,1661420810000,1661420870000],[1,20,90,30,5,0]]}}],"status":200}}}`, string(payload)) | 
					
						
							| 
									
										
										
										
											2022-08-30 23:30:43 +08:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-09-11 19:59:24 +08:00
										 |  |  | func verifyCorePluginCatalogue(t *testing.T, ctx context.Context, ps *pluginstore.Service) { | 
					
						
							| 
									
										
										
										
											2021-11-01 17:53:33 +08:00
										 |  |  | 	t.Helper() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	expPanels := map[string]struct{}{ | 
					
						
							|  |  |  | 		"alertlist":      {}, | 
					
						
							|  |  |  | 		"annolist":       {}, | 
					
						
							|  |  |  | 		"barchart":       {}, | 
					
						
							|  |  |  | 		"bargauge":       {}, | 
					
						
							|  |  |  | 		"canvas":         {}, | 
					
						
							|  |  |  | 		"dashlist":       {}, | 
					
						
							|  |  |  | 		"debug":          {}, | 
					
						
							|  |  |  | 		"gauge":          {}, | 
					
						
							|  |  |  | 		"geomap":         {}, | 
					
						
							|  |  |  | 		"gettingstarted": {}, | 
					
						
							|  |  |  | 		"graph":          {}, | 
					
						
							|  |  |  | 		"heatmap":        {}, | 
					
						
							|  |  |  | 		"histogram":      {}, | 
					
						
							|  |  |  | 		"live":           {}, | 
					
						
							|  |  |  | 		"logs":           {}, | 
					
						
							| 
									
										
										
										
											2021-11-16 06:09:59 +08:00
										 |  |  | 		"candlestick":    {}, | 
					
						
							| 
									
										
										
										
											2021-11-01 17:53:33 +08:00
										 |  |  | 		"news":           {}, | 
					
						
							|  |  |  | 		"nodeGraph":      {}, | 
					
						
							| 
									
										
										
										
											2022-10-07 18:39:14 +08:00
										 |  |  | 		"flamegraph":     {}, | 
					
						
							| 
									
										
										
										
											2022-05-04 00:42:36 +08:00
										 |  |  | 		"traces":         {}, | 
					
						
							| 
									
										
										
										
											2021-11-01 17:53:33 +08:00
										 |  |  | 		"piechart":       {}, | 
					
						
							|  |  |  | 		"stat":           {}, | 
					
						
							|  |  |  | 		"state-timeline": {}, | 
					
						
							|  |  |  | 		"status-history": {}, | 
					
						
							|  |  |  | 		"table":          {}, | 
					
						
							|  |  |  | 		"table-old":      {}, | 
					
						
							|  |  |  | 		"text":           {}, | 
					
						
							|  |  |  | 		"timeseries":     {}, | 
					
						
							| 
									
										
										
										
											2023-04-05 11:52:20 +08:00
										 |  |  | 		"trend":          {}, | 
					
						
							| 
									
										
										
										
											2021-11-01 17:53:33 +08:00
										 |  |  | 		"welcome":        {}, | 
					
						
							|  |  |  | 		"xychart":        {}, | 
					
						
							| 
									
										
										
										
											2023-04-24 22:46:31 +08:00
										 |  |  | 		"datagrid":       {}, | 
					
						
							| 
									
										
										
										
											2021-11-01 17:53:33 +08:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	expDataSources := map[string]struct{}{ | 
					
						
							| 
									
										
										
										
											2024-02-02 00:05:54 +08:00
										 |  |  | 		"cloudwatch":                       {}, | 
					
						
							|  |  |  | 		"grafana-azure-monitor-datasource": {}, | 
					
						
							|  |  |  | 		"stackdriver":                      {}, | 
					
						
							|  |  |  | 		"elasticsearch":                    {}, | 
					
						
							|  |  |  | 		"graphite":                         {}, | 
					
						
							|  |  |  | 		"influxdb":                         {}, | 
					
						
							|  |  |  | 		"loki":                             {}, | 
					
						
							|  |  |  | 		"opentsdb":                         {}, | 
					
						
							|  |  |  | 		"prometheus":                       {}, | 
					
						
							|  |  |  | 		"tempo":                            {}, | 
					
						
							|  |  |  | 		"grafana-testdata-datasource":      {}, | 
					
						
							|  |  |  | 		"grafana-postgresql-datasource":    {}, | 
					
						
							|  |  |  | 		"mysql":                            {}, | 
					
						
							|  |  |  | 		"mssql":                            {}, | 
					
						
							|  |  |  | 		"grafana":                          {}, | 
					
						
							|  |  |  | 		"alertmanager":                     {}, | 
					
						
							|  |  |  | 		"dashboard":                        {}, | 
					
						
							|  |  |  | 		"jaeger":                           {}, | 
					
						
							|  |  |  | 		"mixed":                            {}, | 
					
						
							|  |  |  | 		"zipkin":                           {}, | 
					
						
							|  |  |  | 		"grafana-pyroscope-datasource":     {}, | 
					
						
							|  |  |  | 		"parca":                            {}, | 
					
						
							| 
									
										
										
										
											2021-11-01 17:53:33 +08:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	expApps := map[string]struct{}{ | 
					
						
							|  |  |  | 		"test-app": {}, | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-06-08 18:21:19 +08:00
										 |  |  | 	panels := ps.Plugins(ctx, plugins.TypePanel) | 
					
						
							| 
									
										
										
										
											2022-08-30 23:30:43 +08:00
										 |  |  | 	require.Equal(t, len(expPanels), len(panels)) | 
					
						
							| 
									
										
										
										
											2021-11-01 17:53:33 +08:00
										 |  |  | 	for _, p := range panels { | 
					
						
							| 
									
										
										
										
											2022-08-30 23:30:43 +08:00
										 |  |  | 		p, exists := ps.Plugin(ctx, p.ID) | 
					
						
							| 
									
										
										
										
											2023-09-11 19:59:24 +08:00
										 |  |  | 		require.NotEqual(t, pluginstore.Plugin{}, p) | 
					
						
							| 
									
										
										
										
											2022-08-30 23:30:43 +08:00
										 |  |  | 		require.True(t, exists) | 
					
						
							|  |  |  | 		require.Contains(t, expPanels, p.ID) | 
					
						
							| 
									
										
										
										
											2021-11-01 17:53:33 +08:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-06-08 18:21:19 +08:00
										 |  |  | 	dataSources := ps.Plugins(ctx, plugins.TypeDataSource) | 
					
						
							| 
									
										
										
										
											2022-08-30 23:30:43 +08:00
										 |  |  | 	require.Equal(t, len(expDataSources), len(dataSources)) | 
					
						
							| 
									
										
										
										
											2021-11-01 17:53:33 +08:00
										 |  |  | 	for _, ds := range dataSources { | 
					
						
							| 
									
										
										
										
											2022-08-30 23:30:43 +08:00
										 |  |  | 		p, exists := ps.Plugin(ctx, ds.ID) | 
					
						
							| 
									
										
										
										
											2023-09-11 19:59:24 +08:00
										 |  |  | 		require.NotEqual(t, pluginstore.Plugin{}, p) | 
					
						
							| 
									
										
										
										
											2022-08-30 23:30:43 +08:00
										 |  |  | 		require.True(t, exists) | 
					
						
							|  |  |  | 		require.Contains(t, expDataSources, ds.ID) | 
					
						
							| 
									
										
										
										
											2021-11-01 17:53:33 +08:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-06-08 18:21:19 +08:00
										 |  |  | 	apps := ps.Plugins(ctx, plugins.TypeApp) | 
					
						
							| 
									
										
										
										
											2022-08-30 23:30:43 +08:00
										 |  |  | 	require.Equal(t, len(expApps), len(apps)) | 
					
						
							| 
									
										
										
										
											2021-11-01 17:53:33 +08:00
										 |  |  | 	for _, app := range apps { | 
					
						
							| 
									
										
										
										
											2022-08-30 23:30:43 +08:00
										 |  |  | 		p, exists := ps.Plugin(ctx, app.ID) | 
					
						
							|  |  |  | 		require.True(t, exists) | 
					
						
							|  |  |  | 		require.NotNil(t, p) | 
					
						
							|  |  |  | 		require.Contains(t, expApps, app.ID) | 
					
						
							| 
									
										
										
										
											2021-11-01 17:53:33 +08:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-08-30 23:30:43 +08:00
										 |  |  | 	require.Equal(t, len(expPanels)+len(expDataSources)+len(expApps), len(ps.Plugins(ctx))) | 
					
						
							| 
									
										
										
										
											2021-11-01 17:53:33 +08:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-02-12 19:47:49 +08:00
										 |  |  | func verifyPluginStaticRoutes(t *testing.T, ctx context.Context, rr plugins.StaticRouteResolver, ps *pluginstore.Service) { | 
					
						
							| 
									
										
										
										
											2021-11-17 19:04:22 +08:00
										 |  |  | 	routes := make(map[string]*plugins.StaticRoute) | 
					
						
							| 
									
										
										
										
											2023-08-10 16:32:12 +08:00
										 |  |  | 	for _, route := range rr.Routes(ctx) { | 
					
						
							| 
									
										
										
										
											2021-11-17 19:04:22 +08:00
										 |  |  | 		routes[route.PluginID] = route | 
					
						
							| 
									
										
										
										
											2021-11-01 17:53:33 +08:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-03-18 20:28:24 +08:00
										 |  |  | 	require.Len(t, routes, 1) | 
					
						
							| 
									
										
										
										
											2021-11-01 17:53:33 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-02-12 19:47:49 +08:00
										 |  |  | 	testAppPlugin, _ := ps.Plugin(ctx, "test-app") | 
					
						
							| 
									
										
										
										
											2022-08-30 23:30:43 +08:00
										 |  |  | 	require.Contains(t, routes, "test-app") | 
					
						
							| 
									
										
										
										
											2024-02-12 19:47:49 +08:00
										 |  |  | 	require.Equal(t, routes["test-app"].Directory, testAppPlugin.Base()) | 
					
						
							| 
									
										
										
										
											2022-08-30 23:30:43 +08:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2021-11-01 17:53:33 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-08-30 23:30:43 +08:00
										 |  |  | func verifyBackendProcesses(t *testing.T, ps []*plugins.Plugin) { | 
					
						
							|  |  |  | 	for _, p := range ps { | 
					
						
							|  |  |  | 		if p.Backend { | 
					
						
							|  |  |  | 			pc, exists := p.Client() | 
					
						
							|  |  |  | 			require.True(t, exists) | 
					
						
							|  |  |  | 			require.NotNil(t, pc) | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2021-11-01 17:53:33 +08:00
										 |  |  | } |