sqlstore_test.go 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. package sqlstore
  2. import (
  3. "testing"
  4. . "github.com/smartystreets/goconvey/convey"
  5. "github.com/grafana/grafana/pkg/setting"
  6. )
  7. type sqlStoreTest struct {
  8. name string
  9. dbType string
  10. dbHost string
  11. connStrValues []string
  12. }
  13. var sqlStoreTestCases = []sqlStoreTest{
  14. {
  15. name: "MySQL IPv4",
  16. dbType: "mysql",
  17. dbHost: "1.2.3.4:5678",
  18. connStrValues: []string{"tcp(1.2.3.4:5678)"},
  19. },
  20. {
  21. name: "Postgres IPv4",
  22. dbType: "postgres",
  23. dbHost: "1.2.3.4:5678",
  24. connStrValues: []string{"host=1.2.3.4", "port=5678"},
  25. },
  26. {
  27. name: "Postgres IPv4 (Default Port)",
  28. dbType: "postgres",
  29. dbHost: "1.2.3.4",
  30. connStrValues: []string{"host=1.2.3.4", "port=5432"},
  31. },
  32. {
  33. name: "MySQL IPv4 (Default Port)",
  34. dbType: "mysql",
  35. dbHost: "1.2.3.4",
  36. connStrValues: []string{"tcp(1.2.3.4)"},
  37. },
  38. {
  39. name: "MySQL IPv6",
  40. dbType: "mysql",
  41. dbHost: "[fe80::24e8:31b2:91df:b177]:1234",
  42. connStrValues: []string{"tcp([fe80::24e8:31b2:91df:b177]:1234)"},
  43. },
  44. {
  45. name: "Postgres IPv6",
  46. dbType: "postgres",
  47. dbHost: "[fe80::24e8:31b2:91df:b177]:1234",
  48. connStrValues: []string{"host=fe80::24e8:31b2:91df:b177", "port=1234"},
  49. },
  50. {
  51. name: "MySQL IPv6 (Default Port)",
  52. dbType: "mysql",
  53. dbHost: "::1",
  54. connStrValues: []string{"tcp(::1)"},
  55. },
  56. {
  57. name: "Postgres IPv6 (Default Port)",
  58. dbType: "postgres",
  59. dbHost: "::1",
  60. connStrValues: []string{"host=::1", "port=5432"},
  61. },
  62. }
  63. func TestSqlConnectionString(t *testing.T) {
  64. Convey("Testing SQL Connection Strings", t, func() {
  65. t.Helper()
  66. for _, testCase := range sqlStoreTestCases {
  67. Convey(testCase.name, func() {
  68. sqlstore := &SqlStore{}
  69. sqlstore.Cfg = makeSqlStoreTestConfig(testCase.dbType, testCase.dbHost)
  70. sqlstore.readConfig()
  71. connStr, err := sqlstore.buildConnectionString()
  72. So(err, ShouldBeNil)
  73. for _, connSubStr := range testCase.connStrValues {
  74. So(connStr, ShouldContainSubstring, connSubStr)
  75. }
  76. })
  77. }
  78. })
  79. }
  80. func makeSqlStoreTestConfig(dbType string, host string) *setting.Cfg {
  81. cfg := setting.NewCfg()
  82. sec, _ := cfg.Raw.NewSection("database")
  83. sec.NewKey("type", dbType)
  84. sec.NewKey("host", host)
  85. sec.NewKey("user", "user")
  86. sec.NewKey("name", "test_db")
  87. sec.NewKey("password", "pass")
  88. return cfg
  89. }