Skip to content

Commit

Permalink
chore: make linters happy
Browse files Browse the repository at this point in the history
  • Loading branch information
dunglas committed Dec 4, 2023
1 parent f133704 commit e931aca
Show file tree
Hide file tree
Showing 22 changed files with 253 additions and 241 deletions.
1 change: 1 addition & 0 deletions .golangci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -44,3 +44,4 @@ issues:
- godox
- noctx
- wrapcheck
- goconst
3 changes: 2 additions & 1 deletion authorization.go
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ type role int

const (
defaultCookieName = "mercureAuthorization"
bearerPrefix = "Bearer "
roleSubscriber role = iota
rolePublisher
)
Expand All @@ -54,7 +55,7 @@ var (
func authorize(r *http.Request, jwtConfig *jwtConfig, publishOrigins []string, cookieName string) (*claims, error) {
authorizationHeaders, headerExists := r.Header["Authorization"]
if headerExists {
if len(authorizationHeaders) != 1 || len(authorizationHeaders[0]) < 48 || authorizationHeaders[0][:7] != "Bearer " {
if len(authorizationHeaders) != 1 || len(authorizationHeaders[0]) < 48 || authorizationHeaders[0][:7] != bearerPrefix {
return nil, ErrInvalidAuthorizationHeader
}

Expand Down
187 changes: 94 additions & 93 deletions authorization_test.go

Large diffs are not rendered by default.

55 changes: 28 additions & 27 deletions bolt_transport_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ func TestBoltTransportHistory(t *testing.T) {
s := NewSubscriber("8", transport.logger)
s.SetTopics(topics, nil)

require.Nil(t, transport.AddSubscriber(s))
require.NoError(t, transport.AddSubscriber(s))

var count int
for {
Expand Down Expand Up @@ -71,7 +71,7 @@ func TestBoltTransportLogsBogusLastEventID(t *testing.T) {
s := NewSubscriber("711131", logger)
s.SetTopics(topics, nil)

require.Nil(t, transport.AddSubscriber(s))
require.NoError(t, transport.AddSubscriber(s))

log := sink.String()
assert.Contains(t, log, `"LastEventID":"711131"`)
Expand All @@ -90,7 +90,7 @@ func TestBoltTopicSelectorHistory(t *testing.T) {
s := NewSubscriber(EarliestLastEventID, transport.logger)
s.SetTopics([]string{"http://example.com/subscribed", "http://example.com/subscribed-public-only"}, []string{"http://example.com/subscribed"})

require.Nil(t, transport.AddSubscriber(s))
require.NoError(t, transport.AddSubscriber(s))

assert.Equal(t, "1", (<-s.Receive()).ID)
assert.Equal(t, "4", (<-s.Receive()).ID)
Expand All @@ -111,7 +111,7 @@ func TestBoltTransportRetrieveAllHistory(t *testing.T) {

s := NewSubscriber(EarliestLastEventID, transport.logger)
s.SetTopics(topics, nil)
require.Nil(t, transport.AddSubscriber(s))
require.NoError(t, transport.AddSubscriber(s))

var count int
for {
Expand Down Expand Up @@ -141,7 +141,7 @@ func TestBoltTransportHistoryAndLive(t *testing.T) {

s := NewSubscriber("8", transport.logger)
s.SetTopics(topics, nil)
require.Nil(t, transport.AddSubscriber(s))
require.NoError(t, transport.AddSubscriber(s))

var wg sync.WaitGroup
wg.Add(1)
Expand Down Expand Up @@ -192,13 +192,13 @@ func TestBoltTransportPurgeHistory(t *testing.T) {
func TestNewBoltTransport(t *testing.T) {
u, _ := url.Parse("bolt://test.db?bucket_name=demo")
transport, err := NewBoltTransport(u, zap.NewNop())
assert.Nil(t, err)
require.NoError(t, err)
require.NotNil(t, transport)
transport.Close()

u, _ = url.Parse("bolt://")
_, err = NewBoltTransport(u, zap.NewNop())
assert.EqualError(t, err, `"bolt:": invalid transport: missing path`)
require.EqualError(t, err, `"bolt:": invalid transport: missing path`)

u, _ = url.Parse("bolt:///test.db")
_, err = NewBoltTransport(u, zap.NewNop())
Expand All @@ -208,11 +208,11 @@ func TestNewBoltTransport(t *testing.T) {

u, _ = url.Parse("bolt://test.db?cleanup_frequency=invalid")
_, err = NewBoltTransport(u, zap.NewNop())
assert.EqualError(t, err, `"bolt://test.db?cleanup_frequency=invalid": invalid "cleanup_frequency" parameter "invalid": invalid transport: strconv.ParseFloat: parsing "invalid": invalid syntax`)
require.EqualError(t, err, `"bolt://test.db?cleanup_frequency=invalid": invalid "cleanup_frequency" parameter "invalid": invalid transport: strconv.ParseFloat: parsing "invalid": invalid syntax`)

u, _ = url.Parse("bolt://test.db?size=invalid")
_, err = NewBoltTransport(u, zap.NewNop())
assert.EqualError(t, err, `"bolt://test.db?size=invalid": invalid "size" parameter "invalid": invalid transport: strconv.ParseUint: parsing "invalid": invalid syntax`)
require.EqualError(t, err, `"bolt://test.db?size=invalid": invalid "size" parameter "invalid": invalid transport: strconv.ParseUint: parsing "invalid": invalid syntax`)
}

func TestBoltTransportDoNotDispatchUntilListen(t *testing.T) {
Expand All @@ -222,7 +222,7 @@ func TestBoltTransportDoNotDispatchUntilListen(t *testing.T) {
assert.Implements(t, (*Transport)(nil), transport)

s := NewSubscriber("", transport.logger)
require.Nil(t, transport.AddSubscriber(s))
require.NoError(t, transport.AddSubscriber(s))

var wg sync.WaitGroup
wg.Add(1)
Expand All @@ -248,21 +248,21 @@ func TestBoltTransportDispatch(t *testing.T) {
s := NewSubscriber("", transport.logger)
s.SetTopics([]string{"https://example.com/foo", "https://example.com/private"}, []string{"https://example.com/private"})

require.Nil(t, transport.AddSubscriber(s))
require.NoError(t, transport.AddSubscriber(s))

notSubscribed := &Update{Topics: []string{"not-subscribed"}}
require.Nil(t, transport.Dispatch(notSubscribed))
require.NoError(t, transport.Dispatch(notSubscribed))

subscribedNotAuthorized := &Update{Topics: []string{"https://example.com/foo"}, Private: true}
require.Nil(t, transport.Dispatch(subscribedNotAuthorized))
require.NoError(t, transport.Dispatch(subscribedNotAuthorized))

public := &Update{Topics: s.SubscribedTopics}
require.Nil(t, transport.Dispatch(public))
require.NoError(t, transport.Dispatch(public))

assert.Equal(t, public, <-s.Receive())

private := &Update{Topics: s.AllowedPrivateTopics, Private: true}
require.Nil(t, transport.Dispatch(private))
require.NoError(t, transport.Dispatch(private))

assert.Equal(t, private, <-s.Receive())
}
Expand All @@ -276,10 +276,10 @@ func TestBoltTransportClosed(t *testing.T) {

s := NewSubscriber("", transport.logger)
s.SetTopics([]string{"https://example.com/foo"}, nil)
require.Nil(t, transport.AddSubscriber(s))
require.NoError(t, transport.AddSubscriber(s))

require.Nil(t, transport.Close())
require.NotNil(t, transport.AddSubscriber(s))
require.NoError(t, transport.Close())
require.Error(t, transport.AddSubscriber(s))

assert.Equal(t, transport.Dispatch(&Update{Topics: s.SubscribedTopics}), ErrClosedTransport)

Expand All @@ -295,11 +295,11 @@ func TestBoltCleanDisconnectedSubscribers(t *testing.T) {

s1 := NewSubscriber("", transport.logger)
s1.SetTopics([]string{"foo"}, []string{})
require.Nil(t, transport.AddSubscriber(s1))
require.NoError(t, transport.AddSubscriber(s1))

s2 := NewSubscriber("", transport.logger)
s2.SetTopics([]string{"foo"}, []string{})
require.Nil(t, transport.AddSubscriber(s2))
require.NoError(t, transport.AddSubscriber(s2))

assert.Equal(t, 2, transport.subscribers.Len())

Expand All @@ -319,30 +319,31 @@ func TestBoltGetSubscribers(t *testing.T) {
defer os.Remove("test.db")

s1 := NewSubscriber("", transport.logger)
require.Nil(t, transport.AddSubscriber(s1))
require.NoError(t, transport.AddSubscriber(s1))

s2 := NewSubscriber("", transport.logger)
require.Nil(t, transport.AddSubscriber(s2))
require.NoError(t, transport.AddSubscriber(s2))

lastEventID, subscribers, err := transport.GetSubscribers()
require.NoError(t, err)

assert.Equal(t, EarliestLastEventID, lastEventID)
assert.Len(t, subscribers, 2)
assert.Contains(t, subscribers, s1)
assert.Contains(t, subscribers, s2)
assert.Nil(t, err)
}

func TestBoltLastEventID(t *testing.T) {
db, err := bolt.Open("test.db", 0o600, nil)
defer os.Remove("test.db")
require.Nil(t, err)
require.NoError(t, err)

db.Update(func(tx *bolt.Tx) error {
bucket, err := tx.CreateBucketIfNotExists([]byte(defaultBoltBucketName))
require.Nil(t, err)
require.NoError(t, err)

seq, err := bucket.NextSequence()
require.Nil(t, err)
require.NoError(t, err)

prefix := make([]byte, 8)
binary.BigEndian.PutUint64(prefix, seq)
Expand All @@ -355,7 +356,7 @@ func TestBoltLastEventID(t *testing.T) {

return bucket.Put(key, []byte("invalid"))
})
require.Nil(t, db.Close())
require.NoError(t, db.Close())

transport := createBoltTransport("bolt://test.db")
require.NotNil(t, transport)
Expand Down
4 changes: 2 additions & 2 deletions caddy/caddy_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@ func TestMercure(t *testing.T) {
req, err := http.NewRequest(http.MethodPost, "http://localhost:9080/.well-known/mercure", strings.NewReader(body.Encode()))
require.Nil(t, err)
req.Header.Add("Content-Type", "application/x-www-form-urlencoded")
req.Header.Add("Authorization", "Bearer "+publisherJWT)
req.Header.Add("Authorization", bearerPrefix+publisherJWT)

resp := tester.AssertResponseCode(req, http.StatusOK)
resp.Body.Close()
Expand Down Expand Up @@ -155,7 +155,7 @@ func TestJWTPlaceholders(t *testing.T) {
req, err := http.NewRequest(http.MethodPost, "http://localhost:9080/.well-known/mercure", strings.NewReader(body.Encode()))
require.Nil(t, err)
req.Header.Add("Content-Type", "application/x-www-form-urlencoded")
req.Header.Add("Authorization", "Bearer "+publisherJWTRSA)
req.Header.Add("Authorization", bearerPrefix+publisherJWTRSA)

resp := tester.AssertResponseCode(req, http.StatusOK)
resp.Body.Close()
Expand Down
18 changes: 9 additions & 9 deletions common/version_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,8 @@ func TestVersionInfo(t *testing.T) {
Architecture: "amd64",
}

assert.Equal(t, v.Shortline(), "dev")
assert.Equal(t, v.ChangelogURL(), "https://github.com/dunglas/mercure/releases/latest")
assert.Equal(t, "dev", v.Shortline())
assert.Equal(t, "https://github.com/dunglas/mercure/releases/latest", v.ChangelogURL())
}

func TestVersionInfoWithBuildDate(t *testing.T) {
Expand All @@ -31,8 +31,8 @@ func TestVersionInfoWithBuildDate(t *testing.T) {
Architecture: "amd64",
}

assert.Equal(t, v.Shortline(), "1.0.0, built at 2020-05-03T18:42:44Z")
assert.Equal(t, v.ChangelogURL(), "https://github.com/dunglas/mercure/releases/tag/v1.0.0")
assert.Equal(t, "1.0.0, built at 2020-05-03T18:42:44Z", v.Shortline())
assert.Equal(t, "https://github.com/dunglas/mercure/releases/tag/v1.0.0", v.ChangelogURL())
}

func TestVersionInfoWithCommit(t *testing.T) {
Expand All @@ -45,8 +45,8 @@ func TestVersionInfoWithCommit(t *testing.T) {
Architecture: "amd64",
}

assert.Equal(t, v.Shortline(), "1.0.0, commit 96ee2b9")
assert.Equal(t, v.ChangelogURL(), "https://github.com/dunglas/mercure/releases/tag/v1.0.0")
assert.Equal(t, "1.0.0, commit 96ee2b9", v.Shortline())
assert.Equal(t, "https://github.com/dunglas/mercure/releases/tag/v1.0.0", v.ChangelogURL())
}

func TestVersionInfoWithBuildDateAndCommit(t *testing.T) {
Expand All @@ -59,8 +59,8 @@ func TestVersionInfoWithBuildDateAndCommit(t *testing.T) {
Architecture: "amd64",
}

assert.Equal(t, v.Shortline(), "1.0.0, commit 96ee2b9, built at 2020-05-03T18:42:44Z")
assert.Equal(t, v.ChangelogURL(), "https://github.com/dunglas/mercure/releases/tag/v1.0.0")
assert.Equal(t, "1.0.0, commit 96ee2b9, built at 2020-05-03T18:42:44Z", v.Shortline())
assert.Equal(t, "https://github.com/dunglas/mercure/releases/tag/v1.0.0", v.ChangelogURL())
}

func TestVersionMetricsCollectorInitialization(t *testing.T) {
Expand Down Expand Up @@ -95,5 +95,5 @@ func TestVersionMetricsCollectorInitialization(t *testing.T) {
t.Fatal(err)
}

assert.Equal(t, 1.0, *metricOut.Gauge.Value)
assert.Equal(t, 1.0, metricOut.GetGauge().GetValue()) //nolint:testifylint
}
7 changes: 4 additions & 3 deletions config_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,12 @@ import (
"github.com/spf13/pflag"
"github.com/spf13/viper"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)

func TestMissingConfig(t *testing.T) {
err := ValidateConfig(viper.New())
assert.EqualError(t, err, `invalid config: one of "jwt_key" or "publisher_jwt_key" configuration parameter must be defined`)
require.EqualError(t, err, `invalid config: one of "jwt_key" or "publisher_jwt_key" configuration parameter must be defined`)
}

func TestMissingKeyFile(t *testing.T) {
Expand All @@ -20,7 +21,7 @@ func TestMissingKeyFile(t *testing.T) {
v.Set("cert_file", "foo")

err := ValidateConfig(v)
assert.EqualError(t, err, `invalid config: if the "cert_file" configuration parameter is defined, "key_file" must be defined too`)
require.EqualError(t, err, `invalid config: if the "cert_file" configuration parameter is defined, "key_file" must be defined too`)
}

func TestMissingCertFile(t *testing.T) {
Expand All @@ -29,7 +30,7 @@ func TestMissingCertFile(t *testing.T) {
v.Set("key_file", "foo")

err := ValidateConfig(v)
assert.EqualError(t, err, `invalid config: if the "key_file" configuration parameter is defined, "cert_file" must be defined too`)
require.EqualError(t, err, `invalid config: if the "key_file" configuration parameter is defined, "cert_file" must be defined too`)
}

func TestSetFlags(t *testing.T) {
Expand Down
4 changes: 3 additions & 1 deletion demo.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@ import (
"time"
)

const linkSuffix = `>; rel="mercure"`

// uiContent is our static web server content.
//
//go:embed public
Expand All @@ -29,7 +31,7 @@ func (h *Hub) Demo(w http.ResponseWriter, r *http.Request) {
body := query.Get("body")
jwt := query.Get("jwt")

hubLink := "<" + defaultHubURL + ">; rel=\"mercure\""
hubLink := "<" + defaultHubURL + linkSuffix
if h.cookieName != defaultCookieName {
hubLink = hubLink + "; cookie-name=\"" + h.cookieName + "\""
}
Expand Down
4 changes: 2 additions & 2 deletions demo_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ func TestEmptyBodyAndJWT(t *testing.T) {

resp := w.Result()
assert.Equal(t, "application/ld+json", resp.Header.Get("Content-Type"))
assert.Equal(t, []string{"<" + defaultHubURL + ">; rel=\"mercure\"", "<http://example.com/demo/foo.jsonld>; rel=\"self\""}, resp.Header["Link"])
assert.Equal(t, []string{"<" + defaultHubURL + linkSuffix, "<http://example.com/demo/foo.jsonld>; rel=\"self\""}, resp.Header["Link"])

cookie := resp.Cookies()[0]
assert.Equal(t, "mercureAuthorization", cookie.Name)
Expand All @@ -40,7 +40,7 @@ func TestBodyAndJWT(t *testing.T) {

resp := w.Result()
assert.Contains(t, resp.Header.Get("Content-Type"), "xml") // Before Go 1.17, the charset wasn't set
assert.Equal(t, []string{"<" + defaultHubURL + ">; rel=\"mercure\"", "<http://example.com/demo/foo/bar.xml?body=<hello/>&jwt=token>; rel=\"self\""}, resp.Header["Link"])
assert.Equal(t, []string{"<" + defaultHubURL + linkSuffix, "<http://example.com/demo/foo/bar.xml?body=<hello/>&jwt=token>; rel=\"self\""}, resp.Header["Link"])

cookie := resp.Cookies()[0]
assert.Equal(t, "mercureAuthorization", cookie.Name)
Expand Down
Loading

0 comments on commit e931aca

Please sign in to comment.