update golangci-lint

This commit is contained in:
aler9
2021-10-30 13:06:23 +02:00
parent 2e6926a97e
commit 653b3ee993
12 changed files with 147 additions and 264 deletions

View File

@@ -15,7 +15,7 @@ jobs:
- uses: golangci/golangci-lint-action@v2 - uses: golangci/golangci-lint-action@v2
with: with:
version: v1.38 version: v1.40
go-mod-tidy: go-mod-tidy:
runs-on: ubuntu-20.04 runs-on: ubuntu-20.04

View File

@@ -2,6 +2,7 @@
linters: linters:
enable: enable:
- bodyclose - bodyclose
- dupl
- exportloopref - exportloopref
- gochecknoinits - gochecknoinits
- gocritic - gocritic
@@ -12,6 +13,7 @@ linters:
- lll - lll
- prealloc - prealloc
- unconvert - unconvert
- whitespace
disable: disable:
- errcheck - errcheck

View File

@@ -1,6 +1,6 @@
BASE_IMAGE = amd64/golang:1.17-alpine3.13 BASE_IMAGE = amd64/golang:1.17-alpine3.13
LINT_IMAGE = golangci/golangci-lint:v1.38.0 LINT_IMAGE = golangci/golangci-lint:v1.40
.PHONY: $(shell ls) .PHONY: $(shell ls)
@@ -36,7 +36,7 @@ export DOCKERFILE_FORMAT
format: format:
echo "$$DOCKERFILE_FORMAT" | docker build -q . -f - -t temp echo "$$DOCKERFILE_FORMAT" | docker build -q . -f - -t temp
docker run --rm -it -v $(PWD):/s -w /s temp \ docker run --rm -it -v $(PWD):/s -w /s temp \
sh -c "find . -type f -name '*.go' | xargs gofumpt -l -w" sh -c "gofumpt -l -w ."
define DOCKERFILE_TEST define DOCKERFILE_TEST
FROM $(BASE_IMAGE) FROM $(BASE_IMAGE)

View File

@@ -83,7 +83,6 @@ func TestClientPublishSerial(t *testing.T) {
th.Protocol = headers.TransportProtocolUDP th.Protocol = headers.TransportProtocolUDP
th.ServerPorts = &[2]int{34556, 34557} th.ServerPorts = &[2]int{34556, 34557}
th.ClientPorts = inTH.ClientPorts th.ClientPorts = inTH.ClientPorts
} else { } else {
th.Protocol = headers.TransportProtocolTCP th.Protocol = headers.TransportProtocolTCP
th.InterleavedIDs = inTH.InterleavedIDs th.InterleavedIDs = inTH.InterleavedIDs
@@ -125,7 +124,6 @@ func TestClientPublishSerial(t *testing.T) {
n, _, err := l1.ReadFrom(buf) n, _, err := l1.ReadFrom(buf)
require.NoError(t, err) require.NoError(t, err)
require.Equal(t, []byte{0x01, 0x02, 0x03, 0x04}, buf[:n]) require.Equal(t, []byte{0x01, 0x02, 0x03, 0x04}, buf[:n])
} else { } else {
var f base.InterleavedFrame var f base.InterleavedFrame
f.Payload = make([]byte, 2048) f.Payload = make([]byte, 2048)
@@ -269,7 +267,6 @@ func TestClientPublishParallel(t *testing.T) {
th.Protocol = headers.TransportProtocolUDP th.Protocol = headers.TransportProtocolUDP
th.ServerPorts = &[2]int{34556, 34557} th.ServerPorts = &[2]int{34556, 34557}
th.ClientPorts = inTH.ClientPorts th.ClientPorts = inTH.ClientPorts
} else { } else {
th.Protocol = headers.TransportProtocolTCP th.Protocol = headers.TransportProtocolTCP
th.InterleavedIDs = inTH.InterleavedIDs th.InterleavedIDs = inTH.InterleavedIDs
@@ -409,7 +406,6 @@ func TestClientPublishPauseSerial(t *testing.T) {
th.Protocol = headers.TransportProtocolUDP th.Protocol = headers.TransportProtocolUDP
th.ServerPorts = &[2]int{34556, 34557} th.ServerPorts = &[2]int{34556, 34557}
th.ClientPorts = inTH.ClientPorts th.ClientPorts = inTH.ClientPorts
} else { } else {
th.Protocol = headers.TransportProtocolTCP th.Protocol = headers.TransportProtocolTCP
th.InterleavedIDs = inTH.InterleavedIDs th.InterleavedIDs = inTH.InterleavedIDs
@@ -565,7 +561,6 @@ func TestClientPublishPauseParallel(t *testing.T) {
th.Protocol = headers.TransportProtocolUDP th.Protocol = headers.TransportProtocolUDP
th.ServerPorts = &[2]int{34556, 34557} th.ServerPorts = &[2]int{34556, 34557}
th.ClientPorts = inTH.ClientPorts th.ClientPorts = inTH.ClientPorts
} else { } else {
th.Protocol = headers.TransportProtocolTCP th.Protocol = headers.TransportProtocolTCP
th.InterleavedIDs = inTH.InterleavedIDs th.InterleavedIDs = inTH.InterleavedIDs

View File

@@ -184,7 +184,6 @@ func TestClientRead(t *testing.T) {
require.NoError(t, err) require.NoError(t, err)
l = tls.NewListener(l, &tls.Config{Certificates: []tls.Certificate{cert}}) l = tls.NewListener(l, &tls.Config{Certificates: []tls.Certificate{cert}})
} else { } else {
scheme = "rtsp" scheme = "rtsp"
} }
@@ -1527,7 +1526,6 @@ func TestClientReadPause(t *testing.T) {
th.Protocol = headers.TransportProtocolUDP th.Protocol = headers.TransportProtocolUDP
th.ServerPorts = &[2]int{34556, 34557} th.ServerPorts = &[2]int{34556, 34557}
th.ClientPorts = inTH.ClientPorts th.ClientPorts = inTH.ClientPorts
} else { } else {
th.Protocol = headers.TransportProtocolTCP th.Protocol = headers.TransportProtocolTCP
th.InterleavedIDs = inTH.InterleavedIDs th.InterleavedIDs = inTH.InterleavedIDs
@@ -1894,7 +1892,6 @@ func TestClientReadErrorTimeout(t *testing.T) {
th.Protocol = headers.TransportProtocolUDP th.Protocol = headers.TransportProtocolUDP
th.ServerPorts = &[2]int{34556, 34557} th.ServerPorts = &[2]int{34556, 34557}
th.ClientPorts = inTH.ClientPorts th.ClientPorts = inTH.ClientPorts
} else { } else {
th.Protocol = headers.TransportProtocolTCP th.Protocol = headers.TransportProtocolTCP
th.InterleavedIDs = inTH.InterleavedIDs th.InterleavedIDs = inTH.InterleavedIDs

View File

@@ -571,7 +571,6 @@ func (cc *ClientConn) runBackgroundPlayUDP() error {
checkStreamInitial = false checkStreamInitial = false
checkStreamTicker.Stop() checkStreamTicker.Stop()
checkStreamTicker = time.NewTicker(clientConnCheckStreamPeriod) checkStreamTicker = time.NewTicker(clientConnCheckStreamPeriod)
} else { } else {
inTimeout := func() bool { inTimeout := func() bool {
now := time.Now() now := time.Now()
@@ -1024,7 +1023,6 @@ func (cc *ClientConn) doDescribe(u *base.URL) (Tracks, *base.URL, *base.Response
res.StatusCode >= base.StatusMovedPermanently && res.StatusCode >= base.StatusMovedPermanently &&
res.StatusCode <= base.StatusUseProxy && res.StatusCode <= base.StatusUseProxy &&
len(res.Header["Location"]) == 1 { len(res.Header["Location"]) == 1 {
cc.reset(false) cc.reset(false)
u, err := base.ParseURL(res.Header["Location"][0]) u, err := base.ParseURL(res.Header["Location"][0])
@@ -1303,7 +1301,6 @@ func (cc *ClientConn) doSetup(
if res.StatusCode == base.StatusUnsupportedTransport && if res.StatusCode == base.StatusUnsupportedTransport &&
cc.protocol == nil && cc.protocol == nil &&
cc.c.Transport == nil { cc.c.Transport == nil {
v := TransportTCP v := TransportTCP
cc.protocol = &v cc.protocol = &v

View File

@@ -65,7 +65,6 @@ func (t *RangeSMPTETime) read(s string) error {
return err return err
} }
t.Subframe = uint(tmp) t.Subframe = uint(tmp)
} else { } else {
tmp, err := strconv.ParseUint(parts[0], 10, 64) tmp, err := strconv.ParseUint(parts[0], 10, 64)
if err != nil { if err != nil {

View File

@@ -18,6 +18,44 @@ import (
"github.com/aler9/gortsplib/pkg/headers" "github.com/aler9/gortsplib/pkg/headers"
) )
func invalidURLAnnounceReq(t *testing.T, control string) base.Request {
return base.Request{
Method: base.Announce,
URL: mustParseURL("rtsp://localhost:8554/teststream"),
Header: base.Header{
"CSeq": base.HeaderValue{"1"},
"Content-Type": base.HeaderValue{"application/sdp"},
},
Body: func() []byte {
track, err := NewTrackH264(96, &TrackConfigH264{[]byte{0x01, 0x02, 0x03, 0x04}, []byte{0x01, 0x02, 0x03, 0x04}})
require.NoError(t, err)
track.Media.Attributes = append(track.Media.Attributes, psdp.Attribute{
Key: "control",
Value: control,
})
sout := &psdp.SessionDescription{
SessionName: psdp.SessionName("Stream"),
Origin: psdp.Origin{
Username: "-",
NetworkType: "IN",
AddressType: "IP4",
UnicastAddress: "127.0.0.1",
},
TimeDescriptions: []psdp.TimeDescription{
{Timing: psdp.Timing{0, 0}}, //nolint:govet
},
MediaDescriptions: []*psdp.MediaDescription{
track.Media,
},
}
byts, _ := sout.Marshal()
return byts
}(),
}
}
func TestServerPublishErrorAnnounce(t *testing.T) { func TestServerPublishErrorAnnounce(t *testing.T) {
for _, ca := range []struct { for _, ca := range []struct {
name string name string
@@ -92,119 +130,17 @@ func TestServerPublishErrorAnnounce(t *testing.T) {
}, },
{ {
"invalid URL 1", "invalid URL 1",
base.Request{ invalidURLAnnounceReq(t, "rtsp:// aaaaa"),
Method: base.Announce,
URL: mustParseURL("rtsp://localhost:8554/teststream"),
Header: base.Header{
"CSeq": base.HeaderValue{"1"},
"Content-Type": base.HeaderValue{"application/sdp"},
},
Body: func() []byte {
track, err := NewTrackH264(96, &TrackConfigH264{[]byte{0x01, 0x02, 0x03, 0x04}, []byte{0x01, 0x02, 0x03, 0x04}})
require.NoError(t, err)
track.Media.Attributes = append(track.Media.Attributes, psdp.Attribute{
Key: "control",
Value: "rtsp:// aaaaa",
})
sout := &psdp.SessionDescription{
SessionName: psdp.SessionName("Stream"),
Origin: psdp.Origin{
Username: "-",
NetworkType: "IN",
AddressType: "IP4",
UnicastAddress: "127.0.0.1",
},
TimeDescriptions: []psdp.TimeDescription{
{Timing: psdp.Timing{0, 0}}, //nolint:govet
},
MediaDescriptions: []*psdp.MediaDescription{
track.Media,
},
}
byts, _ := sout.Marshal()
return byts
}(),
},
"unable to generate track URL", "unable to generate track URL",
}, },
{ {
"invalid URL 2", "invalid URL 2",
base.Request{ invalidURLAnnounceReq(t, "rtsp://host"),
Method: base.Announce,
URL: mustParseURL("rtsp://localhost:8554/teststream"),
Header: base.Header{
"CSeq": base.HeaderValue{"1"},
"Content-Type": base.HeaderValue{"application/sdp"},
},
Body: func() []byte {
track, err := NewTrackH264(96, &TrackConfigH264{[]byte{0x01, 0x02, 0x03, 0x04}, []byte{0x01, 0x02, 0x03, 0x04}})
require.NoError(t, err)
track.Media.Attributes = append(track.Media.Attributes, psdp.Attribute{
Key: "control",
Value: "rtsp://host",
})
sout := &psdp.SessionDescription{
SessionName: psdp.SessionName("Stream"),
Origin: psdp.Origin{
Username: "-",
NetworkType: "IN",
AddressType: "IP4",
UnicastAddress: "127.0.0.1",
},
TimeDescriptions: []psdp.TimeDescription{
{Timing: psdp.Timing{0, 0}}, //nolint:govet
},
MediaDescriptions: []*psdp.MediaDescription{
track.Media,
},
}
byts, _ := sout.Marshal()
return byts
}(),
},
"invalid track URL (rtsp://localhost:8554)", "invalid track URL (rtsp://localhost:8554)",
}, },
{ {
"invalid URL 3", "invalid URL 3",
base.Request{ invalidURLAnnounceReq(t, "rtsp://host/otherpath"),
Method: base.Announce,
URL: mustParseURL("rtsp://localhost:8554/teststream"),
Header: base.Header{
"CSeq": base.HeaderValue{"1"},
"Content-Type": base.HeaderValue{"application/sdp"},
},
Body: func() []byte {
track, err := NewTrackH264(96, &TrackConfigH264{[]byte{0x01, 0x02, 0x03, 0x04}, []byte{0x01, 0x02, 0x03, 0x04}})
require.NoError(t, err)
track.Media.Attributes = append(track.Media.Attributes, psdp.Attribute{
Key: "control",
Value: "rtsp://host/otherpath",
})
sout := &psdp.SessionDescription{
SessionName: psdp.SessionName("Stream"),
Origin: psdp.Origin{
Username: "-",
NetworkType: "IN",
AddressType: "IP4",
UnicastAddress: "127.0.0.1",
},
TimeDescriptions: []psdp.TimeDescription{
{Timing: psdp.Timing{0, 0}}, //nolint:govet
},
MediaDescriptions: []*psdp.MediaDescription{
track.Media,
},
}
byts, _ := sout.Marshal()
return byts
}(),
},
"invalid track path: must begin with 'teststream', but is 'otherpath'", "invalid track path: must begin with 'teststream', but is 'otherpath'",
}, },
} { } {
@@ -847,7 +783,6 @@ func TestServerPublish(t *testing.T) {
IP: net.ParseIP("127.0.0.1"), IP: net.ParseIP("127.0.0.1"),
Port: th.ServerPorts[1], Port: th.ServerPorts[1],
}) })
} else { } else {
err = base.InterleavedFrame{ err = base.InterleavedFrame{
Channel: 0, Channel: 0,
@@ -873,7 +808,6 @@ func TestServerPublish(t *testing.T) {
n, _, err := l2.ReadFrom(buf) n, _, err := l2.ReadFrom(buf)
require.NoError(t, err) require.NoError(t, err)
require.Equal(t, []byte{0x09, 0x0A, 0x0B, 0x0C}, buf[:n]) require.Equal(t, []byte{0x09, 0x0A, 0x0B, 0x0C}, buf[:n])
} else { } else {
var f base.InterleavedFrame var f base.InterleavedFrame
f.Payload = make([]byte, 2048) f.Payload = make([]byte, 2048)

View File

@@ -142,7 +142,9 @@ func TestServerReadSetupPath(t *testing.T) {
} }
} }
func TestServerReadErrorSetupDifferentPaths(t *testing.T) { func TestServerReadSetupErrors(t *testing.T) {
for _, ca := range []string{"different paths", "double setup"} {
t.Run(ca, func(t *testing.T) {
connClosed := make(chan struct{}) connClosed := make(chan struct{})
track, err := NewTrackH264(96, &TrackConfigH264{[]byte{0x01, 0x02, 0x03, 0x04}, []byte{0x01, 0x02, 0x03, 0x04}}) track, err := NewTrackH264(96, &TrackConfigH264{[]byte{0x01, 0x02, 0x03, 0x04}, []byte{0x01, 0x02, 0x03, 0x04}})
@@ -153,7 +155,11 @@ func TestServerReadErrorSetupDifferentPaths(t *testing.T) {
s := &Server{ s := &Server{
Handler: &testServerHandler{ Handler: &testServerHandler{
onConnClose: func(ctx *ServerHandlerOnConnCloseCtx) { onConnClose: func(ctx *ServerHandlerOnConnCloseCtx) {
if ca == "different paths" {
require.Equal(t, "can't setup tracks with different paths", ctx.Error.Error()) require.Equal(t, "can't setup tracks with different paths", ctx.Error.Error())
} else {
require.Equal(t, "track 0 has already been setup", ctx.Error.Error())
}
close(connClosed) close(connClosed)
}, },
onSetup: func(ctx *ServerHandlerOnSetupCtx) (*base.Response, *ServerStream, error) { onSetup: func(ctx *ServerHandlerOnSetupCtx) (*base.Response, *ServerStream, error) {
@@ -186,6 +192,7 @@ func TestServerReadErrorSetupDifferentPaths(t *testing.T) {
InterleavedIDs: &[2]int{0, 1}, InterleavedIDs: &[2]int{0, 1},
} }
if ca == "different paths" {
res, err := writeReqReadRes(bconn, base.Request{ res, err := writeReqReadRes(bconn, base.Request{
Method: base.Setup, Method: base.Setup,
URL: mustParseURL("rtsp://localhost:8554/teststream/trackID=0"), URL: mustParseURL("rtsp://localhost:8554/teststream/trackID=0"),
@@ -210,54 +217,7 @@ func TestServerReadErrorSetupDifferentPaths(t *testing.T) {
}) })
require.NoError(t, err) require.NoError(t, err)
require.Equal(t, base.StatusBadRequest, res.StatusCode) require.Equal(t, base.StatusBadRequest, res.StatusCode)
} else {
<-connClosed
}
func TestServerReadErrorSetupTrackTwice(t *testing.T) {
connClosed := make(chan struct{})
track, err := NewTrackH264(96, &TrackConfigH264{[]byte{0x01, 0x02, 0x03, 0x04}, []byte{0x01, 0x02, 0x03, 0x04}})
require.NoError(t, err)
stream := NewServerStream(Tracks{track})
s := &Server{
Handler: &testServerHandler{
onConnClose: func(ctx *ServerHandlerOnConnCloseCtx) {
require.Equal(t, "track 0 has already been setup", ctx.Error.Error())
close(connClosed)
},
onSetup: func(ctx *ServerHandlerOnSetupCtx) (*base.Response, *ServerStream, error) {
return &base.Response{
StatusCode: base.StatusOK,
}, stream, nil
},
},
}
err = s.Start("localhost:8554")
require.NoError(t, err)
defer s.Close()
conn, err := net.Dial("tcp", "localhost:8554")
require.NoError(t, err)
defer conn.Close()
bconn := bufio.NewReadWriter(bufio.NewReader(conn), bufio.NewWriter(conn))
th := &headers.Transport{
Protocol: headers.TransportProtocolTCP,
Delivery: func() *headers.TransportDelivery {
v := headers.TransportDeliveryUnicast
return &v
}(),
Mode: func() *headers.TransportMode {
v := headers.TransportModePlay
return &v
}(),
InterleavedIDs: &[2]int{0, 1},
}
res, err := writeReqReadRes(bconn, base.Request{ res, err := writeReqReadRes(bconn, base.Request{
Method: base.Setup, Method: base.Setup,
URL: mustParseURL("rtsp://localhost:8554/teststream/trackID=0"), URL: mustParseURL("rtsp://localhost:8554/teststream/trackID=0"),
@@ -282,8 +242,11 @@ func TestServerReadErrorSetupTrackTwice(t *testing.T) {
}) })
require.NoError(t, err) require.NoError(t, err)
require.Equal(t, base.StatusBadRequest, res.StatusCode) require.Equal(t, base.StatusBadRequest, res.StatusCode)
}
<-connClosed <-connClosed
})
}
} }
func TestServerRead(t *testing.T) { func TestServerRead(t *testing.T) {

View File

@@ -409,7 +409,6 @@ func TestServerHighLevelPublishRead(t *testing.T) {
cert, err := tls.X509KeyPair(serverCert, serverKey) cert, err := tls.X509KeyPair(serverCert, serverKey)
require.NoError(t, err) require.NoError(t, err)
s.TLSConfig = &tls.Config{Certificates: []tls.Certificate{cert}} s.TLSConfig = &tls.Config{Certificates: []tls.Certificate{cert}}
} else { } else {
proto = "rtsp" proto = "rtsp"
s.UDPRTPAddress = "127.0.0.1:8000" s.UDPRTPAddress = "127.0.0.1:8000"

View File

@@ -191,7 +191,6 @@ func (sc *ServerConn) run() {
return liberrors.ErrServerTerminated{} return liberrors.ErrServerTerminated{}
} }
} }
} else { } else {
err := req.Read(sc.br) err := req.Read(sc.br)
if err != nil { if err != nil {
@@ -522,7 +521,6 @@ func (sc *ServerConn) handleRequestOuter(req *base.Request) error {
// start background write // start background write
sc.tcpFrameBackgroundWriteDone = make(chan struct{}) sc.tcpFrameBackgroundWriteDone = make(chan struct{})
go sc.tcpFrameBackgroundWrite() go sc.tcpFrameBackgroundWrite()
} else { } else {
if sc.tcpFrameIsRecording { if sc.tcpFrameIsRecording {
sc.tcpFrameTimeout = false sc.tcpFrameTimeout = false

View File

@@ -294,7 +294,6 @@ func (ss *ServerSession) run() {
if (ss.state != ServerSessionStatePublish && if (ss.state != ServerSessionStatePublish &&
ss.state != ServerSessionStateRead) || ss.state != ServerSessionStateRead) ||
*ss.setuppedTransport == TransportTCP { *ss.setuppedTransport == TransportTCP {
// close if there are no associated connections // close if there are no associated connections
if len(ss.conns) == 0 { if len(ss.conns) == 0 {
return liberrors.ErrServerSessionNoAssociatedConns{} return liberrors.ErrServerSessionNoAssociatedConns{}