-
Notifications
You must be signed in to change notification settings - Fork 16
Commit
Signed-off-by: PennyYoon <[email protected]>
- Loading branch information
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1 +1,52 @@ | ||
package opengemini | ||
|
||
import ( | ||
"crypto/tls" | ||
) | ||
|
||
var _, _ = NewClient(&Config{}) | ||
|
||
type Client interface { | ||
WriteBatchPoints(points BatchPoints) | ||
Check failure on line 10 in opengemini/client.go GitHub Actions / lint
|
||
WritePoint(point Point) | ||
Check failure on line 11 in opengemini/client.go GitHub Actions / lint
|
||
WriteLineProtocol(data, database, retentionPolicy, precision string) | ||
Query() | ||
Client() | ||
} | ||
|
||
type Config struct { | ||
AddressList []*Address | ||
AuthConfig *AuthConfig | ||
BatchConfig *BatchConfig | ||
GzipEnabled bool | ||
TlsConfig *tls.Config | ||
} | ||
|
||
type Address struct { | ||
Host string | ||
Port int | ||
} | ||
|
||
type AuthType int | ||
|
||
const ( | ||
Password AuthType = iota | ||
Token | ||
) | ||
|
||
type AuthConfig struct { | ||
AuthType AuthType | ||
UserName string | ||
Password string | ||
Token string | ||
} | ||
|
||
type BatchConfig struct { | ||
BatchEnabled bool | ||
BatchInterval int | ||
BatchSize int | ||
} | ||
|
||
func NewClient(config *Config) (Client, error) { | ||
return newClient(config) | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,60 @@ | ||
package opengemini | ||
|
||
import "errors" | ||
|
||
type client struct { | ||
config *Config | ||
} | ||
|
||
func newClient(c *Config) (Client, error) { | ||
if len(c.AddressList) == 0 { | ||
return nil, errors.New("must have at least one address") | ||
} | ||
if c.AuthConfig.AuthType == Token && len(c.AuthConfig.Token) == 0 { | ||
return nil, errors.New("invalid auth config cause empty token") | ||
} | ||
if c.AuthConfig.AuthType == Password { | ||
if len(c.AuthConfig.UserName) == 0 { | ||
return nil, errors.New("invalid auth config cause empty username") | ||
} | ||
if len(c.AuthConfig.Password) == 0 { | ||
return nil, errors.New("invalid auth config cause empty password") | ||
} | ||
} | ||
if c.BatchConfig.BatchEnabled { | ||
if c.BatchConfig.BatchInterval <= 0 { | ||
return nil, errors.New("batch interval must be more than 0 , if batch operate enable") | ||
} | ||
if c.BatchConfig.BatchSize <= 0 { | ||
return nil, errors.New("batch size must be more than 0 , if batch operate enable") | ||
} | ||
} | ||
client := &client{ | ||
config: c, | ||
} | ||
return client, nil | ||
} | ||
|
||
func (c *client) WriteBatchPoints(points BatchPoints) { | ||
Check failure on line 38 in opengemini/client_impl.go GitHub Actions / lint
|
||
//TODO implement me | ||
panic("implement me") | ||
} | ||
func (c *client) WritePoint(point Point) { | ||
Check failure on line 42 in opengemini/client_impl.go GitHub Actions / lint
|
||
//TODO implement me | ||
panic("implement me") | ||
} | ||
|
||
func (c *client) WriteLineProtocol(data, database, retentionPolicy, precision string) { | ||
//TODO implement me | ||
panic("implement me") | ||
} | ||
|
||
func (c *client) Query() { | ||
//TODO implement me | ||
panic("implement me") | ||
} | ||
|
||
func (c *client) Client() { | ||
//TODO implement me | ||
panic("implement me") | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,93 @@ | ||
package opengemini | ||
|
||
import ( | ||
"errors" | ||
"reflect" | ||
"testing" | ||
) | ||
|
||
func TestNewClient(t *testing.T) { | ||
tests := map[string]struct { | ||
config *Config | ||
client *Client | ||
err error | ||
}{ | ||
"EmptyAddress": { | ||
config: &Config{}, | ||
client: nil, | ||
err: errors.New("must have at least one address"), | ||
}, | ||
"EmptyToken": { | ||
config: &Config{ | ||
Addresses: []*Address{{Host: "127.0.0.1", Port: 8086}}, | ||
Check failure on line 22 in opengemini/client_test.go GitHub Actions / lint
|
||
AuthConfig: &AuthConfig{ | ||
AuthType: Token, | ||
}, | ||
}, | ||
client: nil, | ||
err: errors.New("invalid auth config cause empty token"), | ||
}, | ||
"EmptyPassword": { | ||
config: &Config{ | ||
Addresses: []*Address{{Host: "127.0.0.1", Port: 8086}}, | ||
Check failure on line 32 in opengemini/client_test.go GitHub Actions / lint
|
||
AuthConfig: &AuthConfig{ | ||
AuthType: Password, | ||
}, | ||
}, | ||
client: nil, | ||
err: errors.New("invalid auth config cause empty username or password"), | ||
}, | ||
"InvalidBatchConfig": { | ||
config: &Config{ | ||
Addresses: []*Address{{Host: "127.0.0.1", Port: 8086}}, | ||
Check failure on line 42 in opengemini/client_test.go GitHub Actions / lint
|
||
AuthConfig: &AuthConfig{ | ||
AuthType: Password, | ||
UserName: "TestUser", | ||
Password: "TestPassword", | ||
}, | ||
BatchConfig: &BatchConfig{ | ||
BatchEnable: true, | ||
Check failure on line 49 in opengemini/client_test.go GitHub Actions / lint
|
||
BatchSize: 10, | ||
BatchInterval: -1, | ||
}, | ||
}, | ||
client: nil, | ||
err: errors.New("batch interval and batch size must be more than 0 ,if batch operate enable"), | ||
}, | ||
"NewClientSuccess": { | ||
config: &Config{ | ||
Addresses: []*Address{{Host: "127.0.0.1", Port: 8086}}, | ||
Check failure on line 59 in opengemini/client_test.go GitHub Actions / lint
|
||
AuthConfig: &AuthConfig{ | ||
AuthType: Password, | ||
UserName: "TestUser", | ||
Password: "TestPassword", | ||
}, | ||
BatchConfig: &BatchConfig{ | ||
BatchEnable: true, | ||
BatchSize: 10, | ||
BatchInterval: 1, | ||
}, | ||
}, | ||
client: &Client{ | ||
addresses: []*Address{{Host: "127.0.0.1", Port: 8086}}, | ||
authConfig: &AuthConfig{ | ||
AuthType: Password, | ||
UserName: "TestUser", | ||
Password: "TestPassword", | ||
}, | ||
batchConfig: &BatchConfig{ | ||
BatchEnable: true, | ||
BatchSize: 10, | ||
BatchInterval: 1, | ||
}, | ||
}, | ||
}, | ||
} | ||
for caseName, tt := range tests { | ||
c, err := NewClient(tt.config) | ||
if !reflect.DeepEqual(c, tt.client) || !reflect.DeepEqual(tt.err, err) { | ||
t.Logf("case @%s not pass test", caseName) | ||
} | ||
} | ||
|
||
} |