Skip to content

Commit e7436d4

Browse files
author
Nicola Strappazzon C
committed
feat - some changes for mysql and proxysql
1 parent b0d0cd9 commit e7436d4

File tree

9 files changed

+246
-125
lines changed

9 files changed

+246
-125
lines changed

.github/workflows/go.yml

+24
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,13 @@
11
name: Go
22

33
on: [push]
4+
5+
env:
6+
MYSQL_TEST_USER: gotest
7+
MYSQL_TEST_PASS: test
8+
MYSQL_TEST_ADDR: 127.0.0.1:3306
9+
MYSQL_TEST_CONCURRENT: 1
10+
411
jobs:
512
test:
613
name: Check code quality and run tests
@@ -13,6 +20,23 @@ jobs:
1320
with:
1421
go-version: 1.21
1522

23+
- name: Setup MySQL Server
24+
uses: shogo82148/actions-setup-mysql@v1.21.0
25+
with:
26+
mysql-version: 8.0
27+
user: ${{ env.MYSQL_TEST_USER }}
28+
password: ${{ env.MYSQL_TEST_PASS }}
29+
my-cnf: |
30+
innodb_log_file_size=256MB
31+
innodb_buffer_pool_size=512MB
32+
max_allowed_packet=16MB
33+
max_connections=50
34+
local_infile=1
35+
performance_schema=on
36+
37+
- name: Setup database
38+
run: mysql --user 'root' --host '127.0.0.1' -e 'CREATE DATABASE gotest;'
39+
1640
- name: Get all dependencies
1741
run: go get -u ./...
1842

aws/rds/main.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -156,7 +156,7 @@ func (r *RDS) Delete() (err error) {
156156
}
157157

158158
_, err = r.Client.DeleteDBInstance(input)
159-
return
159+
return err
160160
}
161161

162162
func (r *RDS) DescribeOld() {

mysql/main.go

+1-71
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,14 @@
11
package mysql
22

33
import (
4-
// "fmt"
54
"database/sql"
65
"errors"
7-
"strconv"
8-
"strings"
96

107
"github.com/debeando/go-common/log"
118

129
_ "github.com/go-sql-driver/mysql"
1310
)
1411

15-
type MySQL struct {
16-
Host string `json:"host"`
17-
Port uint16 `json:"port"`
18-
Username string `json:"username"`
19-
Password string `json:"password"`
20-
Schema string `json:"schema"`
21-
Status string `json:"status"`
22-
Timeout uint8 `json:"timeout"`
23-
}
24-
2512
type Connection struct {
2613
Instance *sql.DB
2714
Name string
@@ -213,63 +200,6 @@ func (c *Connection) FetchAll(query string, fn func(map[string]string)) error {
213200
func (c *Connection) Close() {
214201
if c.Instance != nil {
215202
c.Instance.Close()
203+
c.Instance = nil
216204
}
217205
}
218-
219-
func ParseNumberValue(value string) (int64, bool) {
220-
value = strings.ToLower(value)
221-
222-
if value == "yes" || value == "on" {
223-
return 1, true
224-
}
225-
226-
if value == "no" || value == "off" {
227-
return 0, true
228-
}
229-
230-
if val, err := strconv.ParseInt(value, 10, 64); err == nil {
231-
return val, true
232-
}
233-
234-
return 0, false
235-
}
236-
237-
func ClearUser(u string) string {
238-
index := strings.Index(u, "[")
239-
if index > 0 {
240-
return u[0:index]
241-
}
242-
return u
243-
}
244-
245-
func MaximumValueSigned(dataType string) uint64 {
246-
switch dataType {
247-
case "tinyint":
248-
return 127
249-
case "smallint":
250-
return 32767
251-
case "mediumint":
252-
return 8388607
253-
case "int":
254-
return 2147483647
255-
case "bigint":
256-
return 9223372036854775807
257-
}
258-
return 0
259-
}
260-
261-
func MaximumValueUnsigned(dataType string) uint64 {
262-
switch dataType {
263-
case "tinyint":
264-
return 255
265-
case "smallint":
266-
return 65535
267-
case "mediumint":
268-
return 16777215
269-
case "int":
270-
return 4294967295
271-
case "bigint":
272-
return 18446744073709551615
273-
}
274-
return 0
275-
}

mysql/main_test.go

+23-45
Original file line numberDiff line numberDiff line change
@@ -1,59 +1,37 @@
11
package mysql_test
22

33
import (
4+
"os"
45
"testing"
56

67
"github.com/debeando/go-common/mysql"
7-
)
8-
9-
func TestParseValue(t *testing.T) {
10-
if value, ok := mysql.ParseNumberValue("yes"); !ok || value != 1 {
11-
t.Error("Expected: Found Parse and value = 1.")
12-
}
13-
14-
if value, ok := mysql.ParseNumberValue("Yes"); !ok || value != 1 {
15-
t.Error("Expected: Found Parse and value = 1.")
16-
}
17-
18-
if value, ok := mysql.ParseNumberValue("YES"); !ok || value != 1 {
19-
t.Error("Expected: Found Parse and value = 1.")
20-
}
21-
22-
if value, ok := mysql.ParseNumberValue("no"); !ok || value != 0 {
23-
t.Error("Expected: Found Parse and value = 0.")
24-
}
25-
26-
if value, ok := mysql.ParseNumberValue("No"); !ok || value != 0 {
27-
t.Error("Expected: Found Parse and value = 0.")
28-
}
29-
30-
if value, ok := mysql.ParseNumberValue("NO"); !ok || value != 0 {
31-
t.Error("Expected: Found Parse and value = 0.")
32-
}
33-
34-
if value, ok := mysql.ParseNumberValue("ON"); !ok || value != 1 {
35-
t.Error("Expected: Found Parse and value = 1.")
36-
}
378

38-
if value, ok := mysql.ParseNumberValue("OFF"); !ok || value != 0 {
39-
t.Error("Expected: Found Parse and value = 0.")
40-
}
9+
"github.com/stretchr/testify/assert"
10+
)
4111

42-
if value, ok := mysql.ParseNumberValue("true"); ok && value == 0 {
43-
t.Error("Expected: Imposible Parse.")
12+
func TestConnection(t *testing.T) {
13+
m := mysql.MySQL{
14+
Host: "127.0.0.1",
15+
Port: 3306,
16+
Username: os.Getenv("MYSQL_TEST_USER"),
17+
Password: os.Getenv("MYSQL_TEST_PASS"),
4418
}
4519

46-
if value, ok := mysql.ParseNumberValue("1234567890"); !ok || value != 1234567890 {
47-
t.Error("Expected: Found Parse and value = 1234567890.")
48-
}
20+
c := mysql.New("test", m.DSN())
21+
assert.Empty(t, c.Instance, nil)
22+
e := c.Connect()
23+
assert.NoError(t, e)
24+
assert.NotEmpty(t, c.Instance, nil)
4925
}
5026

51-
func TestClearUser(t *testing.T) {
52-
user := "test[test] @ [127.0.0.1]"
53-
expected := "test"
54-
result := mysql.ClearUser(user)
27+
func TestGet(t *testing.T) {
28+
c := mysql.Get("test")
29+
assert.NotEmpty(t, c.Instance, nil)
30+
}
5531

56-
if result != expected {
57-
t.Errorf("Expected: '%s', got: '%s'.", expected, result)
58-
}
32+
func TestClose(t *testing.T) {
33+
c := mysql.Get("test")
34+
assert.NotEmpty(t, c.Instance, nil)
35+
c.Close()
36+
assert.Empty(t, c.Instance, nil)
5937
}

mysql/mysql.go

+26
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
package mysql
2+
3+
import (
4+
"fmt"
5+
)
6+
7+
type MySQL struct {
8+
Host string `json:"host" yaml:"host"`
9+
Port uint16 `json:"port" yaml:"port"`
10+
Username string `json:"username" yaml:"username"`
11+
Password string `json:"password" yaml:"password"`
12+
Schema string `json:"schema" yaml:"schema"`
13+
Status string `json:"status" yaml:"status"`
14+
Timeout uint8 `json:"timeout" yaml:"timeout"`
15+
}
16+
17+
func (m *MySQL) DSN() string {
18+
return fmt.Sprintf(
19+
"%s:%s@tcp(%s:%d)/?timeout=%ds",
20+
m.Username,
21+
m.Password,
22+
m.Host,
23+
m.Port,
24+
m.Timeout,
25+
)
26+
}

mysql/mysql_test.go

+20
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package mysql_test
2+
3+
import (
4+
"testing"
5+
6+
"github.com/debeando/go-common/mysql"
7+
8+
"github.com/stretchr/testify/assert"
9+
)
10+
11+
func TestDSN(t *testing.T) {
12+
m := mysql.MySQL{}
13+
m.Host = "127.0.0.1"
14+
m.Password = "test"
15+
m.Port = 3306
16+
m.Timeout = 30
17+
m.Username = "sakila"
18+
19+
assert.Equal(t, m.DSN(), "sakila:test@tcp(127.0.0.1:3306)/?timeout=30s")
20+
}

mysql/type.go

+64
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
package mysql
2+
3+
import (
4+
"strconv"
5+
"strings"
6+
)
7+
8+
func ParseNumberValue(value string) (int64, bool) {
9+
value = strings.ToLower(value)
10+
11+
if value == "yes" || value == "on" {
12+
return 1, true
13+
}
14+
15+
if value == "no" || value == "off" {
16+
return 0, true
17+
}
18+
19+
if val, err := strconv.ParseInt(value, 10, 64); err == nil {
20+
return val, true
21+
}
22+
23+
return 0, false
24+
}
25+
26+
func ClearUser(u string) string {
27+
index := strings.Index(u, "[")
28+
if index > 0 {
29+
return u[0:index]
30+
}
31+
return u
32+
}
33+
34+
func MaximumValueSigned(dataType string) uint64 {
35+
switch dataType {
36+
case "tinyint":
37+
return 127
38+
case "smallint":
39+
return 32767
40+
case "mediumint":
41+
return 8388607
42+
case "int":
43+
return 2147483647
44+
case "bigint":
45+
return 9223372036854775807
46+
}
47+
return 0
48+
}
49+
50+
func MaximumValueUnsigned(dataType string) uint64 {
51+
switch dataType {
52+
case "tinyint":
53+
return 255
54+
case "smallint":
55+
return 65535
56+
case "mediumint":
57+
return 16777215
58+
case "int":
59+
return 4294967295
60+
case "bigint":
61+
return 18446744073709551615
62+
}
63+
return 0
64+
}

mysql/type_test.go

+62
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
package mysql_test
2+
3+
import (
4+
"testing"
5+
6+
"github.com/debeando/go-common/mysql"
7+
8+
"github.com/stretchr/testify/assert"
9+
)
10+
11+
func TestParseValue(t *testing.T) {
12+
var ok bool
13+
var value int64
14+
15+
value, ok = mysql.ParseNumberValue("yes")
16+
assert.True(t, ok)
17+
assert.Equal(t, value, int64(1))
18+
19+
value, ok = mysql.ParseNumberValue("Yes")
20+
assert.True(t, ok)
21+
assert.Equal(t, value, int64(1))
22+
23+
value, ok = mysql.ParseNumberValue("YES")
24+
assert.True(t, ok)
25+
assert.Equal(t, value, int64(1))
26+
27+
value, ok = mysql.ParseNumberValue("no")
28+
assert.True(t, ok)
29+
assert.Equal(t, value, int64(0))
30+
31+
value, ok = mysql.ParseNumberValue("No")
32+
assert.True(t, ok)
33+
assert.Equal(t, value, int64(0))
34+
35+
value, ok = mysql.ParseNumberValue("NO")
36+
assert.True(t, ok)
37+
assert.Equal(t, value, int64(0))
38+
39+
value, ok = mysql.ParseNumberValue("ON")
40+
assert.True(t, ok)
41+
assert.Equal(t, value, int64(1))
42+
43+
value, ok = mysql.ParseNumberValue("OFF")
44+
assert.True(t, ok)
45+
assert.Equal(t, value, int64(0))
46+
47+
value, ok = mysql.ParseNumberValue("true")
48+
assert.False(t, ok)
49+
assert.Equal(t, value, int64(0))
50+
51+
value, ok = mysql.ParseNumberValue("1234567890")
52+
assert.True(t, ok)
53+
assert.Equal(t, value, int64(1234567890))
54+
55+
}
56+
57+
func TestClearUser(t *testing.T) {
58+
user := "test[test] @ [127.0.0.1]"
59+
result := mysql.ClearUser(user)
60+
61+
assert.Equal(t, result, "test")
62+
}

0 commit comments

Comments
 (0)