cosmos / b9-checkers-academy-draft

32 stars 40 forks source link

Not sure but events ordering has change on latest versions? Please confirm. #64

Closed apollo-pablo closed 11 months ago

apollo-pablo commented 11 months ago

on 7-events on unit-tests on TestPlayMoveEmitted

Not sure, but seems that now the order of events are FIFO. Please, confirm.

image

func TestPlayMoveEmitted(t *testing.T) {
    msgServer, _, context := setupMsgServerWithOneGameForPlayMove(t)
    ctx := sdk.UnwrapSDKContext(context)
    msgServer.PlayMove(context, &types.MsgPlayMove{
        Creator:   bob,
        GameIndex: "1",
        FromX:     1,
        FromY:     2,
        ToX:       2,
        ToY:       3,
    })
    require.NotNil(t, ctx)
    events := sdk.StringifyEvents(ctx.EventManager().ABCIEvents())
    fmt.Printf("msgServer PlayMove called.\n")
    require.Len(t, events, 2)
    // Index 0 is create-game event
    // Index 1 is move-played event
    event := events[1]
    require.EqualValues(t, sdk.StringEvent{
        Type: "move-played",
        Attributes: []sdk.Attribute{
            {Key: "creator", Value: bob},
            {Key: "game-index", Value: "1"},
            {Key: "captured-x", Value: "-1"},
            {Key: "captured-y", Value: "-1"},
            {Key: "winner", Value: "*"},
        },
    }, event)
}
func TestPlayMove2Emitted(t *testing.T) {
    msgServer, _, context := setupMsgServerWithOneGameForPlayMove(t)
    ctx := sdk.UnwrapSDKContext(context)
    msgServer.PlayMove(context, &types.MsgPlayMove{
        Creator:   bob,
        GameIndex: "1",
        FromX:     1,
        FromY:     2,
        ToX:       2,
        ToY:       3,
    })
    msgServer.PlayMove(context, &types.MsgPlayMove{
        Creator:   carol,
        GameIndex: "1",
        FromX:     0,
        FromY:     5,
        ToX:       1,
        ToY:       4,
    })
    require.NotNil(t, ctx)
    events := sdk.StringifyEvents(ctx.EventManager().ABCIEvents())
    require.Len(t, events, 3) // 3 events
    event := events[2] // the last event
    require.EqualValues(t, sdk.StringEvent{
        Type: "move-played",
        Attributes: []sdk.Attribute{
            {Key: "creator", Value: carol},
            {Key: "game-index", Value: "1"},
            {Key: "captured-x", Value: "-1"},
            {Key: "captured-y", Value: "-1"},
            {Key: "winner", Value: "*"},
        },
    }, event)
    // require.Equal(t, "move-played", event.Type)
    // require.EqualValues(t, []sdk.Attribute{
    //  {Key: "creator", Value: carol},
    //  {Key: "game-index", Value: "1"},
    //  {Key: "captured-x", Value: "-1"},
    //  {Key: "captured-y", Value: "-1"},
    //  {Key: "winner", Value: "*"},
    // }, event.Attributes[5:])
}
xavierlepretre commented 11 months ago

Which versions of Ignite and SDK are you using? And yes, it is possible that the order is not respected. Remember that events are not part of the consensus and are strictly a "node" matter.

apollo-pablo commented 11 months ago
Ignite CLI version:     v0.27.2
Ignite CLI build date:      2023-10-18T11:34:58Z
Ignite CLI source hash:     f3ab0d709ec41e31a1c57f2fe86c8902d8a50497
Ignite CLI config version:  v1
Cosmos SDK version:     v0.47.3
xavierlepretre commented 11 months ago

That makes sense. So this is caused by the SDK version, not because "it's like that on my machine".