| 74 | } |
| 75 | |
| 76 | func TestExtendingNewOld(t *testing.T) { |
| 77 | // Create a new account with some orders |
| 78 | var account1 = protoex.NewAccountFromFieldValues(1, "Test", protoex.StateEx_good | protoex.StateEx_happy, protoex.Balance{Balance: &proto.Balance{Currency: "USD", Amount: 1000.0}, Locked: 123.456}, &protoex.Balance{Balance: &proto.Balance{Currency: "EUR", Amount: 100.0}, Locked: 12.34}, make([]protoex.Order, 0)) |
| 79 | account1.Orders = append(account1.Orders, protoex.Order{Id: 1, Symbol: "EURUSD", Side: protoex.OrderSide_buy, Type: protoex.OrderType_market, Price: 1.23456, Volume: 1000.0, Tp: 0.0, Sl: 0.0}) |
| 80 | account1.Orders = append(account1.Orders, protoex.Order{Id: 2, Symbol: "EURUSD", Side: protoex.OrderSide_sell, Type: protoex.OrderType_limit, Price: 1.0, Volume: 100.0, Tp: 0.1, Sl: -0.1}) |
| 81 | account1.Orders = append(account1.Orders, protoex.Order{Id: 3, Symbol: "EURUSD", Side: protoex.OrderSide_tell, Type: protoex.OrderType_stoplimit, Price: 1.5, Volume: 10.0, Tp: 1.1, Sl: -1.1}) |
| 82 | |
| 83 | // Serialize the struct to the FBE stream |
| 84 | writer := protoex.NewAccountModel(fbe.NewEmptyBuffer()) |
| 85 | assert.EqualValues(t, writer.Model().FBEOffset(), 4) |
| 86 | serialized, err := writer.Serialize(account1) |
| 87 | assert.Nil(t, err) |
| 88 | assert.EqualValues(t, serialized, writer.Buffer().Size()) |
| 89 | assert.True(t, writer.Verify()) |
| 90 | writer.Next(serialized) |
| 91 | assert.EqualValues(t, writer.Model().FBEOffset(), 4+writer.Buffer().Size()) |
| 92 | |
| 93 | // Check the serialized FBE size |
| 94 | assert.EqualValues(t, writer.Buffer().Size(), 316) |
| 95 | |
| 96 | // Deserialize the struct from the FBE stream |
| 97 | reader := proto.NewAccountModel(writer.Buffer()) |
| 98 | assert.EqualValues(t, reader.Model().FBEOffset(), 4) |
| 99 | assert.True(t, reader.Verify()) |
| 100 | account2, deserialized, err := reader.Deserialize() |
| 101 | assert.Nil(t, err) |
| 102 | assert.EqualValues(t, deserialized, reader.Buffer().Size()) |
| 103 | reader.Next(deserialized) |
| 104 | assert.EqualValues(t, reader.Model().FBEOffset(), 4+reader.Buffer().Size()) |
| 105 | |
| 106 | assert.EqualValues(t, account2.Id, 1) |
| 107 | assert.EqualValues(t, account2.Name, "Test") |
| 108 | assert.True(t, account2.State.HasFlags(proto.State_good)) |
| 109 | assert.EqualValues(t, account2.Wallet.Currency, "USD") |
| 110 | assert.EqualValues(t, account2.Wallet.Amount, 1000.0) |
| 111 | assert.NotNil(t, account2.Asset) |
| 112 | assert.EqualValues(t, account2.Asset.Currency, "EUR") |
| 113 | assert.EqualValues(t, account2.Asset.Amount, 100.0) |
| 114 | assert.EqualValues(t, len(account2.Orders), 3) |
| 115 | assert.EqualValues(t, account2.Orders[0].Id, 1) |
| 116 | assert.EqualValues(t, account2.Orders[0].Symbol, "EURUSD") |
| 117 | assert.EqualValues(t, account2.Orders[0].Side, proto.OrderSide_buy) |
| 118 | assert.EqualValues(t, account2.Orders[0].Type, proto.OrderType_market) |
| 119 | assert.EqualValues(t, account2.Orders[0].Price, 1.23456) |
| 120 | assert.EqualValues(t, account2.Orders[0].Volume, 1000.0) |
| 121 | assert.EqualValues(t, account2.Orders[1].Id, 2) |
| 122 | assert.EqualValues(t, account2.Orders[1].Symbol, "EURUSD") |
| 123 | assert.EqualValues(t, account2.Orders[1].Side, proto.OrderSide_sell) |
| 124 | assert.EqualValues(t, account2.Orders[1].Type, proto.OrderType_limit) |
| 125 | assert.EqualValues(t, account2.Orders[1].Price, 1.0) |
| 126 | assert.EqualValues(t, account2.Orders[1].Volume, 100.0) |
| 127 | assert.EqualValues(t, account2.Orders[2].Id, 3) |
| 128 | assert.EqualValues(t, account2.Orders[2].Symbol, "EURUSD") |
| 129 | assert.NotEqual(t, account2.Orders[2].Side, proto.OrderSide_buy) |
| 130 | assert.NotEqual(t, account2.Orders[2].Type, proto.OrderType_stop) |
| 131 | assert.EqualValues(t, account2.Orders[2].Price, 1.5) |
| 132 | assert.EqualValues(t, account2.Orders[2].Volume, 10.0) |
| 133 | } |