github.com/kiali/kiali@v1.84.0/business/grafana_test.go (about)

     1  package business
     2  
     3  import (
     4  	"encoding/json"
     5  	"net/http"
     6  	"testing"
     7  
     8  	"github.com/stretchr/testify/assert"
     9  
    10  	"github.com/kiali/kiali/config"
    11  )
    12  
    13  var dashboardsConfig = []config.GrafanaDashboardConfig{
    14  	{
    15  		Name: "My Dashboard",
    16  	},
    17  }
    18  
    19  var anError = map[string]string{
    20  	"message": "unauthorized",
    21  }
    22  
    23  func genDashboard(path string) []map[string]interface{} {
    24  	return []map[string]interface{}{
    25  		{
    26  			"url": path,
    27  		},
    28  	}
    29  }
    30  
    31  func TestGetGrafanaInfoDisabled(t *testing.T) {
    32  	conf := config.NewConfig()
    33  	conf.ExternalServices.Grafana.Enabled = false
    34  	config.Set(conf)
    35  
    36  	info, code, err := GetGrafanaInfo(buildDashboardSupplier(genDashboard("/some_path"), 200, "whatever", t))
    37  	assert.Nil(t, err)
    38  	assert.Equal(t, http.StatusNoContent, code)
    39  	assert.Nil(t, info)
    40  }
    41  
    42  func TestGetGrafanaInfoExternal(t *testing.T) {
    43  	conf := config.NewConfig()
    44  	conf.ExternalServices.Grafana.InClusterURL = ""
    45  	conf.ExternalServices.Grafana.URL = "http://grafana-external:3001"
    46  	conf.ExternalServices.Grafana.Dashboards = dashboardsConfig
    47  	config.Set(conf)
    48  
    49  	info, code, err := GetGrafanaInfo(buildDashboardSupplier(genDashboard("/some_path"), 200, "http://grafana-external:3001", t))
    50  
    51  	assert.Nil(t, err)
    52  	assert.Equal(t, http.StatusOK, code)
    53  	assert.Len(t, info.ExternalLinks, 1)
    54  	assert.Equal(t, "http://grafana-external:3001/some_path", info.ExternalLinks[0].URL)
    55  }
    56  
    57  func TestGetGrafanaInfoInCluster(t *testing.T) {
    58  	conf := config.NewConfig()
    59  	conf.ExternalServices.Grafana.URL = "http://grafana-external:3001"
    60  	conf.ExternalServices.Grafana.Dashboards = dashboardsConfig
    61  	conf.ExternalServices.Grafana.InClusterURL = "http://grafana.istio-system:3001"
    62  	config.Set(conf)
    63  
    64  	info, code, err := GetGrafanaInfo(buildDashboardSupplier(genDashboard("/some_path"), 200, "http://grafana.istio-system:3001", t))
    65  
    66  	assert.Nil(t, err)
    67  	assert.Equal(t, http.StatusOK, code)
    68  	assert.Len(t, info.ExternalLinks, 1)
    69  	assert.Equal(t, "http://grafana-external:3001/some_path", info.ExternalLinks[0].URL)
    70  }
    71  
    72  func TestGetGrafanaInfoGetError(t *testing.T) {
    73  	conf := config.NewConfig()
    74  	conf.ExternalServices.Grafana.InClusterURL = ""
    75  	conf.ExternalServices.Grafana.URL = "http://grafana-external:3001"
    76  	conf.ExternalServices.Grafana.Dashboards = dashboardsConfig
    77  	config.Set(conf)
    78  
    79  	_, code, err := GetGrafanaInfo(buildDashboardSupplier(anError, 401, "http://grafana-external:3001", t))
    80  
    81  	assert.Equal(t, "error from Grafana (401): unauthorized", err.Error())
    82  	assert.Equal(t, 503, code)
    83  }
    84  
    85  func TestGetGrafanaInfoInvalidDashboard(t *testing.T) {
    86  	conf := config.NewConfig()
    87  	conf.ExternalServices.Grafana.InClusterURL = ""
    88  	conf.ExternalServices.Grafana.URL = "http://grafana-external:3001"
    89  	conf.ExternalServices.Grafana.Dashboards = dashboardsConfig
    90  	config.Set(conf)
    91  
    92  	_, code, err := GetGrafanaInfo(buildDashboardSupplier("unexpected response", 200, "http://grafana-external:3001", t))
    93  
    94  	assert.NotNil(t, err)
    95  	assert.Contains(t, err.Error(), "json: cannot unmarshal")
    96  	assert.Equal(t, 503, code)
    97  }
    98  
    99  func TestGetGrafanaInfoWithoutLeadingSlashPath(t *testing.T) {
   100  	conf := config.NewConfig()
   101  	conf.ExternalServices.Grafana.InClusterURL = ""
   102  	conf.ExternalServices.Grafana.URL = "http://grafana-external:3001"
   103  	conf.ExternalServices.Grafana.Dashboards = dashboardsConfig
   104  	config.Set(conf)
   105  
   106  	info, code, err := GetGrafanaInfo(buildDashboardSupplier(genDashboard("some_path"), 200, "http://grafana-external:3001", t))
   107  
   108  	assert.Nil(t, err)
   109  	assert.Equal(t, http.StatusOK, code)
   110  	assert.Len(t, info.ExternalLinks, 1)
   111  	assert.Equal(t, "http://grafana-external:3001/some_path", info.ExternalLinks[0].URL)
   112  }
   113  
   114  func TestGetGrafanaInfoWithTrailingSlashURL(t *testing.T) {
   115  	conf := config.NewConfig()
   116  	conf.ExternalServices.Grafana.InClusterURL = ""
   117  	conf.ExternalServices.Grafana.URL = "http://grafana-external:3001/"
   118  	conf.ExternalServices.Grafana.Dashboards = dashboardsConfig
   119  	config.Set(conf)
   120  
   121  	info, code, err := GetGrafanaInfo(buildDashboardSupplier(genDashboard("/some_path"), 200, "http://grafana-external:3001/", t))
   122  
   123  	assert.Nil(t, err)
   124  	assert.Equal(t, http.StatusOK, code)
   125  	assert.Len(t, info.ExternalLinks, 1)
   126  	assert.Equal(t, "http://grafana-external:3001/some_path", info.ExternalLinks[0].URL)
   127  }
   128  
   129  func TestGetGrafanaInfoWithQueryParams(t *testing.T) {
   130  	conf := config.NewConfig()
   131  	conf.ExternalServices.Grafana.InClusterURL = ""
   132  	conf.ExternalServices.Grafana.URL = "http://grafana-external:3001/?orgId=1"
   133  	conf.ExternalServices.Grafana.Dashboards = dashboardsConfig
   134  	config.Set(conf)
   135  
   136  	info, code, err := GetGrafanaInfo(buildDashboardSupplier(genDashboard("/some_path"), 200, "http://grafana-external:3001/?orgId=1", t))
   137  
   138  	assert.Nil(t, err)
   139  	assert.Equal(t, http.StatusOK, code)
   140  	assert.Len(t, info.ExternalLinks, 1)
   141  	assert.Equal(t, "http://grafana-external:3001/some_path?orgId=1", info.ExternalLinks[0].URL)
   142  }
   143  
   144  func TestGetGrafanaInfoWithAbsoluteDashboardURL(t *testing.T) {
   145  	conf := config.NewConfig()
   146  	conf.ExternalServices.Grafana.InClusterURL = ""
   147  	conf.ExternalServices.Grafana.URL = "/system/grafana/"
   148  	conf.ExternalServices.Grafana.Dashboards = dashboardsConfig
   149  	conf.ExternalServices.Grafana.InClusterURL = "http://grafana.istio-system:3001"
   150  	config.Set(conf)
   151  	info, code, err := GetGrafanaInfo(buildDashboardSupplier(genDashboard("/system/grafana/some_path"), 200, "http://grafana.istio-system:3001", t))
   152  	assert.Nil(t, err)
   153  	assert.Equal(t, http.StatusOK, code)
   154  	assert.Len(t, info.ExternalLinks, 1)
   155  	assert.Equal(t, "/system/grafana/some_path", info.ExternalLinks[0].URL)
   156  }
   157  
   158  func buildDashboardSupplier(jSon interface{}, code int, expectURL string, t *testing.T) dashboardSupplier {
   159  	return func(url, _ string, _ *config.Auth) ([]byte, int, error) {
   160  		assert.Equal(t, expectURL, url)
   161  		bytes, err := json.Marshal(jSon)
   162  		return bytes, code, err
   163  	}
   164  }