From e8be2ec88321a44205e45115170f18b90424c453 Mon Sep 17 00:00:00 2001 From: Benedikt Franke Date: Fri, 7 Feb 2020 13:44:30 +0100 Subject: [PATCH 01/14] Correctly detect if MariaDB supports roles --- mysql/resource_grant.go | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/mysql/resource_grant.go b/mysql/resource_grant.go index db9feb198..93df82d91 100644 --- a/mysql/resource_grant.go +++ b/mysql/resource_grant.go @@ -128,14 +128,21 @@ func userOrRole(user string, host string, role string, hasRoles bool) (string, b } func supportsRoles(db *sql.DB) (bool, error) { - currentVersion, err := serverVersion(db) + currentVersionString, err := serverVersionString(db) if err != nil { return false, err } - requiredVersion, _ := version.NewVersion("8.0.0") - hasRoles := currentVersion.GreaterThan(requiredVersion) - return hasRoles, nil + if strings.Contains(currentVersionString, "MariaDB") { + requiredVersion, _ := version.NewVersion("10.0.5") + } else { + requiredVersion, _ := version.NewVersion("8.0.0") + } + versionNumber := strings.Split(currentVersion, "-") + currentVersion := version.NewVersion(versionNumber) + + hasRoles := currentVersion.GreaterThan(requiredVersion) + return hasRoles, nil } func CreateGrant(d *schema.ResourceData, meta interface{}) error { From 6e7686fafaaeb474b16fa2d03b4bbb92569925ea Mon Sep 17 00:00:00 2001 From: Benedikt Franke Date: Fri, 7 Feb 2020 13:47:32 +0100 Subject: [PATCH 02/14] Fix variable --- mysql/resource_grant.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mysql/resource_grant.go b/mysql/resource_grant.go index 93df82d91..ca5530eac 100644 --- a/mysql/resource_grant.go +++ b/mysql/resource_grant.go @@ -138,7 +138,7 @@ func supportsRoles(db *sql.DB) (bool, error) { } else { requiredVersion, _ := version.NewVersion("8.0.0") } - versionNumber := strings.Split(currentVersion, "-") + versionNumber := strings.Split(currentVersionString, "-") currentVersion := version.NewVersion(versionNumber) hasRoles := currentVersion.GreaterThan(requiredVersion) From c20216f3bee232525cf16a8a81fcc48fe25ac0aa Mon Sep 17 00:00:00 2001 From: spawnia Date: Tue, 11 Feb 2020 21:13:27 +0100 Subject: [PATCH 03/14] Fix --- mysql/resource_grant.go | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/mysql/resource_grant.go b/mysql/resource_grant.go index ca5530eac..455df4879 100644 --- a/mysql/resource_grant.go +++ b/mysql/resource_grant.go @@ -133,16 +133,18 @@ func supportsRoles(db *sql.DB) (bool, error) { return false, err } - if strings.Contains(currentVersionString, "MariaDB") { - requiredVersion, _ := version.NewVersion("10.0.5") - } else { - requiredVersion, _ := version.NewVersion("8.0.0") - } - versionNumber := strings.Split(currentVersionString, "-") - currentVersion := version.NewVersion(versionNumber) - - hasRoles := currentVersion.GreaterThan(requiredVersion) - return hasRoles, nil + var requiredVersion version + if strings.Contains(currentVersionString, "MariaDB") { + requiredVersion, _ = version.NewVersion("10.0.5") + } else { + requiredVersion, _ = version.NewVersion("8.0.0") + } + + versionNumber := strings.Split(currentVersionString, "-") + currentVersion := version.NewVersion(versionNumber) + + hasRoles := currentVersion.GreaterThan(requiredVersion) + return hasRoles, nil } func CreateGrant(d *schema.ResourceData, meta interface{}) error { From d14ec590706d9be2e07f97736506a8e3c0f3ea4f Mon Sep 17 00:00:00 2001 From: spawnia Date: Tue, 11 Feb 2020 23:14:35 +0100 Subject: [PATCH 04/14] Unify feature detection --- mysql/provider.go | 21 ------ mysql/resource_database.go | 10 +-- mysql/resource_grant.go | 31 ++------- mysql/resource_grant_test.go | 17 +++-- mysql/resource_role_test.go | 9 ++- mysql/resource_user.go | 15 ++--- mysql/resource_user_password.go | 4 +- mysql/versions.go | 113 ++++++++++++++++++++++++++++++++ mysql/versions_test.go | 28 ++++++++ 9 files changed, 166 insertions(+), 82 deletions(-) create mode 100644 mysql/versions.go create mode 100644 mysql/versions_test.go diff --git a/mysql/provider.go b/mysql/provider.go index 256b6e617..4ded155d5 100644 --- a/mysql/provider.go +++ b/mysql/provider.go @@ -10,7 +10,6 @@ import ( "time" "github.com/go-sql-driver/mysql" - "github.com/hashicorp/go-version" "github.com/hashicorp/terraform-plugin-sdk/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/helper/schema" @@ -172,26 +171,6 @@ func quoteIdentifier(in string) string { return fmt.Sprintf("`%s`", identQuoteReplacer.Replace(in)) } -func serverVersion(db *sql.DB) (*version.Version, error) { - var versionString string - err := db.QueryRow("SELECT @@GLOBAL.innodb_version").Scan(&versionString) - if err != nil { - return nil, err - } - - return version.NewVersion(versionString) -} - -func serverVersionString(db *sql.DB) (string, error) { - var versionString string - err := db.QueryRow("SELECT @@GLOBAL.version").Scan(&versionString) - if err != nil { - return "", err - } - - return versionString, nil -} - func connectToMySQL(conf *MySQLConfiguration) (*sql.DB, error) { dsn := conf.Config.FormatDSN() diff --git a/mysql/resource_database.go b/mysql/resource_database.go index 5f47e2d81..f1b8934ae 100644 --- a/mysql/resource_database.go +++ b/mysql/resource_database.go @@ -7,7 +7,6 @@ import ( "strings" "github.com/go-sql-driver/mysql" - "github.com/hashicorp/go-version" "github.com/hashicorp/terraform-plugin-sdk/helper/schema" ) @@ -119,20 +118,13 @@ func ReadDatabase(d *schema.ResourceData, meta interface{}) error { stmtSQL := "SHOW COLLATION WHERE `Charset` = ? AND `Default` = 'Yes'" var empty interface{} - requiredVersion, _ := version.NewVersion("8.0.0") currentVersion, err := serverVersion(db) if err != nil { return err } - serverVersionString, err := serverVersionString(db) - if err != nil { - return err - } - - // MySQL 8 returns more data in a row. var res error - if !strings.Contains(serverVersionString, "MariaDB") && currentVersion.GreaterThan(requiredVersion) { + if currentVersion.extraColumnInShowCollation() { res = db.QueryRow(stmtSQL, defaultCharset).Scan(&defaultCollation, &empty, &empty, &empty, &empty, &empty, &empty) } else { res = db.QueryRow(stmtSQL, defaultCharset).Scan(&defaultCollation, &empty, &empty, &empty, &empty, &empty) diff --git a/mysql/resource_grant.go b/mysql/resource_grant.go index 455df4879..ee5e1dd6d 100644 --- a/mysql/resource_grant.go +++ b/mysql/resource_grant.go @@ -1,12 +1,10 @@ package mysql import ( - "database/sql" "fmt" "log" "strings" - "github.com/hashicorp/go-version" "github.com/hashicorp/terraform-plugin-sdk/helper/schema" ) @@ -127,36 +125,17 @@ func userOrRole(user string, host string, role string, hasRoles bool) (string, b } } -func supportsRoles(db *sql.DB) (bool, error) { - currentVersionString, err := serverVersionString(db) - if err != nil { - return false, err - } - - var requiredVersion version - if strings.Contains(currentVersionString, "MariaDB") { - requiredVersion, _ = version.NewVersion("10.0.5") - } else { - requiredVersion, _ = version.NewVersion("8.0.0") - } - - versionNumber := strings.Split(currentVersionString, "-") - currentVersion := version.NewVersion(versionNumber) - - hasRoles := currentVersion.GreaterThan(requiredVersion) - return hasRoles, nil -} - func CreateGrant(d *schema.ResourceData, meta interface{}) error { db, err := connectToMySQL(meta.(*MySQLConfiguration)) if err != nil { return err } - hasRoles, err := supportsRoles(db) + serverVersion, err := serverVersion(db) if err != nil { return err } + hasRoles := serverVersion.supportsRoles() var ( privilegesOrRoles string @@ -232,10 +211,11 @@ func ReadGrant(d *schema.ResourceData, meta interface{}) error { return err } - hasRoles, err := supportsRoles(db) + serverVersion, err := serverVersion(db) if err != nil { return err } + hasRoles := serverVersion.supportsRoles() userOrRole, _, err := userOrRole( d.Get("user").(string), @@ -269,10 +249,11 @@ func DeleteGrant(d *schema.ResourceData, meta interface{}) error { table := formatTableName(d.Get("table").(string)) - hasRoles, err := supportsRoles(db) + serverVersion, err := serverVersion(db) if err != nil { return err } + hasRoles := serverVersion.supportsRoles() userOrRole, isRole, err := userOrRole( d.Get("user").(string), diff --git a/mysql/resource_grant_test.go b/mysql/resource_grant_test.go index 9f0f0116d..a2c0692bf 100644 --- a/mysql/resource_grant_test.go +++ b/mysql/resource_grant_test.go @@ -9,7 +9,6 @@ import ( "time" "github.com/go-sql-driver/mysql" - "github.com/hashicorp/go-version" "github.com/hashicorp/terraform-plugin-sdk/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/terraform" ) @@ -58,14 +57,14 @@ func TestAccGrant_role(t *testing.T) { return } - requiredVersion, _ := version.NewVersion("8.0.0") - currentVersion, err := serverVersion(db) + serverVersion, err := serverVersion(db) if err != nil { return } + hasRoles := serverVersion.supportsRoles() - if currentVersion.LessThan(requiredVersion) { - t.Skip("Roles require MySQL 8+") + if !hasRoles { + t.Skip("Roles are not supported by this version") } }, Providers: testAccProviders, @@ -93,14 +92,14 @@ func TestAccGrant_roleToUser(t *testing.T) { return } - requiredVersion, _ := version.NewVersion("8.0.0") - currentVersion, err := serverVersion(db) + serverVersion, err := serverVersion(db) if err != nil { return } + hasRoles := serverVersion.supportsRoles() - if currentVersion.LessThan(requiredVersion) { - t.Skip("Roles require MySQL 8+") + if !hasRoles { + t.Skip("Roles are not supported by this version") } }, Providers: testAccProviders, diff --git a/mysql/resource_role_test.go b/mysql/resource_role_test.go index a6256f21b..b5a61b455 100644 --- a/mysql/resource_role_test.go +++ b/mysql/resource_role_test.go @@ -5,7 +5,6 @@ import ( "fmt" "testing" - "github.com/hashicorp/go-version" "github.com/hashicorp/terraform-plugin-sdk/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/terraform" ) @@ -22,14 +21,14 @@ func TestAccRole_basic(t *testing.T) { return } - requiredVersion, _ := version.NewVersion("8.0.0") - currentVersion, err := serverVersion(db) + serverVersion, err := serverVersion(db) if err != nil { return } + hasRoles := serverVersion.supportsRoles() - if currentVersion.LessThan(requiredVersion) { - t.Skip("Roles require MySQL 8+") + if !hasRoles { + t.Skip("Roles are not supported by this version") } }, Providers: testAccProviders, diff --git a/mysql/resource_user.go b/mysql/resource_user.go index d72067ac9..188342fd3 100644 --- a/mysql/resource_user.go +++ b/mysql/resource_user.go @@ -6,7 +6,6 @@ import ( "errors" - "github.com/hashicorp/go-version" "github.com/hashicorp/terraform-plugin-sdk/helper/schema" ) @@ -105,13 +104,12 @@ func CreateUser(d *schema.ResourceData, meta interface{}) error { stmtSQL = stmtSQL + fmt.Sprintf(" IDENTIFIED BY '%s'", password) } - requiredVersion, _ := version.NewVersion("5.7.0") currentVersion, err := serverVersion(db) if err != nil { return err } - if currentVersion.GreaterThan(requiredVersion) && d.Get("tls_option").(string) != "" { + if currentVersion.supportsTlsOption() && d.Get("tls_option").(string) != "" { stmtSQL += fmt.Sprintf(" REQUIRE %s", d.Get("tls_option").(string)) } @@ -155,20 +153,18 @@ func UpdateUser(d *schema.ResourceData, meta interface{}) error { if newpw != nil { var stmtSQL string - /* ALTER USER syntax introduced in MySQL 5.7.6 deprecates SET PASSWORD (GH-8230) */ serverVersion, err := serverVersion(db) if err != nil { return fmt.Errorf("Could not determine server version: %s", err) } - ver, _ := version.NewVersion("5.7.6") - if serverVersion.LessThan(ver) { - stmtSQL = fmt.Sprintf("SET PASSWORD FOR '%s'@'%s' = PASSWORD('%s')", + if serverVersion.deprecatedSetPassword() { + stmtSQL = fmt.Sprintf("ALTER USER '%s'@'%s' IDENTIFIED BY '%s'", d.Get("user").(string), d.Get("host").(string), newpw.(string)) } else { - stmtSQL = fmt.Sprintf("ALTER USER '%s'@'%s' IDENTIFIED BY '%s'", + stmtSQL = fmt.Sprintf("SET PASSWORD FOR '%s'@'%s' = PASSWORD('%s')", d.Get("user").(string), d.Get("host").(string), newpw.(string)) @@ -181,13 +177,12 @@ func UpdateUser(d *schema.ResourceData, meta interface{}) error { } } - requiredVersion, _ := version.NewVersion("5.7.0") currentVersion, err := serverVersion(db) if err != nil { return err } - if d.HasChange("tls_option") && currentVersion.GreaterThan(requiredVersion) { + if currentVersion.supportsTlsOption() && d.HasChange("tls_option") { var stmtSQL string stmtSQL = fmt.Sprintf("ALTER USER '%s'@'%s' REQUIRE %s", diff --git a/mysql/resource_user_password.go b/mysql/resource_user_password.go index 077136bac..d76715321 100644 --- a/mysql/resource_user_password.go +++ b/mysql/resource_user_password.go @@ -4,7 +4,6 @@ import ( "fmt" "github.com/gofrs/uuid" - "github.com/hashicorp/go-version" "github.com/hashicorp/terraform-plugin-sdk/helper/encryption" "github.com/hashicorp/terraform-plugin-sdk/helper/schema" ) @@ -67,14 +66,13 @@ func SetUserPassword(d *schema.ResourceData, meta interface{}) error { d.Set("key_fingerprint", fingerprint) d.Set("encrypted_password", encrypted) - requiredVersion, _ := version.NewVersion("8.0.0") currentVersion, err := serverVersion(db) if err != nil { return err } passSQL := fmt.Sprintf("'%s'", password) - if currentVersion.LessThan(requiredVersion) { + if currentVersion.requiresExplicitPassword() { passSQL = fmt.Sprintf("PASSWORD(%s)", passSQL) } diff --git a/mysql/versions.go b/mysql/versions.go new file mode 100644 index 000000000..ed13bab40 --- /dev/null +++ b/mysql/versions.go @@ -0,0 +1,113 @@ +package mysql + +import ( + "database/sql" + "github.com/hashicorp/go-version" + "strings" +) + +type SQLVendor string + +const ( + MySQL SQLVendor = "MySQL" + MariaDB SQLVendor = "MariaDB" +) + +type ServerVersion struct { + vendor SQLVendor + version *version.Version +} + +func serverVersion(db *sql.DB) (ServerVersion, error) { + versionString, err := serverVersionString(db) + if err != nil { + return ServerVersion{}, err + } + + return parseServerVersionString(versionString), nil +} + +func (serverVersion ServerVersion) supportsRoles() bool { + var requiredVersion *version.Version + if serverVersion.vendor == MariaDB { + requiredVersion, _ = version.NewVersion("10.0.5") + } else { + requiredVersion, _ = version.NewVersion("8.0.0") + } + + return serverVersion.version.GreaterThanOrEqual(requiredVersion) +} + +// ALTER USER syntax introduced in MySQL 5.7.6 deprecates SET PASSWORD (GH-8230) +// We assume that MariaDB will eventually follow suit +func (serverVersion ServerVersion) deprecatedSetPassword() bool { + var requiredVersion *version.Version + if serverVersion.vendor == MariaDB { + requiredVersion, _ = version.NewVersion("10.2.0") + } else { + requiredVersion, _ = version.NewVersion("5.7.6") + } + + return serverVersion.version.GreaterThanOrEqual(requiredVersion) +} + +func (serverVersion ServerVersion) supportsTlsOption() bool { + var requiredVersion *version.Version + if serverVersion.vendor == MariaDB { + // TODO since when exactly has MariaDB had this option? + // The docs are unclear: https://mariadb.com/kb/en/create-user/#tls-options + // requiredVersion, _ = version.NewVersion("5.7.0") + return true + } else { + requiredVersion, _ = version.NewVersion("5.7.0") + } + + return serverVersion.version.GreaterThanOrEqual(requiredVersion) +} + +func (serverVersion ServerVersion) requiresExplicitPassword() bool { + notRequiredVersion, _ := version.NewVersion("8.0.0") + if serverVersion.vendor == MySQL && serverVersion.version.GreaterThanOrEqual(notRequiredVersion) { + return false + } + + return true +} + +// MySQL 8 returns more data in a single row when issuing +// a SHOW COLLATION statement +func (serverVersion ServerVersion) extraColumnInShowCollation() bool { + requiredMySQLVersion, _ := version.NewVersion("8.0.0") + if serverVersion.vendor == MySQL && serverVersion.version.GreaterThanOrEqual(requiredMySQLVersion) { + return true + } + + return false +} + +func parseServerVersionString(versionString string) ServerVersion { + parts := strings.Split(versionString, "-") + newVersion, _ := version.NewVersion(parts[0]) + + if len(parts) == 1 { + return ServerVersion{ + vendor: MySQL, + version: newVersion, + } + } else { + return ServerVersion{ + vendor: MariaDB, + version: newVersion, + } + } +} + +func serverVersionString(db *sql.DB) (string, error) { + var versionString string + err := db.QueryRow("SELECT @@GLOBAL.version").Scan(&versionString) + if err != nil { + return "", err + } + + return versionString, nil +} diff --git a/mysql/versions_test.go b/mysql/versions_test.go new file mode 100644 index 000000000..5a299a8ca --- /dev/null +++ b/mysql/versions_test.go @@ -0,0 +1,28 @@ +package mysql + +import ( + "github.com/hashicorp/go-version" + "testing" +) + +func TestParseServerVersionString_MySQL(t *testing.T) { + mysql := parseServerVersionString("5.7.5") + if mysql.vendor != MySQL { + t.Errorf("Simple versions are assumed to be MySQL") + } + expected, _ := version.NewVersion("5.7.5") + if !mysql.version.Equal(expected) { + t.Errorf("Should not modify the simple version string") + } +} + +func TestParseServerVersionString_MariaDB(t *testing.T) { + mariadb := parseServerVersionString("10.1.8-MariaDB") + if mariadb.vendor != MariaDB { + t.Errorf("MariaDB adds a postfix to their version strings") + } + expected, _ := version.NewVersion("10.1.8") + if !mariadb.version.Equal(expected) { + t.Errorf("Should get the correct part as version string") + } +} From 3468bbe6184b8a81a3a8dc259c81f2506b190c46 Mon Sep 17 00:00:00 2001 From: spawnia Date: Tue, 11 Feb 2020 23:29:38 +0100 Subject: [PATCH 05/14] Run travis tests on MariaDB too --- .travis.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.travis.yml b/.travis.yml index 197d2b256..7adcee106 100644 --- a/.travis.yml +++ b/.travis.yml @@ -11,6 +11,10 @@ env: - DB=mysql:5.6 DB_EXTRA='' - DB=mysql:5.7 DB_EXTRA='' - DB=mysql:8.0 DB_EXTRA='mysqld --default-authentication-plugin=mysql_native_password' + - DB=mariadb:10.1 DB_EXTRA='' + - DB=mariadb:10.2 DB_EXTRA='' + - DB=mariadb:10.3 DB_EXTRA='' + - DB=mariadb:10.4 DB_EXTRA='' services: - docker From 924ef296d834776d40ee710af69b8d4d459d7d70 Mon Sep 17 00:00:00 2001 From: spawnia Date: Wed, 12 Feb 2020 00:01:02 +0100 Subject: [PATCH 06/14] The test showed MariaDB 10.1 does not have tls_options --- mysql/versions.go | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/mysql/versions.go b/mysql/versions.go index ed13bab40..04e3a34c9 100644 --- a/mysql/versions.go +++ b/mysql/versions.go @@ -56,8 +56,7 @@ func (serverVersion ServerVersion) supportsTlsOption() bool { if serverVersion.vendor == MariaDB { // TODO since when exactly has MariaDB had this option? // The docs are unclear: https://mariadb.com/kb/en/create-user/#tls-options - // requiredVersion, _ = version.NewVersion("5.7.0") - return true + requiredVersion, _ = version.NewVersion("10.2.0") } else { requiredVersion, _ = version.NewVersion("5.7.0") } From a504a9880387c740a53ef8751de497927236180c Mon Sep 17 00:00:00 2001 From: Benedikt Franke Date: Wed, 12 Feb 2020 09:00:27 +0100 Subject: [PATCH 07/14] Skip mysql_no_login test for MariaDB --- mysql/resource_user_test.go | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/mysql/resource_user_test.go b/mysql/resource_user_test.go index 0d444f22b..577766af6 100644 --- a/mysql/resource_user_test.go +++ b/mysql/resource_user_test.go @@ -52,7 +52,21 @@ func TestAccUser_basic(t *testing.T) { func TestAccUser_auth(t *testing.T) { resource.Test(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, + PreCheck: func() { + testAccPreCheck(t) + db, err := connectToMySQL(testAccProvider.Meta().(*MySQLConfiguration)) + if err != nil { + return + } + + serverVersion, err := serverVersion(db) + if err != nil { + return + } + if serverVersion.vendor == MariaDB { + t.Skip("MariaDB does not support the mysql_no_login plugin") + } + }, Providers: testAccProviders, CheckDestroy: testAccUserCheckDestroy, Steps: []resource.TestStep{ From c15dc3f2102e24dcf6c713b4e19d75dfafd4d77a Mon Sep 17 00:00:00 2001 From: Benedikt Franke Date: Wed, 12 Feb 2020 09:16:54 +0100 Subject: [PATCH 08/14] Format --- mysql/resource_user_test.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/mysql/resource_user_test.go b/mysql/resource_user_test.go index 577766af6..daad415a6 100644 --- a/mysql/resource_user_test.go +++ b/mysql/resource_user_test.go @@ -52,7 +52,7 @@ func TestAccUser_basic(t *testing.T) { func TestAccUser_auth(t *testing.T) { resource.Test(t, resource.TestCase{ - PreCheck: func() { + PreCheck: func() { testAccPreCheck(t) db, err := connectToMySQL(testAccProvider.Meta().(*MySQLConfiguration)) if err != nil { @@ -63,6 +63,7 @@ func TestAccUser_auth(t *testing.T) { if err != nil { return } + if serverVersion.vendor == MariaDB { t.Skip("MariaDB does not support the mysql_no_login plugin") } From 33a145adcc8eda0542690d125e6769640c97ca68 Mon Sep 17 00:00:00 2001 From: Benedikt Franke Date: Wed, 12 Feb 2020 09:43:35 +0100 Subject: [PATCH 09/14] gofmt --- mysql/resource_user_test.go | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/mysql/resource_user_test.go b/mysql/resource_user_test.go index daad415a6..4d4368880 100644 --- a/mysql/resource_user_test.go +++ b/mysql/resource_user_test.go @@ -53,21 +53,21 @@ func TestAccUser_basic(t *testing.T) { func TestAccUser_auth(t *testing.T) { resource.Test(t, resource.TestCase{ PreCheck: func() { - testAccPreCheck(t) - db, err := connectToMySQL(testAccProvider.Meta().(*MySQLConfiguration)) - if err != nil { - return - } - - serverVersion, err := serverVersion(db) - if err != nil { - return - } - - if serverVersion.vendor == MariaDB { - t.Skip("MariaDB does not support the mysql_no_login plugin") - } - }, + testAccPreCheck(t) + db, err := connectToMySQL(testAccProvider.Meta().(*MySQLConfiguration)) + if err != nil { + return + } + + serverVersion, err := serverVersion(db) + if err != nil { + return + } + + if serverVersion.vendor == MariaDB { + t.Skip("MariaDB does not support the mysql_no_login plugin") + } + }, Providers: testAccProviders, CheckDestroy: testAccUserCheckDestroy, Steps: []resource.TestStep{ From 07e733d9d21bba018ff9c185f4edaa94b9d8f0cb Mon Sep 17 00:00:00 2001 From: Benedikt Franke Date: Wed, 12 Feb 2020 10:18:43 +0100 Subject: [PATCH 10/14] Do not attempt plugin install in MariaDB --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 7adcee106..d8cab20b1 100644 --- a/.travis.yml +++ b/.travis.yml @@ -38,7 +38,7 @@ script: echo 'Waiting for MySQL...' sleep 1; done; - - mysql -h${MYSQL_HOST} -P${MYSQL_PORT} -u${MYSQL_USERNAME} -e "INSTALL PLUGIN mysql_no_login SONAME 'mysql_no_login.so';" + - [[ $DB == mysql* ]] && mysql -h${MYSQL_HOST} -P${MYSQL_PORT} -u${MYSQL_USERNAME} -e "INSTALL PLUGIN mysql_no_login SONAME 'mysql_no_login.so';" - make testacc matrix: From ce769210bb6b9d697d93e5964fff4be0250a94f0 Mon Sep 17 00:00:00 2001 From: Benedikt Franke Date: Wed, 12 Feb 2020 13:26:44 +0100 Subject: [PATCH 11/14] Regex compare --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index d8cab20b1..31c249b8e 100644 --- a/.travis.yml +++ b/.travis.yml @@ -38,7 +38,7 @@ script: echo 'Waiting for MySQL...' sleep 1; done; - - [[ $DB == mysql* ]] && mysql -h${MYSQL_HOST} -P${MYSQL_PORT} -u${MYSQL_USERNAME} -e "INSTALL PLUGIN mysql_no_login SONAME 'mysql_no_login.so';" + - [[ $DB =~ ^mysql ]] && mysql -h${MYSQL_HOST} -P${MYSQL_PORT} -u${MYSQL_USERNAME} -e "INSTALL PLUGIN mysql_no_login SONAME 'mysql_no_login.so';" - make testacc matrix: From 81ef97e49ef8c8a4139b7d2982699b8dcc882ba0 Mon Sep 17 00:00:00 2001 From: Benedikt Franke Date: Wed, 12 Feb 2020 13:27:12 +0100 Subject: [PATCH 12/14] Remove line --- .travis.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 31c249b8e..1b07c1042 100644 --- a/.travis.yml +++ b/.travis.yml @@ -38,7 +38,6 @@ script: echo 'Waiting for MySQL...' sleep 1; done; - - [[ $DB =~ ^mysql ]] && mysql -h${MYSQL_HOST} -P${MYSQL_PORT} -u${MYSQL_USERNAME} -e "INSTALL PLUGIN mysql_no_login SONAME 'mysql_no_login.so';" - make testacc matrix: From 926e6f51d1e3be1b47d87dbad8c32c4b35e0f9af Mon Sep 17 00:00:00 2001 From: Benedikt Franke Date: Wed, 12 Feb 2020 13:28:32 +0100 Subject: [PATCH 13/14] Multiline --- .travis.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.travis.yml b/.travis.yml index 1b07c1042..943354836 100644 --- a/.travis.yml +++ b/.travis.yml @@ -38,6 +38,10 @@ script: echo 'Waiting for MySQL...' sleep 1; done; + - | + if [[ $DB =~ ^mysql ]]; then + mysql -h${MYSQL_HOST} -P${MYSQL_PORT} -u${MYSQL_USERNAME} -e "INSTALL PLUGIN mysql_no_login SONAME 'mysql_no_login.so';" + fi; - make testacc matrix: From 4d7112fceeb31dd04f91021011d920926b0d18ef Mon Sep 17 00:00:00 2001 From: Benedikt Franke Date: Wed, 12 Feb 2020 13:45:20 +0100 Subject: [PATCH 14/14] Revert travis.yml --- .travis.yml | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/.travis.yml b/.travis.yml index 943354836..197d2b256 100644 --- a/.travis.yml +++ b/.travis.yml @@ -11,10 +11,6 @@ env: - DB=mysql:5.6 DB_EXTRA='' - DB=mysql:5.7 DB_EXTRA='' - DB=mysql:8.0 DB_EXTRA='mysqld --default-authentication-plugin=mysql_native_password' - - DB=mariadb:10.1 DB_EXTRA='' - - DB=mariadb:10.2 DB_EXTRA='' - - DB=mariadb:10.3 DB_EXTRA='' - - DB=mariadb:10.4 DB_EXTRA='' services: - docker @@ -38,10 +34,7 @@ script: echo 'Waiting for MySQL...' sleep 1; done; - - | - if [[ $DB =~ ^mysql ]]; then - mysql -h${MYSQL_HOST} -P${MYSQL_PORT} -u${MYSQL_USERNAME} -e "INSTALL PLUGIN mysql_no_login SONAME 'mysql_no_login.so';" - fi; + - mysql -h${MYSQL_HOST} -P${MYSQL_PORT} -u${MYSQL_USERNAME} -e "INSTALL PLUGIN mysql_no_login SONAME 'mysql_no_login.so';" - make testacc matrix: