diff --git a/.github/workflows/ci-build.yaml b/.github/workflows/ci-build.yaml index 98c6976270d6..44872052cd48 100644 --- a/.github/workflows/ci-build.yaml +++ b/.github/workflows/ci-build.yaml @@ -65,11 +65,10 @@ jobs: with: go-version: ${{ env.GOLANG_VERSION }} - name: Run golangci-lint - uses: golangci/golangci-lint-action@v2 + uses: golangci/golangci-lint-action@v3 with: - version: v1.38.0 - args: --timeout 10m --exclude SA5011 - skip-go-installation: true # Because we need a specific version + version: v1.45.2 + args: --timeout 10m --exclude SA5011 --verbose test-go: name: Run unit tests for Go packages diff --git a/.golangci.yml b/.golangci.yml deleted file mode 100644 index ebe2918e8d17..000000000000 --- a/.golangci.yml +++ /dev/null @@ -1,22 +0,0 @@ -run: - timeout: 2m - skip-files: - - ".*\\.pb\\.go" - skip-dirs: - - pkg/client/ - - vendor/ -linters: - enable: - - vet - - deadcode - - goimports - - varcheck - - structcheck - - ineffassign - - unconvert - - unparam -linters-settings: - goimports: - local-prefixes: github.com/argoproj/argo-cd -service: - golangci-lint-version: 1.21.0 diff --git a/hack/installers/install-lint-tools.sh b/hack/installers/install-lint-tools.sh index 4c9bc3bb1305..d57e93b5e186 100755 --- a/hack/installers/install-lint-tools.sh +++ b/hack/installers/install-lint-tools.sh @@ -1,4 +1,4 @@ #!/bin/bash set -eux -o pipefail -GO111MODULE=on go get github.com/golangci/golangci-lint/cmd/golangci-lint@v1.38.0 +GO111MODULE=on go get github.com/golangci/golangci-lint/cmd/golangci-lint@v1.45.2 diff --git a/util/io/bytereadseeker.go b/util/io/bytereadseeker.go index 48aed29c43fd..43c246c2eced 100644 --- a/util/io/bytereadseeker.go +++ b/util/io/bytereadseeker.go @@ -14,7 +14,7 @@ type byteReadSeeker struct { offset int64 } -func (f byteReadSeeker) Read(b []byte) (int, error) { +func (f *byteReadSeeker) Read(b []byte) (int, error) { if f.offset >= int64(len(f.data)) { return 0, io.EOF } @@ -23,7 +23,7 @@ func (f byteReadSeeker) Read(b []byte) (int, error) { return n, nil } -func (f byteReadSeeker) Seek(offset int64, whence int) (int64, error) { +func (f *byteReadSeeker) Seek(offset int64, whence int) (int64, error) { switch whence { case 1: offset += f.offset diff --git a/util/io/bytereadseeker_test.go b/util/io/bytereadseeker_test.go new file mode 100644 index 000000000000..5784d563e9f5 --- /dev/null +++ b/util/io/bytereadseeker_test.go @@ -0,0 +1,71 @@ +package io + +import ( + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + "io" + "testing" +) + +func TestByteReadSeeker_Read(t *testing.T) { + inString := "hello world" + reader := NewByteReadSeeker([]byte(inString)) + var bytes = make([]byte, 11) + n, err := reader.Read(bytes) + require.NoError(t, err) + assert.Equal(t, len(inString), n) + assert.Equal(t, inString, string(bytes)) + _, err = reader.Read(bytes) + assert.ErrorIs(t, err, io.EOF) +} + +func TestByteReadSeeker_Seek_Start(t *testing.T) { + inString := "hello world" + reader := NewByteReadSeeker([]byte(inString)) + offset, err := reader.Seek(6, io.SeekStart) + require.NoError(t, err) + assert.Equal(t, int64(6), offset) + var bytes = make([]byte, 5) + n, err := reader.Read(bytes) + require.NoError(t, err) + assert.Equal(t, 5, n) + assert.Equal(t, "world", string(bytes)) +} + +func TestByteReadSeeker_Seek_Current(t *testing.T) { + inString := "hello world" + reader := NewByteReadSeeker([]byte(inString)) + offset, err := reader.Seek(3, io.SeekCurrent) + require.NoError(t, err) + assert.Equal(t, int64(3), offset) + offset, err = reader.Seek(3, io.SeekCurrent) + require.NoError(t, err) + assert.Equal(t, int64(6), offset) + var bytes = make([]byte, 5) + n, err := reader.Read(bytes) + require.NoError(t, err) + assert.Equal(t, 5, n) + assert.Equal(t, "world", string(bytes)) +} + +func TestByteReadSeeker_Seek_End(t *testing.T) { + inString := "hello world" + reader := NewByteReadSeeker([]byte(inString)) + offset, err := reader.Seek(-5, io.SeekEnd) + require.NoError(t, err) + assert.Equal(t, int64(6), offset) + var bytes = make([]byte, 5) + n, err := reader.Read(bytes) + require.NoError(t, err) + assert.Equal(t, 5, n) + assert.Equal(t, "world", string(bytes)) +} + +func TestByteReadSeeker_Seek_OutOfBounds(t *testing.T) { + inString := "hello world" + reader := NewByteReadSeeker([]byte(inString)) + _, err := reader.Seek(12, io.SeekStart) + assert.Error(t, err) + _, err = reader.Seek(-1, io.SeekStart) + assert.Error(t, err) +} \ No newline at end of file