Skip to content

Commit

Permalink
chore: add basic tests (#18)
Browse files Browse the repository at this point in the history
* chore: add basic tests

* chore: add logger test
  • Loading branch information
freak12techno authored Jul 7, 2024
1 parent 072e6b6 commit 1e14e5f
Show file tree
Hide file tree
Showing 17 changed files with 327 additions and 39 deletions.
16 changes: 16 additions & 0 deletions .github/workflows/actions.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -30,3 +30,19 @@ jobs:
uses: golangci/golangci-lint-action@v2
with:
args: --timeout 300s
test:
name: test
runs-on: ubuntu-latest
steps:
- uses: actions/setup-go@v2
with:
go-version: '1.21.3'
- name: Check out code into the Go module directory
uses: actions/checkout@v2
- name: Run tests
run: go test -coverpkg=./... -coverprofile coverage.txt -v ./...
- name: Upload coverage reports to Codecov
uses: codecov/codecov-action@v4.0.1
with:
token: ${{ secrets.CODECOV_TOKEN }}
slug: QuokkaStake/cosmos-wallets-exporter
2 changes: 1 addition & 1 deletion .github/workflows/release.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,6 @@ jobs:
uses: goreleaser/goreleaser-action@v2
with:
version: latest
args: release --rm-dist
args: release
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -4,3 +4,4 @@ main
cosmos-wallets-exporter
dist/
**/.DS_Store
cover.out
15 changes: 3 additions & 12 deletions .golangci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,16 +15,11 @@ linters:
enable-all: true
disable:
- funlen
- scopelint
- interfacer
- exhaustivestruct
- maligned
- golint
- nlreturn
- wrapcheck
- gomnd
- cyclop
- goerr113
- err113
- exhaustruct
- wsl
- lll
Expand All @@ -40,12 +35,8 @@ linters:
- stylecheck
- gosimple
- ireturn
- nosnakecase
- ifshort
- gci
- musttag
- depguard
- varcheck
- structcheck
- deadcode
- mnd
- mnd
- testpackage
6 changes: 6 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -9,3 +9,9 @@ install:

lint:
golangci-lint run --fix ./...

test:
go test -coverpkg=./... -coverprofile cover.out -v ./...

coverage:
go tool cover -html=cover.out
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

![Latest release](https://img.shields.io/github/v/release/QuokkaStake/cosmos-wallets-exporter)
[![Actions Status](https://github.com/QuokkaStake/cosmos-wallets-exporter/workflows/test/badge.svg)](https://github.com/QuokkaStake/cosmos-wallets-exporter/actions)
[![codecov](https://codecov.io/gh/QuokkaStake/cosmos-wallets-exporter/graph/badge.svg?token=PXF706HLZH)](https://codecov.io/gh/QuokkaStake/cosmos-wallets-exporter)

cosmos-wallets-exporter is a Prometheus scraper that fetches the wallet balances from an LCD server exposed by a fullnode.

Expand Down
4 changes: 4 additions & 0 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ require (
github.com/prometheus/client_golang v1.12.2
github.com/rs/zerolog v1.26.1
github.com/spf13/cobra v1.4.0
github.com/stretchr/testify v1.9.0
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.51.0
go.opentelemetry.io/otel v1.26.0
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.26.0
Expand All @@ -23,13 +24,15 @@ require (
github.com/beorn7/perks v1.0.1 // indirect
github.com/cenkalti/backoff/v4 v4.3.0 // indirect
github.com/cespare/xxhash/v2 v2.2.0 // indirect
github.com/davecgh/go-spew v1.1.1 // indirect
github.com/felixge/httpsnoop v1.0.4 // indirect
github.com/go-logr/logr v1.4.1 // indirect
github.com/go-logr/stdr v1.2.2 // indirect
github.com/golang/protobuf v1.5.4 // indirect
github.com/grpc-ecosystem/grpc-gateway/v2 v2.19.1 // indirect
github.com/inconshreveable/mousetrap v1.0.0 // indirect
github.com/matttproud/golang_protobuf_extensions v1.0.1 // indirect
github.com/pmezard/go-difflib v1.0.0 // indirect
github.com/prometheus/client_model v0.2.0 // indirect
github.com/prometheus/common v0.32.1 // indirect
github.com/prometheus/procfs v0.7.3 // indirect
Expand All @@ -44,4 +47,5 @@ require (
google.golang.org/genproto/googleapis/rpc v0.0.0-20240401170217-c3f982113cda // indirect
google.golang.org/grpc v1.63.2 // indirect
google.golang.org/protobuf v1.33.0 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
)
8 changes: 8 additions & 0 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -166,8 +166,12 @@ github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxv
github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc=
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
github.com/matttproud/golang_protobuf_extensions v1.0.1 h1:4hp9jkHxhMHkqkrB3Ix0jegS5sx/RkqARlsWZ6pIwiU=
github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
Expand Down Expand Up @@ -205,6 +209,8 @@ github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1
github.com/prometheus/procfs v0.7.3 h1:4jVXhlkAyzOScmCkXBTOLRLTz8EeU+eyjrwB/EPq0VU=
github.com/prometheus/procfs v0.7.3/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA=
github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ=
github.com/rogpeppe/go-internal v1.10.0/go.mod h1:UQnix2H7Ngw/k4C5ijL5+65zddjncjaFoBhdsK/akog=
github.com/rs/xid v1.3.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg=
github.com/rs/zerolog v1.26.1 h1:/ihwxqH+4z8UxyI70wM1z9yCvkWcfz/a3mj48k/Zngc=
github.com/rs/zerolog v1.26.1/go.mod h1:/wSSJWX7lVrsOwlbyTRSOJvqRlc+WjWlfes+CiJ+tmc=
Expand Down Expand Up @@ -520,6 +526,8 @@ gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLks
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
Expand Down
6 changes: 1 addition & 5 deletions pkg/app.go
Original file line number Diff line number Diff line change
Expand Up @@ -40,11 +40,7 @@ func NewApp(configPath string, version string) *App {
logger.GetDefaultLogger().Fatal().Err(err).Msg("Provided config is invalid!")
}

tracer, err := tracing.InitTracer(appConfig.TracingConfig, version)
if err != nil {
logger.GetDefaultLogger().Fatal().Err(err).Msg("Error setting up tracing")
}

tracer := tracing.InitTracer(appConfig.TracingConfig, version)
log := logger.GetLogger(appConfig.LogConfig)
coingecko := coingeckoPkg.NewCoingecko(appConfig, log, tracer)

Expand Down
7 changes: 6 additions & 1 deletion pkg/logger/logger.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,11 @@ func GetDefaultLogger() *zerolog.Logger {
return &log
}

func GetNopLogger() *zerolog.Logger {
log := zerolog.Nop()
return &log
}

func GetLogger(config config.LogConfig) zerolog.Logger {
log := zerolog.New(zerolog.ConsoleWriter{Out: os.Stdout}).With().Timestamp().Logger()

Expand All @@ -21,7 +26,7 @@ func GetLogger(config config.LogConfig) zerolog.Logger {

logLevel, err := zerolog.ParseLevel(config.LogLevel)
if err != nil {
log.Fatal().Err(err).Msg("Could not parse log level")
log.Panic().Err(err).Msg("Could not parse log level")
}

zerolog.SetGlobalLevel(logLevel)
Expand Down
48 changes: 48 additions & 0 deletions pkg/logger/logger_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
package logger

import (
"main/pkg/config"
"testing"

"github.com/stretchr/testify/require"
)

func TestGetDefaultLogger(t *testing.T) {
t.Parallel()

logger := GetDefaultLogger()
require.NotNil(t, logger)
}

func TestGetLoggerInvalidLogLevel(t *testing.T) {
t.Parallel()

defer func() {
if r := recover(); r == nil {
require.Fail(t, "Expected to have a panic here!")
}
}()

GetLogger(config.LogConfig{LogLevel: "invalid"})
}

func TestGetLoggerValidPlain(t *testing.T) {
t.Parallel()

logger := GetLogger(config.LogConfig{LogLevel: "info"})
require.NotNil(t, logger)
}

func TestGetLoggerValidJSON(t *testing.T) {
t.Parallel()

logger := GetLogger(config.LogConfig{LogLevel: "info", JSONOutput: true})
require.NotNil(t, logger)
}

func TestGetLoggerNop(t *testing.T) {
t.Parallel()

logger := GetNopLogger()
require.NotNil(t, logger)
}
37 changes: 37 additions & 0 deletions pkg/tracing/noop-exporter_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
package tracing

import (
"context"
"testing"

"github.com/stretchr/testify/assert"

"github.com/stretchr/testify/require"
tracesdk "go.opentelemetry.io/otel/sdk/trace"
)

func TestNoopExporterShutdown(t *testing.T) {
t.Parallel()

exporter := NewNoopExporter()
err := exporter.Shutdown(context.Background())

require.NoError(t, err)
}

func TestNoopExporterExportSpans(t *testing.T) {
t.Parallel()

exporter := NewNoopExporter()
tp := NewTraceProvider(exporter, "1.2.3")

_, span := tp.Tracer("test").Start(context.Background(), "test")
defer span.End()

readOnlySpan, ok := span.(tracesdk.ReadOnlySpan)
assert.True(t, ok)

err := exporter.ExportSpans(context.Background(), []tracesdk.ReadOnlySpan{readOnlySpan})

require.NoError(t, err)
}
9 changes: 3 additions & 6 deletions pkg/tracing/provider.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,22 +6,19 @@ import (
semconv "go.opentelemetry.io/otel/semconv/v1.24.0"
)

func NewTraceProvider(exp tracesdk.SpanExporter, version string) (*tracesdk.TracerProvider, error) {
func NewTraceProvider(exp tracesdk.SpanExporter, version string) *tracesdk.TracerProvider {
// Ensure default SDK resources and the required service name are set.
r, err := resource.Merge(
r, _ := resource.Merge(
resource.Default(),
resource.NewWithAttributes(
semconv.SchemaURL,
semconv.ServiceNameKey.String("cosmos-wallets-exporter"),
semconv.ServiceVersionKey.String(version),
),
)
if err != nil {
return nil, err
}

return tracesdk.NewTracerProvider(
tracesdk.WithBatcher(exp),
tracesdk.WithResource(r),
), nil
)
}
27 changes: 13 additions & 14 deletions pkg/tracing/tracer.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ package tracing
import (
"context"
"encoding/base64"
"fmt"
configPkg "main/pkg/config"

"go.opentelemetry.io/otel"
Expand All @@ -12,7 +11,7 @@ import (
"go.opentelemetry.io/otel/trace"
)

func getExporter(config configPkg.TracingConfig) (tracesdk.SpanExporter, error) {
func getExporter(config configPkg.TracingConfig) tracesdk.SpanExporter {
if config.Enabled.Bool {
opts := []otlptracehttp.Option{
otlptracehttp.WithEndpoint(config.OpenTelemetryHTTPHost),
Expand All @@ -30,27 +29,27 @@ func getExporter(config configPkg.TracingConfig) (tracesdk.SpanExporter, error)
}))
}

return otlptracehttp.New(
exporter, _ := otlptracehttp.New(
context.Background(),
opts...,
)
return exporter
}

return NewNoopExporter(), nil
return NewNoopExporter()
}

func InitTracer(config configPkg.TracingConfig, version string) (trace.Tracer, error) {
exporter, err := getExporter(config)
if err != nil {
return nil, fmt.Errorf("error creating exporter: %w", err)
}
func InitTracer(config configPkg.TracingConfig, version string) trace.Tracer {
exporter := getExporter(config)
tp := NewTraceProvider(exporter, version)
otel.SetTracerProvider(tp)

tp, err := NewTraceProvider(exporter, version)
if err != nil {
return nil, fmt.Errorf("error initializizng provider: %w", err)
}
return tp.Tracer("main")
}

func InitNoopTracer() trace.Tracer {
tp := NewTraceProvider(NewNoopExporter(), "1.2.3")
otel.SetTracerProvider(tp)

return tp.Tracer("main"), nil
return tp.Tracer("main")
}
Loading

0 comments on commit 1e14e5f

Please sign in to comment.