github.com/fibonacci-chain/fbc@v0.0.0-20231124064014-c7636198c1e9/x/order/keeper/order_map_test.go (about) 1 //go:build ignore 2 3 package keeper 4 5 import ( 6 "testing" 7 8 sdk "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/types" 9 "github.com/stretchr/testify/require" 10 11 "github.com/fibonacci-chain/fbc/x/dex" 12 "github.com/fibonacci-chain/fbc/x/order/types" 13 ) 14 15 func TestOrderIDsMapInsertAndRemove(t *testing.T) { 16 testInput := CreateTestInput(t) 17 keeper := testInput.OrderKeeper 18 ctx := testInput.Ctx 19 20 orderIDsMap := keeper.diskCache.orderIDsMap 21 22 // Test insert to same key 23 order1 := mockOrder("ID1-1", types.TestTokenPair, types.BuyOrder, "0.5", "1.1") 24 order2 := mockOrder("ID1-2", types.TestTokenPair, types.BuyOrder, "0.5", "1.2") 25 keeper.GetDiskCache().insertOrder(order1) 26 keeper.GetDiskCache().insertOrder(order2) 27 key1 := types.FormatOrderIDsKey(order1.Product, order1.Price, order1.Side) 28 require.EqualValues(t, 1, len(orderIDsMap.Data)) 29 require.EqualValues(t, "ID1-1", orderIDsMap.Data[key1][0]) 30 require.EqualValues(t, "ID1-2", orderIDsMap.Data[key1][1]) 31 32 // Test insert to different key 33 order3 := mockOrder("ID1-3", types.TestTokenPair, types.SellOrder, "0.5", "1.3") 34 keeper.GetDiskCache().insertOrder(order3) 35 key2 := types.FormatOrderIDsKey(order3.Product, order3.Price, order3.Side) 36 require.EqualValues(t, 2, len(orderIDsMap.Data)) 37 require.EqualValues(t, "ID1-3", orderIDsMap.Data[key2][0]) 38 39 // check update keys 40 updatedItemKeys := keeper.GetDiskCache().GetUpdatedOrderIDKeys() 41 require.Equal(t, 2, len(updatedItemKeys)) 42 require.Equal(t, key1, updatedItemKeys[0]) 43 require.Equal(t, key2, updatedItemKeys[1]) 44 keeper.Cache2Disk(ctx) 45 46 // Test Remove 47 keeper.GetDiskCache().removeOrder(order1) 48 require.EqualValues(t, "ID1-2", orderIDsMap.Data[key1][0]) 49 // check update keys 50 updatedItemKeys = keeper.GetDiskCache().GetUpdatedOrderIDKeys() 51 require.Equal(t, 2, len(updatedItemKeys)) 52 require.Equal(t, key1, updatedItemKeys[0]) 53 54 // remove all 55 keeper.GetDiskCache().removeOrder(order2) 56 keeper.GetDiskCache().removeOrder(order3) 57 require.EqualValues(t, 0, len(orderIDsMap.Data)) 58 require.EqualValues(t, 0, len(orderIDsMap.Data[key1])) 59 require.EqualValues(t, 0, len(orderIDsMap.Data[key2])) 60 } 61 62 func TestRemoveOrderFromDepthBook(t *testing.T) { 63 testInput := CreateTestInput(t) 64 keeper := testInput.OrderKeeper 65 ctx := testInput.Ctx 66 67 tokenPair := dex.GetBuiltInTokenPair() 68 err := testInput.DexKeeper.SaveTokenPair(ctx, tokenPair) 69 require.Nil(t, err) 70 71 // mock orders, DepthBook, and orderIDsMap 72 orders := []*types.Order{ 73 mockOrder("ID1-1", types.TestTokenPair, types.BuyOrder, "10.0", "1.0"), 74 mockOrder("ID1-2", types.TestTokenPair, types.BuyOrder, "10.1", "1.0"), 75 mockOrder("ID1-3", types.TestTokenPair, types.SellOrder, "10.1", "1.1"), 76 } 77 depthBook := &types.DepthBook{} 78 79 for i := 0; i < 3; i++ { 80 depthBook.InsertOrder(orders[i]) 81 keeper.GetDiskCache().insertOrder(orders[i]) 82 } 83 keeper.SetDepthBook(types.TestTokenPair, depthBook) 84 keeper.Cache2Disk(ctx) 85 require.Equal(t, 2, len(depthBook.Items)) 86 require.Equal(t, sdk.MustNewDecFromStr("10.1"), depthBook.Items[0].Price) 87 require.Equal(t, sdk.MustNewDecFromStr("1.0"), depthBook.Items[0].BuyQuantity) 88 require.Equal(t, sdk.MustNewDecFromStr("1.1"), depthBook.Items[0].SellQuantity) 89 90 // remove orders[2] 91 keeper.RemoveOrderFromDepthBook(orders[2], types.FeeTypeOrderDeal) 92 93 // check depth book 94 newDepthBook := keeper.GetDepthBookCopy(types.TestTokenPair) 95 require.Equal(t, 2, len(newDepthBook.Items)) 96 require.Equal(t, sdk.MustNewDecFromStr("10.1"), depthBook.Items[0].Price) 97 require.Equal(t, sdk.MustNewDecFromStr("1.0"), depthBook.Items[0].BuyQuantity) 98 require.Equal(t, sdk.ZeroDec().String(), depthBook.Items[0].SellQuantity.String()) 99 100 // check orderIDsMap 101 keys := [3]string{} 102 for i := 0; i < 3; i++ { 103 keys[i] = types.FormatOrderIDsKey(orders[i].Product, orders[i].Price, orders[i].Side) 104 } 105 newOrderIDsMap := keeper.diskCache.GetOrderIDsMapCopy() 106 require.Equal(t, 2, len(newOrderIDsMap.Data)) 107 require.Equal(t, 0, len(newOrderIDsMap.Data[keys[2]])) 108 require.Equal(t, "ID1-1", newOrderIDsMap.Data[keys[0]][0]) 109 require.Equal(t, "ID1-2", newOrderIDsMap.Data[keys[1]][0]) 110 111 // check update keys 112 updatedBookKeys := keeper.GetDiskCache().GetUpdatedDepthbookKeys() 113 updatedItemKeys := keeper.GetDiskCache().GetUpdatedOrderIDKeys() 114 require.Equal(t, 1, len(updatedBookKeys)) 115 require.Equal(t, types.TestTokenPair, updatedBookKeys[0]) 116 require.Equal(t, 3, len(updatedItemKeys)) 117 require.Equal(t, keys[2], updatedItemKeys[2]) 118 }