Skip to content

Commit

Permalink
feat(deployment): group close on bidclose
Browse files Browse the repository at this point in the history
note: does not add "paused" state so as to not affect state
schema

refs #944
  • Loading branch information
boz committed Nov 27, 2020
1 parent c6a3e29 commit a08a0bd
Show file tree
Hide file tree
Showing 5 changed files with 39 additions and 77 deletions.
13 changes: 11 additions & 2 deletions x/deployment/keeper/keeper.go
Original file line number Diff line number Diff line change
Expand Up @@ -224,8 +224,17 @@ func (k Keeper) OnLeaseInsufficientFunds(ctx sdk.Context, id types.GroupID) {
k.updateGroup(ctx, group)
}

// OnLeaseClosed updates group state to group opened
func (k Keeper) OnLeaseClosed(ctx sdk.Context, id types.GroupID) {
// OnBidClosed sets the group to state closed.
// TODO: use "paused" or other restart-able state. see #944
func (k Keeper) OnBidClosed(ctx sdk.Context, id types.GroupID) {
// TODO: assert state transition
group, _ := k.GetGroup(ctx, id)
group.State = types.GroupClosed
k.updateGroup(ctx, group)
}

// OnOrderClosed updates group state to group opened
func (k Keeper) OnOrderClosed(ctx sdk.Context, id types.GroupID) {
// TODO: assert state transition
group, _ := k.GetGroup(ctx, id)
group.State = types.GroupOpen
Expand Down
24 changes: 22 additions & 2 deletions x/deployment/keeper/keeper_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -180,12 +180,32 @@ func Test_OnInsufficientFunds(t *testing.T) {
})
}

func Test_OnLeaseClosed(t *testing.T) {
func Test_OnBidClosed(t *testing.T) {
ctx, keeper := setupKeeper(t)

groups := createActiveDeployment(t, ctx, keeper)

keeper.OnLeaseClosed(ctx, groups[0].ID())
keeper.OnBidClosed(ctx, groups[0].ID())

t.Run("target group changed", func(t *testing.T) {
group, ok := keeper.GetGroup(ctx, groups[0].ID())
assert.True(t, ok)
assert.Equal(t, types.GroupClosed, group.State)
})

t.Run("non-target group state unchanged", func(t *testing.T) {
group, ok := keeper.GetGroup(ctx, groups[1].ID())
assert.True(t, ok)
assert.Equal(t, types.GroupMatched, group.State)
})
}

func Test_OnOrderClosed(t *testing.T) {
ctx, keeper := setupKeeper(t)

groups := createActiveDeployment(t, ctx, keeper)

keeper.OnOrderClosed(ctx, groups[0].ID())

t.Run("target group changed", func(t *testing.T) {
group, ok := keeper.GetGroup(ctx, groups[0].ID())
Expand Down
71 changes: 1 addition & 70 deletions x/market/client/cli/cli_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ import (
"fmt"
"path/filepath"
"testing"
"time"

"github.com/stretchr/testify/suite"

Expand All @@ -31,11 +30,6 @@ type IntegrationTestSuite struct {
network *network.Network
}

const (
blockWaitHeight = 8
blockWaitDuration = 45 * time.Second
)

func (s *IntegrationTestSuite) SetupSuite() {
s.T().Log("setting up integration test suite")

Expand Down Expand Up @@ -353,9 +347,6 @@ func (s *IntegrationTestSuite) Test3QueryLeasesAndCloseBid() {
func (s *IntegrationTestSuite) Test4CloseOrder() {
val := s.network.Validators[0]

keyBar, err := val.ClientCtx.Keyring.Key("keyBar")
s.Require().NoError(err)

// fetch open orders
resp, err := cli.QueryOrdersExec(
val.ClientCtx.WithOutputFormat("json"),
Expand All @@ -367,67 +358,7 @@ func (s *IntegrationTestSuite) Test4CloseOrder() {
err = val.ClientCtx.JSONMarshaler.UnmarshalJSON(resp.Bytes(), result)
s.Require().NoError(err)
openedOrders := result.Orders
s.Require().Len(openedOrders, 1)

// Creating bid again for opened order
_, err = cli.TxCreateBidExec(
val.ClientCtx,
openedOrders[0].OrderID,
sdk.NewCoin(testutil.CoinDenom, sdk.NewInt(0)),
keyBar.GetAddress(),
fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation),
fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock),
fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()),
fmt.Sprintf("--gas=%d", flags.DefaultGasLimit),
)
s.Require().NoError(err)

height, err := s.network.LatestHeight()
s.Require().NoError(err)

// Wait for lease creation to modify state of bid
_, err = s.network.WaitForHeightWithTimeout(height+blockWaitHeight, blockWaitDuration)
s.Require().NoError(err)

// test query matched bids
resp, err = cli.QueryBidsExec(val.ClientCtx.WithOutputFormat("json"), "--state=matched")
s.Require().NoError(err)

bidRes := &types.QueryBidsResponse{}
err = val.ClientCtx.JSONMarshaler.UnmarshalJSON(resp.Bytes(), bidRes)
s.Require().NoError(err)
s.Require().Len(bidRes.Bids, 1)
s.Require().Equal(keyBar.GetAddress().String(), bidRes.Bids[0].BidID.Provider)

// Close Order
_, err = cli.TxCloseOrderExec(
val.ClientCtx,
openedOrders[0].OrderID,
keyBar.GetAddress(),
fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation),
fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock),
fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()),
fmt.Sprintf("--gas=%d", flags.DefaultGasLimit),
)
s.Require().NoError(err)

height, err = s.network.LatestHeight()
s.Require().NoError(err)

// Wait for lease creation to modify state of bid
_, err = s.network.WaitForHeightWithTimeout(height+blockWaitHeight, blockWaitDuration)
s.Require().NoError(err)

// fetch closed orders
resp, err = cli.QueryOrdersExec(
val.ClientCtx.WithOutputFormat("json"),
)
s.Require().NoError(err)

result = &types.QueryOrdersResponse{}
err = val.ClientCtx.JSONMarshaler.UnmarshalJSON(resp.Bytes(), result)
s.Require().NoError(err)
s.Require().Len(result.Orders, 2)
s.Require().Len(openedOrders, 0)
}

func TestIntegrationTestSuite(t *testing.T) {
Expand Down
3 changes: 2 additions & 1 deletion x/market/handler/keepers.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,8 @@ type DeploymentKeeper interface {
GetGroup(ctx sdk.Context, id dtypes.GroupID) (dtypes.Group, bool)
OnLeaseCreated(ctx sdk.Context, id dtypes.GroupID)
OnLeaseInsufficientFunds(ctx sdk.Context, id dtypes.GroupID)
OnLeaseClosed(ctx sdk.Context, id dtypes.GroupID)
OnOrderClosed(ctx sdk.Context, id dtypes.GroupID)
OnBidClosed(ctx sdk.Context, id dtypes.GroupID)
}

// Keepers include all modules keepers
Expand Down
5 changes: 3 additions & 2 deletions x/market/handler/msg_server.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package handler

import (
"context"

"github.com/cosmos/cosmos-sdk/telemetry"

sdk "github.com/cosmos/cosmos-sdk/types"
Expand Down Expand Up @@ -106,7 +107,7 @@ func (ms msgServer) CloseBid(goCtx context.Context, msg *types.MsgCloseBid) (*ty
ms.keepers.Market.OnBidClosed(ctx, bid)
ms.keepers.Market.OnLeaseClosed(ctx, lease)
ms.keepers.Market.OnOrderClosed(ctx, order)
ms.keepers.Deployment.OnLeaseClosed(ctx, order.ID().GroupID())
ms.keepers.Deployment.OnBidClosed(ctx, order.ID().GroupID())
telemetry.IncrCounter(1.0, "akash.order_closed")

return &types.MsgCloseBidResponse{}, nil
Expand All @@ -127,7 +128,7 @@ func (ms msgServer) CloseOrder(goCtx context.Context, msg *types.MsgCloseOrder)

ms.keepers.Market.OnOrderClosed(ctx, order)
ms.keepers.Market.OnLeaseClosed(ctx, lease)
ms.keepers.Deployment.OnLeaseClosed(ctx, order.ID().GroupID())
ms.keepers.Deployment.OnOrderClosed(ctx, order.ID().GroupID())

return &types.MsgCloseOrderResponse{}, nil
}

0 comments on commit a08a0bd

Please sign in to comment.