mirror of https://github.com/dapr/go-sdk.git
Report SDK version to Dapr as User-Agent (#328)
* Report SDK version to Dapr
Signed-off-by: ItalyPaleAle <43508+ItalyPaleAle@users.noreply.github.com>
* Fixed typos
Signed-off-by: ItalyPaleAle <43508+ItalyPaleAle@users.noreply.github.com>
* Fixes
Signed-off-by: ItalyPaleAle <43508+ItalyPaleAle@users.noreply.github.com>
* 💄
Signed-off-by: ItalyPaleAle <43508+ItalyPaleAle@users.noreply.github.com>
* Making the linter happy-maybe
Signed-off-by: ItalyPaleAle <43508+ItalyPaleAle@users.noreply.github.com>
* Update linter to support go:embed comments
Signed-off-by: ItalyPaleAle <43508+ItalyPaleAle@users.noreply.github.com>
Signed-off-by: ItalyPaleAle <43508+ItalyPaleAle@users.noreply.github.com>
This commit is contained in:
parent
014b4d6836
commit
718044ad12
|
|
@ -20,6 +20,14 @@ jobs:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v2
|
uses: actions/checkout@v2
|
||||||
|
|
||||||
|
- name: Check sdk-version file
|
||||||
|
run: |
|
||||||
|
if [[ "$(head -n1 version/sdk-version)" != "${{ github.ref }}" ]]; then
|
||||||
|
echo "File version/sdk-version needs to be updated to ${{ github.ref }}"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
shell: bash
|
||||||
|
|
||||||
- name: Tidy
|
- name: Tidy
|
||||||
run: |
|
run: |
|
||||||
go mod tidy -compat=1.17
|
go mod tidy -compat=1.17
|
||||||
|
|
@ -39,7 +47,7 @@ jobs:
|
||||||
with:
|
with:
|
||||||
tag_name: ${{ github.ref }}
|
tag_name: ${{ github.ref }}
|
||||||
release_name: Release ${{ github.ref }}
|
release_name: Release ${{ github.ref }}
|
||||||
body: Automatic go Dapr client release
|
body: Automatic Go Dapr client release
|
||||||
draft: false
|
draft: false
|
||||||
prerelease: false
|
prerelease: false
|
||||||
|
|
||||||
|
|
@ -49,5 +57,5 @@ jobs:
|
||||||
severity: info
|
severity: info
|
||||||
details: Release ${{ github.ref }} published
|
details: Release ${{ github.ref }} published
|
||||||
description: Release
|
description: Release
|
||||||
webhookUrl: ${{ secrets.DISCORD_WEBHOOK }}
|
webhookUrl: ${{ secrets.DISCORD_WEBHOOK }}
|
||||||
avatarUrl: https://github.githubassets.com/images/modules/logos_page/Octocat.png
|
avatarUrl: https://github.githubassets.com/images/modules/logos_page/Octocat.png
|
||||||
|
|
|
||||||
|
|
@ -13,7 +13,7 @@ jobs:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
env:
|
env:
|
||||||
GOVER: 1.17
|
GOVER: 1.17
|
||||||
GOLANGCILINT_VER: v1.31
|
GOLANGCILINT_VER: v1.48.0
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -244,9 +244,28 @@ linters:
|
||||||
- goerr113
|
- goerr113
|
||||||
- nestif
|
- nestif
|
||||||
- nlreturn
|
- nlreturn
|
||||||
|
- tagliatelle
|
||||||
|
- ifshort
|
||||||
|
- forbidigo
|
||||||
- exhaustive
|
- exhaustive
|
||||||
|
- contextcheck
|
||||||
|
- exhaustruct
|
||||||
|
- exhaustivestruct
|
||||||
|
- wrapcheck
|
||||||
|
- predeclared
|
||||||
|
- varnamelen
|
||||||
|
- ireturn
|
||||||
- noctx
|
- noctx
|
||||||
|
- forcetypeassert
|
||||||
|
- cyclop
|
||||||
|
- errchkjson
|
||||||
|
- godot
|
||||||
- gci
|
- gci
|
||||||
|
- paralleltest
|
||||||
|
- nonamedreturns
|
||||||
|
- nosnakecase
|
||||||
|
- nilnil
|
||||||
|
- staticcheck
|
||||||
issues:
|
issues:
|
||||||
exclude-rules:
|
exclude-rules:
|
||||||
- path: .*_test.go
|
- path: .*_test.go
|
||||||
|
|
|
||||||
|
|
@ -25,6 +25,7 @@ import (
|
||||||
|
|
||||||
"github.com/dapr/go-sdk/actor"
|
"github.com/dapr/go-sdk/actor"
|
||||||
"github.com/dapr/go-sdk/actor/config"
|
"github.com/dapr/go-sdk/actor/config"
|
||||||
|
"github.com/dapr/go-sdk/version"
|
||||||
|
|
||||||
"github.com/pkg/errors"
|
"github.com/pkg/errors"
|
||||||
"google.golang.org/grpc"
|
"google.golang.org/grpc"
|
||||||
|
|
@ -39,13 +40,13 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
daprPortDefault = "50001"
|
daprPortDefault = "50001"
|
||||||
daprPortEnvVarName = "DAPR_GRPC_PORT" /* #nosec */
|
daprPortEnvVarName = "DAPR_GRPC_PORT" /* #nosec */
|
||||||
traceparentKey = "traceparent"
|
traceparentKey = "traceparent"
|
||||||
apiTokenKey = "dapr-api-token" /* #nosec */
|
apiTokenKey = "dapr-api-token" /* #nosec */
|
||||||
apiTokenEnvVarName = "DAPR_API_TOKEN" /* #nosec */
|
apiTokenEnvVarName = "DAPR_API_TOKEN" /* #nosec */
|
||||||
clientDefaultTimoutSeconds = 5
|
clientDefaultTimeoutSeconds = 5
|
||||||
clientTimoutSecondsEnvVarName = "DAPR_CLIENT_TIMEOUT_SECONDS"
|
clientTimeoutSecondsEnvVarName = "DAPR_CLIENT_TIMEOUT_SECONDS"
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
|
|
@ -222,7 +223,7 @@ func NewClientWithPort(port string) (client Client, err error) {
|
||||||
// NewClientWithAddress instantiates Dapr using specific address (including port).
|
// NewClientWithAddress instantiates Dapr using specific address (including port).
|
||||||
func NewClientWithAddress(address string) (client Client, err error) {
|
func NewClientWithAddress(address string) (client Client, err error) {
|
||||||
if address == "" {
|
if address == "" {
|
||||||
return nil, errors.New("nil address")
|
return nil, errors.New("empty address")
|
||||||
}
|
}
|
||||||
logger.Printf("dapr client initializing for: %s", address)
|
logger.Printf("dapr client initializing for: %s", address)
|
||||||
|
|
||||||
|
|
@ -230,28 +231,29 @@ func NewClientWithAddress(address string) (client Client, err error) {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
ctx, ctxCancel := context.WithTimeout(context.Background(), time.Duration(timeoutSeconds)*time.Second)
|
ctx, cancel := context.WithTimeout(context.Background(), time.Duration(timeoutSeconds)*time.Second)
|
||||||
conn, err := grpc.DialContext(
|
conn, err := grpc.DialContext(
|
||||||
ctx,
|
ctx,
|
||||||
address,
|
address,
|
||||||
grpc.WithTransportCredentials(insecure.NewCredentials()),
|
grpc.WithTransportCredentials(insecure.NewCredentials()),
|
||||||
|
grpc.WithUserAgent("dapr-sdk-go/"+version.SDKVersion),
|
||||||
grpc.WithBlock(),
|
grpc.WithBlock(),
|
||||||
)
|
)
|
||||||
|
cancel()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
ctxCancel()
|
return nil, fmt.Errorf("error creating connection to '%s': %w", address, err)
|
||||||
return nil, errors.Wrapf(err, "error creating connection to '%s': %v", address, err)
|
|
||||||
}
|
}
|
||||||
if hasToken := os.Getenv(apiTokenEnvVarName); hasToken != "" {
|
if hasToken := os.Getenv(apiTokenEnvVarName); hasToken != "" {
|
||||||
logger.Println("client uses API token")
|
logger.Println("client uses API token")
|
||||||
}
|
}
|
||||||
|
|
||||||
return newClientWithConnectionAndCancelFunc(conn, ctxCancel), nil
|
return NewClientWithConnection(conn), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func getClientTimeoutSeconds() (int, error) {
|
func getClientTimeoutSeconds() (int, error) {
|
||||||
timeoutStr := os.Getenv(clientTimoutSecondsEnvVarName)
|
timeoutStr := os.Getenv(clientTimeoutSecondsEnvVarName)
|
||||||
if len(timeoutStr) == 0 {
|
if len(timeoutStr) == 0 {
|
||||||
return clientDefaultTimoutSeconds, nil
|
return clientDefaultTimeoutSeconds, nil
|
||||||
}
|
}
|
||||||
timeoutVar, err := strconv.Atoi(timeoutStr)
|
timeoutVar, err := strconv.Atoi(timeoutStr)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
@ -269,10 +271,14 @@ func NewClientWithSocket(socket string) (client Client, err error) {
|
||||||
return nil, errors.New("nil socket")
|
return nil, errors.New("nil socket")
|
||||||
}
|
}
|
||||||
logger.Printf("dapr client initializing for: %s", socket)
|
logger.Printf("dapr client initializing for: %s", socket)
|
||||||
addr := fmt.Sprintf("unix://%s", socket)
|
addr := "unix://" + socket
|
||||||
conn, err := grpc.Dial(addr, grpc.WithTransportCredentials(insecure.NewCredentials()))
|
conn, err := grpc.Dial(
|
||||||
|
addr,
|
||||||
|
grpc.WithTransportCredentials(insecure.NewCredentials()),
|
||||||
|
grpc.WithUserAgent("dapr-sdk-go/"+version.SDKVersion),
|
||||||
|
)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errors.Wrapf(err, "error creating connection to '%s': %v", addr, err)
|
return nil, fmt.Errorf("error creating connection to '%s': %w", addr, err)
|
||||||
}
|
}
|
||||||
if hasToken := os.Getenv(apiTokenEnvVarName); hasToken != "" {
|
if hasToken := os.Getenv(apiTokenEnvVarName); hasToken != "" {
|
||||||
logger.Println("client uses API token")
|
logger.Println("client uses API token")
|
||||||
|
|
@ -282,32 +288,22 @@ func NewClientWithSocket(socket string) (client Client, err error) {
|
||||||
|
|
||||||
// NewClientWithConnection instantiates Dapr client using specific connection.
|
// NewClientWithConnection instantiates Dapr client using specific connection.
|
||||||
func NewClientWithConnection(conn *grpc.ClientConn) Client {
|
func NewClientWithConnection(conn *grpc.ClientConn) Client {
|
||||||
return newClientWithConnectionAndCancelFunc(conn, func() {})
|
|
||||||
}
|
|
||||||
|
|
||||||
func newClientWithConnectionAndCancelFunc(
|
|
||||||
conn *grpc.ClientConn,
|
|
||||||
cancelFunc context.CancelFunc,
|
|
||||||
) Client {
|
|
||||||
return &GRPCClient{
|
return &GRPCClient{
|
||||||
connection: conn,
|
connection: conn,
|
||||||
ctxCancelFunc: cancelFunc,
|
protoClient: pb.NewDaprClient(conn),
|
||||||
protoClient: pb.NewDaprClient(conn),
|
authToken: os.Getenv(apiTokenEnvVarName),
|
||||||
authToken: os.Getenv(apiTokenEnvVarName),
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// GRPCClient is the gRPC implementation of Dapr client.
|
// GRPCClient is the gRPC implementation of Dapr client.
|
||||||
type GRPCClient struct {
|
type GRPCClient struct {
|
||||||
connection *grpc.ClientConn
|
connection *grpc.ClientConn
|
||||||
ctxCancelFunc context.CancelFunc
|
protoClient pb.DaprClient
|
||||||
protoClient pb.DaprClient
|
authToken string
|
||||||
authToken string
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Close cleans up all resources created by the client.
|
// Close cleans up all resources created by the client.
|
||||||
func (c *GRPCClient) Close() {
|
func (c *GRPCClient) Close() {
|
||||||
c.ctxCancelFunc()
|
|
||||||
if c.connection != nil {
|
if c.connection != nil {
|
||||||
c.connection.Close()
|
c.connection.Close()
|
||||||
c.connection = nil
|
c.connection = nil
|
||||||
|
|
|
||||||
|
|
@ -27,6 +27,7 @@ import (
|
||||||
"github.com/google/uuid"
|
"github.com/google/uuid"
|
||||||
"github.com/pkg/errors"
|
"github.com/pkg/errors"
|
||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
|
"github.com/stretchr/testify/require"
|
||||||
"google.golang.org/grpc"
|
"google.golang.org/grpc"
|
||||||
"google.golang.org/grpc/credentials/insecure"
|
"google.golang.org/grpc/credentials/insecure"
|
||||||
"google.golang.org/grpc/test/bufconn"
|
"google.golang.org/grpc/test/bufconn"
|
||||||
|
|
@ -85,7 +86,7 @@ func TestNewClient(t *testing.T) {
|
||||||
t.Run("new client closed with token", func(t *testing.T) {
|
t.Run("new client closed with token", func(t *testing.T) {
|
||||||
t.Setenv(apiTokenEnvVarName, "test")
|
t.Setenv(apiTokenEnvVarName, "test")
|
||||||
c, err := NewClientWithSocket(testSocket)
|
c, err := NewClientWithSocket(testSocket)
|
||||||
assert.NoError(t, err)
|
require.NoError(t, err)
|
||||||
defer c.Close()
|
defer c.Close()
|
||||||
c.WithAuthToken("")
|
c.WithAuthToken("")
|
||||||
})
|
})
|
||||||
|
|
@ -101,21 +102,21 @@ func TestNewClient(t *testing.T) {
|
||||||
t.Run("new socket client closed with token", func(t *testing.T) {
|
t.Run("new socket client closed with token", func(t *testing.T) {
|
||||||
t.Setenv(apiTokenEnvVarName, "test")
|
t.Setenv(apiTokenEnvVarName, "test")
|
||||||
c, err := NewClientWithSocket(testSocket)
|
c, err := NewClientWithSocket(testSocket)
|
||||||
assert.NoError(t, err)
|
require.NoError(t, err)
|
||||||
defer c.Close()
|
defer c.Close()
|
||||||
c.WithAuthToken("")
|
c.WithAuthToken("")
|
||||||
})
|
})
|
||||||
|
|
||||||
t.Run("new socket client closed with empty token", func(t *testing.T) {
|
t.Run("new socket client closed with empty token", func(t *testing.T) {
|
||||||
c, err := NewClientWithSocket(testSocket)
|
c, err := NewClientWithSocket(testSocket)
|
||||||
assert.NoError(t, err)
|
require.NoError(t, err)
|
||||||
defer c.Close()
|
defer c.Close()
|
||||||
c.WithAuthToken("")
|
c.WithAuthToken("")
|
||||||
})
|
})
|
||||||
|
|
||||||
t.Run("new socket client with trace ID", func(t *testing.T) {
|
t.Run("new socket client with trace ID", func(t *testing.T) {
|
||||||
c, err := NewClientWithSocket(testSocket)
|
c, err := NewClientWithSocket(testSocket)
|
||||||
assert.NoError(t, err)
|
require.NoError(t, err)
|
||||||
defer c.Close()
|
defer c.Close()
|
||||||
ctx := c.WithTraceID(context.Background(), "")
|
ctx := c.WithTraceID(context.Background(), "")
|
||||||
_ = c.WithTraceID(ctx, "test")
|
_ = c.WithTraceID(ctx, "test")
|
||||||
|
|
@ -197,33 +198,33 @@ func getTestClientWithSocket(ctx context.Context) (client Client, closer func())
|
||||||
|
|
||||||
func Test_getClientTimeoutSeconds(t *testing.T) {
|
func Test_getClientTimeoutSeconds(t *testing.T) {
|
||||||
t.Run("empty env var", func(t *testing.T) {
|
t.Run("empty env var", func(t *testing.T) {
|
||||||
os.Setenv(clientTimoutSecondsEnvVarName, "")
|
t.Setenv(clientTimeoutSecondsEnvVarName, "")
|
||||||
got, err := getClientTimeoutSeconds()
|
got, err := getClientTimeoutSeconds()
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
assert.Equal(t, clientDefaultTimoutSeconds, got)
|
assert.Equal(t, clientDefaultTimeoutSeconds, got)
|
||||||
})
|
})
|
||||||
|
|
||||||
t.Run("invalid env var", func(t *testing.T) {
|
t.Run("invalid env var", func(t *testing.T) {
|
||||||
os.Setenv(clientTimoutSecondsEnvVarName, "invalid")
|
t.Setenv(clientTimeoutSecondsEnvVarName, "invalid")
|
||||||
_, err := getClientTimeoutSeconds()
|
_, err := getClientTimeoutSeconds()
|
||||||
assert.Error(t, err)
|
assert.Error(t, err)
|
||||||
})
|
})
|
||||||
|
|
||||||
t.Run("normal env var", func(t *testing.T) {
|
t.Run("normal env var", func(t *testing.T) {
|
||||||
os.Setenv(clientTimoutSecondsEnvVarName, "7")
|
t.Setenv(clientTimeoutSecondsEnvVarName, "7")
|
||||||
got, err := getClientTimeoutSeconds()
|
got, err := getClientTimeoutSeconds()
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
assert.Equal(t, 7, got)
|
assert.Equal(t, 7, got)
|
||||||
})
|
})
|
||||||
|
|
||||||
t.Run("zero env var", func(t *testing.T) {
|
t.Run("zero env var", func(t *testing.T) {
|
||||||
os.Setenv(clientTimoutSecondsEnvVarName, "0")
|
t.Setenv(clientTimeoutSecondsEnvVarName, "0")
|
||||||
_, err := getClientTimeoutSeconds()
|
_, err := getClientTimeoutSeconds()
|
||||||
assert.Error(t, err)
|
assert.Error(t, err)
|
||||||
})
|
})
|
||||||
|
|
||||||
t.Run("negative env var", func(t *testing.T) {
|
t.Run("negative env var", func(t *testing.T) {
|
||||||
os.Setenv(clientTimoutSecondsEnvVarName, "-3")
|
t.Setenv(clientTimeoutSecondsEnvVarName, "-3")
|
||||||
_, err := getClientTimeoutSeconds()
|
_, err := getClientTimeoutSeconds()
|
||||||
assert.Error(t, err)
|
assert.Error(t, err)
|
||||||
})
|
})
|
||||||
|
|
|
||||||
|
|
@ -83,8 +83,8 @@ func (c *GRPCClient) SubscribeConfigurationItems(ctx context.Context, storeName
|
||||||
go func() {
|
go func() {
|
||||||
for {
|
for {
|
||||||
rsp, err := client.Recv()
|
rsp, err := client.Recv()
|
||||||
if err == io.EOF || rsp == nil {
|
if errors.Is(err, io.EOF) || rsp == nil {
|
||||||
// receive goroutine would close if unsubscribe is called
|
// receive goroutine would close if unsubscribe is called.
|
||||||
fmt.Println("dapr configuration subscribe finished.")
|
fmt.Println("dapr configuration subscribe finished.")
|
||||||
close(stopCh)
|
close(stopCh)
|
||||||
break
|
break
|
||||||
|
|
|
||||||
|
|
@ -70,7 +70,6 @@ func TestUnSubscribeConfigurationItems(t *testing.T) {
|
||||||
counter := atomic.Int32{}
|
counter := atomic.Int32{}
|
||||||
totalCounter := atomic.Int32{}
|
totalCounter := atomic.Int32{}
|
||||||
t.Run("Test unsubscribe configuration items", func(t *testing.T) {
|
t.Run("Test unsubscribe configuration items", func(t *testing.T) {
|
||||||
subscribeID := ""
|
|
||||||
subscribeIDChan := make(chan string)
|
subscribeIDChan := make(chan string)
|
||||||
go func() {
|
go func() {
|
||||||
keys := []string{"mykey1", "mykey2", "mykey3"}
|
keys := []string{"mykey1", "mykey2", "mykey3"}
|
||||||
|
|
@ -88,7 +87,7 @@ func TestUnSubscribeConfigurationItems(t *testing.T) {
|
||||||
})
|
})
|
||||||
assert.Nil(t, err)
|
assert.Nil(t, err)
|
||||||
}()
|
}()
|
||||||
subscribeID = <-subscribeIDChan
|
subscribeID := <-subscribeIDChan
|
||||||
time.Sleep(time.Second * 2)
|
time.Sleep(time.Second * 2)
|
||||||
time.Sleep(time.Millisecond * 500)
|
time.Sleep(time.Millisecond * 500)
|
||||||
err := testClient.UnsubscribeConfigurationItems(ctx, "example-config", subscribeID)
|
err := testClient.UnsubscribeConfigurationItems(ctx, "example-config", subscribeID)
|
||||||
|
|
|
||||||
|
|
@ -55,7 +55,7 @@ func TestInvokeErrors(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestInvokeWithToken(t *testing.T) {
|
func TestInvokeWithToken(t *testing.T) {
|
||||||
_ = os.Setenv(cc.AppAPITokenEnvVar, "app-dapr-token")
|
t.Setenv(cc.AppAPITokenEnvVar, "app-dapr-token")
|
||||||
server := getTestServer()
|
server := getTestServer()
|
||||||
startTestServer(server)
|
startTestServer(server)
|
||||||
methodName := "test"
|
methodName := "test"
|
||||||
|
|
|
||||||
|
|
@ -49,6 +49,8 @@ func startTestServer(server *Server) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func stopTestServer(t *testing.T, server *Server) {
|
func stopTestServer(t *testing.T, server *Server) {
|
||||||
|
t.Helper()
|
||||||
|
|
||||||
assert.NotNil(t, server)
|
assert.NotNil(t, server)
|
||||||
err := server.Stop()
|
err := server.Stop()
|
||||||
assert.Nilf(t, err, "error stopping server")
|
assert.Nilf(t, err, "error stopping server")
|
||||||
|
|
|
||||||
|
|
@ -39,7 +39,7 @@ func TestInvocationHandlerWithoutHandler(t *testing.T) {
|
||||||
|
|
||||||
func TestInvocationHandlerWithToken(t *testing.T) {
|
func TestInvocationHandlerWithToken(t *testing.T) {
|
||||||
data := `{"name": "test", "data": hello}`
|
data := `{"name": "test", "data": hello}`
|
||||||
_ = os.Setenv(common.AppAPITokenEnvVar, "app-dapr-token")
|
t.Setenv(common.AppAPITokenEnvVar, "app-dapr-token")
|
||||||
s := newServer("", nil)
|
s := newServer("", nil)
|
||||||
err := s.AddServiceInvocationHandler("/hello", func(ctx context.Context, in *common.InvocationEvent) (out *common.Content, err error) {
|
err := s.AddServiceInvocationHandler("/hello", func(ctx context.Context, in *common.InvocationEvent) (out *common.Content, err error) {
|
||||||
if in == nil || in.Data == nil || in.ContentType == "" {
|
if in == nil || in.Data == nil || in.ContentType == "" {
|
||||||
|
|
|
||||||
|
|
@ -44,7 +44,7 @@ func newServer(address string, router *mux.Router) *Server {
|
||||||
}
|
}
|
||||||
return &Server{
|
return &Server{
|
||||||
address: address,
|
address: address,
|
||||||
httpServer: &http.Server{
|
httpServer: &http.Server{ //nolint:gosec
|
||||||
Addr: address,
|
Addr: address,
|
||||||
Handler: router,
|
Handler: router,
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -14,6 +14,7 @@ limitations under the License.
|
||||||
package http
|
package http
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"errors"
|
||||||
"io"
|
"io"
|
||||||
"net/http"
|
"net/http"
|
||||||
"net/http/httptest"
|
"net/http/httptest"
|
||||||
|
|
@ -35,7 +36,7 @@ func TestStoppingStartedService(t *testing.T) {
|
||||||
assert.NotNil(t, s)
|
assert.NotNil(t, s)
|
||||||
|
|
||||||
go func() {
|
go func() {
|
||||||
if err := s.Start(); err != nil && err != http.ErrServerClosed {
|
if err := s.Start(); err != nil && !errors.Is(err, http.ErrServerClosed) {
|
||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
|
|
@ -70,6 +71,8 @@ func TestSettingOptions(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func testRequest(t *testing.T, s *Server, r *http.Request, expectedStatusCode int) {
|
func testRequest(t *testing.T, s *Server, r *http.Request, expectedStatusCode int) {
|
||||||
|
t.Helper()
|
||||||
|
|
||||||
rr := httptest.NewRecorder()
|
rr := httptest.NewRecorder()
|
||||||
s.mux.ServeHTTP(rr, r)
|
s.mux.ServeHTTP(rr, r)
|
||||||
resp := rr.Result()
|
resp := rr.Result()
|
||||||
|
|
@ -79,6 +82,8 @@ func testRequest(t *testing.T, s *Server, r *http.Request, expectedStatusCode in
|
||||||
}
|
}
|
||||||
|
|
||||||
func testRequestWithResponseBody(t *testing.T, s *Server, r *http.Request, expectedStatusCode int, expectedBody []byte) {
|
func testRequestWithResponseBody(t *testing.T, s *Server, r *http.Request, expectedStatusCode int, expectedBody []byte) {
|
||||||
|
t.Helper()
|
||||||
|
|
||||||
rr := httptest.NewRecorder()
|
rr := httptest.NewRecorder()
|
||||||
s.mux.ServeHTTP(rr, r)
|
s.mux.ServeHTTP(rr, r)
|
||||||
rez := rr.Result()
|
rez := rr.Result()
|
||||||
|
|
|
||||||
|
|
@ -334,18 +334,24 @@ func TestActorHandler(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func makeRequest(t *testing.T, s *Server, route, data, method string, expectedStatusCode int) {
|
func makeRequest(t *testing.T, s *Server, route, data, method string, expectedStatusCode int) {
|
||||||
|
t.Helper()
|
||||||
|
|
||||||
req, err := http.NewRequest(method, route, strings.NewReader(data))
|
req, err := http.NewRequest(method, route, strings.NewReader(data))
|
||||||
assert.NoErrorf(t, err, "error creating request: %s", data)
|
assert.NoErrorf(t, err, "error creating request: %s", data)
|
||||||
testRequest(t, s, req, expectedStatusCode)
|
testRequest(t, s, req, expectedStatusCode)
|
||||||
}
|
}
|
||||||
|
|
||||||
func makeRequestWithExpectedBody(t *testing.T, s *Server, route, data, method string, expectedStatusCode int, expectedBody []byte) {
|
func makeRequestWithExpectedBody(t *testing.T, s *Server, route, data, method string, expectedStatusCode int, expectedBody []byte) {
|
||||||
|
t.Helper()
|
||||||
|
|
||||||
req, err := http.NewRequest(method, route, strings.NewReader(data))
|
req, err := http.NewRequest(method, route, strings.NewReader(data))
|
||||||
assert.NoErrorf(t, err, "error creating request: %s", data)
|
assert.NoErrorf(t, err, "error creating request: %s", data)
|
||||||
testRequestWithResponseBody(t, s, req, expectedStatusCode, expectedBody)
|
testRequestWithResponseBody(t, s, req, expectedStatusCode, expectedBody)
|
||||||
}
|
}
|
||||||
|
|
||||||
func makeEventRequest(t *testing.T, s *Server, route, data string, expectedStatusCode int) {
|
func makeEventRequest(t *testing.T, s *Server, route, data string, expectedStatusCode int) {
|
||||||
|
t.Helper()
|
||||||
|
|
||||||
req, err := http.NewRequest(http.MethodPost, route, strings.NewReader(data))
|
req, err := http.NewRequest(http.MethodPost, route, strings.NewReader(data))
|
||||||
assert.NoErrorf(t, err, "error creating request: %s", data)
|
assert.NoErrorf(t, err, "error creating request: %s", data)
|
||||||
req.Header.Set("Content-Type", "application/json")
|
req.Header.Set("Content-Type", "application/json")
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
v1.6.0
|
||||||
|
|
@ -0,0 +1,11 @@
|
||||||
|
package version
|
||||||
|
|
||||||
|
import (
|
||||||
|
// Required for go:embed.
|
||||||
|
_ "embed"
|
||||||
|
)
|
||||||
|
|
||||||
|
// SDKVersion contains the version of the SDK.
|
||||||
|
//
|
||||||
|
//go:embed sdk-version
|
||||||
|
var SDKVersion string
|
||||||
Loading…
Reference in New Issue