Skip to content

Commit

Permalink
Trade order fix (#471)
Browse files Browse the repository at this point in the history
fix trade ordering
adjust trade tests
  • Loading branch information
tomerweller authored and bartekn committed Jun 1, 2018
1 parent b05d841 commit 1bf713b
Show file tree
Hide file tree
Showing 53 changed files with 1,746 additions and 1,699 deletions.
40 changes: 26 additions & 14 deletions services/horizon/internal/actions_trade_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,22 +17,34 @@ import (
func TestTradeActions_Index(t *testing.T) {
ht := StartHTTPTest(t, "trades")
defer ht.Finish()
var records []resource.Trade
var firstTrade resource.Trade

// All trades
w := ht.Get("/trades")
if ht.Assert.Equal(200, w.Code) {
ht.Assert.PageOf(1, w.Body)
}
ht.Assert.PageOf(2, w.Body)

ht.UnmarshalPage(w.Body, &records)
firstTrade = records[0]

// ensure created_at is populated correctly
records := []resource.Trade{}
ht.UnmarshalPage(w.Body, &records)
// ensure created_at is populated correctly
l := history.Ledger{}
hq := history.Q{Session: ht.HorizonSession()}
ht.Require.NoError(hq.LedgerBySequence(&l, 6))

l := history.Ledger{}
hq := history.Q{Session: ht.HorizonSession()}
ht.Require.NoError(hq.LedgerBySequence(&l, 6))
ht.Assert.WithinDuration(l.ClosedAt, records[0].LedgerCloseTime, 1*time.Second)
}

// reverse order
w = ht.Get("/trades?order=desc")
if ht.Assert.Equal(200, w.Code) {
ht.Assert.PageOf(2, w.Body)
ht.UnmarshalPage(w.Body, &records)

ht.Assert.WithinDuration(l.ClosedAt, records[0].LedgerCloseTime, 1*time.Second)
// ensure that ordering is indeed reversed
ht.Assert.Equal(firstTrade, records[len(records)-1])
}

var q = make(url.Values)
q.Add("base_asset_type", "credit_alphanum4")
Expand All @@ -44,7 +56,7 @@ func TestTradeActions_Index(t *testing.T) {

w = ht.GetWithParams("/trades", q)
if ht.Assert.Equal(200, w.Code) {
ht.Assert.PageOf(1, w.Body)
ht.Assert.PageOf(2, w.Body)

records := []map[string]interface{}{}
ht.UnmarshalPage(w.Body, &records)
Expand All @@ -63,7 +75,7 @@ func TestTradeActions_Index(t *testing.T) {

w = ht.GetWithParams("/trades", q)
if ht.Assert.Equal(200, w.Code) {
ht.Assert.PageOf(1, w.Body)
ht.Assert.PageOf(2, w.Body)

records := []map[string]interface{}{}
ht.UnmarshalPage(w.Body, &records)
Expand All @@ -75,7 +87,7 @@ func TestTradeActions_Index(t *testing.T) {
// For offer
w = ht.Get("/offers/1/trades")
if ht.Assert.Equal(200, w.Code) {
ht.Assert.PageOf(1, w.Body)
ht.Assert.PageOf(2, w.Body)
}

w = ht.Get("/offers/2/trades")
Expand All @@ -86,12 +98,12 @@ func TestTradeActions_Index(t *testing.T) {
// for an account
w = ht.Get("/accounts/GA5WBPYA5Y4WAEHXWR2UKO2UO4BUGHUQ74EUPKON2QHV4WRHOIRNKKH2/trades")
if ht.Assert.Equal(200, w.Code) {
ht.Assert.PageOf(1, w.Body)
ht.Assert.PageOf(2, w.Body)
}

w = ht.Get("/accounts/GCXKG6RN4ONIEPCMNFB732A436Z5PNDSRLGWK7GBLCMQLIFO4S7EYWVU/trades")
if ht.Assert.Equal(200, w.Code) {
ht.Assert.PageOf(1, w.Body)
ht.Assert.PageOf(2, w.Body)
records := []map[string]interface{}{}
ht.UnmarshalPage(w.Body, &records)
ht.Assert.Contains(records[0], "base_amount")
Expand Down
9 changes: 2 additions & 7 deletions services/horizon/internal/db2/history/trade.go
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ func (q *Q) Trades() *TradesQ {
parent: q,
sql: selectTrade,
}
return trades.JoinAccounts().JoinAssets().InLedgerOrder()
return trades.JoinAccounts().JoinAssets()
}

// ReverseTrades provides a helper to filter rows from the `history_trades` table
Expand All @@ -38,7 +38,7 @@ func (q *Q) ReverseTrades() *TradesQ {
parent: q,
sql: selectReverseTrade,
}
return trades.JoinAccounts().JoinAssets().InLedgerOrder()
return trades.JoinAccounts().JoinAssets()
}

// TradesForAssetPair provides a helper to filter rows from the `history_trades` table
Expand Down Expand Up @@ -78,11 +78,6 @@ func (q *TradesQ) ForAccount(aid string) *TradesQ {
return q
}

func (q *TradesQ) InLedgerOrder() *TradesQ {
q.sql = q.sql.OrderBy("htrd.history_operation_id ", "htrd.\"order\"")
return q
}

// Page specifies the paging constraints for the query being built by `q`.
func (q *TradesQ) Page(page db2.PageQuery) *TradesQ {
if q.Err != nil {
Expand Down
6 changes: 3 additions & 3 deletions services/horizon/internal/db2/history/trade_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ func TestTradeQueries(t *testing.T) {
var trades []Trade

// All trades
err := q.Trades().Select(&trades)
err := q.Trades().Page(db2.MustPageQuery("", "asc", 100)).Select(&trades)
if tt.Assert.NoError(err) {
tt.Assert.Len(trades, 4)
}
Expand All @@ -34,7 +34,7 @@ func TestTradeQueries(t *testing.T) {

// Cursor bounds checking
pq = db2.MustPageQuery("", "desc", 1)
err = q.Trades().InLedgerOrder().Page(pq).Select(&pt)
err = q.Trades().Page(pq).Select(&pt)
tt.Require.NoError(err)

// test for asset pairs
Expand All @@ -52,7 +52,7 @@ func TestTradeQueries(t *testing.T) {
tt.Assert.Equal(true, trades[0].BaseIsSeller)

// reverse assets
err = q.TradesForAssetPair(4, 1).InLedgerOrder().Select(&trades)
err = q.TradesForAssetPair(4, 1).Select(&trades)
tt.Require.NoError(err)
tt.Assert.Len(trades, 1)

Expand Down
14 changes: 7 additions & 7 deletions services/horizon/internal/test/scenarios/account_merge-core.sql
Original file line number Diff line number Diff line change
Expand Up @@ -326,8 +326,8 @@ INSERT INTO accounts VALUES ('GA5WBPYA5Y4WAEHXWR2UKO2UO4BUGHUQ74EUPKON2QHV4WRHOI
--

INSERT INTO ledgerheaders VALUES ('63d98f536ee68d1b27b5b89f23af5311b7569a24faf1403ad0b52b633b07be99', '0000000000000000000000000000000000000000000000000000000000000000', '572a2e32ff248a07b0e70fd1f6d318c1facd20b6cc08c33d5775259868125a16', 1, 0, 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABXKi4y/ySKB7DnD9H20xjB+s0gtswIwz1XdSWYaBJaFgAAAAEN4Lazp2QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZAX14QAAAABkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA');
INSERT INTO ledgerheaders VALUES ('ed21e6fe5c7c1f415de4d508e95266e8776dd86625e1c54aa13f45907e40b315', '63d98f536ee68d1b27b5b89f23af5311b7569a24faf1403ad0b52b633b07be99', 'f5b7b3993e6721891a7e1d083e3679c232512d63231476ce6826bc1caf56aecb', 2, 1524516647, 'AAAACmPZj1Nu5o0bJ7W4nyOvUxG3Vpok+vFAOtC1K2M7B76ZUeFWh3+LY3YTHkhb6t+XikT48AKVUrh+INl3MY9NNtUAAAAAWt5HJwAAAAIAAAAIAAAAAQAAAAoAAAAIAAAAAwAAJxAAAAAAwWNZfI5WyFWx2m7ToNQChYZ5zqFrwog2j0kXqQNLArv1t7OZPmchiRp+HQg+NnnCMlEtYyMUds5oJrwcr1auywAAAAIN4Lazp2QAAAAAAAAAAADIAAAAAAAAAAAAAAAAAAAAZAX14QAAACcQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA');
INSERT INTO ledgerheaders VALUES ('38a0970eaa10b1ae336b4b49c186e69f6bcafddbf5c8639a9d8640cbe4da2145', 'ed21e6fe5c7c1f415de4d508e95266e8776dd86625e1c54aa13f45907e40b315', 'e6416678d086830ebdfb266fe3c757df011b4082ba5677ecb5542d2ed5369c42', 3, 1524516648, 'AAAACu0h5v5cfB9BXeTVCOlSZuh3bdhmJeHFSqE/RZB+QLMVUtbxpC6z/yvTcyuass4xNvtwil6tbf2sZq4NhCqjmAEAAAAAWt5HKAAAAAAAAAAAl3fNvfZdYBxPGC86jq3dI5KKUxZcop2bXz/KHY7Ox/TmQWZ40IaDDr37Jm/jx1ffARtAgrpWd+y1VC0u1TacQgAAAAMN4Lazp2QAAAAAAAAAAAEsAAAAAAAAAAAAAAAAAAAAZAX14QAAACcQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA');
INSERT INTO ledgerheaders VALUES ('1ea5e256a0fc12308136b9c67a7967496f0c4bc689323601b888f9d2f2a72e57', '63d98f536ee68d1b27b5b89f23af5311b7569a24faf1403ad0b52b633b07be99', 'f5b7b3993e6721891a7e1d083e3679c232512d63231476ce6826bc1caf56aecb', 2, 1527873028, 'AAAACmPZj1Nu5o0bJ7W4nyOvUxG3Vpok+vFAOtC1K2M7B76ZUeFWh3+LY3YTHkhb6t+XikT48AKVUrh+INl3MY9NNtUAAAAAWxF+BAAAAAIAAAAIAAAAAQAAAAoAAAAIAAAAAwAAJxAAAAAAwWNZfI5WyFWx2m7ToNQChYZ5zqFrwog2j0kXqQNLArv1t7OZPmchiRp+HQg+NnnCMlEtYyMUds5oJrwcr1auywAAAAIN4Lazp2QAAAAAAAAAAADIAAAAAAAAAAAAAAAAAAAAZAX14QAAACcQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA');
INSERT INTO ledgerheaders VALUES ('f26e63d8c13823970a443cd0b6705b5441b86617d777f8979d163c6133db2bb2', '1ea5e256a0fc12308136b9c67a7967496f0c4bc689323601b888f9d2f2a72e57', 'e6416678d086830ebdfb266fe3c757df011b4082ba5677ecb5542d2ed5369c42', 3, 1527873029, 'AAAACh6l4lag/BIwgTa5xnp5Z0lvDEvGiTI2AbiI+dLypy5XGhISqeXXJIqWT2TbW8+6I10qMuaAn+WRZmbqE9DFCuMAAAAAWxF+BQAAAAAAAAAAl3fNvfZdYBxPGC86jq3dI5KKUxZcop2bXz/KHY7Ox/TmQWZ40IaDDr37Jm/jx1ffARtAgrpWd+y1VC0u1TacQgAAAAMN4Lazp2QAAAAAAAAAAAEsAAAAAAAAAAAAAAAAAAAAZAX14QAAACcQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA');


--
Expand Down Expand Up @@ -358,15 +358,15 @@ INSERT INTO ledgerheaders VALUES ('38a0970eaa10b1ae336b4b49c186e69f6bcafddbf5c86
-- Data for Name: scphistory; Type: TABLE DATA; Schema: public; Owner: -
--

INSERT INTO scphistory VALUES ('GDPKRPCTEUIAF2DT45KKMPYZ43D5ZYFMOGU4VKFAWB5EBLOXOGOJ7KI2', 2, 'AAAAAN6ovFMlEALoc+dUpj8Z5sfc4KxxqcqooLB6QK3XcZyfAAAAAAAAAAIAAAACAAAAAQAAAEhR4VaHf4tjdhMeSFvq35eKRPjwApVSuH4g2Xcxj0021QAAAABa3kcnAAAAAgAAAAgAAAABAAAACgAAAAgAAAADAAAnEAAAAAAAAAAB6zQhHNstE33hvWop3UOwqCmwe6jUQ55TQKXMkfZ34/4AAABAfdsBC+N+xRghzxBer9r0Yux16CjpekDGgIqGKKKzv9lU6l39B0WPcKznBd/7+XllbKxtVkjqqSH1/9bRiaQfAw==');
INSERT INTO scphistory VALUES ('GDPKRPCTEUIAF2DT45KKMPYZ43D5ZYFMOGU4VKFAWB5EBLOXOGOJ7KI2', 3, 'AAAAAN6ovFMlEALoc+dUpj8Z5sfc4KxxqcqooLB6QK3XcZyfAAAAAAAAAAMAAAACAAAAAQAAADBS1vGkLrP/K9NzK5qyzjE2+3CKXq1t/axmrg2EKqOYAQAAAABa3kcoAAAAAAAAAAAAAAAB6zQhHNstE33hvWop3UOwqCmwe6jUQ55TQKXMkfZ34/4AAABAogeMThJmWMooDxjkBS6E9L2jtiG3aWSD39WnZP5btQ29vw252GxAC5wqGY2ASnyyrZV+qWxnQviey1S/JwCcAw==');
INSERT INTO scphistory VALUES ('GA4YS53CQ2MHW4ZAXN664KAU2RKHGZFHRTRBDECQWLIZFLL5G5DQRQ4G', 2, 'AAAAADmJd2KGmHtzILt97igU1FRzZKeM4hGQULLRkq19N0cIAAAAAAAAAAIAAAACAAAAAQAAAEhR4VaHf4tjdhMeSFvq35eKRPjwApVSuH4g2Xcxj0021QAAAABbEX4EAAAAAgAAAAgAAAABAAAACgAAAAgAAAADAAAnEAAAAAAAAAABy1Ywpdo6ujxDDkfM1IlQ7bEjYxWsF9WQ/VllI8uTlB4AAABA6ZajZKZlcO3UQJXPF5MIhyqYvv52IRzLQLKTGfpR+VmIJK5a3nyWkJPVXMyDJwexjXMlC6DOgE1NibTEUvhiDg==');
INSERT INTO scphistory VALUES ('GA4YS53CQ2MHW4ZAXN664KAU2RKHGZFHRTRBDECQWLIZFLL5G5DQRQ4G', 3, 'AAAAADmJd2KGmHtzILt97igU1FRzZKeM4hGQULLRkq19N0cIAAAAAAAAAAMAAAACAAAAAQAAADAaEhKp5dckipZPZNtbz7ojXSoy5oCf5ZFmZuoT0MUK4wAAAABbEX4FAAAAAAAAAAAAAAABy1Ywpdo6ujxDDkfM1IlQ7bEjYxWsF9WQ/VllI8uTlB4AAABA1EiX4QTi2HMq0GWcB4IstpHh9+065y4T/IlmpHvfb8+BipznDNeCa5/lE1L2p6klL3/BlFy/3KtT9ZZZcW8sAw==');


--
-- Data for Name: scpquorums; Type: TABLE DATA; Schema: public; Owner: -
--

INSERT INTO scpquorums VALUES ('eb34211cdb2d137de1bd6a29dd43b0a829b07ba8d4439e5340a5cc91f677e3fe', 3, 'AAAAAQAAAAEAAAAA3qi8UyUQAuhz51SmPxnmx9zgrHGpyqigsHpArddxnJ8AAAAA');
INSERT INTO scpquorums VALUES ('cb5630a5da3aba3c430e47ccd48950edb1236315ac17d590fd596523cb93941e', 3, 'AAAAAQAAAAEAAAAAOYl3YoaYe3Mgu33uKBTUVHNkp4ziEZBQstGSrX03RwgAAAAA');


--
Expand Down Expand Up @@ -397,7 +397,7 @@ INSERT INTO storestate VALUES ('ledgerupgrades ', '{
"has": false
}
}');
INSERT INTO storestate VALUES ('lastclosedledger ', '38a0970eaa10b1ae336b4b49c186e69f6bcafddbf5c8639a9d8640cbe4da2145');
INSERT INTO storestate VALUES ('lastclosedledger ', 'f26e63d8c13823970a443cd0b6705b5441b86617d777f8979d163c6133db2bb2');
INSERT INTO storestate VALUES ('historyarchivestate ', '{
"version": 1,
"server": "v9.2.0-90-g5c1948f4",
Expand Down Expand Up @@ -483,7 +483,7 @@ INSERT INTO storestate VALUES ('historyarchivestate ', '{
}
]
}');
INSERT INTO storestate VALUES ('lastscpdata ', 'AAAAAgAAAADeqLxTJRAC6HPnVKY/GebH3OCscanKqKCwekCt13GcnwAAAAAAAAADAAAAA+s0IRzbLRN94b1qKd1DsKgpsHuo1EOeU0ClzJH2d+P+AAAAAQAAADBS1vGkLrP/K9NzK5qyzjE2+3CKXq1t/axmrg2EKqOYAQAAAABa3kcoAAAAAAAAAAAAAAABAAAAMFLW8aQus/8r03MrmrLOMTb7cIperW39rGauDYQqo5gBAAAAAFreRygAAAAAAAAAAAAAAEAPgdzJtOA119Zn+mjJVa0dt2OTDmn4ga2NeC9ZFubT3H0Ao4nRi9UBXaGoLhioihf6HOxuOICrN/SsIREsm1cGAAAAAN6ovFMlEALoc+dUpj8Z5sfc4KxxqcqooLB6QK3XcZyfAAAAAAAAAAMAAAACAAAAAQAAADBS1vGkLrP/K9NzK5qyzjE2+3CKXq1t/axmrg2EKqOYAQAAAABa3kcoAAAAAAAAAAAAAAAB6zQhHNstE33hvWop3UOwqCmwe6jUQ55TQKXMkfZ34/4AAABAogeMThJmWMooDxjkBS6E9L2jtiG3aWSD39WnZP5btQ29vw252GxAC5wqGY2ASnyyrZV+qWxnQviey1S/JwCcAwAAAAHtIeb+XHwfQV3k1QjpUmbod23YZiXhxUqhP0WQfkCzFQAAAAEAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAABkAAAAAgAAAAEAAAAAAAAAAAAAAAEAAAAAAAAACAAAAAA7YL8A7jlgEPe0dUU7VHcDQx6Q/wlHqc3UD15aJ3Ii1QAAAAAAAAABruS+TAAAAEAz8O4X3ay1CjSNB+2sS69FGvYVi1ryD8P1ZuZZQnOJTyPtn9IrYaH/+uB7SPRdDzKRvcPwuf3N+ms8rtP5TLMBAAAAAQAAAAEAAAABAAAAAN6ovFMlEALoc+dUpj8Z5sfc4KxxqcqooLB6QK3XcZyfAAAAAA==');
INSERT INTO storestate VALUES ('lastscpdata ', 'AAAAAgAAAAA5iXdihph7cyC7fe4oFNRUc2SnjOIRkFCy0ZKtfTdHCAAAAAAAAAADAAAAA8tWMKXaOro8Qw5HzNSJUO2xI2MVrBfVkP1ZZSPLk5QeAAAAAQAAADAaEhKp5dckipZPZNtbz7ojXSoy5oCf5ZFmZuoT0MUK4wAAAABbEX4FAAAAAAAAAAAAAAABAAAAMBoSEqnl1ySKlk9k21vPuiNdKjLmgJ/lkWZm6hPQxQrjAAAAAFsRfgUAAAAAAAAAAAAAAED3QPhVKULu1jxHiVs9QLCIm7lV1CbgtoPQ5N56g0EbUSujZLh4sNQ/DGKCfHcwpKrollyffXBwX2G4CsTJukIHAAAAADmJd2KGmHtzILt97igU1FRzZKeM4hGQULLRkq19N0cIAAAAAAAAAAMAAAACAAAAAQAAADAaEhKp5dckipZPZNtbz7ojXSoy5oCf5ZFmZuoT0MUK4wAAAABbEX4FAAAAAAAAAAAAAAABy1Ywpdo6ujxDDkfM1IlQ7bEjYxWsF9WQ/VllI8uTlB4AAABA1EiX4QTi2HMq0GWcB4IstpHh9+065y4T/IlmpHvfb8+BipznDNeCa5/lE1L2p6klL3/BlFy/3KtT9ZZZcW8sAwAAAAEepeJWoPwSMIE2ucZ6eWdJbwxLxokyNgG4iPnS8qcuVwAAAAEAAAAArqN6LeOagjxMaUP96Bzfs9e0corNZXzBWJkFoK7kvkwAAABkAAAAAgAAAAEAAAAAAAAAAAAAAAEAAAAAAAAACAAAAAA7YL8A7jlgEPe0dUU7VHcDQx6Q/wlHqc3UD15aJ3Ii1QAAAAAAAAABruS+TAAAAEAz8O4X3ay1CjSNB+2sS69FGvYVi1ryD8P1ZuZZQnOJTyPtn9IrYaH/+uB7SPRdDzKRvcPwuf3N+ms8rtP5TLMBAAAAAQAAAAEAAAABAAAAADmJd2KGmHtzILt97igU1FRzZKeM4hGQULLRkq19N0cIAAAAAA==');


--
Expand Down
Loading

0 comments on commit 1bf713b

Please sign in to comment.