github.com/bingoohuang/gg@v0.0.0-20240325092523-45da7dee9335/pkg/dsn/dsn_test.go (about)

     1  package dsn_test
     2  
     3  import (
     4  	"testing"
     5  
     6  	"github.com/bingoohuang/gg/pkg/dsn"
     7  	"github.com/stretchr/testify/assert"
     8  )
     9  
    10  func TestParseFlag(t *testing.T) {
    11  	data := []struct {
    12  		Input string
    13  		Flag  dsn.Flag
    14  		Fail  bool
    15  	}{
    16  		{Input: "user:pass@host", Flag: dsn.Flag{Username: "user", Password: "pass", Host: "host", Port: 0, Database: ""}},
    17  		{Input: "user@host", Flag: dsn.Flag{Username: "user", Password: "", Host: "host", Port: 0, Database: ""}},
    18  		{Input: "user/pass@host:3306", Flag: dsn.Flag{Username: "user", Password: "pass", Host: "host", Port: 3306, Database: ""}},
    19  		{Input: "user/pass@host:3306/", Flag: dsn.Flag{Username: "user", Password: "pass", Host: "host", Port: 3306, Database: ""}},
    20  		{Input: "user/pass@host:3306/mydb", Flag: dsn.Flag{Username: "user", Password: "pass", Host: "host", Port: 3306, Database: "mydb"}},
    21  		{Input: "user:pass@host", Flag: dsn.Flag{Username: "user", Password: "pass", Host: "host", Port: 0, Database: ""}},
    22  		{Input: "user:pass@host:3306/mydb", Flag: dsn.Flag{Username: "user", Password: "pass", Host: "host", Port: 3306, Database: "mydb"}},
    23  		{Input: "user:p1:x2@y3@host:3306/mydb", Flag: dsn.Flag{Username: "user", Password: "p1:x2@y3", Host: "host", Port: 3306, Database: "mydb"}},
    24  
    25  		{Input: "user/pass", Flag: dsn.Flag{}, Fail: true},
    26  		{Input: "user/pass@", Flag: dsn.Flag{}, Fail: true},
    27  		{Input: "user/pass@host:badport", Flag: dsn.Flag{}, Fail: true},
    28  	}
    29  
    30  	for _, dat := range data {
    31  		f, err := dsn.ParseFlag(dat.Input)
    32  		assert.Equal(t, err != nil, dat.Fail)
    33  		if err == nil {
    34  			assert.Equal(t, *f, dat.Flag)
    35  		}
    36  	}
    37  }