Refactor: use InstanceManager for managing ds instances

This commit is contained in:
Alexander Zobnin
2020-08-28 14:40:39 +03:00
parent 2dc514db3a
commit 013fe5c37f
5 changed files with 39 additions and 182 deletions

View File

@@ -1,38 +1,32 @@
package datasource
import (
"fmt"
"testing"
"github.com/alexanderzobnin/grafana-zabbix/pkg/cache"
"github.com/grafana/grafana-plugin-sdk-go/backend"
"github.com/grafana/grafana-plugin-sdk-go/backend/log"
"gotest.tools/assert"
)
func TestZabbixBackend_getCachedDatasource(t *testing.T) {
basicDsSettings := &backend.DataSourceInstanceSettings{
basicDsSettings := backend.DataSourceInstanceSettings{
ID: 1,
Name: "TestDatasource",
URL: "http://zabbix.org/zabbix",
JSONData: []byte("{}"),
}
modifiedDatasourceSettings := &backend.DataSourceInstanceSettings{
modifiedDatasourceSettings := backend.DataSourceInstanceSettings{
ID: 1,
Name: "TestDatasource",
URL: "http://another.zabbix.org/zabbix",
JSONData: []byte("{}"),
}
modifiedDatasource, _ := NewZabbixDatasourceInstance(modifiedDatasourceSettings)
modifiedDatasource, _ := newZabbixDatasourceInstance(modifiedDatasourceSettings)
basicDS, _ := NewZabbixDatasourceInstance(basicDsSettings)
dsCache := cache.NewCache(cache.NoExpiration, cache.NoExpiration)
dsCache.Set("1-1", basicDS)
basicDS, _ := newZabbixDatasourceInstance(basicDsSettings)
tests := []struct {
name string
cache *cache.Cache
pluginContext backend.PluginContext
want *ZabbixDatasourceInstance
}{
@@ -40,47 +34,34 @@ func TestZabbixBackend_getCachedDatasource(t *testing.T) {
name: "Uncached Datasource (nothing in cache)",
pluginContext: backend.PluginContext{
OrgID: 1,
DataSourceInstanceSettings: basicDsSettings,
DataSourceInstanceSettings: &basicDsSettings,
},
want: basicDS,
want: basicDS.(*ZabbixDatasourceInstance),
},
{
name: "Cached Datasource",
cache: dsCache,
name: "Cached Datasource",
pluginContext: backend.PluginContext{
OrgID: 1,
DataSourceInstanceSettings: basicDsSettings,
DataSourceInstanceSettings: &basicDsSettings,
},
want: basicDS,
want: basicDS.(*ZabbixDatasourceInstance),
},
{
name: "Cached then modified",
cache: dsCache,
name: "Cached then modified",
pluginContext: backend.PluginContext{
OrgID: 1,
DataSourceInstanceSettings: modifiedDatasourceSettings,
DataSourceInstanceSettings: &modifiedDatasourceSettings,
},
want: modifiedDatasource,
want: modifiedDatasource.(*ZabbixDatasourceInstance),
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
if tt.cache == nil {
tt.cache = cache.NewCache(cache.NoExpiration, cache.NoExpiration)
}
ds := &ZabbixDatasource{
datasourceCache: tt.cache,
logger: log.New(),
}
got, _ := ds.GetDatasource(tt.pluginContext)
ds := NewZabbixDatasource()
got, _ := ds.getDSInstance(tt.pluginContext)
// Only checking the URL, being the easiest value to, and guarantee equality for
assert.Equal(t, tt.want.zabbixAPI.GetUrl().String(), got.zabbixAPI.GetUrl().String())
// Ensure the datasource is in the cache
cacheds, ok := tt.cache.Get(fmt.Sprint("1-", tt.pluginContext.DataSourceInstanceSettings.ID))
assert.Equal(t, true, ok)
assert.Equal(t, got, cacheds)
})
}
}