| 7 | import "../proto/protoex" |
| 8 | |
| 9 | func TestExtendingOldNew(t *testing.T) { |
| 10 | // Create a new account with some orders |
| 11 | var account1 = proto.NewAccountFromFieldValues(1, "Test", proto.State_good, proto.Balance{Currency: "USD", Amount: 1000.0}, &proto.Balance{Currency: "EUR", Amount: 100.0}, make([]proto.Order, 0)) |
| 12 | account1.Orders = append(account1.Orders, proto.Order{Id: 1, Symbol: "EURUSD", Side: proto.OrderSide_buy, Type: proto.OrderType_market, Price: 1.23456, Volume: 1000.0}) |
| 13 | account1.Orders = append(account1.Orders, proto.Order{Id: 2, Symbol: "EURUSD", Side: proto.OrderSide_sell, Type: proto.OrderType_limit, Price: 1.0, Volume: 100.0}) |
| 14 | account1.Orders = append(account1.Orders, proto.Order{Id: 3, Symbol: "EURUSD", Side: proto.OrderSide_buy, Type: proto.OrderType_stop, Price: 1.5, Volume: 10.0}) |
| 15 | |
| 16 | // Serialize the struct to the FBE stream |
| 17 | writer := proto.NewAccountModel(fbe.NewEmptyBuffer()) |
| 18 | assert.EqualValues(t, writer.Model().FBEOffset(), 4) |
| 19 | serialized, err := writer.Serialize(account1) |
| 20 | assert.Nil(t, err) |
| 21 | assert.EqualValues(t, serialized, writer.Buffer().Size()) |
| 22 | assert.True(t, writer.Verify()) |
| 23 | writer.Next(serialized) |
| 24 | assert.EqualValues(t, writer.Model().FBEOffset(), 4+writer.Buffer().Size()) |
| 25 | |
| 26 | // Check the serialized FBE size |
| 27 | assert.EqualValues(t, writer.Buffer().Size(), 252) |
| 28 | |
| 29 | // Deserialize the struct from the FBE stream |
| 30 | reader := protoex.NewAccountModel(writer.Buffer()) |
| 31 | assert.EqualValues(t, reader.Model().FBEOffset(), 4) |
| 32 | assert.True(t, reader.Verify()) |
| 33 | account2, deserialized, err := reader.Deserialize() |
| 34 | assert.Nil(t, err) |
| 35 | assert.EqualValues(t, deserialized, reader.Buffer().Size()) |
| 36 | reader.Next(deserialized) |
| 37 | assert.EqualValues(t, reader.Model().FBEOffset(), 4+reader.Buffer().Size()) |
| 38 | |
| 39 | assert.EqualValues(t, account2.Id, 1) |
| 40 | assert.EqualValues(t, account2.Name, "Test") |
| 41 | assert.True(t, account2.State.HasFlags(protoex.StateEx_good)) |
| 42 | assert.EqualValues(t, account2.Wallet.Currency, "USD") |
| 43 | assert.EqualValues(t, account2.Wallet.Amount, 1000.0) |
| 44 | assert.EqualValues(t, account2.Wallet.Locked, 0.0) |
| 45 | assert.NotNil(t, account2.Asset) |
| 46 | assert.EqualValues(t, account2.Asset.Currency, "EUR") |
| 47 | assert.EqualValues(t, account2.Asset.Amount, 100.0) |
| 48 | assert.EqualValues(t, account2.Asset.Locked, 0.0) |
| 49 | assert.EqualValues(t, len(account2.Orders), 3) |
| 50 | assert.EqualValues(t, account2.Orders[0].Id, 1) |
| 51 | assert.EqualValues(t, account2.Orders[0].Symbol, "EURUSD") |
| 52 | assert.EqualValues(t, account2.Orders[0].Side, protoex.OrderSide_buy) |
| 53 | assert.EqualValues(t, account2.Orders[0].Type, protoex.OrderType_market) |
| 54 | assert.EqualValues(t, account2.Orders[0].Price, 1.23456) |
| 55 | assert.EqualValues(t, account2.Orders[0].Volume, 1000.0) |
| 56 | assert.EqualValues(t, account2.Orders[0].Tp, 10.0) |
| 57 | assert.EqualValues(t, account2.Orders[0].Sl, -10.0) |
| 58 | assert.EqualValues(t, account2.Orders[1].Id, 2) |
| 59 | assert.EqualValues(t, account2.Orders[1].Symbol, "EURUSD") |
| 60 | assert.EqualValues(t, account2.Orders[1].Side, protoex.OrderSide_sell) |
| 61 | assert.EqualValues(t, account2.Orders[1].Type, protoex.OrderType_limit) |
| 62 | assert.EqualValues(t, account2.Orders[1].Price, 1.0) |
| 63 | assert.EqualValues(t, account2.Orders[1].Volume, 100.0) |
| 64 | assert.EqualValues(t, account2.Orders[1].Tp, 10.0) |
| 65 | assert.EqualValues(t, account2.Orders[1].Sl, -10.0) |
| 66 | assert.EqualValues(t, account2.Orders[2].Id, 3) |