From fe22e9a5da5dc7c130c679e536a95b8d1d4434e0 Mon Sep 17 00:00:00 2001 From: testinginprod <98415576+testinginprod@users.noreply.github.com> Date: Thu, 6 Jun 2024 00:11:33 +0200 Subject: [PATCH] feat(core): add coretest package (#20487) Co-authored-by: unknown unknown --- .github/dependabot.yml | 9 + .github/pr_labeler.yml | 2 + .github/workflows/test.yml | 30 +++ client/v2/go.mod | 1 + collections/collections_test.go | 41 +-- collections/colltest/store.go | 61 ----- collections/go.mod | 42 +-- collections/go.sum | 189 +------------ collections/indexed_map_test.go | 7 +- collections/indexes/indexes_test.go | 44 +-- collections/lookup_map_test.go | 5 +- collections/triple_test.go | 4 +- core/testing/CHANGELOG.md | 38 +++ core/testing/context.go | 31 +++ core/testing/go.mod | 18 ++ core/testing/go.sum | 17 ++ core/testing/memdb.go | 254 ++++++++++++++++++ core/testing/memdb_test.go | 59 ++++ core/testing/services_test.go | 35 +++ core/testing/sonar-project.properties | 16 ++ core/testing/store.go | 27 ++ go.mod | 2 + go.work.example | 1 + server/v2/cometbft/go.mod | 1 + simapp/go.mod | 2 + tests/go.mod | 2 + types/simulation/collections_test.go | 5 +- x/accounts/accountstd/test_util.go | 5 +- x/accounts/defaults/lockup/go.mod | 2 + x/accounts/genesis_test.go | 13 +- x/accounts/go.mod | 2 + .../internal/implementation/context_test.go | 5 +- x/accounts/utils_test.go | 5 +- x/auth/go.mod | 2 + x/auth/migrations/v5/migrate_test.go | 8 +- x/authz/go.mod | 3 + x/bank/go.mod | 3 + x/circuit/go.mod | 1 + x/consensus/go.mod | 2 + x/consensus/go.sum | 2 - x/distribution/go.mod | 1 + x/epochs/go.mod | 1 + x/evidence/go.mod | 1 + x/feegrant/go.mod | 3 + x/gov/go.mod | 3 + x/group/go.mod | 2 + x/mint/go.mod | 1 + x/nft/go.mod | 1 + x/params/go.mod | 1 + x/protocolpool/go.mod | 1 + x/slashing/go.mod | 1 + x/staking/go.mod | 3 + x/upgrade/go.mod | 1 + 53 files changed, 641 insertions(+), 375 deletions(-) delete mode 100644 collections/colltest/store.go create mode 100644 core/testing/CHANGELOG.md create mode 100644 core/testing/context.go create mode 100644 core/testing/go.mod create mode 100644 core/testing/go.sum create mode 100644 core/testing/memdb.go create mode 100644 core/testing/memdb_test.go create mode 100644 core/testing/services_test.go create mode 100644 core/testing/sonar-project.properties create mode 100644 core/testing/store.go diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 9fd72f889f80..db7f4be06984 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -61,6 +61,15 @@ updates: labels: - "A:automerge" - dependencies + - package-ecosystem: gomod + directory: "/core/testing" + schedule: + interval: weekly + day: thursday + time: "01:30" + labels: + - "A:automerge" + - dependencies - package-ecosystem: gomod directory: "/depinject" schedule: diff --git a/.github/pr_labeler.yml b/.github/pr_labeler.yml index e8ab68592faa..3dd370bff2c4 100644 --- a/.github/pr_labeler.yml +++ b/.github/pr_labeler.yml @@ -16,6 +16,8 @@ - store/**/* "C:collections": - collections/**/* +"C:core/testing": + - core/testing/**/* "C:log": - log/* "C:orm": diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 1d8533b10bc9..d5546eb892c4 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -335,6 +335,36 @@ jobs: SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} with: projectBaseDir: core/ + test-coretesting: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-go@v5 + with: + go-version: "1.20" + check-latest: true + cache: true + cache-dependency-path: core/testing/go.sum + - uses: technote-space/get-diff-action@v6.1.2 + id: git_diff + with: + PATTERNS: | + core/testing/**/*.go + core/testing/go.mod + core/testing/go.sum + - name: tests + if: env.GIT_DIFF + run: | + cd core/testing + go test -mod=readonly -timeout 30m -coverprofile=coverage.out -covermode=atomic -tags='norace ledger test_ledger_mock' ./... + - name: sonarcloud + if: ${{ env.GIT_DIFF && !github.event.pull_request.draft && env.SONAR_TOKEN != null }} + uses: SonarSource/sonarcloud-github-action@master + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} + with: + projectBaseDir: core/testing/ test-depinject: runs-on: ubuntu-latest diff --git a/client/v2/go.mod b/client/v2/go.mod index d6711448e2e8..c0f72800584b 100644 --- a/client/v2/go.mod +++ b/client/v2/go.mod @@ -177,6 +177,7 @@ replace github.com/cosmos/cosmos-sdk => ./../../ replace ( cosmossdk.io/api => ./../../api cosmossdk.io/core => ./../../core + cosmossdk.io/core/testing => ../../core/testing cosmossdk.io/depinject => ./../../depinject cosmossdk.io/log => ./../../log cosmossdk.io/store => ./../../store diff --git a/collections/collections_test.go b/collections/collections_test.go index f9a799fbf2ed..e6d6c3f824f8 100644 --- a/collections/collections_test.go +++ b/collections/collections_test.go @@ -5,49 +5,16 @@ import ( "math" "testing" - db "github.com/cosmos/cosmos-db" "github.com/stretchr/testify/require" "cosmossdk.io/core/store" + "cosmossdk.io/core/testing" ) -type testStore struct { - db db.DB -} - -func (t testStore) OpenKVStore(ctx context.Context) store.KVStore { - return t -} - -func (t testStore) Get(key []byte) ([]byte, error) { - return t.db.Get(key) -} - -func (t testStore) Has(key []byte) (bool, error) { - return t.db.Has(key) -} - -func (t testStore) Set(key, value []byte) error { - return t.db.Set(key, value) -} - -func (t testStore) Delete(key []byte) error { - return t.db.Delete(key) -} - -func (t testStore) Iterator(start, end []byte) (store.Iterator, error) { - return t.db.Iterator(start, end) -} - -func (t testStore) ReverseIterator(start, end []byte) (store.Iterator, error) { - return t.db.ReverseIterator(start, end) -} - -var _ store.KVStore = testStore{} - func deps() (store.KVStoreService, context.Context) { - kv := db.NewMemDB() - return &testStore{kv}, context.Background() + ctx := coretesting.Context() + kv := coretesting.KVStoreService(ctx, "test") + return kv, ctx } func TestPrefix(t *testing.T) { diff --git a/collections/colltest/store.go b/collections/colltest/store.go deleted file mode 100644 index d29c3c8729aa..000000000000 --- a/collections/colltest/store.go +++ /dev/null @@ -1,61 +0,0 @@ -package colltest - -import ( - "context" - - db "github.com/cosmos/cosmos-db" - - "cosmossdk.io/core/store" -) - -type contextStoreKey struct{} - -// MockStore returns a mock store.KVStoreService and a mock context.Context. -// They can be used to test collections. The StoreService.NewStoreContext -// can be used to instantiate a new empty KVStore. -func MockStore() (*StoreService, context.Context) { - kv := db.NewMemDB() - ctx := context.WithValue(context.Background(), contextStoreKey{}, &testStore{kv}) - return &StoreService{}, ctx -} - -type StoreService struct{} - -func (s StoreService) OpenKVStore(ctx context.Context) store.KVStore { - return ctx.Value(contextStoreKey{}).(store.KVStore) -} - -func (s StoreService) NewStoreContext() context.Context { - kv := db.NewMemDB() - return context.WithValue(context.Background(), contextStoreKey{}, &testStore{kv}) -} - -type testStore struct { - db db.DB -} - -func (t testStore) Get(key []byte) ([]byte, error) { - return t.db.Get(key) -} - -func (t testStore) Has(key []byte) (bool, error) { - return t.db.Has(key) -} - -func (t testStore) Set(key, value []byte) error { - return t.db.Set(key, value) -} - -func (t testStore) Delete(key []byte) error { - return t.db.Delete(key) -} - -func (t testStore) Iterator(start, end []byte) (store.Iterator, error) { - return t.db.Iterator(start, end) -} - -func (t testStore) ReverseIterator(start, end []byte) (store.Iterator, error) { - return t.db.ReverseIterator(start, end) -} - -var _ store.KVStore = testStore{} diff --git a/collections/go.mod b/collections/go.mod index d07261a4e5b2..75d243f344d0 100644 --- a/collections/go.mod +++ b/collections/go.mod @@ -3,44 +3,19 @@ module cosmossdk.io/collections go 1.21 require ( - cosmossdk.io/core v0.11.0 - github.com/cosmos/cosmos-db v1.0.2 + cosmossdk.io/core v0.12.0 + cosmossdk.io/core/testing v0.0.0-00010101000000-000000000000 github.com/stretchr/testify v1.9.0 pgregory.net/rapid v1.1.0 ) require ( - cosmossdk.io/api v0.7.5 // indirect - cosmossdk.io/depinject v1.0.0-alpha.4 // indirect - github.com/DataDog/zstd v1.5.5 // indirect - github.com/beorn7/perks v1.0.1 // indirect - github.com/cespare/xxhash/v2 v2.2.0 // indirect - github.com/cockroachdb/errors v1.11.1 // indirect - github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b // indirect - github.com/cockroachdb/pebble v1.1.0 // indirect - github.com/cockroachdb/redact v1.1.5 // indirect - github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06 // indirect - github.com/cosmos/cosmos-proto v1.0.0-beta.5 // indirect - github.com/davecgh/go-spew v1.1.1 // indirect - github.com/fsnotify/fsnotify v1.6.0 // indirect - github.com/getsentry/sentry-go v0.27.0 // indirect - github.com/gogo/protobuf v1.3.2 // indirect - github.com/golang/snappy v0.0.4 // indirect - github.com/google/btree v1.1.2 // indirect - github.com/klauspost/compress v1.17.7 // indirect - github.com/kr/pretty v0.3.1 // indirect - github.com/kr/text v0.2.0 // indirect - github.com/linxGnu/grocksdb v1.8.14 // indirect - github.com/onsi/gomega v1.20.0 // indirect - github.com/pkg/errors v0.9.1 // indirect + github.com/cosmos/gogoproto v1.4.12 // indirect + github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect + github.com/google/go-cmp v0.6.0 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect - github.com/prometheus/client_golang v1.19.1 // indirect - github.com/prometheus/client_model v0.6.1 // indirect - github.com/prometheus/common v0.54.0 // indirect - github.com/prometheus/procfs v0.12.0 // indirect github.com/rogpeppe/go-internal v1.12.0 // indirect - github.com/spf13/cast v1.6.0 // indirect - github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d // indirect + github.com/tidwall/btree v1.7.0 // indirect golang.org/x/exp v0.0.0-20240222234643-814bf88cf225 // indirect golang.org/x/net v0.25.0 // indirect golang.org/x/sys v0.20.0 // indirect @@ -50,3 +25,8 @@ require ( google.golang.org/protobuf v1.34.1 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) + +replace ( + cosmossdk.io/core => ../core + cosmossdk.io/core/testing => ../core/testing +) diff --git a/collections/go.sum b/collections/go.sum index c743825aa123..b80d26acaf1f 100644 --- a/collections/go.sum +++ b/collections/go.sum @@ -1,216 +1,39 @@ -cosmossdk.io/api v0.7.5 h1:eMPTReoNmGUm8DeiQL9DyM8sYDjEhWzL1+nLbI9DqtQ= -cosmossdk.io/api v0.7.5/go.mod h1:IcxpYS5fMemZGqyYtErK7OqvdM0C8kdW3dq8Q/XIG38= -cosmossdk.io/core v0.11.0 h1:vtIafqUi+1ZNAE/oxLOQQ7Oek2n4S48SWLG8h/+wdbo= -cosmossdk.io/core v0.11.0/go.mod h1:LaTtayWBSoacF5xNzoF8tmLhehqlA9z1SWiPuNC6X1w= -cosmossdk.io/depinject v1.0.0-alpha.4 h1:PLNp8ZYAMPTUKyG9IK2hsbciDWqna2z1Wsl98okJopc= -cosmossdk.io/depinject v1.0.0-alpha.4/go.mod h1:HeDk7IkR5ckZ3lMGs/o91AVUc7E596vMaOmslGFM3yU= -github.com/DataDog/zstd v1.5.5 h1:oWf5W7GtOLgp6bciQYDmhHHjdhYkALu6S/5Ni9ZgSvQ= -github.com/DataDog/zstd v1.5.5/go.mod h1:g4AWEaM3yOg3HYfnJ3YIawPnVdXJh9QME85blwSAmyw= -github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= -github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= -github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44= -github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= -github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= -github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= -github.com/cockroachdb/datadriven v1.0.3-0.20230413201302-be42291fc80f h1:otljaYPt5hWxV3MUfO5dFPFiOXg9CyG5/kCfayTqsJ4= -github.com/cockroachdb/datadriven v1.0.3-0.20230413201302-be42291fc80f/go.mod h1:a9RdTaap04u637JoCzcUoIcDmvwSUtcUFtT/C3kJlTU= -github.com/cockroachdb/errors v1.11.1 h1:xSEW75zKaKCWzR3OfxXUxgrk/NtT4G1MiOv5lWZazG8= -github.com/cockroachdb/errors v1.11.1/go.mod h1:8MUxA3Gi6b25tYlFEBGLf+D8aISL+M4MIpiWMSNRfxw= -github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b h1:r6VH0faHjZeQy818SGhaone5OnYfxFR/+AzdY3sf5aE= -github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b/go.mod h1:Vz9DsVWQQhf3vs21MhPMZpMGSht7O/2vFW2xusFUVOs= -github.com/cockroachdb/pebble v1.1.0 h1:pcFh8CdCIt2kmEpK0OIatq67Ln9uGDYY3d5XnE0LJG4= -github.com/cockroachdb/pebble v1.1.0/go.mod h1:sEHm5NOXxyiAoKWhoFxT8xMgd/f3RA6qUqQ1BXKrh2E= -github.com/cockroachdb/redact v1.1.5 h1:u1PMllDkdFfPWaNGMyLD1+so+aq3uUItthCFqzwPJ30= -github.com/cockroachdb/redact v1.1.5/go.mod h1:BVNblN9mBWFyMyqK1k3AAiSxhvhfK2oOZZ2lK+dpvRg= -github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06 h1:zuQyyAKVxetITBuuhv3BI9cMrmStnpT18zmgmTxunpo= -github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06/go.mod h1:7nc4anLGjupUW/PeY5qiNYsdNXj7zopG+eqsS7To5IQ= -github.com/cosmos/cosmos-db v1.0.2 h1:hwMjozuY1OlJs/uh6vddqnk9j7VamLv+0DBlbEXbAKs= -github.com/cosmos/cosmos-db v1.0.2/go.mod h1:Z8IXcFJ9PqKK6BIsVOB3QXtkKoqUOp1vRvPT39kOXEA= -github.com/cosmos/cosmos-proto v1.0.0-beta.5 h1:eNcayDLpip+zVLRLYafhzLvQlSmyab+RC5W7ZfmxJLA= -github.com/cosmos/cosmos-proto v1.0.0-beta.5/go.mod h1:hQGLpiIUloJBMdQMMWb/4wRApmI9hjHH05nefC0Ojec= -github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= -github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= -github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8= -github.com/frankban/quicktest v1.14.6/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0= -github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= -github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= -github.com/fsnotify/fsnotify v1.5.4/go.mod h1:OVB6XrOHzAwXMpEM7uPOzcehqUV2UqJxmVXmkdnm1bU= -github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= -github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw= -github.com/getsentry/sentry-go v0.27.0 h1:Pv98CIbtB3LkMWmXi4Joa5OOcwbmnX88sF5qbK3r3Ps= -github.com/getsentry/sentry-go v0.27.0/go.mod h1:lc76E2QywIyW8WuBnwl8Lc4bkmQH4+w1gwTf25trprY= -github.com/go-errors/errors v1.4.2 h1:J6MZopCL4uSllY1OfXM374weqZFFItUbrImctkmUxIA= -github.com/go-errors/errors v1.4.2/go.mod h1:sIVyrIiJhuEF+Pj9Ebtd6P/rEYROXFi3BopGUQ5a5Og= -github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE= -github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= -github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= -github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= -github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= -github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= -github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= -github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= -github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= -github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= -github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= -github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= -github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/google/btree v1.1.2 h1:xf4v41cLI2Z6FxbKm+8Bu+m8ifhj15JuZ9sa0jZCMUU= -github.com/google/btree v1.1.2/go.mod h1:qOPhT0dTNdNzV6Z/lhRX0YXUafgPLFUh+gZMl761Gm4= -github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/cosmos/gogoproto v1.4.12 h1:vB6Lbe/rtnYGjQuFxkPiPYiCybqFT8QvLipDZP8JpFE= +github.com/cosmos/gogoproto v1.4.12/go.mod h1:LnZob1bXRdUoqMMtwYlcR3wjiElmlC+FkjaZRv1/eLY= +github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= +github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= -github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= -github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= -github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= -github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= -github.com/klauspost/compress v1.17.7 h1:ehO88t2UGzQK66LMdE8tibEd1ErmzZjNEqWkjLAKQQg= -github.com/klauspost/compress v1.17.7/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw= github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= -github.com/linxGnu/grocksdb v1.8.14 h1:HTgyYalNwBSG/1qCQUIott44wU5b2Y9Kr3z7SK5OfGQ= -github.com/linxGnu/grocksdb v1.8.14/go.mod h1:QYiYypR2d4v63Wj1adOOfzglnoII0gLj3PNh4fZkcFA= -github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= -github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= -github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= -github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= -github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0= -github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE= -github.com/onsi/ginkgo v1.16.5/go.mod h1:+E8gABHa3K6zRBolWtd+ROzc/U5bkGt0FwiG042wbpU= -github.com/onsi/ginkgo/v2 v2.1.3/go.mod h1:vw5CSIxN1JObi/U8gcbwft7ZxR2dgaR70JSE3/PpL4c= -github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= -github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= -github.com/onsi/gomega v1.17.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY= -github.com/onsi/gomega v1.19.0/go.mod h1:LY+I3pBVzYsTBU1AnDwOSxaYi9WoWiqgwooUqq9yPro= -github.com/onsi/gomega v1.20.0 h1:8W0cWlwFkflGPLltQvLRB7ZVD5HuP6ng320w2IS245Q= -github.com/onsi/gomega v1.20.0/go.mod h1:DtrZpjmvpn2mPm4YWQa0/ALMDj9v4YxLgojwPeREyVo= -github.com/pingcap/errors v0.11.4 h1:lFuQV/oaUMGcD2tqt+01ROSmJs75VG1ToEOkZIZ4nE4= -github.com/pingcap/errors v0.11.4/go.mod h1:Oi8TUi2kEtXXLMJk9l1cGmz20kV3TaQ0usTwv5KuLY8= -github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= -github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= -github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/prometheus/client_golang v1.19.1 h1:wZWJDwK+NameRJuPGDhlnFgx8e8HN3XHQeLaYJFJBOE= -github.com/prometheus/client_golang v1.19.1/go.mod h1:mP78NwGzrVks5S2H6ab8+ZZGJLZUq1hoULYBAYBw1Ho= -github.com/prometheus/client_model v0.6.1 h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p8ais2e9E= -github.com/prometheus/client_model v0.6.1/go.mod h1:OrxVMOVHjw3lKMa8+x6HeMGkHMQyHDk9E3jmP2AmGiY= -github.com/prometheus/common v0.54.0 h1:ZlZy0BgJhTwVZUn7dLOkwCZHUkrAqd3WYtcFCWnM1D8= -github.com/prometheus/common v0.54.0/go.mod h1:/TQgMJP5CuVYveyT7n/0Ix8yLNNXy9yRSkhnLTHPDIQ= -github.com/prometheus/procfs v0.12.0 h1:jluTpSng7V9hY0O2R9DzzJHYb2xULk9VTR1V1R/k6Bo= -github.com/prometheus/procfs v0.12.0/go.mod h1:pcuDEFsWDnvcgNzo4EEweacyhjeA9Zk3cnaOZAZEfOo= -github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= github.com/rogpeppe/go-internal v1.12.0 h1:exVL4IDcn6na9z1rAb56Vxr+CgyK3nn3O+epU5NdKM8= github.com/rogpeppe/go-internal v1.12.0/go.mod h1:E+RYuTGaKKdloAfM02xzb0FW3Paa99yedzYV+kq4uf4= -github.com/spf13/cast v1.6.0 h1:GEiTHELF+vaR5dhz3VqZfFSzZjYbgeKDpBxQVS4GYJ0= -github.com/spf13/cast v1.6.0/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cAdo= -github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= -github.com/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1FQKckRals= github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= -github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d h1:vfofYNRScrDdvS342BElfbETmL1Aiz3i2t0zfRj16Hs= -github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d/go.mod h1:RRCYJbIwD5jmqPI9XoAFR0OcDxqUctll6zUj/+B4S48= -github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +github.com/tidwall/btree v1.7.0 h1:L1fkJH/AuEh5zBnnBbmTwQ5Lt+bRJ5A8EWecslvo9iI= +github.com/tidwall/btree v1.7.0/go.mod h1:twD9XRA5jj9VUQGELzDO4HPQTNJsoWWfYEL+EUQ2cKY= golang.org/x/exp v0.0.0-20240222234643-814bf88cf225 h1:LfspQV/FYTatPTr/3HzIcmiUFH7PGP+OQ6mgDYo3yuQ= golang.org/x/exp v0.0.0-20240222234643-814bf88cf225/go.mod h1:CxmFvTBINI24O/j8iY7H1xHzx2i4OsyguNBmN/uPtqc= -golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk= -golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/net v0.0.0-20220607020251-c690dde0001d/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.25.0 h1:d/OCCoBEUq33pjydKrGQhw7IlUPI2Oylr+8qLx49kac= golang.org/x/net v0.25.0/go.mod h1:JkAGAh7GEvH74S6FOH42FLoXpXbE/aqXSrIQjXgsiwM= -golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.6.0 h1:5BMeUDZ7vkXGfEr1x9B4bRcTH4lpkTkpdh0T/J+qjbQ= -golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= -golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.20.0 h1:Od9JTbYCk261bKm4M/mw7AklTlFYIa0bIp9BgSm1S8Y= golang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.15.0 h1:h1V/4gjBv8v9cjcR6+AR5+/cIYK5N/WAgiv4xlsEtAk= golang.org/x/text v0.15.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= -golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20220517211312-f3a8303e98df/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= google.golang.org/genproto/googleapis/rpc v0.0.0-20240513163218-0867130af1f8 h1:mxSlqyb8ZAHsYDCfiXN1EDdNTdvjUJSLY+OnAUtYNYA= google.golang.org/genproto/googleapis/rpc v0.0.0-20240513163218-0867130af1f8/go.mod h1:I7Y+G38R2bu5j1aLzfFmQfTcU/WnFuqDwLZAbvKTKpM= google.golang.org/grpc v1.64.0 h1:KH3VH9y/MgNQg1dE7b3XfVK0GsPSIzJwdF617gUSbvY= google.golang.org/grpc v1.64.0/go.mod h1:oxjF8E3FBnjp+/gVFYdWacaLDx9na1aqy9oovLpxQYg= -google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= -google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= -google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= -google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= -google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= -google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= -google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.34.1 h1:9ddQBjfCyZPOHPUiPxpYESBLc+T8P3E+Vo4IbKZgFWg= google.golang.org/protobuf v1.34.1/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/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/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= -gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= -gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= -gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gotest.tools/v3 v3.5.1 h1:EENdUnS3pdur5nybKYIh2Vfgc8IUNBjxDPSjtiJcOzU= -gotest.tools/v3 v3.5.1/go.mod h1:isy3WKz7GK6uNw/sbHzfKBLvlvXwUyV06n6brMxxopU= pgregory.net/rapid v1.1.0 h1:CMa0sjHSru3puNx+J0MIAuiiEV4N0qj8/cMWGBBCsjw= pgregory.net/rapid v1.1.0/go.mod h1:PY5XlDGj0+V1FCq0o192FdRhpKHGTRIWBgqjDBTrq04= diff --git a/collections/indexed_map_test.go b/collections/indexed_map_test.go index 33ede10d8bc0..f7eba42d401e 100644 --- a/collections/indexed_map_test.go +++ b/collections/indexed_map_test.go @@ -8,6 +8,7 @@ import ( "cosmossdk.io/collections" "cosmossdk.io/collections/colltest" "cosmossdk.io/collections/indexes" + "cosmossdk.io/core/testing" ) type company struct { @@ -44,7 +45,9 @@ func newTestIndexedMap(schema *collections.SchemaBuilder) *collections.IndexedMa } func TestIndexedMap(t *testing.T) { - sk, ctx := colltest.MockStore() + ctx := coretesting.Context() + sk := coretesting.KVStoreService(ctx, "test") + schema := collections.NewSchemaBuilder(sk) im := newTestIndexedMap(schema) @@ -122,7 +125,7 @@ func newInferIndex(schema *collections.SchemaBuilder) *inferIndex { } func TestIndexedMapInfer(t *testing.T) { - sk, _ := colltest.MockStore() + sk := coretesting.KVStoreService(coretesting.Context(), "test") schema := collections.NewSchemaBuilder(sk) _, err := collections.NewIndexedMapSafe(schema, collections.NewPrefix(0), "im", collections.StringKey, colltest.MockValueCodec[company](), newInferIndex(schema)) diff --git a/collections/indexes/indexes_test.go b/collections/indexes/indexes_test.go index 352ffb690fc0..470b6d4a6200 100644 --- a/collections/indexes/indexes_test.go +++ b/collections/indexes/indexes_test.go @@ -3,50 +3,14 @@ package indexes import ( "context" - db "github.com/cosmos/cosmos-db" - "cosmossdk.io/core/store" + "cosmossdk.io/core/testing" ) -// TODO remove this when we add testStore to core/store. - -type testStore struct { - db db.DB -} - -func (t testStore) OpenKVStore(ctx context.Context) store.KVStore { - return t -} - -func (t testStore) Get(key []byte) ([]byte, error) { - return t.db.Get(key) -} - -func (t testStore) Has(key []byte) (bool, error) { - return t.db.Has(key) -} - -func (t testStore) Set(key, value []byte) error { - return t.db.Set(key, value) -} - -func (t testStore) Delete(key []byte) error { - return t.db.Delete(key) -} - -func (t testStore) Iterator(start, end []byte) (store.Iterator, error) { - return t.db.Iterator(start, end) -} - -func (t testStore) ReverseIterator(start, end []byte) (store.Iterator, error) { - return t.db.ReverseIterator(start, end) -} - -var _ store.KVStore = testStore{} - func deps() (store.KVStoreService, context.Context) { - kv := db.NewMemDB() - return &testStore{kv}, context.Background() + ctx := coretesting.Context() + kv := coretesting.KVStoreService(ctx, "test") + return kv, ctx } type company struct { diff --git a/collections/lookup_map_test.go b/collections/lookup_map_test.go index 13ef74159727..74d3cbac6b46 100644 --- a/collections/lookup_map_test.go +++ b/collections/lookup_map_test.go @@ -6,11 +6,12 @@ import ( "github.com/stretchr/testify/require" "cosmossdk.io/collections" - "cosmossdk.io/collections/colltest" + "cosmossdk.io/core/testing" ) func TestLookupMap(t *testing.T) { - sk, ctx := colltest.MockStore() + ctx := coretesting.Context() + sk := coretesting.KVStoreService(ctx, "test") schema := collections.NewSchemaBuilder(sk) lm := collections.NewLookupMap(schema, collections.NewPrefix("hi"), "lm", collections.Uint64Key, collections.Uint64Value) diff --git a/collections/triple_test.go b/collections/triple_test.go index fea1b662c15c..5ea53b3fe667 100644 --- a/collections/triple_test.go +++ b/collections/triple_test.go @@ -7,6 +7,7 @@ import ( "cosmossdk.io/collections" "cosmossdk.io/collections/colltest" + "cosmossdk.io/core/testing" ) func TestTriple(t *testing.T) { @@ -18,7 +19,8 @@ func TestTriple(t *testing.T) { } func TestTripleRange(t *testing.T) { - sk, ctx := colltest.MockStore() + ctx := coretesting.Context() + sk := coretesting.KVStoreService(ctx, "test") schema := collections.NewSchemaBuilder(sk) // this is a key composed of 3 parts: uint64, string, []byte kc := collections.TripleKeyCodec(collections.Uint64Key, collections.StringKey, collections.BytesKey) diff --git a/core/testing/CHANGELOG.md b/core/testing/CHANGELOG.md new file mode 100644 index 000000000000..6975f4ddb716 --- /dev/null +++ b/core/testing/CHANGELOG.md @@ -0,0 +1,38 @@ + + +# Changelog + +## [Unreleased] + diff --git a/core/testing/context.go b/core/testing/context.go new file mode 100644 index 000000000000..7cda34ab7043 --- /dev/null +++ b/core/testing/context.go @@ -0,0 +1,31 @@ +package coretesting + +import ( + "context" + + "cosmossdk.io/core/store" +) + +type dummyKey struct{} + +func Context() context.Context { + dummy := &dummyCtx{ + stores: map[string]store.KVStore{}, + } + + ctx := context.WithValue(context.Background(), dummyKey{}, dummy) + return ctx +} + +type dummyCtx struct { + stores map[string]store.KVStore +} + +func unwrap(ctx context.Context) *dummyCtx { + dummy := ctx.Value(dummyKey{}) + if dummy == nil { + panic("invalid ctx without dummy") + } + + return dummy.(*dummyCtx) +} diff --git a/core/testing/go.mod b/core/testing/go.mod new file mode 100644 index 000000000000..8dace714ae8b --- /dev/null +++ b/core/testing/go.mod @@ -0,0 +1,18 @@ +module cosmossdk.io/core/testing + +go 1.20 + +replace cosmossdk.io/core => ../ + +require ( + cosmossdk.io/core v0.12.0 + github.com/stretchr/testify v1.9.0 + github.com/tidwall/btree v1.7.0 +) + +require ( + github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect + github.com/kr/text v0.2.0 // indirect + github.com/pmezard/go-difflib v1.0.0 // indirect + gopkg.in/yaml.v3 v3.0.1 // indirect +) diff --git a/core/testing/go.sum b/core/testing/go.sum new file mode 100644 index 000000000000..47b87a45f871 --- /dev/null +++ b/core/testing/go.sum @@ -0,0 +1,17 @@ +github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= +github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= +github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= +github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= +github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/rogpeppe/go-internal v1.11.0 h1:cWPaGQEPrBb5/AsnsZesgZZ9yb1OQ+GOISoDNXVBh4M= +github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= +github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= +github.com/tidwall/btree v1.7.0 h1:L1fkJH/AuEh5zBnnBbmTwQ5Lt+bRJ5A8EWecslvo9iI= +github.com/tidwall/btree v1.7.0/go.mod h1:twD9XRA5jj9VUQGELzDO4HPQTNJsoWWfYEL+EUQ2cKY= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/core/testing/memdb.go b/core/testing/memdb.go new file mode 100644 index 000000000000..b3f257127583 --- /dev/null +++ b/core/testing/memdb.go @@ -0,0 +1,254 @@ +package coretesting + +import ( + "bytes" + "errors" + + "github.com/tidwall/btree" + + "cosmossdk.io/core/store" +) + +const ( + // The approximate number of items and children per B-tree node. Tuned with benchmarks. + // copied from memdb. + bTreeDegree = 32 +) + +var errKeyEmpty = errors.New("key cannot be empty") + +var _ store.KVStore = (*memDB)(nil) + +// memDB a lightweight memory db +type memDB struct { + tree *btree.BTreeG[item] +} + +// newMemDB creates a wrapper around `btree.BTreeG`. +func newMemDB() memDB { + return memDB{ + tree: btree.NewBTreeGOptions(byKeys, btree.Options{ + Degree: bTreeDegree, + NoLocks: true, + }), + } +} + +// set adds a new key-value pair to the change set's tree. +func (bt memDB) set(key, value []byte) { + bt.tree.Set(newItem(key, value)) +} + +// get retrieves the value associated with the given key from the memDB's tree. +func (bt memDB) get(key []byte) (value []byte, found bool) { + it, found := bt.tree.Get(item{key: key}) + return it.value, found +} + +// delete removes the value associated with the given key from the change set. +// If the key does not exist in the change set, this method does nothing. +func (bt memDB) delete(key []byte) { + bt.tree.Delete(item{key: key}) +} + +// iterator returns a new iterator over the key-value pairs in the memDB +// that have keys greater than or equal to the start key and less than the end key. +func (bt memDB) iterator(start, end []byte) (store.Iterator, error) { + if (start != nil && len(start) == 0) || (end != nil && len(end) == 0) { + return nil, errKeyEmpty + } + return newMemIterator(start, end, bt.tree, true), nil +} + +// reverseIterator returns a new iterator that iterates over the key-value pairs in reverse order +// within the specified range [start, end) in the memDB's tree. +// If start or end is an empty byte slice, it returns an error indicating that the key is empty. +func (bt memDB) reverseIterator(start, end []byte) (store.Iterator, error) { + if (start != nil && len(start) == 0) || (end != nil && len(end) == 0) { + return nil, errKeyEmpty + } + return newMemIterator(start, end, bt.tree, false), nil +} + +// KV impl + +func (bt memDB) Get(key []byte) ([]byte, error) { + value, _ := bt.get(key) + return value, nil +} + +func (bt memDB) Has(key []byte) (bool, error) { + _, found := bt.get(key) + return found, nil +} + +func (bt memDB) Set(key, value []byte) error { + bt.set(key, value) + return nil +} + +func (bt memDB) Delete(key []byte) error { + bt.delete(key) + return nil +} + +func (bt memDB) Iterator(start, end []byte) (store.Iterator, error) { + return bt.iterator(start, end) +} + +func (bt memDB) ReverseIterator(start, end []byte) (store.Iterator, error) { + return bt.reverseIterator(start, end) +} + +// item is a btree item with byte slices as keys and values +type item struct { + key []byte + value []byte +} + +// byKeys compares the items by key +func byKeys(a, b item) bool { + return bytes.Compare(a.key, b.key) == -1 +} + +// newItem creates a new pair item. +func newItem(key, value []byte) item { + return item{key: key, value: value} +} + +// memIterator iterates over iterKVCache items. +// if value is nil, means it was deleted. +// Implements Iterator. +type memIterator struct { + iter btree.IterG[item] + + start []byte + end []byte + ascending bool + valid bool +} + +// newMemIterator creates a new memory iterator for a given range of keys in a B-tree. +// The iterator starts at the specified start key and ends at the specified end key. +// The `tree` parameter is the B-tree to iterate over. +// The `ascending` parameter determines the direction of iteration. +// If `ascending` is true, the iterator will iterate in ascending order. +// If `ascending` is false, the iterator will iterate in descending order. +// The returned iterator is positioned at the first key that is greater than or equal to the start key. +// If the start key is nil, the iterator is positioned at the first key in the B-tree. +// If the end key is nil, the iterator is positioned at the last key in the B-tree. +// The iterator is inclusive of the start key and exclusive of the end key. +// The `valid` field of the iterator indicates whether the iterator is positioned at a valid key. +// The `start` and `end` fields of the iterator store the start and end keys respectively. +func newMemIterator(start, end []byte, tree *btree.BTreeG[item], ascending bool) *memIterator { + iter := tree.Iter() + var valid bool + if ascending { + if start != nil { + valid = iter.Seek(newItem(start, nil)) + } else { + valid = iter.First() + } + } else { + if end != nil { + valid = iter.Seek(newItem(end, nil)) + if !valid { + valid = iter.Last() + } else { + // end is exclusive + valid = iter.Prev() + } + } else { + valid = iter.Last() + } + } + + mi := &memIterator{ + iter: iter, + start: start, + end: end, + ascending: ascending, + valid: valid, + } + + if mi.valid { + mi.valid = mi.keyInRange(mi.Key()) + } + + return mi +} + +// Domain returns the start and end keys of the iterator's domain. +func (mi *memIterator) Domain() (start, end []byte) { + return mi.start, mi.end +} + +// Close releases any resources held by the iterator. +func (mi *memIterator) Close() error { + mi.iter.Release() + return nil +} + +var errInvalidIterator = errors.New("invalid iterator") + +// Error returns the error state of the iterator. +// If the iterator is not valid, it returns the errInvalidIterator error. +// Otherwise, it returns nil. +func (mi *memIterator) Error() error { + if !mi.Valid() { + return errInvalidIterator + } + return nil +} + +// Valid returns whether the iterator is currently pointing to a valid entry. +// It returns true if the iterator is valid, and false otherwise. +func (mi *memIterator) Valid() bool { + return mi.valid +} + +// Next advances the iterator to the next key-value pair. +// If the iterator is in ascending order, it moves to the next key-value pair. +// If the iterator is in descending order, it moves to the previous key-value pair. +// It also checks if the new key-value pair is within the specified range. +func (mi *memIterator) Next() { + mi.assertValid() + + if mi.ascending { + mi.valid = mi.iter.Next() + } else { + mi.valid = mi.iter.Prev() + } + + if mi.valid { + mi.valid = mi.keyInRange(mi.Key()) + } +} + +func (mi *memIterator) keyInRange(key []byte) bool { + if mi.ascending && mi.end != nil && bytes.Compare(key, mi.end) >= 0 { + return false + } + if !mi.ascending && mi.start != nil && bytes.Compare(key, mi.start) < 0 { + return false + } + return true +} + +// Key returns the key of the current item in the iterator. +func (mi *memIterator) Key() []byte { + return mi.iter.Item().key +} + +// Value returns the value of the current item in the iterator. +func (mi *memIterator) Value() []byte { + return mi.iter.Item().value +} + +// assertValid checks if the memIterator is in a valid state. +// If there is an error, it panics with the error message. +func (mi *memIterator) assertValid() { + if err := mi.Error(); err != nil { + panic(err) + } +} diff --git a/core/testing/memdb_test.go b/core/testing/memdb_test.go new file mode 100644 index 000000000000..263efaa0ae47 --- /dev/null +++ b/core/testing/memdb_test.go @@ -0,0 +1,59 @@ +package coretesting + +import ( + "fmt" + "testing" + + "github.com/stretchr/testify/require" + + "cosmossdk.io/core/store" +) + +func TestMemDB(t *testing.T) { + var db store.KVStore = newMemDB() + + key, value := []byte("key"), []byte("value") + require.NoError(t, db.Set(key, value)) + val, err := db.Get(key) + require.NoError(t, err) + require.Equal(t, value, val) + require.NoError(t, db.Delete(key)) + has, err := db.Has(key) + require.NoError(t, err) + require.False(t, has) + + // test iter + makeKey := func(i int) []byte { + return []byte(fmt.Sprintf("key_%d", i)) + } + for i := 0; i < 10; i++ { + require.NoError(t, db.Set(makeKey(i), makeKey(i))) + } + + iter, err := db.Iterator(nil, nil) + require.NoError(t, err) + key = iter.Key() + value = iter.Value() + require.Equal(t, makeKey(0), key) + require.Equal(t, makeKey(0), value) + require.NoError(t, iter.Error()) + iter.Next() + key, value = iter.Key(), iter.Value() + require.Equal(t, makeKey(1), key) + require.Equal(t, makeKey(1), value) + require.NoError(t, iter.Close()) + + // test reverse iter + iter, err = db.ReverseIterator(nil, nil) + require.NoError(t, err) + key = iter.Key() + value = iter.Value() + require.Equal(t, makeKey(9), key) + require.Equal(t, makeKey(9), value) + require.NoError(t, iter.Error()) + iter.Next() + key, value = iter.Key(), iter.Value() + require.Equal(t, makeKey(8), key) + require.Equal(t, makeKey(8), value) + require.NoError(t, iter.Close()) +} diff --git a/core/testing/services_test.go b/core/testing/services_test.go new file mode 100644 index 000000000000..72217939caa3 --- /dev/null +++ b/core/testing/services_test.go @@ -0,0 +1,35 @@ +package coretesting + +import ( + "context" + "testing" + + "github.com/stretchr/testify/require" +) + +func TestKVStoreService(t *testing.T) { + ctx := Context() + svc1 := KVStoreService(ctx, "bank") + + // must panic + t.Run("must panic on invalid ctx", func(t *testing.T) { + require.Panics(t, func() { + svc1.OpenKVStore(context.Background()) + }) + }) + + t.Run("success", func(t *testing.T) { + kv := svc1.OpenKVStore(ctx) + require.NoError(t, kv.Set([]byte("key"), []byte("value"))) + + value, err := kv.Get([]byte("key")) + require.NoError(t, err) + require.Equal(t, []byte("value"), value) + }) + + t.Run("contains module name", func(t *testing.T) { + KVStoreService(ctx, "auth") + _, ok := unwrap(ctx).stores["auth"] + require.True(t, ok) + }) +} diff --git a/core/testing/sonar-project.properties b/core/testing/sonar-project.properties new file mode 100644 index 000000000000..e7e623d0263d --- /dev/null +++ b/core/testing/sonar-project.properties @@ -0,0 +1,16 @@ +sonar.projectKey=cosmos-sdk-core-testing +sonar.organization=cosmos + +sonar.projectName=Cosmos SDK - Core Testing +sonar.project.monorepo.enabled=true + +sonar.sources=. +sonar.exclusions=**/*_test.go,**/*.pb.go,**/*.pulsar.go,**/*.pb.gw.go +sonar.coverage.exclusions=**/*_test.go,**/testutil/**,**/*.pb.go,**/*.pb.gw.go,**/*.pulsar.go,test_helpers.go,docs/** +sonar.tests=. +sonar.test.inclusions=**/*_test.go +sonar.go.coverage.reportPaths=coverage.out + +sonar.sourceEncoding=UTF-8 +sonar.scm.provider=git +sonar.scm.forceReloadAll=true diff --git a/core/testing/store.go b/core/testing/store.go new file mode 100644 index 000000000000..8461e8789120 --- /dev/null +++ b/core/testing/store.go @@ -0,0 +1,27 @@ +package coretesting + +import ( + "context" + "fmt" + + "cosmossdk.io/core/store" +) + +func KVStoreService(ctx context.Context, moduleName string) store.KVStoreService { + unwrap(ctx).stores[moduleName] = newMemDB() + return kvStoreService{ + moduleName: moduleName, + } +} + +type kvStoreService struct { + moduleName string +} + +func (k kvStoreService) OpenKVStore(ctx context.Context) store.KVStore { + kv, ok := unwrap(ctx).stores[k.moduleName] + if !ok { + panic(fmt.Sprintf("KVStoreService %s not found", k.moduleName)) + } + return kv +} diff --git a/go.mod b/go.mod index 9e5747ed2e92..88576387dae4 100644 --- a/go.mod +++ b/go.mod @@ -6,6 +6,7 @@ require ( cosmossdk.io/api v0.7.5 cosmossdk.io/collections v0.4.0 cosmossdk.io/core v0.12.1-0.20231114100755-569e3ff6a0d7 + cosmossdk.io/core/testing v0.0.0-00010101000000-000000000000 cosmossdk.io/depinject v1.0.0-alpha.4 cosmossdk.io/errors v1.0.1 cosmossdk.io/log v1.3.1 @@ -186,6 +187,7 @@ replace ( cosmossdk.io/api => ./api cosmossdk.io/collections => ./collections cosmossdk.io/core => ./core + cosmossdk.io/core/testing => ./core/testing cosmossdk.io/depinject => ./depinject cosmossdk.io/log => ./log cosmossdk.io/store => ./store diff --git a/go.work.example b/go.work.example index 614d1e7d0629..14dd182955fa 100644 --- a/go.work.example +++ b/go.work.example @@ -6,6 +6,7 @@ use ( ./client/v2 ./collections ./core + ./core/testing ./depinject ./errors ./log diff --git a/server/v2/cometbft/go.mod b/server/v2/cometbft/go.mod index 1fba08fcfada..defd54e32c4e 100644 --- a/server/v2/cometbft/go.mod +++ b/server/v2/cometbft/go.mod @@ -5,6 +5,7 @@ go 1.22.2 replace ( cosmossdk.io/api => ../../../api cosmossdk.io/core => ../../../core + cosmossdk.io/core/testing => ../../../core/testing cosmossdk.io/depinject => ../../../depinject cosmossdk.io/server/v2 => ../ cosmossdk.io/server/v2/appmanager => ../appmanager diff --git a/simapp/go.mod b/simapp/go.mod index 517e6a144dfe..80bed9ac5da1 100644 --- a/simapp/go.mod +++ b/simapp/go.mod @@ -58,6 +58,7 @@ require ( cloud.google.com/go/compute/metadata v0.3.0 // indirect cloud.google.com/go/iam v1.1.7 // indirect cloud.google.com/go/storage v1.40.0 // indirect + cosmossdk.io/core/testing v0.0.0-00010101000000-000000000000 // indirect cosmossdk.io/errors v1.0.1 // indirect filippo.io/edwards25519 v1.1.0 // indirect github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 // indirect @@ -241,6 +242,7 @@ replace ( cosmossdk.io/client/v2 => ../client/v2 cosmossdk.io/collections => ../collections cosmossdk.io/core => ../core + cosmossdk.io/core/testing => ../core/testing cosmossdk.io/depinject => ../depinject cosmossdk.io/log => ../log cosmossdk.io/store => ../store diff --git a/tests/go.mod b/tests/go.mod index 0ef2ae7fc731..a47143e18ab4 100644 --- a/tests/go.mod +++ b/tests/go.mod @@ -63,6 +63,7 @@ require ( cloud.google.com/go/iam v1.1.7 // indirect cloud.google.com/go/storage v1.40.0 // indirect cosmossdk.io/client/v2 v2.0.0-20230630094428-02b760776860 // indirect + cosmossdk.io/core/testing v0.0.0-00010101000000-000000000000 // indirect cosmossdk.io/x/circuit v0.0.0-20230613133644-0a778132a60f // indirect cosmossdk.io/x/epochs v0.0.0-00010101000000-000000000000 // indirect filippo.io/edwards25519 v1.1.0 // indirect @@ -236,6 +237,7 @@ replace ( cosmossdk.io/client/v2 => ../client/v2 cosmossdk.io/collections => ../collections cosmossdk.io/core => ../core + cosmossdk.io/core/testing => ../core/testing cosmossdk.io/depinject => ../depinject cosmossdk.io/log => ../log cosmossdk.io/x/accounts => ../x/accounts diff --git a/types/simulation/collections_test.go b/types/simulation/collections_test.go index 3f94910d2eb9..6e33fad2cf23 100644 --- a/types/simulation/collections_test.go +++ b/types/simulation/collections_test.go @@ -6,13 +6,14 @@ import ( "github.com/stretchr/testify/require" "cosmossdk.io/collections" - "cosmossdk.io/collections/colltest" + "cosmossdk.io/core/testing" "github.com/cosmos/cosmos-sdk/types/kv" ) func TestNewStoreDecoderFuncFromCollectionsSchema(t *testing.T) { - store, _ := colltest.MockStore() + ctx := coretesting.Context() + store := coretesting.KVStoreService(ctx, "test") sb := collections.NewSchemaBuilder(store) prefixM1 := collections.NewPrefix("map_1") diff --git a/x/accounts/accountstd/test_util.go b/x/accounts/accountstd/test_util.go index c5a9ba70a990..0ab912868820 100644 --- a/x/accounts/accountstd/test_util.go +++ b/x/accounts/accountstd/test_util.go @@ -3,8 +3,8 @@ package accountstd import ( "context" - "cosmossdk.io/collections/colltest" "cosmossdk.io/core/store" + "cosmossdk.io/core/testing" "cosmossdk.io/x/accounts/internal/implementation" sdk "github.com/cosmos/cosmos-sdk/types" @@ -19,7 +19,8 @@ func NewMockContext( moduleExecUntyped implementation.ModuleExecUntypedFunc, moduleQuery implementation.ModuleQueryFunc, ) (context.Context, store.KVStoreService) { - ss, ctx := colltest.MockStore() + ctx := coretesting.Context() + ss := coretesting.KVStoreService(ctx, "test") return implementation.MakeAccountContext( ctx, ss, accNumber, accountAddr, sender, funds, moduleExec, moduleExecUntyped, moduleQuery, diff --git a/x/accounts/defaults/lockup/go.mod b/x/accounts/defaults/lockup/go.mod index 948f5947b680..cc599bb6cb67 100644 --- a/x/accounts/defaults/lockup/go.mod +++ b/x/accounts/defaults/lockup/go.mod @@ -17,6 +17,7 @@ require cosmossdk.io/x/consensus v0.0.0-00010101000000-000000000000 // indirect require ( buf.build/gen/go/cometbft/cometbft/protocolbuffers/go v1.34.1-20240312114316-c0d3497e35d6.1 // indirect + cosmossdk.io/core/testing v0.0.0-00010101000000-000000000000 // indirect cosmossdk.io/depinject v1.0.0-alpha.4 // indirect github.com/cometbft/cometbft/api v1.0.0-alpha.2.0.20240530055211-ae27f7eb3c08 // indirect github.com/cosmos/crypto v0.0.0-20240309083813-82ed2537802e // indirect @@ -172,6 +173,7 @@ replace ( cosmossdk.io/api => ../../../../api cosmossdk.io/collections => ../../../../collections // TODO tag new collections ASAP cosmossdk.io/core => ../../../../core + cosmossdk.io/core/testing => ../../../../core/testing cosmossdk.io/depinject => ../../../../depinject cosmossdk.io/log => ../../../../log cosmossdk.io/x/accounts => ../../. diff --git a/x/accounts/genesis_test.go b/x/accounts/genesis_test.go index 5b143696cb7e..357fb8eb6628 100644 --- a/x/accounts/genesis_test.go +++ b/x/accounts/genesis_test.go @@ -6,26 +6,26 @@ import ( "github.com/cosmos/gogoproto/types" "github.com/stretchr/testify/require" - "cosmossdk.io/collections/colltest" "cosmossdk.io/x/accounts/internal/implementation" v1 "cosmossdk.io/x/accounts/v1" ) func TestGenesis(t *testing.T) { + const testAccountType = "test" k, ctx := newKeeper(t, func(deps implementation.Dependencies) (string, implementation.Account, error) { acc, err := NewTestAccount(deps) - return "test", acc, err + return testAccountType, acc, err }) // we init two accounts of the same type // we set counter to 10 - _, addr1, err := k.Init(ctx, "test", []byte("sender"), &types.Empty{}, nil) + _, addr1, err := k.Init(ctx, testAccountType, []byte("sender"), &types.Empty{}, nil) require.NoError(t, err) _, err = k.Execute(ctx, addr1, []byte("sender"), &types.UInt64Value{Value: 10}, nil) require.NoError(t, err) // we set counter to 20 - _, addr2, err := k.Init(ctx, "test", []byte("sender"), &types.Empty{}, nil) + _, addr2, err := k.Init(ctx, testAccountType, []byte("sender"), &types.Empty{}, nil) require.NoError(t, err) _, err = k.Execute(ctx, addr2, []byte("sender"), &types.UInt64Value{Value: 20}, nil) require.NoError(t, err) @@ -35,7 +35,10 @@ func TestGenesis(t *testing.T) { require.NoError(t, err) // reset state - _, ctx = colltest.MockStore() + k, ctx = newKeeper(t, func(deps implementation.Dependencies) (string, implementation.Account, error) { + acc, err := NewTestAccount(deps) + return testAccountType, acc, err + }) err = k.ImportState(ctx, state) require.NoError(t, err) diff --git a/x/accounts/go.mod b/x/accounts/go.mod index ca4239fe365f..6dec9ad8c2d4 100644 --- a/x/accounts/go.mod +++ b/x/accounts/go.mod @@ -6,6 +6,7 @@ require ( cosmossdk.io/api v0.7.5 cosmossdk.io/collections v0.4.0 cosmossdk.io/core v0.12.1-0.20231114100755-569e3ff6a0d7 + cosmossdk.io/core/testing v0.0.0-00010101000000-000000000000 cosmossdk.io/depinject v1.0.0-alpha.4 cosmossdk.io/x/tx v0.13.3 github.com/cosmos/cosmos-sdk v0.51.0 @@ -174,6 +175,7 @@ replace ( cosmossdk.io/api => ../../api cosmossdk.io/collections => ../../collections cosmossdk.io/core => ../../core + cosmossdk.io/core/testing => ../../core/testing cosmossdk.io/depinject => ../../depinject cosmossdk.io/log => ../../log cosmossdk.io/x/auth => ../auth diff --git a/x/accounts/internal/implementation/context_test.go b/x/accounts/internal/implementation/context_test.go index d5c396579878..ff47b50c89ef 100644 --- a/x/accounts/internal/implementation/context_test.go +++ b/x/accounts/internal/implementation/context_test.go @@ -9,11 +9,12 @@ import ( "github.com/stretchr/testify/require" "cosmossdk.io/collections" - "cosmossdk.io/collections/colltest" + "cosmossdk.io/core/testing" ) func TestMakeAccountContext(t *testing.T) { - storeService, originalContext := colltest.MockStore() + originalContext := coretesting.Context() + storeService := coretesting.KVStoreService(originalContext, "test") accountAddr := []byte("accountAddr") sender := []byte("sender") sb := collections.NewSchemaBuilderFromAccessor(openKVStore) diff --git a/x/accounts/utils_test.go b/x/accounts/utils_test.go index f450bf027c44..c10ffa29c7ec 100644 --- a/x/accounts/utils_test.go +++ b/x/accounts/utils_test.go @@ -11,10 +11,10 @@ import ( bankv1beta1 "cosmossdk.io/api/cosmos/bank/v1beta1" basev1beta1 "cosmossdk.io/api/cosmos/base/v1beta1" - "cosmossdk.io/collections/colltest" "cosmossdk.io/core/address" "cosmossdk.io/core/event" "cosmossdk.io/core/log" + "cosmossdk.io/core/testing" coretransaction "cosmossdk.io/core/transaction" "cosmossdk.io/x/accounts/internal/implementation" "cosmossdk.io/x/tx/signing" @@ -73,7 +73,8 @@ func newKeeper(t *testing.T, accounts ...implementation.AccountCreatorFunc) (Kee queryRouter.RegisterService(&bankv1beta1.Query_ServiceDesc, &bankQueryServer{}) msgRouter.RegisterService(&bankv1beta1.Msg_ServiceDesc, &bankMsgServer{}) - ss, ctx := colltest.MockStore() + ctx := coretesting.Context() + ss := coretesting.KVStoreService(ctx, "test") env := runtime.NewEnvironment(ss, log.NewNopLogger(), runtime.EnvWithQueryRouterService(queryRouter), runtime.EnvWithMsgRouterService(msgRouter)) env.EventService = eventService{} m, err := NewKeeper(codec.NewProtoCodec(ir), env, addressCodec, ir, accounts...) diff --git a/x/auth/go.mod b/x/auth/go.mod index 25b8922d921d..a12f113102fc 100644 --- a/x/auth/go.mod +++ b/x/auth/go.mod @@ -6,6 +6,7 @@ require ( cosmossdk.io/api v0.7.5 cosmossdk.io/collections v0.4.0 cosmossdk.io/core v0.12.1-0.20231114100755-569e3ff6a0d7 + cosmossdk.io/core/testing v0.0.0-00010101000000-000000000000 cosmossdk.io/depinject v1.0.0-alpha.4 cosmossdk.io/errors v1.0.1 cosmossdk.io/math v1.3.0 @@ -175,6 +176,7 @@ replace ( cosmossdk.io/api => ../../api cosmossdk.io/collections => ../../collections cosmossdk.io/core => ../../core + cosmossdk.io/core/testing => ../../core/testing cosmossdk.io/depinject => ../../depinject cosmossdk.io/log => ../../log cosmossdk.io/x/accounts => ../accounts diff --git a/x/auth/migrations/v5/migrate_test.go b/x/auth/migrations/v5/migrate_test.go index c0c7113fb580..2ed3d69c78b5 100644 --- a/x/auth/migrations/v5/migrate_test.go +++ b/x/auth/migrations/v5/migrate_test.go @@ -7,11 +7,12 @@ import ( "github.com/stretchr/testify/require" "cosmossdk.io/collections" - "cosmossdk.io/collections/colltest" + "cosmossdk.io/core/testing" ) func TestMigrate(t *testing.T) { - kv, ctx := colltest.MockStore() + ctx := coretesting.Context() + kv := coretesting.KVStoreService(ctx, "test") sb := collections.NewSchemaBuilder(kv) seq := collections.NewSequence(sb, collections.NewPrefix(0), "seq") @@ -33,7 +34,8 @@ func TestMigrate(t *testing.T) { require.Equal(t, wantValue, gotValue) // case the global account number was not set - ctx = kv.NewStoreContext() // this resets the store to zero + ctx = coretesting.Context() + kv = coretesting.KVStoreService(ctx, "test") wantValue = collections.DefaultSequenceStart err = Migrate(ctx, kv, seq) diff --git a/x/authz/go.mod b/x/authz/go.mod index 66381f416b93..ed883381c1ad 100644 --- a/x/authz/go.mod +++ b/x/authz/go.mod @@ -169,6 +169,8 @@ require ( sigs.k8s.io/yaml v1.4.0 // indirect ) +require cosmossdk.io/core/testing v0.0.0-00010101000000-000000000000 // indirect + replace github.com/cosmos/cosmos-sdk => ../../. // TODO remove post spinning out all modules @@ -176,6 +178,7 @@ replace ( cosmossdk.io/api => ../../api cosmossdk.io/collections => ../../collections cosmossdk.io/core => ../../core + cosmossdk.io/core/testing => ../../core/testing cosmossdk.io/depinject => ../../depinject cosmossdk.io/log => ../../log cosmossdk.io/x/accounts => ../accounts diff --git a/x/bank/go.mod b/x/bank/go.mod index a478936ae7fa..eb3a22f76e96 100644 --- a/x/bank/go.mod +++ b/x/bank/go.mod @@ -168,6 +168,8 @@ require ( sigs.k8s.io/yaml v1.4.0 // indirect ) +require cosmossdk.io/core/testing v0.0.0-00010101000000-000000000000 // indirect + replace github.com/cosmos/cosmos-sdk => ../../. // TODO remove post spinning out all modules @@ -175,6 +177,7 @@ replace ( cosmossdk.io/api => ../../api cosmossdk.io/collections => ../../collections cosmossdk.io/core => ../../core + cosmossdk.io/core/testing => ../../core/testing cosmossdk.io/depinject => ../../depinject cosmossdk.io/log => ../../log cosmossdk.io/x/accounts => ../accounts diff --git a/x/circuit/go.mod b/x/circuit/go.mod index 787a66f64ea8..00801b8911c8 100644 --- a/x/circuit/go.mod +++ b/x/circuit/go.mod @@ -174,6 +174,7 @@ replace github.com/cosmos/cosmos-sdk => ../../. replace ( cosmossdk.io/api => ../../api cosmossdk.io/core => ../../core + cosmossdk.io/core/testing => ../../core/testing cosmossdk.io/depinject => ../../depinject cosmossdk.io/log => ../../log cosmossdk.io/x/accounts => ../accounts diff --git a/x/consensus/go.mod b/x/consensus/go.mod index ce0a723ad372..9d059469d139 100644 --- a/x/consensus/go.mod +++ b/x/consensus/go.mod @@ -172,10 +172,12 @@ replace github.com/cosmos/cosmos-sdk => ../../. replace ( cosmossdk.io/api => ../../api cosmossdk.io/core => ../../core + cosmossdk.io/core/testing => ../../core/testing cosmossdk.io/depinject => ../../depinject cosmossdk.io/log => ../../log cosmossdk.io/x/accounts => ../accounts cosmossdk.io/x/auth => ../auth cosmossdk.io/x/bank => ../bank cosmossdk.io/x/staking => ../staking + cosmossdk.io/x/tx => ../tx ) diff --git a/x/consensus/go.sum b/x/consensus/go.sum index e7bc1ba9cfaa..888e76f50cdf 100644 --- a/x/consensus/go.sum +++ b/x/consensus/go.sum @@ -14,8 +14,6 @@ cosmossdk.io/store v1.1.1-0.20240418092142-896cdf1971bc h1:R9O9d75e0qZYUsVV0zzi+ cosmossdk.io/store v1.1.1-0.20240418092142-896cdf1971bc/go.mod h1:amTTatOUV3u1PsKmNb87z6/galCxrRbz9kRdJkL0DyU= cosmossdk.io/x/accounts/defaults/lockup v0.0.0-20240417181816-5e7aae0db1f5 h1:eb0kcGyaYHSS0do7+MIWg7UKlskSH01biRNENbm/zDA= cosmossdk.io/x/accounts/defaults/lockup v0.0.0-20240417181816-5e7aae0db1f5/go.mod h1:drzY4oVisyWvSgpsM7ccQ7IX3efMuVIvd9Eij1Gm/6o= -cosmossdk.io/x/tx v0.13.3 h1:Ha4mNaHmxBc6RMun9aKuqul8yHiL78EKJQ8g23Zf73g= -cosmossdk.io/x/tx v0.13.3/go.mod h1:I8xaHv0rhUdIvIdptKIqzYy27+n2+zBVaxO6fscFhys= filippo.io/edwards25519 v1.1.0 h1:FNf4tywRC1HmFuKW5xopWpigGjJKiJSV0Cqo0cJWDaA= filippo.io/edwards25519 v1.1.0/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4= github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 h1:/vQbFIOMbk2FiG/kXiLl8BRyzTWDw7gX/Hz7Dd5eDMs= diff --git a/x/distribution/go.mod b/x/distribution/go.mod index d9be9aa5ed5b..5c8ac763fe3d 100644 --- a/x/distribution/go.mod +++ b/x/distribution/go.mod @@ -179,6 +179,7 @@ replace ( cosmossdk.io/api => ../../api cosmossdk.io/collections => ../../collections cosmossdk.io/core => ../../core + cosmossdk.io/core/testing => ../../core/testing cosmossdk.io/depinject => ../../depinject cosmossdk.io/log => ../../log cosmossdk.io/x/accounts => ../accounts diff --git a/x/epochs/go.mod b/x/epochs/go.mod index bcca2931f9b3..a63d07773e0e 100644 --- a/x/epochs/go.mod +++ b/x/epochs/go.mod @@ -176,6 +176,7 @@ replace github.com/cosmos/cosmos-sdk => ../../. replace ( cosmossdk.io/api => ../../api cosmossdk.io/core => ../../core + cosmossdk.io/core/testing => ../../core/testing cosmossdk.io/depinject => ../../depinject cosmossdk.io/log => ../../log cosmossdk.io/x/accounts => ../accounts diff --git a/x/evidence/go.mod b/x/evidence/go.mod index fcb130afbfd4..2a48c77a08df 100644 --- a/x/evidence/go.mod +++ b/x/evidence/go.mod @@ -174,6 +174,7 @@ replace github.com/cosmos/cosmos-sdk => ../../. replace ( cosmossdk.io/api => ../../api cosmossdk.io/core => ../../core + cosmossdk.io/core/testing => ../../core/testing cosmossdk.io/depinject => ../../depinject cosmossdk.io/log => ../../log cosmossdk.io/x/accounts => ../accounts diff --git a/x/feegrant/go.mod b/x/feegrant/go.mod index b39a9414605b..dcad36b849ce 100644 --- a/x/feegrant/go.mod +++ b/x/feegrant/go.mod @@ -173,6 +173,8 @@ require ( sigs.k8s.io/yaml v1.4.0 // indirect ) +require cosmossdk.io/core/testing v0.0.0-00010101000000-000000000000 // indirect + replace github.com/cosmos/cosmos-sdk => ../../. // TODO remove post spinning out all modules @@ -180,6 +182,7 @@ replace ( cosmossdk.io/api => ../../api cosmossdk.io/collections => ../../collections cosmossdk.io/core => ../../core + cosmossdk.io/core/testing => ../../core/testing cosmossdk.io/depinject => ../../depinject cosmossdk.io/log => ../../log cosmossdk.io/x/accounts => ../accounts diff --git a/x/gov/go.mod b/x/gov/go.mod index 05ca454600ac..e7404a7a2ff0 100644 --- a/x/gov/go.mod +++ b/x/gov/go.mod @@ -172,6 +172,8 @@ require ( sigs.k8s.io/yaml v1.4.0 // indirect ) +require cosmossdk.io/core/testing v0.0.0-00010101000000-000000000000 // indirect + replace github.com/cosmos/cosmos-sdk => ../../. // TODO remove post spinning out all modules @@ -179,6 +181,7 @@ replace ( cosmossdk.io/api => ../../api cosmossdk.io/collections => ../../collections cosmossdk.io/core => ../../core + cosmossdk.io/core/testing => ../../core/testing cosmossdk.io/depinject => ../../depinject cosmossdk.io/log => ../../log cosmossdk.io/x/accounts => ../accounts diff --git a/x/group/go.mod b/x/group/go.mod index d9b64079ac5e..2f8fd4832be3 100644 --- a/x/group/go.mod +++ b/x/group/go.mod @@ -41,6 +41,7 @@ require ( buf.build/gen/go/cometbft/cometbft/protocolbuffers/go v1.34.1-20240312114316-c0d3497e35d6.1 // indirect buf.build/gen/go/cosmos/gogo-proto/protocolbuffers/go v1.34.1-20240130113600-88ef6483f90f.1 // indirect cosmossdk.io/collections v0.4.0 // indirect + cosmossdk.io/core/testing v0.0.0-00010101000000-000000000000 // indirect cosmossdk.io/x/accounts/defaults/lockup v0.0.0-20240417181816-5e7aae0db1f5 // indirect cosmossdk.io/x/tx v0.13.3 // indirect filippo.io/edwards25519 v1.1.0 // indirect @@ -182,6 +183,7 @@ replace ( cosmossdk.io/api => ../../api cosmossdk.io/collections => ../../collections cosmossdk.io/core => ../../core + cosmossdk.io/core/testing => ../../core/testing cosmossdk.io/depinject => ../../depinject cosmossdk.io/log => ../../log cosmossdk.io/x/accounts => ../accounts diff --git a/x/mint/go.mod b/x/mint/go.mod index a1a0a98bea37..dd791fdbb077 100644 --- a/x/mint/go.mod +++ b/x/mint/go.mod @@ -177,6 +177,7 @@ replace github.com/cosmos/cosmos-sdk => ../../. replace ( cosmossdk.io/api => ../../api cosmossdk.io/core => ../../core + cosmossdk.io/core/testing => ../../core/testing cosmossdk.io/depinject => ../../depinject cosmossdk.io/log => ../../log cosmossdk.io/x/accounts => ../accounts diff --git a/x/nft/go.mod b/x/nft/go.mod index 86dd7edac171..c9dca4c17585 100644 --- a/x/nft/go.mod +++ b/x/nft/go.mod @@ -174,6 +174,7 @@ replace github.com/cosmos/cosmos-sdk => ../../. replace ( cosmossdk.io/api => ../../api cosmossdk.io/core => ../../core + cosmossdk.io/core/testing => ../../core/testing cosmossdk.io/depinject => ../../depinject cosmossdk.io/log => ../../log cosmossdk.io/x/accounts => ../accounts diff --git a/x/params/go.mod b/x/params/go.mod index 15e36a68df32..63f57b006c81 100644 --- a/x/params/go.mod +++ b/x/params/go.mod @@ -175,6 +175,7 @@ replace github.com/cosmos/cosmos-sdk => ../.. replace ( cosmossdk.io/api => ../../api cosmossdk.io/core => ../../core + cosmossdk.io/core/testing => ../../core/testing cosmossdk.io/depinject => ../../depinject cosmossdk.io/log => ../../log cosmossdk.io/x/accounts => ../accounts diff --git a/x/protocolpool/go.mod b/x/protocolpool/go.mod index da3799fd40c9..3e6385ded1cd 100644 --- a/x/protocolpool/go.mod +++ b/x/protocolpool/go.mod @@ -174,6 +174,7 @@ replace github.com/cosmos/cosmos-sdk => ../../. replace ( cosmossdk.io/api => ../../api cosmossdk.io/core => ../../core + cosmossdk.io/core/testing => ../../core/testing cosmossdk.io/depinject => ../../depinject cosmossdk.io/log => ../../log cosmossdk.io/x/accounts => ../accounts diff --git a/x/slashing/go.mod b/x/slashing/go.mod index b90f6818a9fe..b148a852ffc8 100644 --- a/x/slashing/go.mod +++ b/x/slashing/go.mod @@ -175,6 +175,7 @@ replace github.com/cosmos/cosmos-sdk => ../../. replace ( cosmossdk.io/api => ../../api cosmossdk.io/core => ../../core + cosmossdk.io/core/testing => ../../core/testing cosmossdk.io/depinject => ../../depinject cosmossdk.io/log => ../../log cosmossdk.io/x/accounts => ../accounts diff --git a/x/staking/go.mod b/x/staking/go.mod index deca521ef49e..6fe86374f47f 100644 --- a/x/staking/go.mod +++ b/x/staking/go.mod @@ -171,6 +171,8 @@ require ( go.opencensus.io v0.24.0 // indirect ) +require cosmossdk.io/core/testing v0.0.0-00010101000000-000000000000 // indirect + replace github.com/cosmos/cosmos-sdk => ../../. // TODO remove post spinning out all modules @@ -178,6 +180,7 @@ replace ( cosmossdk.io/api => ../../api cosmossdk.io/collections => ../../collections cosmossdk.io/core => ../../core + cosmossdk.io/core/testing => ../../core/testing cosmossdk.io/depinject => ../../depinject cosmossdk.io/log => ../../log cosmossdk.io/x/accounts => ../accounts diff --git a/x/upgrade/go.mod b/x/upgrade/go.mod index d4b90eaa110e..1d802689ed96 100644 --- a/x/upgrade/go.mod +++ b/x/upgrade/go.mod @@ -205,6 +205,7 @@ replace github.com/cosmos/cosmos-sdk => ../../. replace ( cosmossdk.io/api => ../../api cosmossdk.io/core => ../../core + cosmossdk.io/core/testing => ../../core/testing cosmossdk.io/depinject => ../../depinject cosmossdk.io/log => ../../log cosmossdk.io/x/accounts => ../accounts