use testutil in test cases (#8130)

Also replace defer calls with
testing.T.Cleanup()
This commit is contained in:
Alessio Treglia 2020-12-10 12:56:55 +00:00 committed by GitHub
parent e321317c20
commit 056f416d2b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 43 additions and 112 deletions

1
go.mod
View File

@ -21,7 +21,6 @@ require (
github.com/golang/mock v1.4.4
github.com/golang/protobuf v1.4.3
github.com/golang/snappy v0.0.2 // indirect
github.com/google/go-cmp v0.5.0
github.com/gorilla/handlers v1.5.1
github.com/gorilla/mux v1.8.0
github.com/grpc-ecosystem/go-grpc-middleware v1.2.2

View File

@ -6,7 +6,6 @@ import (
"errors"
"io"
"io/ioutil"
"os"
"testing"
"time"
@ -102,9 +101,8 @@ func (m *mockSnapshotter) Snapshot(height uint64, format uint32) (<-chan io.Read
// setupBusyManager creates a manager with an empty store that is busy creating a snapshot at height 1.
// The snapshot will complete when the returned closer is called.
func setupBusyManager(t *testing.T) (*snapshots.Manager, func()) {
tempdir, err := ioutil.TempDir("", "")
require.NoError(t, err)
func setupBusyManager(t *testing.T) *snapshots.Manager {
tempdir := t.TempDir()
store, err := snapshots.NewStore(db.NewMemDB(), tempdir)
require.NoError(t, err)
hung := newHungSnapshotter()
@ -115,12 +113,9 @@ func setupBusyManager(t *testing.T) (*snapshots.Manager, func()) {
require.NoError(t, err)
}()
time.Sleep(10 * time.Millisecond)
t.Cleanup(hung.Close)
closer := func() {
hung.Close()
os.RemoveAll(tempdir)
}
return mgr, closer
return mgr
}
// hungSnapshotter can be used to test operations in progress. Call close to end the snapshot.

View File

@ -12,8 +12,7 @@ import (
)
func TestManager_List(t *testing.T) {
store, teardown := setupStore(t)
defer teardown()
store := setupStore(t)
manager := snapshots.NewManager(store, nil)
mgrList, err := manager.List()
@ -25,16 +24,14 @@ func TestManager_List(t *testing.T) {
assert.Equal(t, storeList, mgrList)
// list should not block or error on busy managers
manager, teardown = setupBusyManager(t)
defer teardown()
manager = setupBusyManager(t)
list, err := manager.List()
require.NoError(t, err)
assert.Equal(t, []*types.Snapshot{}, list)
}
func TestManager_LoadChunk(t *testing.T) {
store, teardown := setupStore(t)
defer teardown()
store := setupStore(t)
manager := snapshots.NewManager(store, nil)
// Existing chunk should return body
@ -48,16 +45,14 @@ func TestManager_LoadChunk(t *testing.T) {
assert.Nil(t, chunk)
// LoadChunk should not block or error on busy managers
manager, teardown = setupBusyManager(t)
defer teardown()
manager = setupBusyManager(t)
chunk, err = manager.LoadChunk(2, 1, 0)
require.NoError(t, err)
assert.Nil(t, chunk)
}
func TestManager_Take(t *testing.T) {
store, teardown := setupStore(t)
defer teardown()
store := setupStore(t)
snapshotter := &mockSnapshotter{
chunks: [][]byte{
{1, 2, 3},
@ -98,15 +93,13 @@ func TestManager_Take(t *testing.T) {
assert.Equal(t, [][]byte{{1, 2, 3}, {4, 5, 6}, {7, 8, 9}}, readChunks(chunks))
// creating a snapshot while a different snapshot is being created should error
manager, teardown = setupBusyManager(t)
defer teardown()
manager = setupBusyManager(t)
_, err = manager.Create(9)
require.Error(t, err)
}
func TestManager_Prune(t *testing.T) {
store, teardown := setupStore(t)
defer teardown()
store := setupStore(t)
manager := snapshots.NewManager(store, nil)
pruned, err := manager.Prune(2)
@ -118,15 +111,13 @@ func TestManager_Prune(t *testing.T) {
assert.Len(t, list, 3)
// Prune should error while a snapshot is being taken
manager, teardown = setupBusyManager(t)
defer teardown()
manager = setupBusyManager(t)
_, err = manager.Prune(2)
require.Error(t, err)
}
func TestManager_Restore(t *testing.T) {
store, teardown := setupStore(t)
defer teardown()
store := setupStore(t)
target := &mockSnapshotter{}
manager := snapshots.NewManager(store, target)

View File

@ -5,7 +5,6 @@ import (
"errors"
"io"
"io/ioutil"
"os"
"path/filepath"
"testing"
"time"
@ -16,12 +15,11 @@ import (
"github.com/cosmos/cosmos-sdk/snapshots"
"github.com/cosmos/cosmos-sdk/snapshots/types"
"github.com/cosmos/cosmos-sdk/testutil"
)
func setupStore(t *testing.T) (*snapshots.Store, func()) {
tempdir, err := ioutil.TempDir("", "snapshots")
require.NoError(t, err)
func setupStore(t *testing.T) *snapshots.Store {
tempdir := t.TempDir()
store, err := snapshots.NewStore(db.NewMemDB(), tempdir)
require.NoError(t, err)
@ -42,21 +40,13 @@ func setupStore(t *testing.T) (*snapshots.Store, func()) {
}))
require.NoError(t, err)
teardown := func() {
err := os.RemoveAll(tempdir)
if err != nil {
t.Logf("Failed to remove tempdir %q: %v", tempdir, err)
}
}
return store, teardown
return store
}
func TestNewStore(t *testing.T) {
tempdir, err := ioutil.TempDir("", "snapshots")
require.NoError(t, err)
defer os.RemoveAll(tempdir)
tempdir := t.TempDir()
_, err := snapshots.NewStore(db.NewMemDB(), tempdir)
_, err = snapshots.NewStore(db.NewMemDB(), tempdir)
require.NoError(t, err)
}
@ -66,22 +56,14 @@ func TestNewStore_ErrNoDir(t *testing.T) {
}
func TestNewStore_ErrDirFailure(t *testing.T) {
tempfile, err := ioutil.TempFile("", "snapshots")
require.NoError(t, err)
defer func() {
os.RemoveAll(tempfile.Name())
tempfile.Close()
}()
tempdir := filepath.Join(tempfile.Name(), "subdir")
notADir := filepath.Join(testutil.TempFile(t).Name(), "subdir")
_, err = snapshots.NewStore(db.NewMemDB(), tempdir)
_, err := snapshots.NewStore(db.NewMemDB(), notADir)
require.Error(t, err)
}
func TestStore_Delete(t *testing.T) {
store, teardown := setupStore(t)
defer teardown()
store := setupStore(t)
// Deleting a snapshot should remove it
err := store.Delete(2, 2)
require.NoError(t, err)
@ -114,8 +96,7 @@ func TestStore_Delete(t *testing.T) {
}
func TestStore_Get(t *testing.T) {
store, teardown := setupStore(t)
defer teardown()
store := setupStore(t)
// Loading a missing snapshot should return nil
snapshot, err := store.Get(9, 9)
@ -140,9 +121,7 @@ func TestStore_Get(t *testing.T) {
}
func TestStore_GetLatest(t *testing.T) {
store, teardown := setupStore(t)
defer teardown()
store := setupStore(t)
// Loading a missing snapshot should return nil
snapshot, err := store.GetLatest()
require.NoError(t, err)
@ -166,9 +145,7 @@ func TestStore_GetLatest(t *testing.T) {
}
func TestStore_List(t *testing.T) {
store, teardown := setupStore(t)
defer teardown()
store := setupStore(t)
snapshots, err := store.List()
require.NoError(t, err)
@ -189,9 +166,7 @@ func TestStore_List(t *testing.T) {
}
func TestStore_Load(t *testing.T) {
store, teardown := setupStore(t)
defer teardown()
store := setupStore(t)
// Loading a missing snapshot should return nil
snapshot, chunks, err := store.Load(9, 9)
require.NoError(t, err)
@ -227,9 +202,7 @@ func TestStore_Load(t *testing.T) {
}
func TestStore_LoadChunk(t *testing.T) {
store, teardown := setupStore(t)
defer teardown()
store := setupStore(t)
// Loading a missing snapshot should return nil
chunk, err := store.LoadChunk(9, 9, 0)
require.NoError(t, err)
@ -252,9 +225,7 @@ func TestStore_LoadChunk(t *testing.T) {
}
func TestStore_Prune(t *testing.T) {
store, teardown := setupStore(t)
defer teardown()
store := setupStore(t)
// Pruning too many snapshots should be fine
pruned, err := store.Prune(4)
require.NoError(t, err)
@ -294,9 +265,7 @@ func TestStore_Prune(t *testing.T) {
}
func TestStore_Save(t *testing.T) {
store, teardown := setupStore(t)
defer teardown()
store := setupStore(t)
// Saving a snapshot should work
snapshot, err := store.Save(4, 1, makeChunks([][]byte{{1}, {2}}))
require.NoError(t, err)

View File

@ -56,18 +56,20 @@ func ApplyMockIODiscardOutErr(c *cobra.Command) BufferReader {
func WriteToNewTempFile(t testing.TB, s string) *os.File {
t.Helper()
fp, err := TempFile(t)
require.Nil(t, err)
fp := TempFile(t)
_, err := fp.WriteString(s)
_, err = fp.WriteString(s)
require.Nil(t, err)
return fp
}
// TempFile returns a writable temporary file for the test to use.
func TempFile(t testing.TB) (*os.File, error) {
func TempFile(t testing.TB) *os.File {
t.Helper()
return ioutil.TempFile(t.TempDir(), "")
fp, err := ioutil.TempFile(t.TempDir(), "")
require.NoError(t, err)
return fp
}

View File

@ -5,7 +5,6 @@ package cli_test
import (
"context"
"fmt"
"io/ioutil"
"strings"
"testing"
"time"
@ -16,6 +15,7 @@ import (
"github.com/cosmos/cosmos-sdk/client"
"github.com/cosmos/cosmos-sdk/client/flags"
"github.com/cosmos/cosmos-sdk/testutil"
clitestutil "github.com/cosmos/cosmos-sdk/testutil/cli"
testnet "github.com/cosmos/cosmos-sdk/testutil/network"
sdk "github.com/cosmos/cosmos-sdk/types"
@ -685,10 +685,6 @@ func (s *IntegrationTestSuite) TestNewFundCommunityPoolCmd() {
func (s *IntegrationTestSuite) TestGetCmdSubmitProposal() {
val := s.network.Validators[0]
invalidPropFile, err := ioutil.TempFile(s.T().TempDir(), "invalid_community_spend_proposal.*.json")
s.Require().NoError(err)
invalidProp := `{
"title": "",
"description": "Pay me some Atoms!",
@ -696,13 +692,7 @@ func (s *IntegrationTestSuite) TestGetCmdSubmitProposal() {
"amount": "-343foocoin",
"deposit": -324foocoin
}`
_, err = invalidPropFile.WriteString(invalidProp)
s.Require().NoError(err)
validPropFile, err := ioutil.TempFile(s.T().TempDir(), "valid_community_spend_proposal.*.json")
s.Require().NoError(err)
invalidPropFile := testutil.WriteToNewTempFile(s.T(), invalidProp)
validProp := fmt.Sprintf(`{
"title": "Community Pool Spend",
"description": "Pay me some Atoms!",
@ -710,10 +700,7 @@ func (s *IntegrationTestSuite) TestGetCmdSubmitProposal() {
"amount": "%s",
"deposit": "%s"
}`, val.Address.String(), sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(5431)), sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(5431)))
_, err = validPropFile.WriteString(validProp)
s.Require().NoError(err)
validPropFile := testutil.WriteToNewTempFile(s.T(), validProp)
testCases := []struct {
name string
args []string

View File

@ -4,10 +4,11 @@ package cli_test
import (
"fmt"
"io/ioutil"
"strings"
"testing"
"github.com/cosmos/cosmos-sdk/testutil"
"github.com/gogo/protobuf/proto"
"github.com/stretchr/testify/suite"
@ -265,33 +266,20 @@ func (s *IntegrationTestSuite) TestCmdTally() {
func (s *IntegrationTestSuite) TestNewCmdSubmitProposal() {
val := s.network.Validators[0]
invalidPropFile, err := ioutil.TempFile(s.T().TempDir(), "invalid_text_proposal.*.json")
s.Require().NoError(err)
invalidProp := `{
"title": "",
"description": "Where is the title!?",
"type": "Text",
"deposit": "-324foocoin"
}`
_, err = invalidPropFile.WriteString(invalidProp)
s.Require().NoError(err)
validPropFile, err := ioutil.TempFile(s.T().TempDir(), "valid_text_proposal.*.json")
s.Require().NoError(err)
invalidPropFile := testutil.WriteToNewTempFile(s.T(), invalidProp)
validProp := fmt.Sprintf(`{
"title": "Text Proposal",
"description": "Hello, World!",
"type": "Text",
"deposit": "%s"
}`, sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(5431)))
_, err = validPropFile.WriteString(validProp)
s.Require().NoError(err)
validPropFile := testutil.WriteToNewTempFile(s.T(), validProp)
testCases := []struct {
name string
args []string