diff --git a/go.mod b/go.mod index 4b4c6466ce..ff09f67518 100644 --- a/go.mod +++ b/go.mod @@ -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 diff --git a/snapshots/helpers_test.go b/snapshots/helpers_test.go index bda3c31554..dcb7dfabff 100644 --- a/snapshots/helpers_test.go +++ b/snapshots/helpers_test.go @@ -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. diff --git a/snapshots/manager_test.go b/snapshots/manager_test.go index c4f41b0e3e..662dbc3833 100644 --- a/snapshots/manager_test.go +++ b/snapshots/manager_test.go @@ -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) diff --git a/snapshots/store_test.go b/snapshots/store_test.go index 02e59d3fef..5c0b77b853 100644 --- a/snapshots/store_test.go +++ b/snapshots/store_test.go @@ -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) diff --git a/testutil/ioutil.go b/testutil/ioutil.go index 20ea652b0d..6a7e4fff9c 100644 --- a/testutil/ioutil.go +++ b/testutil/ioutil.go @@ -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 } diff --git a/x/distribution/client/cli/cli_test.go b/x/distribution/client/cli/cli_test.go index 8b3f02db90..40331db7b9 100644 --- a/x/distribution/client/cli/cli_test.go +++ b/x/distribution/client/cli/cli_test.go @@ -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 diff --git a/x/gov/client/cli/cli_test.go b/x/gov/client/cli/cli_test.go index c1367eabe0..981b13024c 100644 --- a/x/gov/client/cli/cli_test.go +++ b/x/gov/client/cli/cli_test.go @@ -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