Skip to content

Commit 044eaf1

Browse files
Merge pull request #18 from hellofresh/patch/gometalinter
Introducing gometalinter
2 parents c62b759 + 461c196 commit 044eaf1

20 files changed

+136
-133
lines changed

.golangci.yml

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
run:
2+
build-tags:
3+
- unit
4+
skip-files:
5+
- driver/inmemory/matcher_gen.go
6+
7+
linters:
8+
enable:
9+
- maligned
10+
- deadcode
11+
- errcheck
12+
- gosec
13+
- goconst
14+
- gocyclo
15+
- gofmt
16+
- goimports
17+
- golint
18+
- ineffassign
19+
- interfacer
20+
- staticcheck
21+
- structcheck
22+
- unconvert
23+
- varcheck
24+
- vet
25+
- vetshadow

.travis.yml

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,24 @@ addons:
88
postgresql: '10'
99
cache:
1010
directories:
11+
- "$GOPATH/pkg/dep"
1112
- "$HOME/gopath/pkg/mod"
1213
env:
1314
global:
1415
- secure: KONX7893Jxeu3zBnNRWMl0x9DNsriN+RFojuFE28bDBjE2NJKTBeIhWNF4Jnoy7ba9hvE3LB7aGFUETnUR2sxKgNp/yz1Q6Wjk2qFvIPxYB8soOXWnOcRRvRulM2jOpLLJdT4aKewyTGTQfszib/3BD2fWgIgnH0aAvhoV6F/e9Mhtt1ZXLvvRDyDX2q0XkDtjK9tTB8/QOJFz6c9UI/fScYglI+Ob5lx7GwjYg6LHbIaPXt4wrGLXW9/FXOHTI1F6+FuDE08n7EtqkuEqmh3gURQRRyjmX2nDnxUuvSPpbTR6cRHctgwaYSL2gu0321lbXIUv4bFAW14MoQLnI5xKW8nFjuD0Z3DrePr3G96sTombrg2PeI0eM/twW9YgTlHpjt+gkblSriOZ8vVe1UDMZ0OidXSzO9dOk0vDustwvbA+TYP3/e7Tw60wn1NWoEFl38W8F+jB2kBuMON45AT4I5zPQAjZLmEwTgYm4jOahpnvOY3Z6cxqpN+zDNlqllETJCdf+e5bp8xk9vYZtEZ0ML3L7cMMw3IbLg+slE4rIUZuydvk4rC9EXwqPw/089BhCFhpc62GfvlVhDrPJfnHIPhzZ9nyYS1FDBl96gVNze2uFOyaEMACFtevFF4EP0NmUYRhLWPcasdjbhUjUsIiFQVS3CFQODR9FL0SXSM9M=
1516
- POSTGRES_DSN="postgres://postgres@localhost:5432/goengine?sslmode=disable&client_encoding=UTF8"
1617

1718
matrix:
19+
include:
20+
- name: "GoLang CI lint"
21+
go: 1.11.x
22+
install:
23+
- dep ensure -v
24+
- curl -sfL https://install.goreleaser.com/github.com/golangci/golangci-lint.sh | sh -s -- -b $(go env GOPATH)/bin v1.15.0
25+
before_script: []
26+
script:
27+
- golangci-lint run
28+
after_success: []
1829
allow_failures:
1930
- go: master
2031

aggregate/repository_test.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import (
1515
"github.com/hellofresh/goengine/mocks"
1616
"github.com/stretchr/testify/assert"
1717
"github.com/stretchr/testify/mock"
18+
"github.com/stretchr/testify/require"
1819
)
1920

2021
func TestNewRepository(t *testing.T) {
@@ -103,7 +104,9 @@ func TestRepository_SaveAggregateRoot(t *testing.T) {
103104
{order: 2},
104105
}
105106
for _, event := range events {
106-
aggregate.RecordChange(root, event)
107+
require.NoError(t,
108+
aggregate.RecordChange(root, event),
109+
)
107110
}
108111
err := repo.SaveAggregateRoot(context.Background(), root)
109112

driver/inmemory/eventstore_test.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,8 @@ func TestEventStore_HasStream(t *testing.T) {
6161
asserts.False(store.HasStream(ctx, createThisStream))
6262
asserts.False(store.HasStream(ctx, unkownStream))
6363

64-
store.Create(ctx, createThisStream)
64+
err := store.Create(ctx, createThisStream)
65+
asserts.NoError(err)
6566
asserts.True(store.HasStream(ctx, createThisStream))
6667
asserts.False(store.HasStream(ctx, unkownStream))
6768

driver/inmemory/eventstream_test.go

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import (
99
"github.com/hellofresh/goengine/driver/inmemory"
1010
"github.com/hellofresh/goengine/mocks"
1111
"github.com/stretchr/testify/assert"
12+
"github.com/stretchr/testify/require"
1213
)
1314

1415
func TestEventStream(t *testing.T) {
@@ -44,15 +45,12 @@ func TestEventStream(t *testing.T) {
4445
asserts := assert.New(t)
4546

4647
stream, err := inmemory.NewEventStream(testCase.messages, testCase.messageNumbers)
47-
if !asserts.NoError(err) {
48-
return
49-
}
48+
require.NoError(t, err)
5049
asserts.NotNil(stream)
5150

5251
messages, messageNumbers, err := goengine.ReadEventStream(stream)
53-
if !asserts.NoError(stream.Err()) {
54-
asserts.FailNow("no exception was expected while reading the stream")
55-
}
52+
require.NoError(t, err)
53+
require.NoError(t, stream.Err(), "no exception was expected while reading the stream")
5654

5755
asserts.Equal(testCase.messages, messages)
5856
asserts.Equal(testCase.messageNumbers, messageNumbers)

driver/sql/postgres/eventstore.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ func NewEventStore(
5757
logger = goengine.NopLogger
5858
}
5959

60-
columns := fmt.Sprintf("%s", strings.Join(persistenceStrategy.ColumnNames(), ", "))
60+
columns := strings.Join(persistenceStrategy.ColumnNames(), ", ")
6161

6262
return &EventStore{
6363
persistenceStrategy: persistenceStrategy,
@@ -169,6 +169,7 @@ func (e *EventStore) loadQuery(
169169

170170
rows, err := db.QueryContext(
171171
ctx,
172+
/* #nosec */
172173
fmt.Sprintf(
173174
`SELECT * FROM %s WHERE %s ORDER BY no %s`,
174175
tableName,
@@ -206,6 +207,7 @@ func (e *EventStore) AppendToWithExecer(ctx context.Context, conn driverSQL.Exec
206207

207208
result, err := conn.ExecContext(
208209
ctx,
210+
/* #nosec */
209211
fmt.Sprintf(
210212
"INSERT INTO %s (%s) VALUES %s",
211213
tableName,

driver/sql/postgres/eventstore_test.go

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import (
2121
strategyPostgres "github.com/hellofresh/goengine/strategy/json/sql/postgres"
2222
"github.com/stretchr/testify/assert"
2323
"github.com/stretchr/testify/mock"
24+
"github.com/stretchr/testify/require"
2425
)
2526

2627
func TestNewEventStore(t *testing.T) {
@@ -301,6 +302,7 @@ func TestEventStore_Load(t *testing.T) {
301302
strategy.On("GenerateTableName", goengine.StreamName("event_stream")).Return("event_stream", nil)
302303

303304
store, err := postgres.NewEventStore(strategy, db, factory, nil)
305+
require.NoError(t, err)
304306

305307
stream, err := store.Load(
306308
context.Background(),
@@ -309,10 +311,9 @@ func TestEventStore_Load(t *testing.T) {
309311
testCase.count,
310312
testCase.matcher(),
311313
)
314+
require.NoError(t, err)
315+
assert.Equal(t, expectedStream, stream)
312316

313-
if assert.NoError(t, err) {
314-
assert.Equal(t, expectedStream, stream)
315-
}
316317
factory.AssertExpectations(t)
317318
strategy.AssertExpectations(t)
318319
})
@@ -355,6 +356,7 @@ func TestEventStore_Load(t *testing.T) {
355356
test.RunWithMockDB(t, testCase.title, func(t *testing.T, db *sql.DB, dbMock sqlmock.Sqlmock) {
356357
strategy := testCase.strategy()
357358
store, err := postgres.NewEventStore(strategy, db, &mockSQL.MessageFactory{}, nil)
359+
require.NoError(t, err)
358360

359361
stream, err := store.Load(context.Background(), "event_stream", 1, nil, nil)
360362
if assert.Error(t, err) {

driver/sql/postgres/projector_aggregate_storage.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,7 @@ func newAggregateProjectionStorage(
114114
}, nil
115115
}
116116

117-
func (a *aggregateProjectionStorage) LoadOutOfSync(ctx context.Context, conn *sql.Conn) (*sql.Rows, error) {
117+
func (a *aggregateProjectionStorage) LoadOutOfSync(ctx context.Context, conn driverSQL.Queryer) (*sql.Rows, error) {
118118
return conn.QueryContext(ctx, a.queryOutOfSyncProjections)
119119
}
120120

@@ -136,7 +136,7 @@ func (a *aggregateProjectionStorage) PersistState(conn *sql.Conn, notification *
136136
return nil
137137
}
138138

139-
func (a *aggregateProjectionStorage) PersistFailure(ctx context.Context, conn *sql.Conn, notification *driverSQL.ProjectionNotification) error {
139+
func (a *aggregateProjectionStorage) PersistFailure(ctx context.Context, conn driverSQL.Execer, notification *driverSQL.ProjectionNotification) error {
140140
if _, err := conn.ExecContext(ctx, a.queryPersistFailure, notification.AggregateID); err != nil {
141141
return err
142142
}

driver/sql/postgres/projector_stream.go

Lines changed: 5 additions & 70 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,10 @@ import (
88
"strings"
99
"sync"
1010

11-
"github.com/pkg/errors"
12-
1311
"github.com/hellofresh/goengine"
1412
driverSQL "github.com/hellofresh/goengine/driver/sql"
1513
internalSQL "github.com/hellofresh/goengine/driver/sql/internal"
14+
"github.com/pkg/errors"
1615
)
1716

1817
// StreamProjector is a postgres projector used to execute a projection against an event stream.
@@ -172,80 +171,16 @@ func (s *StreamProjector) processNotification(
172171

173172
// setupProjection Creates the projection if none exists
174173
func (s *StreamProjector) setupProjection(ctx context.Context) error {
175-
conn, err := internalSQL.AcquireConn(ctx, s.db)
176-
if err != nil {
177-
return err
178-
}
179-
defer func() {
180-
if err := conn.Close(); err != nil {
181-
s.logger.WithError(err).Warn("failed to db close connection")
182-
}
183-
}()
184-
185-
if s.projectionExists(ctx, conn) {
186-
return nil
187-
}
188-
if err := s.createProjection(ctx, conn); err != nil {
189-
return err
190-
}
191-
192-
return nil
193-
}
194-
195-
func (s *StreamProjector) projectionExists(ctx context.Context, conn *sql.Conn) bool {
196-
rows, err := conn.QueryContext(
197-
ctx,
198-
fmt.Sprintf(
199-
`SELECT 1 FROM %s WHERE name = $1 LIMIT 1`,
200-
QuoteIdentifier(s.projectionTable),
201-
),
202-
s.projectionName,
203-
)
204-
if err != nil {
205-
s.logger.
206-
WithError(err).
207-
WithField("table", s.projectionTable).
208-
Error("failed to query projection table")
209-
return false
210-
}
211-
defer func() {
212-
if err := rows.Close(); err != nil {
213-
s.logger.
214-
WithError(err).
215-
WithField("table", s.projectionTable).
216-
Warn("failed to close rows")
217-
}
218-
}()
219-
220-
if !rows.Next() {
221-
return false
222-
}
223-
224-
var found bool
225-
if err := rows.Scan(&found); err != nil {
226-
s.logger.
227-
WithError(err).
228-
WithField("table", s.projectionTable).
229-
Error("failed to scan projection table")
230-
return false
231-
}
232-
233-
return found
234-
}
235-
236-
func (s *StreamProjector) createProjection(ctx context.Context, conn *sql.Conn) error {
237-
// Ignore duplicate inserts. This can occur when multiple projectors are started at the same time.
238-
_, err := conn.ExecContext(
174+
// Ignore duplicate inserts
175+
_, err := s.db.ExecContext(
239176
ctx,
177+
/* #nosec */
240178
fmt.Sprintf(
241179
`INSERT INTO %s (name) VALUES ($1) ON CONFLICT DO NOTHING`,
242180
QuoteIdentifier(s.projectionTable),
243181
),
244182
s.projectionName,
245183
)
246-
if err != nil {
247-
return err
248-
}
249184

250-
return nil
185+
return err
251186
}

driver/sql/postgres/projector_test.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,10 @@ package postgres
44

55
import (
66
"fmt"
7+
"testing"
8+
79
"github.com/hellofresh/goengine"
810
"github.com/stretchr/testify/assert"
9-
"testing"
1011
)
1112

1213
func TestDefaultProjectionStateEncoder(t *testing.T) {

0 commit comments

Comments
 (0)