Skip to content

Commit

Permalink
Merge pull request #72 from DefiantLabs/feat/configs-testing
Browse files Browse the repository at this point in the history
Feat/configs testing
  • Loading branch information
pharr117 authored Feb 18, 2024
2 parents aeaa7dc + 0a78346 commit 9e30b54
Show file tree
Hide file tree
Showing 6 changed files with 268 additions and 75 deletions.
3 changes: 1 addition & 2 deletions .github/workflows/go-test.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -23,5 +23,4 @@ jobs:
- uses: actions/checkout@v3
- name: test code
run: |
cd db
go test -v ./...
go test -timeout 30m -v ./...
89 changes: 89 additions & 0 deletions config/common_configs_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
package config

import (
"testing"

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

type ConfigTestSuite struct {
suite.Suite
}

func (suite *ConfigTestSuite) TestValidateDatabaseConf() {
conf := Database{
Host: "",
Port: "",
Database: "",
User: "",
Password: "",
}

err := validateDatabaseConf(conf)
suite.Require().Error(err)
conf.Host = "fake-host"

err = validateDatabaseConf(conf)
suite.Require().Error(err)

conf.Port = "5432"
err = validateDatabaseConf(conf)
suite.Require().Error(err)

conf.Database = "fake-database"
err = validateDatabaseConf(conf)
suite.Require().Error(err)

conf.User = "fake-user"
err = validateDatabaseConf(conf)
suite.Require().Error(err)

conf.Password = "fake-password"
err = validateDatabaseConf(conf)
suite.Require().NoError(err)
}

func (suite *ConfigTestSuite) TestValidateProbeConf() {
conf := Probe{
RPC: "",
AccountPrefix: "",
ChainID: "",
ChainName: "",
}

_, err := validateProbeConf(conf)
suite.Require().Error(err)

conf.RPC = "fake-rpc"
_, err = validateProbeConf(conf)
suite.Require().Error(err)

conf.AccountPrefix = "fake-account-prefix"
_, err = validateProbeConf(conf)
suite.Require().Error(err)

conf.ChainID = "fake-chain-id"
_, err = validateProbeConf(conf)
suite.Require().Error(err)

conf.ChainName = "fake-chain-name"
_, err = validateProbeConf(conf)
suite.Require().NoError(err)
}

func (suite *ConfigTestSuite) TestValidateThrottlingConf() {
conf := throttlingBase{
Throttling: -1,
}

err := validateThrottlingConf(conf)
suite.Require().Error(err)

conf.Throttling = 0.5
err = validateThrottlingConf(conf)
suite.Require().NoError(err)
}

func TestConfigSuite(t *testing.T) {
suite.Run(t, new(ConfigTestSuite))
}
101 changes: 101 additions & 0 deletions config/filter_config_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
package config

import (
"encoding/json"
"testing"

"github.com/DefiantLabs/cosmos-indexer/db/models"
"github.com/DefiantLabs/cosmos-indexer/filter"
"github.com/stretchr/testify/suite"
)

type FilterConfigTestSuite struct {
suite.Suite
}

//nolint:dogsled
func (suite *FilterConfigTestSuite) TestParseJSONFilterConfig() {
conf := blockFilterConfigs{}

beginFilterEventTypeInvalid, err := getMockEventTypeBytes(true)

suite.Require().NoError(err)

conf.BeginBlockFilters = []json.RawMessage{beginFilterEventTypeInvalid}

confBytes, err := json.Marshal(conf)
suite.Require().NoError(err)

_, _, _, _, _, err = ParseJSONFilterConfig(confBytes)

suite.Require().Error(err)

beginFilterEventTypeValid, err := getMockEventTypeBytes(false)
suite.Require().NoError(err)

conf.BeginBlockFilters = []json.RawMessage{beginFilterEventTypeValid}

confBytes, err = json.Marshal(conf)
suite.Require().NoError(err)

beginBlockFilters, _, _, _, _, err := ParseJSONFilterConfig(confBytes)

suite.Require().NoError(err)
suite.Require().Len(beginBlockFilters, 1)
suite.Require().True(beginBlockFilters[0].EventMatches(filter.EventData{Event: models.BlockEvent{BlockEventType: models.BlockEventType{Type: "coin_received"}}}))
suite.Require().False(beginBlockFilters[0].EventMatches(filter.EventData{Event: models.BlockEvent{BlockEventType: models.BlockEventType{Type: "dne"}}}))

conf.BeginBlockFilters = []json.RawMessage{}

messageTypeFilterInvalid, err := getMockMessageTypeBytes(true)
suite.Require().NoError(err)

conf.MessageTypeFilters = []json.RawMessage{messageTypeFilterInvalid}

confBytes, err = json.Marshal(conf)
suite.Require().NoError(err)

_, _, _, _, _, err = ParseJSONFilterConfig(confBytes)
suite.Require().Error(err)

messageTypeFilterValid, err := getMockMessageTypeBytes(false)
suite.Require().NoError(err)

conf.MessageTypeFilters = []json.RawMessage{messageTypeFilterValid}

confBytes, err = json.Marshal(conf)
suite.Require().NoError(err)

_, _, _, _, messageTypeFilters, err := ParseJSONFilterConfig(confBytes)

suite.Require().NoError(err)
suite.Require().Len(messageTypeFilters, 1)
suite.Require().True(messageTypeFilters[0].MessageTypeMatches(filter.MessageTypeData{MessageType: "/cosmos.bank.v1beta1.MsgSend"}))
suite.Require().False(messageTypeFilters[0].MessageTypeMatches(filter.MessageTypeData{MessageType: "dne"}))
}

func getMockEventTypeBytes(skipEventTypeKey bool) (json.RawMessage, error) {
mockEventType := make(map[string]any)

mockEventType["type"] = "event_type"
if !skipEventTypeKey {
mockEventType["event_type"] = "coin_received"
}

return json.Marshal(mockEventType)
}

func getMockMessageTypeBytes(skipMessageTypeKey bool) (json.RawMessage, error) {
mockMessageType := make(map[string]any)

mockMessageType["type"] = "message_type"
if !skipMessageTypeKey {
mockMessageType["message_type"] = "/cosmos.bank.v1beta1.MsgSend"
}

return json.Marshal(mockMessageType)
}

func TestFilterConfigTestSuite(t *testing.T) {
suite.Run(t, new(FilterConfigTestSuite))
}
11 changes: 5 additions & 6 deletions config/index_config.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,12 +9,11 @@ import (
)

type IndexConfig struct {
Database Database
ConfigFileLocation string
Base indexBase
Log log
Probe Probe
Flags flags
Database Database
Base indexBase
Log log
Probe Probe
Flags flags
}

type indexBase struct {
Expand Down
72 changes: 72 additions & 0 deletions config/index_config_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
package config

import (
"testing"

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

type IndexConfigTestSuite struct {
suite.Suite
}

func (suite *IndexConfigTestSuite) TestIndexConfig() {
conf := IndexConfig{
// Setup valid configs for everything but base, these are tested elsewhere
Database: Database{
Host: "fake-host",
Port: "5432",
Database: "fake-database",
User: "fake-user",
Password: "fake-password",
LogLevel: "info",
},
Log: log{
Level: "info",
Path: "",
Pretty: false,
},
Probe: Probe{
RPC: "fake-rpc",
AccountPrefix: "cosmos",
ChainID: "fake-chain-id",
ChainName: "fake-chain-name",
},
Flags: flags{
IndexTxMessageRaw: false,
},
}

err := conf.Validate()
suite.Require().Error(err)

conf.Base.TransactionIndexingEnabled = true

err = conf.Validate()
suite.Require().Error(err)

conf.Base.StartBlock = 1
err = conf.Validate()
suite.Require().Error(err)

conf.Base.EndBlock = 2
err = conf.Validate()
suite.Require().NoError(err)
}

func (suite *IndexConfigTestSuite) TestCheckSuperfluousIndexKeys() {
keys := []string{
"fake-key",
}
validKeys := CheckSuperfluousIndexKeys(keys)
suite.Require().Len(validKeys, 1)

keys = append(keys, "base.start-block")

validKeys = CheckSuperfluousIndexKeys(keys)
suite.Require().Len(validKeys, 1)
}

func TestIndexConfig(t *testing.T) {
suite.Run(t, new(IndexConfigTestSuite))
}
67 changes: 0 additions & 67 deletions config/update_denoms_config.go

This file was deleted.

0 comments on commit 9e30b54

Please sign in to comment.