1 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2 /* vim:set ts=2 sw=2 sts=2 et cindent tw=79 ft=cpp: */
4 * Copyright (C) 2008 Sergey Yanovich <ynvich@gmail.com>
6 * This program is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU General Public License as
8 * published by the Free Software Foundation; either version 2 of the
9 * License, or (at your option) any later version.
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * General Public License for more details.
16 * You should have received a copy of the GNU General Public
17 * License along with this program; if not, write to the
18 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
19 * Boston, MA 02111-1307, USA.
22 #include "xpcom-config.h"
24 #include "nsComponentManagerUtils.h"
25 #include "nsStringAPI.h"
26 #include "nsEmbedString.h"
27 #include "nsIMutableArray.h"
28 #include "nsArrayUtils.h"
31 #include "nsTestUtils.h"
32 #include "nsITestRunner.h"
34 /* Project includes */
35 #include "aaIResource.h"
36 #include "aaIEntity.h"
41 #include "aaITransaction.h"
42 #include "aaILoadQuery.h"
43 #include "aaIFilter.h"
44 #include "aaIQuoteFilter.h"
45 #include "aaBaseLoaders.h"
46 #include "aaAccountLoaders.h"
47 #include "aaIBalance.h"
48 #include "aaAmountUtils.h"
50 #include "aaISession.h"
51 #include "aaIManager.h"
53 #include "aaBaseTestUtils.h"
54 #include "aaCurrencyTest.h"
58 aaCurrencyTest::Test(nsITestRunner
*aTestRunner
)
61 if (NS_FAILED( res
.status
)) {
62 aTestRunner
->AddError(nsITestRunner::errorJS
, \
63 AA_CURRENCY_TEST_CONTRACT_ID
" not initialized");
64 return NS_ERROR_NOT_INITIALIZED
;
66 testPurchase(aTestRunner
);
67 testSaleAdvance(aTestRunner
);
68 testForexSale(aTestRunner
);
69 testRateChange(aTestRunner
);
70 testForexSaleAfterChange(aTestRunner
);
71 testTransferRollback(aTestRunner
);
75 NS_IMPL_ISUPPORTS1(aaCurrencyTest
, nsITest
)
78 aaCurrencyTest::RAII::RAII(aaCurrencyTest
*t
)
79 :status(PR_FALSE
), test(nsnull
)
83 nsCOMPtr
<aaIManager
> manager
=
84 do_CreateInstance(AA_MANAGER_CONTRACT_ID
, &rv
);
85 if (NS_UNLIKELY( ! manager
))
88 rv
= manager
->Backup("storage.sqlite");
89 if (NS_FAILED(rv
)) return;
91 nsCOMPtr
<aaISession
> session(do_CreateInstance(AA_SESSION_CONTRACT_ID
, &rv
));
92 if (NS_UNLIKELY( ! session
))
97 test
->mSession
= session
;
100 aaCurrencyTest::RAII::~RAII()
102 test
->mFlows
= nsnull
;
103 test
->mResources
= nsnull
;
104 test
->mEntities
= nsnull
;
105 test
->mBank
= nsnull
;
106 test
->mSession
= nsnull
;
110 nsCOMPtr
<aaIManager
> manager
=
111 do_CreateInstance(AA_MANAGER_CONTRACT_ID
, &rv
);
112 if (NS_UNLIKELY( ! manager
))
115 manager
->Backup("currency.sqlite");
116 manager
->Restore("storage.sqlite");
119 /* Private methods */
121 aaCurrencyTest::testPurchase(nsITestRunner
*aTestRunner
)
124 NS_TEST_BEGIN(aTestRunner
);
126 nsCOMPtr
<aaIResource
> cf
, c1
, c2
, x
, y
;
128 nsCOMPtr
<aaIEntity
> B
, S1
, S2
, P1
, P2
, K
;
130 nsCOMPtr
<aaIFlow
> af
, a1
, a2
, dx
, dy
, bx1
, by2
, sx1
, sy2
;
132 nsCOMPtr
<aaIQuote
> quote
;
133 nsCOMPtr
<aaIFact
> fact
;
134 nsCOMPtr
<aaIEvent
> event
;
135 nsCOMPtr
<nsIMutableArray
> block
;
136 nsCOMPtr
<aaITransaction
> txn
;
137 PRExplodedTime tm
= {0,0,0,12,25,2,2008};
140 /* Create resources and entities */
142 cf
= do_CreateInstance("@aasii.org/base/resource;1", &rv
);
143 NS_TEST_ASSERT_OK(rv
);
144 NS_ENSURE_SUCCESS(rv
, rv
);
145 rv
= cf
->SetTag(NS_LITERAL_STRING("cf"));
146 NS_TEST_ASSERT_OK(rv
);
147 NS_ENSURE_SUCCESS(rv
, rv
);
148 rv
= mSession
->Save(cf
, nsnull
);
149 NS_TEST_ASSERT_OK(rv
);
150 NS_ENSURE_SUCCESS(rv
, rv
);
152 c1
= do_CreateInstance("@aasii.org/base/resource;1", &rv
);
153 NS_TEST_ASSERT_OK(rv
);
154 NS_ENSURE_SUCCESS(rv
, rv
);
155 rv
= c1
->SetTag(NS_LITERAL_STRING("c1"));
156 NS_TEST_ASSERT_OK(rv
);
157 NS_ENSURE_SUCCESS(rv
, rv
);
158 rv
= mSession
->Save(c1
, nsnull
);
159 NS_TEST_ASSERT_OK(rv
);
160 NS_ENSURE_SUCCESS(rv
, rv
);
162 c2
= do_CreateInstance("@aasii.org/base/resource;1", &rv
);
163 NS_TEST_ASSERT_OK(rv
);
164 NS_ENSURE_SUCCESS(rv
, rv
);
165 rv
= c2
->SetTag(NS_LITERAL_STRING("c2"));
166 NS_TEST_ASSERT_OK(rv
);
167 NS_ENSURE_SUCCESS(rv
, rv
);
168 rv
= mSession
->Save(c2
, nsnull
);
169 NS_TEST_ASSERT_OK(rv
);
170 NS_ENSURE_SUCCESS(rv
, rv
);
172 x
= do_CreateInstance("@aasii.org/base/resource;1", &rv
);
173 NS_TEST_ASSERT_OK(rv
);
174 NS_ENSURE_SUCCESS(rv
, rv
);
175 rv
= x
->SetTag(NS_LITERAL_STRING("x"));
176 NS_TEST_ASSERT_OK(rv
);
177 NS_ENSURE_SUCCESS(rv
, rv
);
178 rv
= mSession
->Save(x
, nsnull
);
179 NS_TEST_ASSERT_OK(rv
);
180 NS_ENSURE_SUCCESS(rv
, rv
);
182 y
= do_CreateInstance("@aasii.org/base/resource;1", &rv
);
183 NS_TEST_ASSERT_OK(rv
);
184 NS_ENSURE_SUCCESS(rv
, rv
);
185 rv
= y
->SetTag(NS_LITERAL_STRING("y"));
186 NS_TEST_ASSERT_OK(rv
);
187 NS_ENSURE_SUCCESS(rv
, rv
);
188 rv
= mSession
->Save(y
, nsnull
);
189 NS_TEST_ASSERT_OK(rv
);
190 NS_ENSURE_SUCCESS(rv
, rv
);
192 B
= do_CreateInstance("@aasii.org/base/entity;1", &rv
);
193 NS_TEST_ASSERT_OK(rv
);
194 NS_ENSURE_SUCCESS(rv
, rv
);
195 rv
= B
->SetTag(NS_LITERAL_STRING("B"));
196 NS_TEST_ASSERT_OK(rv
);
197 NS_ENSURE_SUCCESS(rv
, rv
);
198 rv
= mSession
->Save(B
, nsnull
);
199 NS_TEST_ASSERT_OK(rv
);
200 NS_ENSURE_SUCCESS(rv
, rv
);
202 S1
= do_CreateInstance("@aasii.org/base/entity;1", &rv
);
203 NS_TEST_ASSERT_OK(rv
);
204 NS_ENSURE_SUCCESS(rv
, rv
);
205 rv
= S1
->SetTag(NS_LITERAL_STRING("S1"));
206 NS_TEST_ASSERT_OK(rv
);
207 NS_ENSURE_SUCCESS(rv
, rv
);
208 rv
= mSession
->Save(S1
, nsnull
);
209 NS_TEST_ASSERT_OK(rv
);
210 NS_ENSURE_SUCCESS(rv
, rv
);
212 S2
= do_CreateInstance("@aasii.org/base/entity;1", &rv
);
213 NS_TEST_ASSERT_OK(rv
);
214 NS_ENSURE_SUCCESS(rv
, rv
);
215 rv
= S2
->SetTag(NS_LITERAL_STRING("S2"));
216 NS_TEST_ASSERT_OK(rv
);
217 NS_ENSURE_SUCCESS(rv
, rv
);
218 rv
= mSession
->Save(S2
, nsnull
);
219 NS_TEST_ASSERT_OK(rv
);
220 NS_ENSURE_SUCCESS(rv
, rv
);
222 P1
= do_CreateInstance("@aasii.org/base/entity;1", &rv
);
223 NS_TEST_ASSERT_OK(rv
);
224 NS_ENSURE_SUCCESS(rv
, rv
);
225 rv
= P1
->SetTag(NS_LITERAL_STRING("P1"));
226 NS_TEST_ASSERT_OK(rv
);
227 NS_ENSURE_SUCCESS(rv
, rv
);
228 rv
= mSession
->Save(P1
, nsnull
);
229 NS_TEST_ASSERT_OK(rv
);
230 NS_ENSURE_SUCCESS(rv
, rv
);
232 P2
= do_CreateInstance("@aasii.org/base/entity;1", &rv
);
233 NS_TEST_ASSERT_OK(rv
);
234 NS_ENSURE_SUCCESS(rv
, rv
);
235 rv
= P2
->SetTag(NS_LITERAL_STRING("P2"));
236 NS_TEST_ASSERT_OK(rv
);
237 NS_ENSURE_SUCCESS(rv
, rv
);
238 rv
= mSession
->Save(P2
, nsnull
);
239 NS_TEST_ASSERT_OK(rv
);
240 NS_ENSURE_SUCCESS(rv
, rv
);
242 K
= do_CreateInstance("@aasii.org/base/entity;1", &rv
);
243 NS_TEST_ASSERT_OK(rv
);
244 NS_ENSURE_SUCCESS(rv
, rv
);
245 rv
= K
->SetTag(NS_LITERAL_STRING("K"));
246 NS_TEST_ASSERT_OK(rv
);
247 NS_ENSURE_SUCCESS(rv
, rv
);
248 rv
= mSession
->Save(K
, nsnull
);
249 NS_TEST_ASSERT_OK(rv
);
250 NS_ENSURE_SUCCESS(rv
, rv
);
254 /* Create accounts and init chart */
256 af
= do_CreateInstance("@aasii.org/base/flow;1", &rv
);
257 NS_TEST_ASSERT_OK(rv
);
258 NS_ENSURE_SUCCESS(rv
, rv
);
260 af
->SetGiveResource(cf
);
261 af
->SetTakeResource(cf
);
263 af
->SetTag(NS_LITERAL_STRING("af"));
264 mSession
->Save(af
, nsnull
);
265 NS_TEST_ASSERT_OK(rv
);
266 NS_ENSURE_SUCCESS(rv
, rv
);
268 a1
= do_CreateInstance("@aasii.org/base/flow;1", &rv
);
269 NS_TEST_ASSERT_OK(rv
);
270 NS_ENSURE_SUCCESS(rv
, rv
);
272 a1
->SetGiveResource(c1
);
273 a1
->SetTakeResource(c1
);
275 a1
->SetTag(NS_LITERAL_STRING("a1"));
276 mSession
->Save(a1
, nsnull
);
277 NS_TEST_ASSERT_OK(rv
);
278 NS_ENSURE_SUCCESS(rv
, rv
);
280 a2
= do_CreateInstance("@aasii.org/base/flow;1", &rv
);
281 NS_TEST_ASSERT_OK(rv
);
282 NS_ENSURE_SUCCESS(rv
, rv
);
284 a2
->SetGiveResource(c2
);
285 a2
->SetTakeResource(c2
);
287 a2
->SetTag(NS_LITERAL_STRING("a2"));
288 mSession
->Save(a2
, nsnull
);
289 NS_TEST_ASSERT_OK(rv
);
290 NS_ENSURE_SUCCESS(rv
, rv
);
292 dx
= do_CreateInstance("@aasii.org/base/flow;1", &rv
);
293 NS_TEST_ASSERT_OK(rv
);
294 NS_ENSURE_SUCCESS(rv
, rv
);
296 dx
->SetGiveResource(x
);
297 dx
->SetTakeResource(x
);
299 dx
->SetTag(NS_LITERAL_STRING("dx"));
300 mSession
->Save(dx
, nsnull
);
301 NS_TEST_ASSERT_OK(rv
);
302 NS_ENSURE_SUCCESS(rv
, rv
);
304 dy
= do_CreateInstance("@aasii.org/base/flow;1", &rv
);
305 NS_TEST_ASSERT_OK(rv
);
306 NS_ENSURE_SUCCESS(rv
, rv
);
308 dy
->SetGiveResource(y
);
309 dy
->SetTakeResource(y
);
311 dy
->SetTag(NS_LITERAL_STRING("dy"));
312 mSession
->Save(dy
, nsnull
);
313 NS_TEST_ASSERT_OK(rv
);
314 NS_ENSURE_SUCCESS(rv
, rv
);
316 bx1
= do_CreateInstance("@aasii.org/base/flow;1", &rv
);
317 NS_TEST_ASSERT_OK(rv
);
318 NS_ENSURE_SUCCESS(rv
, rv
);
320 bx1
->SetGiveResource(c1
);
321 bx1
->SetTakeResource(x
);
322 bx1
->SetRate(1.0/100.0);
323 bx1
->SetTag(NS_LITERAL_STRING("bx1"));
324 mSession
->Save(bx1
, nsnull
);
325 NS_TEST_ASSERT_OK(rv
);
326 NS_ENSURE_SUCCESS(rv
, rv
);
328 by2
= do_CreateInstance("@aasii.org/base/flow;1", &rv
);
329 NS_TEST_ASSERT_OK(rv
);
330 NS_ENSURE_SUCCESS(rv
, rv
);
332 by2
->SetGiveResource(cf
);
333 by2
->SetTakeResource(y
);
334 by2
->SetRate(1.0/200.0);
335 by2
->SetTag(NS_LITERAL_STRING("by2"));
336 mSession
->Save(by2
, nsnull
);
337 NS_TEST_ASSERT_OK(rv
);
338 NS_ENSURE_SUCCESS(rv
, rv
);
340 sx1
= do_CreateInstance("@aasii.org/base/flow;1", &rv
);
341 NS_TEST_ASSERT_OK(rv
);
342 NS_ENSURE_SUCCESS(rv
, rv
);
344 sx1
->SetGiveResource(x
);
345 sx1
->SetTakeResource(cf
);
347 sx1
->SetTag(NS_LITERAL_STRING("sx1"));
348 mSession
->Save(sx1
, nsnull
);
349 NS_TEST_ASSERT_OK(rv
);
350 NS_ENSURE_SUCCESS(rv
, rv
);
352 sy2
= do_CreateInstance("@aasii.org/base/flow;1", &rv
);
353 NS_TEST_ASSERT_OK(rv
);
354 NS_ENSURE_SUCCESS(rv
, rv
);
356 sy2
->SetGiveResource(y
);
357 sy2
->SetTakeResource(c2
);
359 sy2
->SetTag(NS_LITERAL_STRING("sy2"));
360 mSession
->Save(sy2
, nsnull
);
361 NS_TEST_ASSERT_OK(rv
);
362 NS_ENSURE_SUCCESS(rv
, rv
);
364 quote
= do_CreateInstance("@aasii.org/base/quote;1", &rv
);
365 NS_TEST_ASSERT_OK(rv
);
366 NS_ENSURE_SUCCESS(rv
, rv
);
367 quote
->SetResource(cf
);
369 quote
->SetTime(PR_ImplodeTime(&tm
));
370 mSession
->Save(quote
, nsnull
);
371 NS_TEST_ASSERT_OK(rv
);
372 NS_ENSURE_SUCCESS(rv
, rv
);
375 /* Add a quote for c1, and accept delivery under bx1 */
377 quote
= do_CreateInstance("@aasii.org/base/quote;1", &rv
);
378 NS_TEST_ASSERT_OK(rv
);
379 NS_ENSURE_SUCCESS(rv
, rv
);
380 quote
->SetResource(c1
);
382 quote
->SetTime(PR_ImplodeTime(&tm
));
383 rv
= mSession
->Save(quote
, nsnull
);
384 NS_TEST_ASSERT_OK(rv
);
385 NS_ENSURE_SUCCESS(rv
, rv
);
387 fact
= do_CreateInstance("@aasii.org/base/fact;1", &rv
);
388 NS_TEST_ASSERT_OK(rv
);
389 NS_ENSURE_SUCCESS(rv
, rv
);
390 fact
->SetTakeFrom(bx1
);
392 fact
->SetAmount(300.0);
393 event
= do_CreateInstance("@aasii.org/base/event;1", &rv
);
394 NS_TEST_ASSERT_OK(rv
);
395 NS_ENSURE_SUCCESS(rv
, rv
);
396 event
->SetTime(PR_ImplodeTime(&tm
));
397 block
= do_QueryInterface(event
, &rv
);
398 NS_TEST_ASSERT_OK(rv
);
399 NS_ENSURE_SUCCESS(rv
, rv
);
400 block
->AppendElement(fact
, PR_FALSE
);
401 rv
= mSession
->Save(event
, nsnull
);
402 NS_TEST_ASSERT_OK(rv
);
403 NS_ENSURE_SUCCESS(rv
, rv
);
404 txn
= do_CreateInstance("@aasii.org/base/transaction;1", &rv
);
406 rv
= mSession
->Save(txn
, nsnull
);
407 NS_TEST_ASSERT_OK(rv
);
408 NS_ENSURE_SUCCESS(rv
, rv
);
414 nsCOMPtr
<aaILoadQuery
> set
;
415 rv
= mSession
->CreateQuery(AA_LOADBALANCE_CONTRACT_ID
, getter_AddRefs( set
));
416 NS_TEST_ASSERT_OK(rv
);
417 NS_ENSURE_TRUE(set
, rv
);
419 NS_TEST_ASSERT_OK(rv
);
421 nsCOMPtr
<aaIBalance
> balance
;
422 balance
= (do_QueryElementAt(set
, 0));
423 NS_TEST_ASSERT_MSG(testBalance(aTestRunner
, balance
, 6, 2, 30000.0,
425 "[currency] flow 'bx1' is wrong");
426 balance
= (do_QueryElementAt(set
, 1));
427 NS_TEST_ASSERT_MSG(testBalance(aTestRunner
, balance
, 4, 4, 300.0,
429 "[currency] flow 'dx' is wrong");
436 aaCurrencyTest::testSaleAdvance(nsITestRunner
*aTestRunner
)
439 NS_TEST_BEGIN(aTestRunner
);
440 rv
= mSession
->CreateQuery(AA_LOADFLOW_CONTRACT_ID
, getter_AddRefs(mFlows
));
441 NS_TEST_ASSERT_OK(rv
);
442 NS_ENSURE_SUCCESS(rv
, rv
);
445 NS_TEST_ASSERT_OK(rv
);
446 NS_ENSURE_SUCCESS(rv
, rv
);
448 rv
= mSession
->CreateQuery(AA_LOADRESOURCE_CONTRACT_ID
,
449 getter_AddRefs(mResources
));
450 NS_TEST_ASSERT_OK(rv
);
451 NS_ENSURE_SUCCESS(rv
, rv
);
453 rv
= mResources
->Load();
454 NS_TEST_ASSERT_OK(rv
);
455 NS_ENSURE_SUCCESS(rv
, rv
);
457 nsCOMPtr
<aaIResource
> c2
= do_QueryElementAt(mResources
, 2);
459 nsCOMPtr
<aaIFlow
> a2
= do_QueryElementAt(mFlows
, 2);
460 nsCOMPtr
<aaIFlow
> sy2
= do_QueryElementAt(mFlows
, 8);
462 nsCOMPtr
<aaIQuote
> quote
;
463 nsCOMPtr
<aaIFact
> fact
;
464 nsCOMPtr
<aaIEvent
> event
;
465 nsCOMPtr
<nsIMutableArray
> block
;
466 nsCOMPtr
<aaITransaction
> txn
;
467 PRExplodedTime tm
= {0,0,0,12,25,2,2008};
470 /* Add a quote for c2, and accept advance payment under sy2 */
472 quote
= do_CreateInstance("@aasii.org/base/quote;1", &rv
);
473 NS_TEST_ASSERT_OK(rv
);
474 NS_ENSURE_SUCCESS(rv
, rv
);
475 quote
->SetResource(c2
);
477 quote
->SetTime(PR_ImplodeTime(&tm
));
478 mSession
->Save(quote
, nsnull
);
479 NS_TEST_ASSERT_OK(rv
);
480 NS_ENSURE_SUCCESS(rv
, rv
);
482 fact
= do_CreateInstance("@aasii.org/base/fact;1", &rv
);
483 NS_TEST_ASSERT_OK(rv
);
484 NS_ENSURE_SUCCESS(rv
, rv
);
485 fact
->SetTakeFrom(sy2
);
487 fact
->SetAmount(60000.0);
488 event
= do_CreateInstance("@aasii.org/base/event;1", &rv
);
489 NS_TEST_ASSERT_OK(rv
);
490 NS_ENSURE_SUCCESS(rv
, rv
);
491 event
->SetTime(PR_ImplodeTime(&tm
));
492 block
= do_QueryInterface(event
, &rv
);
493 NS_TEST_ASSERT_OK(rv
);
494 NS_ENSURE_SUCCESS(rv
, rv
);
495 block
->AppendElement(fact
, PR_FALSE
);
496 rv
= mSession
->Save(event
, nsnull
);
497 NS_TEST_ASSERT_OK(rv
);
498 NS_ENSURE_SUCCESS(rv
, rv
);
499 txn
= do_CreateInstance("@aasii.org/base/transaction;1", &rv
);
501 rv
= mSession
->Save(txn
, nsnull
);
502 NS_TEST_ASSERT_OK(rv
);
503 NS_ENSURE_SUCCESS(rv
, rv
);
505 nsCOMPtr
<aaILoadQuery
> set
;
506 rv
= mSession
->CreateQuery(AA_LOADBALANCE_CONTRACT_ID
, getter_AddRefs( set
));
507 NS_TEST_ASSERT_OK(rv
);
508 NS_ENSURE_TRUE(set
, rv
);
510 NS_TEST_ASSERT_OK(rv
);
512 nsCOMPtr
<aaIBalance
> balance
;
513 balance
= (do_QueryElementAt(set
, 2));
514 NS_TEST_ASSERT_MSG(testBalance(aTestRunner
, balance
, 9, 5, 400.0,
516 "[currency] flow 'bx1' is wrong");
517 balance
= (do_QueryElementAt(set
, 3));
518 NS_TEST_ASSERT_MSG(testBalance(aTestRunner
, balance
, 3, 3, 60000.0,
520 "[currency] flow 'dx' is wrong");
527 aaCurrencyTest::testForexSale(nsITestRunner
*aTestRunner
)
530 NS_TEST_BEGIN(aTestRunner
);
532 nsCOMPtr
<aaIResource
> cf
= do_QueryElementAt(mResources
, 0);
533 nsCOMPtr
<aaIResource
> c2
= do_QueryElementAt(mResources
, 2);
535 nsCOMPtr
<aaIFlow
> f1
, f2
, f3
;
536 nsCOMPtr
<aaIFlow
> a2
= do_QueryElementAt(mFlows
, 2);
538 nsCOMPtr
<aaIQuote
> quote
;
539 nsCOMPtr
<aaIFact
> fact
;
540 nsCOMPtr
<aaIEvent
> event
;
541 nsCOMPtr
<nsIMutableArray
> block
;
542 nsCOMPtr
<aaITransaction
> txn
;
543 PRExplodedTime tm
= {0,0,0,12,25,2,2008};
544 nsCOMPtr
<aaIBalance
> balance
;
546 /* Pay for forex deal 1 */
548 f1
= do_CreateInstance("@aasii.org/base/flow;1", &rv
);
549 NS_TEST_ASSERT_OK(rv
);
550 NS_ENSURE_SUCCESS(rv
, rv
);
551 f1
->SetEntity(mBank
);
552 f1
->SetGiveResource(c2
);
553 f1
->SetTakeResource(cf
);
555 f1
->SetTag(NS_LITERAL_STRING("f1"));
556 mSession
->Save(f1
, nsnull
);
557 NS_TEST_ASSERT_OK(rv
);
558 NS_ENSURE_SUCCESS(rv
, rv
);
560 fact
= do_CreateInstance("@aasii.org/base/fact;1", &rv
);
561 NS_TEST_ASSERT_OK(rv
);
562 NS_ENSURE_SUCCESS(rv
, rv
);
563 fact
->SetTakeFrom(a2
);
565 fact
->SetAmount(10000.0);
566 event
= do_CreateInstance("@aasii.org/base/event;1", &rv
);
567 NS_TEST_ASSERT_OK(rv
);
568 NS_ENSURE_SUCCESS(rv
, rv
);
569 event
->SetTime(PR_ImplodeTime(&tm
));
570 block
= do_QueryInterface(event
, &rv
);
571 NS_TEST_ASSERT_OK(rv
);
572 NS_ENSURE_SUCCESS(rv
, rv
);
573 block
->AppendElement(fact
, PR_FALSE
);
574 rv
= mSession
->Save(event
, nsnull
);
575 NS_TEST_ASSERT_OK(rv
);
576 NS_ENSURE_SUCCESS(rv
, rv
);
577 txn
= do_CreateInstance("@aasii.org/base/transaction;1", &rv
);
579 rv
= mSession
->Save(txn
, nsnull
);
580 NS_TEST_ASSERT_OK(rv
);
581 NS_ENSURE_SUCCESS(rv
, rv
);
583 nsCOMPtr
<aaILoadQuery
> set
;
584 rv
= mSession
->CreateQuery(AA_LOADBALANCE_CONTRACT_ID
, getter_AddRefs( set
));
585 NS_TEST_ASSERT_OK(rv
);
586 NS_ENSURE_TRUE(set
, rv
);
588 NS_TEST_ASSERT_OK(rv
);
590 balance
= (do_QueryElementAt(set
, 2));
591 NS_TEST_ASSERT_MSG(testBalance(aTestRunner
, balance
, 9, 5, 400.0,
593 "[currency] flow 'sy2' is wrong");
594 balance
= (do_QueryElementAt(set
, 3));
595 NS_TEST_ASSERT_MSG(testBalance(aTestRunner
, balance
, 3, 3, 50000.0,
597 "[currency] flow 'a2' is wrong");
598 balance
= (do_QueryElementAt(set
, 4));
599 NS_TEST_ASSERT_MSG(testBalance(aTestRunner
, balance
, 10, 1, 21000.0,
601 "[currency] flow 'f1' is wrong");
604 /* Pay for forex deal 2 */
606 f2
= do_CreateInstance("@aasii.org/base/flow;1", &rv
);
607 NS_TEST_ASSERT_OK(rv
);
608 NS_ENSURE_SUCCESS(rv
, rv
);
609 f2
->SetEntity(mBank
);
610 f2
->SetGiveResource(c2
);
611 f2
->SetTakeResource(cf
);
613 f2
->SetTag(NS_LITERAL_STRING("f2"));
614 mSession
->Save(f2
, nsnull
);
615 NS_TEST_ASSERT_OK(rv
);
616 NS_ENSURE_SUCCESS(rv
, rv
);
618 fact
= do_CreateInstance("@aasii.org/base/fact;1", &rv
);
619 NS_TEST_ASSERT_OK(rv
);
620 NS_ENSURE_SUCCESS(rv
, rv
);
621 fact
->SetTakeFrom(a2
);
623 fact
->SetAmount(10000.0);
624 event
= do_CreateInstance("@aasii.org/base/event;1", &rv
);
625 NS_TEST_ASSERT_OK(rv
);
626 NS_ENSURE_SUCCESS(rv
, rv
);
627 event
->SetTime(PR_ImplodeTime(&tm
));
628 block
= do_QueryInterface(event
, &rv
);
629 NS_TEST_ASSERT_OK(rv
);
630 NS_ENSURE_SUCCESS(rv
, rv
);
631 block
->AppendElement(fact
, PR_FALSE
);
632 rv
= mSession
->Save(event
, nsnull
);
633 NS_TEST_ASSERT_OK(rv
);
634 NS_ENSURE_SUCCESS(rv
, rv
);
635 txn
= do_CreateInstance("@aasii.org/base/transaction;1", &rv
);
637 rv
= mSession
->Save(txn
, nsnull
);
638 NS_TEST_ASSERT_OK(rv
);
639 NS_ENSURE_SUCCESS(rv
, rv
);
641 nsCOMPtr
<aaILoadQuery
> set
;
642 rv
= mSession
->CreateQuery(AA_LOADBALANCE_CONTRACT_ID
, getter_AddRefs( set
));
643 NS_TEST_ASSERT_OK(rv
);
644 NS_ENSURE_TRUE(set
, rv
);
646 NS_TEST_ASSERT_OK(rv
);
648 balance
= (do_QueryElementAt(set
, 2));
649 NS_TEST_ASSERT_MSG(testBalance(aTestRunner
, balance
, 9, 5, 400.0,
651 "[currency] flow 'sy2' is wrong");
652 balance
= (do_QueryElementAt(set
, 3));
653 NS_TEST_ASSERT_MSG(testBalance(aTestRunner
, balance
, 3, 3, 40000.0,
655 "[currency] flow 'a2' is wrong");
656 balance
= (do_QueryElementAt(set
, 5));
657 NS_TEST_ASSERT_MSG(testBalance(aTestRunner
, balance
, 11, 1, 20000.0,
659 "[currency] flow 'f2' is wrong");
662 /* Pay for forex deal 3 */
664 f3
= do_CreateInstance("@aasii.org/base/flow;1", &rv
);
665 NS_TEST_ASSERT_OK(rv
);
666 NS_ENSURE_SUCCESS(rv
, rv
);
667 f3
->SetEntity(mBank
);
668 f3
->SetGiveResource(c2
);
669 f3
->SetTakeResource(cf
);
671 f3
->SetTag(NS_LITERAL_STRING("f3"));
672 mSession
->Save(f3
, nsnull
);
673 NS_TEST_ASSERT_OK(rv
);
674 NS_ENSURE_SUCCESS(rv
, rv
);
676 fact
= do_CreateInstance("@aasii.org/base/fact;1", &rv
);
677 NS_TEST_ASSERT_OK(rv
);
678 NS_ENSURE_SUCCESS(rv
, rv
);
679 fact
->SetTakeFrom(a2
);
681 fact
->SetAmount(10000.0);
682 event
= do_CreateInstance("@aasii.org/base/event;1", &rv
);
683 NS_TEST_ASSERT_OK(rv
);
684 NS_ENSURE_SUCCESS(rv
, rv
);
685 event
->SetTime(PR_ImplodeTime(&tm
));
686 block
= do_QueryInterface(event
, &rv
);
687 NS_TEST_ASSERT_OK(rv
);
688 NS_ENSURE_SUCCESS(rv
, rv
);
689 block
->AppendElement(fact
, PR_FALSE
);
690 rv
= mSession
->Save(event
, nsnull
);
691 NS_TEST_ASSERT_OK(rv
);
692 NS_ENSURE_SUCCESS(rv
, rv
);
693 txn
= do_CreateInstance("@aasii.org/base/transaction;1", &rv
);
695 rv
= mSession
->Save(txn
, nsnull
);
696 NS_TEST_ASSERT_OK(rv
);
697 NS_ENSURE_SUCCESS(rv
, rv
);
699 nsCOMPtr
<aaILoadQuery
> set
;
700 rv
= mSession
->CreateQuery(AA_LOADBALANCE_CONTRACT_ID
, getter_AddRefs( set
));
701 NS_TEST_ASSERT_OK(rv
);
702 NS_ENSURE_TRUE(set
, rv
);
704 NS_TEST_ASSERT_OK(rv
);
706 balance
= (do_QueryElementAt(set
, 3));
707 NS_TEST_ASSERT_MSG(testBalance(aTestRunner
, balance
, 3, 3, 30000.0,
709 "[currency] flow 'a2' is wrong");
710 balance
= (do_QueryElementAt(set
, 6));
711 NS_TEST_ASSERT_MSG(testBalance(aTestRunner
, balance
, 12, 1, 19500.0,
713 "[currency] flow 'f3' is wrong");
720 aaCurrencyTest::testRateChange(nsITestRunner
*aTestRunner
)
723 NS_TEST_BEGIN(aTestRunner
);
725 nsCOMPtr
<aaIQuote
> quote
;
726 nsCOMPtr
<aaIResource
> c1
= do_QueryElementAt(mResources
, 1);
727 nsCOMPtr
<aaIResource
> c2
= do_QueryElementAt(mResources
, 2);
728 PRExplodedTime tm
= {0,0,0,12,31,2,2008};
729 nsCOMPtr
<aaIBalance
> balance
;
730 nsCOMPtr
<aaILoadQuery
> incomeSet
;
731 nsCOMPtr
<aaILoadQuery
> quoteSet
;
733 quote
= do_CreateInstance("@aasii.org/base/quote;1", &rv
);
734 NS_TEST_ASSERT_OK(rv
);
735 NS_ENSURE_SUCCESS(rv
, rv
);
736 quote
->SetResource(c1
);
738 quote
->SetTime(PR_ImplodeTime(&tm
));
739 rv
= mSession
->Save(quote
, nsnull
);
740 NS_TEST_ASSERT_OK(rv
);
741 NS_ENSURE_SUCCESS(rv
, rv
);
743 rv
= mSession
->Save(quote
, nsnull
);
744 NS_TEST_ASSERT_MSG(NS_FAILED(rv
), "[quote save] date constrain");
746 rv
= mSession
->CreateQuery(AA_LOADINCOME_CONTRACT_ID
,
747 getter_AddRefs( incomeSet
));
748 NS_TEST_ASSERT_MSG(incomeSet
, "[rate change] income set not created" );
749 NS_ENSURE_TRUE(incomeSet
, rv
);
750 rv
= incomeSet
->Load();
751 NS_TEST_ASSERT_MSG(NS_SUCCEEDED(rv
), "[rate change] income set not loaded" );
753 balance
= do_QueryElementAt(incomeSet
, 0);
754 NS_TEST_ASSERT_MSG(balance
, "[rate change] income not loaded" );
755 if (NS_LIKELY(balance
)) {
756 NS_TEST_ASSERT_MSG(balance
->PickSide() == 1,
757 "[rate change] wrong income sign");
758 NS_TEST_ASSERT_MSG(isZero(balance
->PickValue() - 2500.0),
759 "[rate change] wrong income amount");
762 rv
= mSession
->CreateQuery(AA_LOADQUOTE_CONTRACT_ID
,
763 getter_AddRefs( quoteSet
));
764 NS_TEST_ASSERT_MSG(quoteSet
, "[rate change] query instance creation" );
765 NS_ENSURE_TRUE(quoteSet
, rv
);
766 nsCOMPtr
<aaIStringFilter
> filter
= do_CreateInstance(
767 AA_FILTER_CONTRACT_ID
, &rv
);
768 NS_TEST_ASSERT_OK(rv
);
769 NS_ENSURE_TRUE(filter
, rv
);
770 filter
->SetExpression(NS_LITERAL_CSTRING(" WHERE quote.resource_id=2"));
772 quoteSet
->SetFilter(filter
);
773 rv
= quoteSet
->Load();
774 NS_TEST_ASSERT_OK(rv
);
777 quoteSet
->GetLength(&count
);
778 NS_TEST_ASSERT_MSG(count
== 1, "[rate change] wrong quote count");
780 nsCOMPtr
<aaIQuote
> quote
= do_QueryElementAt(quoteSet
, 0, &rv
);
781 NS_TEST_ASSERT_MSG(quote
, "[rate change] quote not loaded" );
783 NS_TEST_ASSERT_MSG(quote
->PickResource() &&
784 quote
->PickResource()->PickId() == 2,
785 "[rate change] wrong resource in the quote");
786 NS_TEST_ASSERT_MSG(isZero(quote
->PickDiff() + 3000.0),
787 "[rate change] wrong difference in the quote");
792 quote
= do_CreateInstance("@aasii.org/base/quote;1", &rv
);
793 NS_TEST_ASSERT_OK(rv
);
794 NS_ENSURE_SUCCESS(rv
, rv
);
795 quote
->SetResource(c2
);
797 quote
->SetTime(PR_ImplodeTime(&tm
));
798 mSession
->Save(quote
, nsnull
);
799 NS_TEST_ASSERT_OK(rv
);
800 NS_ENSURE_SUCCESS(rv
, rv
);
802 rv
= mSession
->CreateQuery(AA_LOADINCOME_CONTRACT_ID
,
803 getter_AddRefs( incomeSet
));
804 NS_TEST_ASSERT_MSG(incomeSet
, "[rate change] income set not created" );
805 NS_ENSURE_TRUE(incomeSet
, rv
);
806 rv
= incomeSet
->Load();
807 NS_TEST_ASSERT_MSG(NS_SUCCEEDED(rv
), "[rate change] income set not loaded" );
809 balance
= do_QueryElementAt(incomeSet
, 0);
810 NS_TEST_ASSERT_MSG(balance
, "[rate change] income not loaded" );
811 if (NS_LIKELY(balance
)) {
812 NS_TEST_ASSERT_MSG(balance
->PickSide() == 0,
813 "[rate change] wrong income sign");
814 NS_TEST_ASSERT_MSG(isZero(balance
->PickValue() - 500.0),
815 "[rate change] wrong income amount");
818 rv
= mSession
->CreateQuery(AA_LOADQUOTE_CONTRACT_ID
,
819 getter_AddRefs( quoteSet
));
820 NS_TEST_ASSERT_MSG(quoteSet
, "[rate change] query instance creation" );
821 NS_ENSURE_TRUE(quoteSet
, rv
);
822 nsCOMPtr
<aaIQuoteFilter
> filter
= do_CreateInstance(
823 AA_QUOTEFILTER_CONTRACT_ID
, &rv
);
824 NS_TEST_ASSERT_OK(rv
);
825 NS_ENSURE_TRUE(filter
, rv
);
826 filter
->SetResource(c2
);
828 quoteSet
->SetFilter(filter
);
829 rv
= quoteSet
->Load();
830 NS_TEST_ASSERT_OK(rv
);
833 quoteSet
->GetLength(&count
);
834 NS_TEST_ASSERT_MSG(count
== 1, "[rate change] wrong quote count");
836 nsCOMPtr
<aaIQuote
> quote
= do_QueryElementAt(quoteSet
, 0, &rv
);
837 NS_TEST_ASSERT_MSG(quote
, "[rate change] quote not loaded" );
838 NS_ENSURE_TRUE(quote
, NS_ERROR_FAILURE
);
839 NS_TEST_ASSERT_MSG(quote
->PickResource() &&
840 quote
->PickResource()->PickId() == 3,
841 "[rate change] wrong resource in the quote");
842 NS_TEST_ASSERT_MSG(isZero(quote
->PickDiff() - 3000.0),
843 "[rate change] wrong difference in the quote");
850 aaCurrencyTest::testForexSaleAfterChange(nsITestRunner
*aTestRunner
)
853 NS_TEST_BEGIN(aTestRunner
);
855 nsCOMPtr
<aaIResource
> c1
= do_QueryElementAt(mResources
, 1);
856 nsCOMPtr
<aaIResource
> c2
= do_QueryElementAt(mResources
, 2);
858 nsCOMPtr
<aaIFlow
> f4
;
859 nsCOMPtr
<aaIFlow
> a2
= do_QueryElementAt(mFlows
, 2);
861 nsCOMPtr
<aaIQuote
> quote
;
862 nsCOMPtr
<aaIFact
> fact
;
863 nsCOMPtr
<aaIEvent
> event
;
864 nsCOMPtr
<nsIMutableArray
> block
;
865 nsCOMPtr
<aaITransaction
> txn
;
866 PRExplodedTime tm
= {0,0,0,12,31,2,2008};
867 nsCOMPtr
<aaIBalance
> balance
;
869 nsCOMPtr
<aaILoadQuery
> factSet
;
870 nsCOMPtr
<aaIStringFilter
> filter
;
871 /* Pay for forex deal 4 */
873 f4
= do_CreateInstance("@aasii.org/base/flow;1", &rv
);
874 NS_TEST_ASSERT_OK(rv
);
875 NS_ENSURE_SUCCESS(rv
, rv
);
876 f4
->SetEntity(mBank
);
877 f4
->SetGiveResource(c2
);
878 f4
->SetTakeResource(c1
);
879 f4
->SetRate(2.1/1.6);
880 f4
->SetTag(NS_LITERAL_STRING("f4"));
881 mSession
->Save(f4
, nsnull
);
882 NS_TEST_ASSERT_OK(rv
);
883 NS_ENSURE_SUCCESS(rv
, rv
);
885 fact
= do_CreateInstance("@aasii.org/base/fact;1", &rv
);
886 NS_TEST_ASSERT_OK(rv
);
887 NS_ENSURE_SUCCESS(rv
, rv
);
888 fact
->SetTakeFrom(a2
);
890 fact
->SetAmount(10000.0);
891 event
= do_CreateInstance("@aasii.org/base/event;1", &rv
);
892 NS_TEST_ASSERT_OK(rv
);
893 NS_ENSURE_SUCCESS(rv
, rv
);
894 event
->SetTime(PR_ImplodeTime(&tm
));
895 block
= do_QueryInterface(event
, &rv
);
896 NS_TEST_ASSERT_OK(rv
);
897 NS_ENSURE_SUCCESS(rv
, rv
);
898 block
->AppendElement(fact
, PR_FALSE
);
899 rv
= mSession
->Save(event
, nsnull
);
900 NS_TEST_ASSERT_OK(rv
);
901 NS_ENSURE_SUCCESS(rv
, rv
);
902 txn
= do_CreateInstance("@aasii.org/base/transaction;1", &rv
);
904 rv
= mSession
->Save(txn
, nsnull
);
905 NS_TEST_ASSERT_OK(rv
);
906 NS_ENSURE_SUCCESS(rv
, rv
);
908 nsCOMPtr
<aaILoadQuery
> set
;
909 rv
= mSession
->CreateQuery(AA_LOADBALANCE_CONTRACT_ID
, getter_AddRefs( set
));
910 NS_TEST_ASSERT_OK(rv
);
911 NS_ENSURE_TRUE(set
, rv
);
913 NS_TEST_ASSERT_OK(rv
);
915 balance
= (do_QueryElementAt(set
, 2));
916 NS_TEST_ASSERT_MSG(testBalance(aTestRunner
, balance
, 9, 5, 400.0,
918 "[currency] flow 'sy2' is wrong");
919 balance
= (do_QueryElementAt(set
, 6));
920 NS_TEST_ASSERT_MSG(testBalance(aTestRunner
, balance
, 3, 3, 20000.0,
922 "[currency] flow 'a2' is wrong");
923 balance
= (do_QueryElementAt(set
, 7));
924 NS_TEST_ASSERT_MSG(testBalance(aTestRunner
, balance
, 13, 2, 13125.0,
926 "[currency] flow 'f4' is wrong");
928 rv
= mSession
->CreateQuery(AA_LOADFACTLIST_CONTRACT_ID
,
929 getter_AddRefs( factSet
));
930 NS_TEST_ASSERT_MSG(factSet
, "[rate change] query instance creation" );
931 NS_ENSURE_TRUE(factSet
, rv
);
933 filter
= do_CreateInstance(AA_FILTER_CONTRACT_ID
, &rv
);
934 NS_TEST_ASSERT_OK(rv
);
935 NS_ENSURE_TRUE(filter
, rv
);
936 filter
->SetExpression(NS_LITERAL_CSTRING(" WHERE txn.day=2454557 \
937 AND txn.event_id=1 AND txn.transfer_id=1"));
939 factSet
->SetFilter(filter
);
940 rv
= factSet
->Load();
941 NS_TEST_ASSERT_OK(rv
);
944 factSet
->GetLength(&count
);
945 NS_TEST_ASSERT_MSG(count
== 1, "[change effect] wrong transaction count");
947 txn
= do_QueryElementAt(factSet
, 0, &rv
);
948 NS_TEST_ASSERT_MSG(testTxn(aTestRunner
, txn
, 3, 13, 10000,
949 21000), "[change effect] transaction is wrong");
956 aaCurrencyTest::testTransferRollback(nsITestRunner
*aTestRunner
)
959 NS_TEST_BEGIN(aTestRunner
);
961 rv
= mSession
->CreateQuery(AA_LOADENTITY_CONTRACT_ID
,
962 getter_AddRefs(mEntities
));
963 NS_TEST_ASSERT_OK(rv
);
964 NS_ENSURE_SUCCESS(rv
, rv
);
966 rv
= mEntities
->Load();
967 NS_TEST_ASSERT_OK(rv
);
968 NS_ENSURE_SUCCESS(rv
, rv
);
970 nsCOMPtr
<aaIResource
> c3
, y
;
971 y
= do_QueryElementAt(mResources
, 4);
973 nsCOMPtr
<aaIEntity
> S2
;
974 S2
= do_QueryElementAt(mEntities
, 2);
976 nsCOMPtr
<aaIFlow
> dy
, by3
;
977 dy
= do_QueryElementAt(mFlows
, 4);
979 nsCOMPtr
<aaIQuote
> quote
;
980 nsCOMPtr
<aaIFact
> fact
;
981 nsCOMPtr
<aaIEvent
> event
;
982 nsCOMPtr
<nsIMutableArray
> block
;
983 nsCOMPtr
<aaITransaction
> txn
;
984 PRExplodedTime tm
= {0,0,0,12,14,3,2008};
988 c3
= do_CreateInstance("@aasii.org/base/resource;1", &rv
);
989 NS_TEST_ASSERT_OK(rv
);
990 NS_ENSURE_SUCCESS(rv
, rv
);
991 rv
= c3
->SetTag(NS_LITERAL_STRING("c3"));
992 NS_TEST_ASSERT_OK(rv
);
993 NS_ENSURE_SUCCESS(rv
, rv
);
994 rv
= mSession
->Save(c3
, nsnull
);
995 NS_TEST_ASSERT_OK(rv
);
996 NS_ENSURE_SUCCESS(rv
, rv
);
998 by3
= do_CreateInstance("@aasii.org/base/flow;1", &rv
);
999 NS_TEST_ASSERT_OK(rv
);
1000 NS_ENSURE_SUCCESS(rv
, rv
);
1002 by3
->SetGiveResource(c3
);
1003 by3
->SetTakeResource(y
);
1004 by3
->SetRate(1.0/200.0);
1005 by3
->SetTag(NS_LITERAL_STRING("by3"));
1006 rv
= mSession
->Save(by3
, nsnull
);
1007 NS_TEST_ASSERT_OK(rv
);
1008 NS_ENSURE_SUCCESS(rv
, rv
);
1010 quote
= do_CreateInstance("@aasii.org/base/quote;1", &rv
);
1011 NS_TEST_ASSERT_OK(rv
);
1012 NS_ENSURE_SUCCESS(rv
, rv
);
1013 quote
->SetResource(c3
);
1014 quote
->SetRate(0.8);
1015 quote
->SetTime(PR_ImplodeTime(&tm
));
1016 rv
= mSession
->Save(quote
, nsnull
);
1017 NS_TEST_ASSERT_OK(rv
);
1018 NS_ENSURE_SUCCESS(rv
, rv
);
1022 fact
= do_CreateInstance("@aasii.org/base/fact;1", &rv
);
1023 NS_TEST_ASSERT_OK(rv
);
1024 NS_ENSURE_SUCCESS(rv
, rv
);
1025 fact
->SetTakeFrom(by3
);
1026 fact
->SetGiveTo(dy
);
1027 fact
->SetAmount(100.0);
1028 event
= do_CreateInstance("@aasii.org/base/event;1", &rv
);
1029 NS_TEST_ASSERT_OK(rv
);
1030 NS_ENSURE_SUCCESS(rv
, rv
);
1032 event
->SetTime(PR_ImplodeTime(&tm
));
1033 block
= do_QueryInterface(event
, &rv
);
1034 NS_TEST_ASSERT_OK(rv
);
1035 NS_ENSURE_SUCCESS(rv
, rv
);
1036 block
->AppendElement(fact
, PR_FALSE
);
1037 rv
= mSession
->Save(event
, nsnull
);
1038 NS_TEST_ASSERT_OK(rv
);
1039 NS_ENSURE_SUCCESS(rv
, rv
);
1041 nsCOMPtr
<aaILoadQuery
> set
, factSet
;
1042 mSession
->CreateQuery(AA_LOADFLOWSTATES_CONTRACT_ID
, getter_AddRefs(set
));
1043 NS_TEST_ASSERT_MSG(set
, "[rollback] creating loader" );
1044 NS_ENSURE_SUCCESS(rv
, rv
);
1047 NS_TEST_ASSERT_MSG(NS_SUCCEEDED(rv
), "[rollback] loading states" );
1050 set
->GetLength(&count
);
1051 NS_TEST_ASSERT_MSG(count
== 10, "[rollback] wrong flow count");
1053 rv
= mSession
->CreateQuery(AA_LOADFACTLIST_CONTRACT_ID
,
1054 getter_AddRefs( factSet
));
1055 NS_TEST_ASSERT_MSG(factSet
, "[rollback] query instance creation" );
1056 NS_ENSURE_TRUE(factSet
, rv
);
1058 rv
= factSet
->Load();
1059 NS_TEST_ASSERT_MSG(NS_SUCCEEDED(rv
), "[rollback] loading facts" );
1061 factSet
->GetLength(&count
);
1062 NS_TEST_ASSERT_MSG(count
== 7, "[rollback] wrong fact count");
1064 rv
= mSession
->Save(event
, event
);
1065 NS_TEST_ASSERT_OK(rv
);
1066 NS_ENSURE_SUCCESS(rv
, rv
);
1069 NS_TEST_ASSERT_MSG(NS_SUCCEEDED(rv
), "[rollback] loading states" );
1071 set
->GetLength(&count
);
1072 NS_TEST_ASSERT_MSG(count
== 8, "[rollback] wrong flow count");
1074 rv
= factSet
->Load();
1075 NS_TEST_ASSERT_MSG(NS_SUCCEEDED(rv
), "[rollback] loading facts" );
1077 factSet
->GetLength(&count
);
1078 NS_TEST_ASSERT_MSG(count
== 6, "[rollback] wrong fact count");