Merge pull request #19 from gitstashpop/backend-unexpected-eof
Extend handling of unexpected EOF to the backend
This commit is contained in:
+3
-3
@@ -67,7 +67,7 @@ func (b *Backend) ReceiveStartupMessage() (FrontendMessage, error) {
|
|||||||
|
|
||||||
buf, err = b.cr.Next(msgSize)
|
buf, err = b.cr.Next(msgSize)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, translateEOFtoErrUnexpectedEOF(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
code := binary.BigEndian.Uint32(buf)
|
code := binary.BigEndian.Uint32(buf)
|
||||||
@@ -107,7 +107,7 @@ func (b *Backend) Receive() (FrontendMessage, error) {
|
|||||||
if !b.partialMsg {
|
if !b.partialMsg {
|
||||||
header, err := b.cr.Next(5)
|
header, err := b.cr.Next(5)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, translateEOFtoErrUnexpectedEOF(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
b.msgType = header[0]
|
b.msgType = header[0]
|
||||||
@@ -161,7 +161,7 @@ func (b *Backend) Receive() (FrontendMessage, error) {
|
|||||||
|
|
||||||
msgBody, err := b.cr.Next(b.bodyLen)
|
msgBody, err := b.cr.Next(b.bodyLen)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, translateEOFtoErrUnexpectedEOF(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
b.partialMsg = false
|
b.partialMsg = false
|
||||||
|
|||||||
+22
-1
@@ -1,10 +1,12 @@
|
|||||||
package pgproto3_test
|
package pgproto3_test
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"io"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"github.com/jackc/pgio"
|
"github.com/jackc/pgio"
|
||||||
"github.com/jackc/pgproto3/v2"
|
"github.com/jackc/pgproto3/v2"
|
||||||
|
"github.com/stretchr/testify/assert"
|
||||||
"github.com/stretchr/testify/require"
|
"github.com/stretchr/testify/require"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -35,6 +37,26 @@ func TestBackendReceiveInterrupted(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestBackendReceiveUnexpectedEOF(t *testing.T) {
|
||||||
|
t.Parallel()
|
||||||
|
|
||||||
|
server := &interruptReader{}
|
||||||
|
server.push([]byte{'Q', 0, 0, 0, 6})
|
||||||
|
|
||||||
|
backend := pgproto3.NewBackend(pgproto3.NewChunkReader(server), nil)
|
||||||
|
|
||||||
|
// Receive regular msg
|
||||||
|
msg, err := backend.Receive()
|
||||||
|
assert.Nil(t, msg)
|
||||||
|
assert.Equal(t, io.ErrUnexpectedEOF, err)
|
||||||
|
|
||||||
|
// Receive FE msg
|
||||||
|
server.push([]byte{'F', 0, 0, 0, 6})
|
||||||
|
msg, err = backend.ReceiveStartupMessage()
|
||||||
|
assert.Nil(t, msg)
|
||||||
|
assert.Equal(t, io.ErrUnexpectedEOF, err)
|
||||||
|
}
|
||||||
|
|
||||||
func TestStartupMessage(t *testing.T) {
|
func TestStartupMessage(t *testing.T) {
|
||||||
t.Parallel()
|
t.Parallel()
|
||||||
|
|
||||||
@@ -93,5 +115,4 @@ func TestStartupMessage(t *testing.T) {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user