Fix lint issues

Cleanup server test

Signed-off-by: Derek McGowan <derek@mcg.dev>
This commit is contained in:
Derek McGowan 2022-01-20 15:06:40 -08:00
parent 9858689671
commit f7a2e09ef8
10 changed files with 98 additions and 33 deletions

View File

@ -6,6 +6,10 @@ on:
pull_request: pull_request:
branches: [ main ] branches: [ main ]
permissions:
contents: read
pull-requests: read
jobs: jobs:
# #
# golangci-lint # golangci-lint
@ -18,19 +22,19 @@ jobs:
strategy: strategy:
matrix: matrix:
go-version: [1.17] go-version: [1.17]
os: [ubuntu-18.04, macos-10.15, windows-2019] os: [ubuntu-latest, macos-latest, windows-latest]
steps: steps:
- uses: actions/setup-go@v2
with:
go-version: ${{ matrix.go-version }}
- uses: actions/checkout@v2 - uses: actions/checkout@v2
- uses: golangci/golangci-lint-action@v2 - name: golangci-lint
uses: golangci/golangci-lint-action@v2
with: with:
version: v1.42.0 version: v1.43.0
args: --timeout=5m args: --timeout=5m
skip-go-installation: true only-new-issues: true
- name: golangci-lint errors
run: golangci-lint run
if: ${{ failure() }}
# #
# Project checks # Project checks

54
.golangci.yml Normal file
View File

@ -0,0 +1,54 @@
linters:
enable:
- structcheck
- varcheck
- staticcheck
- unconvert
- gofmt
- goimports
- revive
- ineffassign
- vet
- unused
- misspell
disable:
- errcheck
linters-settings:
revive:
ignore-generated-headers: true
rules:
- name: blank-imports
- name: context-as-argument
- name: context-keys-type
- name: dot-imports
- name: error-return
- name: error-strings
- name: error-naming
- name: exported
- name: if-return
- name: increment-decrement
- name: var-naming
arguments: [["UID", "GID"], []]
- name: var-declaration
- name: package-comments
- name: range
- name: receiver-naming
- name: time-naming
- name: unexported-return
- name: indent-error-flow
- name: errorf
- name: empty-block
- name: superfluous-else
- name: unused-parameter
- name: unreachable-code
- name: redefines-builtin-id
issues:
include:
- EXC0002
run:
timeout: 8m
skip-dirs:
- example

View File

@ -123,7 +123,7 @@ func (c *Client) Call(ctx context.Context, service, method string, req, resp int
} }
if dl, ok := ctx.Deadline(); ok { if dl, ok := ctx.Deadline(); ok {
creq.TimeoutNano = dl.Sub(time.Now()).Nanoseconds() creq.TimeoutNano = time.Until(dl).Nanoseconds()
} }
info := &UnaryClientInfo{ info := &UnaryClientInfo{

View File

@ -62,7 +62,7 @@ func TestUserOnCloseWait(t *testing.T) {
t.Fatalf("expected error %v, but got %v", context.DeadlineExceeded, err) t.Fatalf("expected error %v, but got %v", context.DeadlineExceeded, err)
} }
_ = <-dataCh <-dataCh
if err := client.UserOnCloseWait(ctx); err != nil { if err := client.UserOnCloseWait(ctx); err != nil {
t.Fatalf("expected error nil , but got %v", err) t.Fatalf("expected error nil , but got %v", err)

View File

@ -1,3 +1,4 @@
//go:build !linux
// +build !linux // +build !linux
/* /*

View File

@ -45,6 +45,6 @@ func (fn handshakerFunc) Handshake(ctx context.Context, conn net.Conn) (net.Conn
return fn(ctx, conn) return fn(ctx, conn)
} }
func noopHandshake(ctx context.Context, conn net.Conn) (net.Conn, interface{}, error) { func noopHandshake(_ context.Context, conn net.Conn) (net.Conn, interface{}, error) {
return conn, nil, nil return conn, nil, nil
} }

View File

@ -41,7 +41,7 @@ type UnaryServerInterceptor func(context.Context, Unmarshaler, *UnaryServerInfo,
// UnaryClientInterceptor specifies the interceptor function for client request/response // UnaryClientInterceptor specifies the interceptor function for client request/response
type UnaryClientInterceptor func(context.Context, *Request, *Response, *UnaryClientInfo, Invoker) error type UnaryClientInterceptor func(context.Context, *Request, *Response, *UnaryClientInfo, Invoker) error
func defaultServerInterceptor(ctx context.Context, unmarshal Unmarshaler, info *UnaryServerInfo, method Method) (interface{}, error) { func defaultServerInterceptor(ctx context.Context, unmarshal Unmarshaler, _ *UnaryServerInfo, method Method) (interface{}, error) {
return method(ctx, unmarshal) return method(ctx, unmarshal)
} }

View File

@ -123,16 +123,23 @@ func TestServer(t *testing.T) {
go server.Serve(ctx, listener) go server.Serve(ctx, listener)
defer server.Shutdown(ctx) defer server.Shutdown(ctx)
const calls = 2 testCases := []string{"bar", "baz"}
results := make(chan callResult, 2) results := make(chan callResult, len(testCases))
go roundTrip(ctx, t, tclient, "bar", results) for _, tc := range testCases {
go roundTrip(ctx, t, tclient, "baz", results) go func(expected string) {
results <- roundTrip(ctx, tclient, expected)
}(tc)
}
for i := 0; i < calls; i++ { for i := 0; i < len(testCases); {
result := <-results result := <-results
if !reflect.DeepEqual(result.received, result.expected) { if result.err != nil {
t.Fatalf("unexpected response: %+#v != %+#v", result.received, result.expected) t.Fatalf("(%s): %v", result.name, result.err)
} }
if !reflect.DeepEqual(result.received, result.expected) {
t.Fatalf("(%s): unexpected response: %+#v != %+#v", result.name, result.received, result.expected)
}
i++
} }
} }
@ -483,29 +490,34 @@ func checkServerShutdown(t *testing.T, server *Server) {
} }
type callResult struct { type callResult struct {
name string
err error
input *testPayload input *testPayload
expected *testPayload expected *testPayload
received *testPayload received *testPayload
} }
func roundTrip(ctx context.Context, t *testing.T, client *testingClient, value string, results chan callResult) { func roundTrip(ctx context.Context, client *testingClient, name string) callResult {
t.Helper()
var ( var (
tp = &testPayload{ tp = &testPayload{
Foo: "bar", Foo: name,
} }
) )
ctx = WithMetadata(ctx, MD{"foo": []string{"bar"}}) ctx = WithMetadata(ctx, MD{"foo": []string{name}})
resp, err := client.Test(ctx, tp) resp, err := client.Test(ctx, tp)
if err != nil { if err != nil {
t.Fatal(err) return callResult{
name: name,
err: err,
}
} }
results <- callResult{ return callResult{
name: name,
input: tp, input: tp,
expected: &testPayload{Foo: strings.Repeat(tp.Foo, 2), Metadata: "bar"}, expected: &testPayload{Foo: strings.Repeat(tp.Foo, 2), Metadata: name},
received: resp, received: resp,
} }
} }

View File

@ -51,8 +51,6 @@ func (r *StringList) Reset() { *r = StringList{} }
func (r *StringList) String() string { return fmt.Sprintf("%+#v", r) } func (r *StringList) String() string { return fmt.Sprintf("%+#v", r) }
func (r *StringList) ProtoMessage() {} func (r *StringList) ProtoMessage() {}
func makeStringList(item ...string) StringList { return StringList{List: item} }
type KeyValue struct { type KeyValue struct {
Key string `protobuf:"bytes,1,opt,name=key,proto3"` Key string `protobuf:"bytes,1,opt,name=key,proto3"`
Value string `protobuf:"bytes,2,opt,name=value,proto3"` Value string `protobuf:"bytes,2,opt,name=value,proto3"`

View File

@ -29,7 +29,7 @@ import (
type UnixCredentialsFunc func(*unix.Ucred) error type UnixCredentialsFunc func(*unix.Ucred) error
func (fn UnixCredentialsFunc) Handshake(ctx context.Context, conn net.Conn) (net.Conn, interface{}, error) { func (fn UnixCredentialsFunc) Handshake(_ context.Context, conn net.Conn) (net.Conn, interface{}, error) {
uc, err := requireUnixSocket(conn) uc, err := requireUnixSocket(conn)
if err != nil { if err != nil {
return nil, nil, fmt.Errorf("ttrpc.UnixCredentialsFunc: require unix socket: %w", err) return nil, nil, fmt.Errorf("ttrpc.UnixCredentialsFunc: require unix socket: %w", err)
@ -88,10 +88,6 @@ func UnixSocketRequireSameUser() UnixCredentialsFunc {
return UnixSocketRequireUidGid(euid, egid) return UnixSocketRequireUidGid(euid, egid)
} }
func requireRoot(ucred *unix.Ucred) error {
return requireUidGid(ucred, 0, 0)
}
func requireUidGid(ucred *unix.Ucred, uid, gid int) error { func requireUidGid(ucred *unix.Ucred, uid, gid int) error {
if (uid != -1 && uint32(uid) != ucred.Uid) || (gid != -1 && uint32(gid) != ucred.Gid) { if (uid != -1 && uint32(uid) != ucred.Uid) || (gid != -1 && uint32(gid) != ucred.Gid) {
return fmt.Errorf("ttrpc: invalid credentials: %v", syscall.EPERM) return fmt.Errorf("ttrpc: invalid credentials: %v", syscall.EPERM)