2022-11-07 12:16:37 +01:00

50 lines
1.5 KiB
Go

// Copyright (c) 2022 Gitpod GmbH. All rights reserved.
// Licensed under the GNU Affero General Public License (AGPL).
// See License-AGPL.txt in the project root for license information.
package proxy
import (
"errors"
"fmt"
"testing"
"github.com/bufbuild/connect-go"
"github.com/stretchr/testify/require"
)
func TestConvertError(t *testing.T) {
scenarios := []struct {
WebsocketError error
ExpectedStatus connect.Code
}{
{
WebsocketError: errors.New("reconnecting-ws: bad handshake: code 401 - URL: wss://main.preview.gitpod-dev.com/api/v1 - headers: map[Authorization:[Bearer foo] Origin:[http://main.preview.gitpod-dev.com/]]"),
ExpectedStatus: connect.CodePermissionDenied,
},
{
WebsocketError: errors.New("jsonrpc2: code -32603 message: Request getWorkspace failed with message: No workspace with id 'some-id' found."),
ExpectedStatus: connect.CodeInternal,
},
{
WebsocketError: errors.New("code 400"),
ExpectedStatus: connect.CodeInvalidArgument,
},
{
WebsocketError: errors.New("code 409"),
ExpectedStatus: connect.CodeAlreadyExists,
},
{
WebsocketError: errors.New("code 470"),
ExpectedStatus: connect.CodePermissionDenied,
},
}
for _, s := range scenarios {
converted := ConvertError(s.WebsocketError)
require.Equal(t, s.ExpectedStatus, connect.CodeOf(converted))
// the error message should remain the same
require.Equal(t, fmt.Errorf("%s: %w", s.ExpectedStatus.String(), s.WebsocketError).Error(), converted.Error())
}
}