ipc/ipdl/test/cxx/TestRaceDeferral.cpp

branch
TOR_BUG_3246
changeset 6
8bccb770b82d
equal deleted inserted replaced
-1:000000000000 0:3321c6bf6274
1 #include "TestRaceDeferral.h"
2
3 #include "IPDLUnitTests.h" // fail etc.
4
5 using namespace mozilla::ipc;
6 typedef mozilla::ipc::MessageChannel::Message Message;
7
8 namespace mozilla {
9 namespace _ipdltest {
10
11 static RacyInterruptPolicy
12 MediateRace(const Message& parent, const Message& child)
13 {
14 return (PTestRaceDeferral::Msg_Win__ID == parent.type()) ?
15 RIPParentWins : RIPChildWins;
16 }
17
18 //-----------------------------------------------------------------------------
19 // parent
20
21 TestRaceDeferralParent::TestRaceDeferralParent()
22 : mProcessedLose(false)
23 {
24 MOZ_COUNT_CTOR(TestRaceDeferralParent);
25 }
26
27 TestRaceDeferralParent::~TestRaceDeferralParent()
28 {
29 MOZ_COUNT_DTOR(TestRaceDeferralParent);
30
31 if (!mProcessedLose)
32 fail("never processed Lose");
33 }
34
35 void
36 TestRaceDeferralParent::Main()
37 {
38 Test1();
39
40 Close();
41 }
42
43 void
44 TestRaceDeferralParent::Test1()
45 {
46 if (!SendStartRace())
47 fail("sending StartRace");
48
49 if (!CallWin())
50 fail("calling Win");
51 if (mProcessedLose)
52 fail("Lose didn't lose");
53
54 if (!CallRpc())
55 fail("calling Rpc");
56 if (!mProcessedLose)
57 fail("didn't resolve Rpc vs. Lose 'race' correctly");
58 }
59
60 bool
61 TestRaceDeferralParent::AnswerLose()
62 {
63 if (mProcessedLose)
64 fail("processed Lose twice");
65 mProcessedLose = true;
66 return true;
67 }
68
69 RacyInterruptPolicy
70 TestRaceDeferralParent::MediateInterruptRace(const Message& parent,
71 const Message& child)
72 {
73 return MediateRace(parent, child);
74 }
75
76 //-----------------------------------------------------------------------------
77 // child
78
79 TestRaceDeferralChild::TestRaceDeferralChild()
80 {
81 MOZ_COUNT_CTOR(TestRaceDeferralChild);
82 }
83
84 TestRaceDeferralChild::~TestRaceDeferralChild()
85 {
86 MOZ_COUNT_DTOR(TestRaceDeferralChild);
87 }
88
89 bool
90 TestRaceDeferralChild::RecvStartRace()
91 {
92 if (!CallLose())
93 fail("calling Lose");
94 return true;
95 }
96
97 bool
98 TestRaceDeferralChild::AnswerWin()
99 {
100 return true;
101 }
102
103 bool
104 TestRaceDeferralChild::AnswerRpc()
105 {
106 return true;
107 }
108
109 RacyInterruptPolicy
110 TestRaceDeferralChild::MediateInterruptRace(const Message& parent,
111 const Message& child)
112 {
113 return MediateRace(parent, child);
114 }
115
116 } // namespace _ipdltest
117 } // namespace mozilla

mercurial