Skip to content
This repository has been archived by the owner on Jan 19, 2023. It is now read-only.

Commit

Permalink
Move StreamError to pkg/errors
Browse files Browse the repository at this point in the history
Allows library implementations of StreamClient and StreamClientFactory
to return fatal StreamErrors

Signed-off-by: Michael Stergianis <[email protected]>
  • Loading branch information
MichaelStergianis authored and wwitzel3 committed Jun 16, 2021
1 parent cfb4958 commit 8908404
Show file tree
Hide file tree
Showing 4 changed files with 107 additions and 24 deletions.
22 changes: 0 additions & 22 deletions internal/api/streaming_connection_errors.go

This file was deleted.

5 changes: 3 additions & 2 deletions internal/api/websocket_client.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import (
"time"

"github.com/vmware-tanzu/octant/internal/util/json"
"github.com/vmware-tanzu/octant/pkg/errors"

"github.com/vmware-tanzu/octant/pkg/event"

Expand Down Expand Up @@ -168,7 +169,7 @@ func (c *WebsocketClient) readPump() {
for {
request, err := c.Receive()
if err != nil {
if IsFatalStreamError(err) {
if errors.IsFatalStreamError(err) {
c.cancel()
break
}
Expand Down Expand Up @@ -293,7 +294,7 @@ func (c *WebsocketClient) Receive() (StreamRequest, error) {
) {
c.logger.WithErr(err).Errorf("Unhandled websocket error")
}
return StreamRequest{}, FatalStreamError(err)
return StreamRequest{}, errors.FatalStreamError(err)
}

var request StreamRequest
Expand Down
39 changes: 39 additions & 0 deletions pkg/errors/streaming_connection_error.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
package errors

import "github.com/vmware-tanzu/octant/internal/errors"

type StreamError struct {
*errors.GenericError
Fatal bool
}

func NewStreamError(err error) *StreamError {
return &StreamError{
errors.NewGenericError(err),
false,
}
}

func FatalStreamError(err error) *StreamError {
return &StreamError{
errors.NewGenericError(err),
true,
}
}

func IsFatalStreamError(err error) bool {
switch sErr := err.(type) {
case StreamError:
return sErr.Fatal
case *StreamError:
return sErr.Fatal
default:
return false
}
}

const StreamingConnectionError = "StreamingConnectionError"

func (s *StreamError) Name() string {
return StreamingConnectionError
}
65 changes: 65 additions & 0 deletions pkg/errors/streaming_connection_error_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
package errors

import (
"fmt"
"testing"

"github.com/stretchr/testify/assert"
)

func TestConstructors(t *testing.T) {
err := fmt.Errorf("encountered an error while streaming")
table := []struct {
name string
sErr *StreamError
fatal bool
}{
{"NewStreamError", NewStreamError(err), false},
{"FatalStreamError", FatalStreamError(err), true},
}

for _, test := range table {
t.Run(test.name, func(t *testing.T) {
assert.NotEmpty(t, test.sErr.Timestamp())
assert.Equal(t, test.sErr.Name(), StreamingConnectionError)
assert.NotZero(t, test.sErr.ID())
assert.Equal(t, test.fatal, test.sErr.Fatal)
assert.Equal(t, err.Error(), test.sErr.Error())
})
}
}

func TestIsFatalStreamError(t *testing.T) {
table := []struct {
name string
sErr error
expected bool
}{
{
"Expect IsFatalStreamError to be false for a standard stream error",
NewStreamError(fmt.Errorf("")),
false,
},
{
"Expect IsFatalStreamError to be true for fatal stream error",
FatalStreamError(fmt.Errorf("")),
true,
},
{
"A non pointer fatal stream error is provided",
*FatalStreamError(fmt.Errorf("")),
true,
},
{
"A generic error is provided",
fmt.Errorf(""),
false,
},
}

for _, test := range table {
t.Run(test.name, func(t *testing.T) {
assert.Equal(t, test.expected, IsFatalStreamError(test.sErr))
})
}
}

0 comments on commit 8908404

Please sign in to comment.