Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 11 additions & 6 deletions agent/session.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import (
"golang.org/x/net/context"
"google.golang.org/grpc"
"google.golang.org/grpc/codes"
"google.golang.org/grpc/status"
)

var (
Expand Down Expand Up @@ -188,7 +189,8 @@ func (s *session) heartbeat(ctx context.Context) error {
cancel()
if err != nil {
log.G(ctx).WithFields(fields).WithError(err).Errorf("heartbeat to manager %v failed", s.conn.Peer())
if grpc.Code(err) == codes.NotFound {
st, _ := status.FromError(err)
if st.Code() == codes.NotFound {
err = errNodeNotRegistered
}

Expand Down Expand Up @@ -245,7 +247,8 @@ func (s *session) logSubscriptions(ctx context.Context) error {

for {
resp, err := subscriptions.Recv()
if grpc.Code(err) == codes.Unimplemented {
st, _ := status.FromError(err)
if st.Code() == codes.Unimplemented {
log.Warning("manager does not support log subscriptions")
// Don't return, because returning would bounce the session
select {
Expand Down Expand Up @@ -296,7 +299,8 @@ func (s *session) watch(ctx context.Context) error {
// If we get a code = 12 desc = unknown method Assignments, try to use tasks
resp, err = assignmentWatch.Recv()
if err != nil {
if grpc.Code(err) != codes.Unimplemented {
st, _ := status.FromError(err)
if st.Code() != codes.Unimplemented {
return err
}
tasksFallback = true
Expand Down Expand Up @@ -355,20 +359,21 @@ func (s *session) watch(ctx context.Context) error {
}

// sendTaskStatus uses the current session to send the status of a single task.
func (s *session) sendTaskStatus(ctx context.Context, taskID string, status *api.TaskStatus) error {
func (s *session) sendTaskStatus(ctx context.Context, taskID string, taskStatus *api.TaskStatus) error {
client := api.NewDispatcherClient(s.conn.ClientConn)
if _, err := client.UpdateTaskStatus(ctx, &api.UpdateTaskStatusRequest{
SessionID: s.sessionID,
Updates: []*api.UpdateTaskStatusRequest_TaskStatusUpdate{
{
TaskID: taskID,
Status: status,
Status: taskStatus,
},
},
}); err != nil {
// TODO(stevvooe): Dispatcher should not return this error. Status
// reports for unknown tasks should be ignored.
if grpc.Code(err) == codes.NotFound {
st, _ := status.FromError(err)
if st.Code() == codes.NotFound {
return errTaskUnknown
}

Expand Down
7 changes: 5 additions & 2 deletions ca/certificates.go
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ import (
"google.golang.org/grpc"
"google.golang.org/grpc/codes"
"google.golang.org/grpc/credentials"
"google.golang.org/grpc/status"
)

const (
Expand Down Expand Up @@ -352,7 +353,8 @@ func (rca *RootCA) getKEKUpdate(ctx context.Context, leafCert *x509.Certificate,
defer cancel()
response, err := client.GetUnlockKey(ctx, &api.GetUnlockKeyRequest{})
if err != nil {
if grpc.Code(err) == codes.Unimplemented { // if the server does not support keks, return as if no encryption key was specified
s, _ := status.FromError(err)
if s.Code() == codes.Unimplemented { // if the server does not support keks, return as if no encryption key was specified
conn.Close(true)
return &KEKData{}, nil
}
Expand Down Expand Up @@ -838,8 +840,9 @@ func GetRemoteSignedCertificate(ctx context.Context, csr []byte, rootCAPool *x50
stateCtx, cancel := context.WithTimeout(ctx, timeout)
defer cancel()
statusResponse, err := caClient.NodeCertificateStatus(stateCtx, statusRequest)
s, _ := status.FromError(err)
switch {
case err != nil && grpc.Code(err) != codes.DeadlineExceeded:
case err != nil && s.Code() != codes.DeadlineExceeded:
conn.Close(false)
// Because IssueNodeCertificate succeeded, if this call failed likely it is due to an issue with this
// particular connection, so we need to get another. We should try a remote connection - the local node
Expand Down
4 changes: 3 additions & 1 deletion ca/certificates_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ import (
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"golang.org/x/net/context"
"google.golang.org/grpc/status"
)

func init() {
Expand Down Expand Up @@ -760,7 +761,8 @@ func TestGetRemoteSignedCertificateWithPending(t *testing.T) {
// error - it should have returned after 1 second, but add some more for rudge time.
select {
case err = <-completed:
require.Equal(t, grpc.Code(err), codes.DeadlineExceeded)
s, _ := status.FromError(err)
require.Equal(t, s.Code(), codes.DeadlineExceeded)
case <-time.After(3 * time.Second):
require.FailNow(t, "GetRemoteSignedCertificate should have been canceled after 1 second, and it has been 3")
}
Expand Down
5 changes: 2 additions & 3 deletions ca/server_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,6 @@ import (
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"golang.org/x/net/context"
"google.golang.org/grpc"
"google.golang.org/grpc/codes"
)

Expand All @@ -48,7 +47,7 @@ func TestRestartRootCA(t *testing.T) {

_, err := tc.NodeCAClients[0].NodeCertificateStatus(tc.Context, &api.NodeCertificateStatusRequest{NodeID: "foo"})
assert.Error(t, err)
assert.Equal(t, codes.NotFound, grpc.Code(err))
assert.Equal(t, codes.NotFound, testutils.ErrorCode(err))

tc.CAServer.Stop()
go tc.CAServer.Run(tc.Context)
Expand All @@ -57,7 +56,7 @@ func TestRestartRootCA(t *testing.T) {

_, err = tc.NodeCAClients[0].NodeCertificateStatus(tc.Context, &api.NodeCertificateStatusRequest{NodeID: "foo"})
assert.Error(t, err)
assert.Equal(t, codes.NotFound, grpc.Code(err))
assert.Equal(t, codes.NotFound, testutils.ErrorCode(err))
}

func TestIssueNodeCertificate(t *testing.T) {
Expand Down
8 changes: 4 additions & 4 deletions cmd/swarmctl/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,15 +13,15 @@ import (
"github.com/docker/swarmkit/cmd/swarmd/defaults"
"github.com/docker/swarmkit/version"
"github.com/spf13/cobra"
"google.golang.org/grpc"
"google.golang.org/grpc/codes"
"google.golang.org/grpc/status"
)

func main() {
if c, err := mainCmd.ExecuteC(); err != nil {
c.Println("Error:", grpc.ErrorDesc(err))
s, _ := status.FromError(err)
c.Println("Error:", s.Message())
// if it's not a grpc, we assume it's a user error and we display the usage.
if grpc.Code(err) == codes.Unknown {
if _, ok := status.FromError(err); !ok {
c.Println(c.UsageString())
}

Expand Down
2 changes: 1 addition & 1 deletion integration/cluster.go
Original file line number Diff line number Diff line change
Expand Up @@ -322,7 +322,7 @@ func (c *testCluster) SetNodeRole(id string, role api.NodeRole) error {
}); err != nil {
// there possible problems on calling update node because redirecting
// node or leader might want to shut down
if grpc.ErrorDesc(err) == "update out of sequence" {
if testutils.ErrorDesc(err) == "update out of sequence" {
continue
}
return err
Expand Down
10 changes: 5 additions & 5 deletions manager/controlapi/ca_rotation_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,21 +3,20 @@ package controlapi
import (
"context"
"crypto/x509"
"encoding/pem"
"io/ioutil"
"os"
"testing"
"time"

"encoding/pem"

"github.com/cloudflare/cfssl/helpers"
"github.com/cloudflare/cfssl/initca"
"github.com/docker/swarmkit/api"
"github.com/docker/swarmkit/ca"
"github.com/docker/swarmkit/ca/testutils"
"github.com/stretchr/testify/require"
"google.golang.org/grpc"
"google.golang.org/grpc/codes"
"google.golang.org/grpc/status"
)

type rootCARotationTestCase struct {
Expand Down Expand Up @@ -309,8 +308,9 @@ func TestValidateCAConfigInvalidValues(t *testing.T) {
secConfig := getSecurityConfig(t, &localRootCA, cluster)
_, err := validateCAConfig(context.Background(), secConfig, cluster)
require.Error(t, err, invalid.expectErrorString)
require.Equal(t, codes.InvalidArgument, grpc.Code(err), invalid.expectErrorString)
require.Contains(t, grpc.ErrorDesc(err), invalid.expectErrorString)
s, _ := status.FromError(err)
require.Equal(t, codes.InvalidArgument, s.Code(), invalid.expectErrorString)
require.Contains(t, s.Message(), invalid.expectErrorString)
}
}

Expand Down
18 changes: 9 additions & 9 deletions manager/controlapi/cluster_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,11 @@ import (
"github.com/docker/swarmkit/ca/testutils"
"github.com/docker/swarmkit/manager/state/store"
"github.com/docker/swarmkit/protobuf/ptypes"
grpcutils "github.com/docker/swarmkit/testutils"
gogotypes "github.com/gogo/protobuf/types"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"golang.org/x/net/context"
"google.golang.org/grpc"
"google.golang.org/grpc/codes"
)

Expand Down Expand Up @@ -113,7 +113,7 @@ func TestValidateClusterSpec(t *testing.T) {
} {
err := validateClusterSpec(bad.spec)
assert.Error(t, err)
assert.Equal(t, bad.c, grpc.Code(err))
assert.Equal(t, bad.c, grpcutils.ErrorCode(err))
}

for _, good := range []*api.ClusterSpec{
Expand All @@ -130,11 +130,11 @@ func TestGetCluster(t *testing.T) {
defer ts.Stop()
_, err := ts.Client.GetCluster(context.Background(), &api.GetClusterRequest{})
assert.Error(t, err)
assert.Equal(t, codes.InvalidArgument, grpc.Code(err))
assert.Equal(t, codes.InvalidArgument, grpcutils.ErrorCode(err))

_, err = ts.Client.GetCluster(context.Background(), &api.GetClusterRequest{ClusterID: "invalid"})
assert.Error(t, err)
assert.Equal(t, codes.NotFound, grpc.Code(err))
assert.Equal(t, codes.NotFound, grpcutils.ErrorCode(err))

cluster := createCluster(t, ts, "name", "name", api.AcceptancePolicy{}, ts.Server.securityConfig.RootCA())
r, err := ts.Client.GetCluster(context.Background(), &api.GetClusterRequest{ClusterID: cluster.ID})
Expand All @@ -156,11 +156,11 @@ func TestGetClusterWithSecret(t *testing.T) {
defer ts.Stop()
_, err := ts.Client.GetCluster(context.Background(), &api.GetClusterRequest{})
assert.Error(t, err)
assert.Equal(t, codes.InvalidArgument, grpc.Code(err))
assert.Equal(t, codes.InvalidArgument, grpcutils.ErrorCode(err))

_, err = ts.Client.GetCluster(context.Background(), &api.GetClusterRequest{ClusterID: "invalid"})
assert.Error(t, err)
assert.Equal(t, codes.NotFound, grpc.Code(err))
assert.Equal(t, codes.NotFound, grpcutils.ErrorCode(err))

policy := api.AcceptancePolicy{Policies: []*api.AcceptancePolicy_RoleAdmissionPolicy{{Secret: &api.AcceptancePolicy_RoleAdmissionPolicy_Secret{Data: []byte("secret")}}}}
cluster := createCluster(t, ts, "name", "name", policy, ts.Server.securityConfig.RootCA())
Expand All @@ -180,16 +180,16 @@ func TestUpdateCluster(t *testing.T) {

_, err := ts.Client.UpdateCluster(context.Background(), &api.UpdateClusterRequest{})
assert.Error(t, err)
assert.Equal(t, codes.InvalidArgument, grpc.Code(err))
assert.Equal(t, codes.InvalidArgument, grpcutils.ErrorCode(err))

_, err = ts.Client.UpdateCluster(context.Background(), &api.UpdateClusterRequest{ClusterID: "invalid", Spec: &cluster.Spec, ClusterVersion: &api.Version{}})
assert.Error(t, err)
assert.Equal(t, codes.NotFound, grpc.Code(err))
assert.Equal(t, codes.NotFound, grpcutils.ErrorCode(err))

// No update options.
_, err = ts.Client.UpdateCluster(context.Background(), &api.UpdateClusterRequest{ClusterID: cluster.ID, Spec: &cluster.Spec})
assert.Error(t, err)
assert.Equal(t, codes.InvalidArgument, grpc.Code(err))
assert.Equal(t, codes.InvalidArgument, grpcutils.ErrorCode(err))

_, err = ts.Client.UpdateCluster(context.Background(), &api.UpdateClusterRequest{ClusterID: cluster.ID, Spec: &cluster.Spec, ClusterVersion: &cluster.Meta.Version})
assert.NoError(t, err)
Expand Down
4 changes: 2 additions & 2 deletions manager/controlapi/common_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,15 +4,15 @@ import (
"testing"

"github.com/docker/swarmkit/api"
"github.com/docker/swarmkit/testutils"
"github.com/stretchr/testify/assert"
"google.golang.org/grpc"
"google.golang.org/grpc/codes"
)

func TestValidateAnnotations(t *testing.T) {
err := validateAnnotations(api.Annotations{})
assert.Error(t, err)
assert.Equal(t, codes.InvalidArgument, grpc.Code(err))
assert.Equal(t, codes.InvalidArgument, testutils.ErrorCode(err))

for _, good := range []api.Annotations{
{Name: "name"},
Expand Down
Loading