vitess.io/vitess@v0.16.2/go/vt/mysqlctl/mysqld_test.go (about) 1 /* 2 Copyright 2019 The Vitess Authors. 3 4 Licensed under the Apache License, Version 2.0 (the "License"); 5 you may not use this file except in compliance with the License. 6 You may obtain a copy of the License at 7 8 http://www.apache.org/licenses/LICENSE-2.0 9 10 Unless required by applicable law or agreed to in writing, software 11 distributed under the License is distributed on an "AS IS" BASIS, 12 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 See the License for the specific language governing permissions and 14 limitations under the License. 15 */ 16 17 package mysqlctl 18 19 import ( 20 "os" 21 "testing" 22 ) 23 24 type testcase struct { 25 versionString string 26 version ServerVersion 27 flavor MySQLFlavor 28 } 29 30 func TestParseVersionString(t *testing.T) { 31 32 var testcases = []testcase{ 33 34 { 35 versionString: "mysqld Ver 5.7.27-0ubuntu0.19.04.1 for Linux on x86_64 ((Ubuntu))", 36 version: ServerVersion{5, 7, 27}, 37 flavor: FlavorMySQL, 38 }, 39 { 40 versionString: "mysqld Ver 5.6.43 for linux-glibc2.12 on x86_64 (MySQL Community Server (GPL))", 41 version: ServerVersion{5, 6, 43}, 42 flavor: FlavorMySQL, 43 }, 44 { 45 versionString: "mysqld Ver 5.7.26 for linux-glibc2.12 on x86_64 (MySQL Community Server (GPL))", 46 version: ServerVersion{5, 7, 26}, 47 flavor: FlavorMySQL, 48 }, 49 { 50 versionString: "mysqld Ver 8.0.16 for linux-glibc2.12 on x86_64 (MySQL Community Server - GPL)", 51 version: ServerVersion{8, 0, 16}, 52 flavor: FlavorMySQL, 53 }, 54 { 55 versionString: "mysqld Ver 5.7.26-29 for Linux on x86_64 (Percona Server (GPL), Release 29, Revision 11ad961)", 56 version: ServerVersion{5, 7, 26}, 57 flavor: FlavorPercona, 58 }, 59 { 60 versionString: "mysqld Ver 10.0.38-MariaDB for Linux on x86_64 (MariaDB Server)", 61 version: ServerVersion{10, 0, 38}, 62 flavor: FlavorMariaDB, 63 }, 64 { 65 versionString: "mysqld Ver 10.1.40-MariaDB for Linux on x86_64 (MariaDB Server)", 66 version: ServerVersion{10, 1, 40}, 67 flavor: FlavorMariaDB, 68 }, 69 { 70 versionString: "mysqld Ver 10.2.25-MariaDB for Linux on x86_64 (MariaDB Server)", 71 version: ServerVersion{10, 2, 25}, 72 flavor: FlavorMariaDB, 73 }, 74 { 75 versionString: "mysqld Ver 10.3.16-MariaDB for Linux on x86_64 (MariaDB Server)", 76 version: ServerVersion{10, 3, 16}, 77 flavor: FlavorMariaDB, 78 }, 79 { 80 versionString: "mysqld Ver 10.4.6-MariaDB for Linux on x86_64 (MariaDB Server)", 81 version: ServerVersion{10, 4, 6}, 82 flavor: FlavorMariaDB, 83 }, 84 { 85 versionString: "mysqld Ver 5.6.42 for linux-glibc2.12 on x86_64 (MySQL Community Server (GPL))", 86 version: ServerVersion{5, 6, 42}, 87 flavor: FlavorMySQL, 88 }, 89 { 90 versionString: "mysqld Ver 5.6.44-86.0 for Linux on x86_64 (Percona Server (GPL), Release 86.0, Revision eba1b3f)", 91 version: ServerVersion{5, 6, 44}, 92 flavor: FlavorPercona, 93 }, 94 { 95 versionString: "mysqld Ver 8.0.15-6 for Linux on x86_64 (Percona Server (GPL), Release 6, Revision 63abd08)", 96 version: ServerVersion{8, 0, 15}, 97 flavor: FlavorPercona, 98 }, 99 } 100 101 for _, testcase := range testcases { 102 f, v, err := ParseVersionString(testcase.versionString) 103 if v != testcase.version || f != testcase.flavor || err != nil { 104 t.Errorf("ParseVersionString failed for: %#v, Got: %#v, %#v Expected: %#v, %#v", testcase.versionString, v, f, testcase.version, testcase.flavor) 105 } 106 } 107 108 } 109 110 func TestAssumeVersionString(t *testing.T) { 111 112 // In these cases, the versionstring is nonsensical or unspecified. 113 // MYSQL_FLAVOR is used instead. 114 115 var testcases = []testcase{ 116 { 117 versionString: "MySQL80", 118 version: ServerVersion{8, 0, 11}, 119 flavor: FlavorMySQL, 120 }, 121 { 122 versionString: "MySQL56", 123 version: ServerVersion{5, 7, 10}, // Yes, this has to lie! 124 flavor: FlavorMySQL, // There was no MySQL57 option 125 }, 126 { 127 versionString: "MariaDB", 128 version: ServerVersion{10, 6, 11}, 129 flavor: FlavorMariaDB, 130 }, 131 } 132 133 for _, testcase := range testcases { 134 os.Setenv("MYSQL_FLAVOR", testcase.versionString) 135 f, v, err := GetVersionFromEnv() 136 if v != testcase.version || f != testcase.flavor || err != nil { 137 t.Errorf("GetVersionFromEnv() failed for: %#v, Got: %#v, %#v Expected: %#v, %#v", testcase.versionString, v, f, testcase.version, testcase.flavor) 138 } 139 } 140 141 }